Irradiance Map Equation What is "dω"? Link to paper : Irradiance and Incoming Radiance | lawrence.edu


  Using a shader to compute En





  Computing En as described above is a very compute intensive operation,
  because we have to compute the integral over the cube map for each new
  direction vector n that we want to work with. At the same time, the
  details for different values of n are highly repetitive. This suggests
  that we should enlist the aid of shaders to compute this mapping for
  us. Here is the outline of a strategy that makes it possible to do
  this.
  
  
  Use OpenGL to render a two dimensional square centered at the origin
  with sides of length 2. This square represents one of the sides of our
  cubical irradiance map. Given the mapping above we can map any point
  (x , y) on the square to a direction vector n. 
  We render the square to
  a framebuffer with dimensions size by size pixels, where size is the
  desired size of our irradiance cube map texture. 
  In the fragment
  shader, we translate the interpolated fragment positions we are given
  into direction vectors n and construct loops that sum over the six
  faces of the environment map:
  
  
  When rendering is done, we convert the image in the frame buffer to a
  texture for use by our irradiance cube map.


I understand that Li is color at i. ωi is the direction of incoming light.

However I do not understand what dωi is.

Paper describes it as...


  Computing the solid angle dωi subtended by a particular texel is a
  little more involved. Texels near the center of the texture subtend a
  somewhat larger angle, while texels near the corner take up a smaller
  solid angle when we map the cube texture onto a sphere. Here is a
  reference that explains how to compute the solid angle correctly from
  the positions xi and yi.


However I am not following words to understand what it means.
$E_n$ is illuminance (or irradiance), $L_i$ is luminance (or radiance) in direction $\omega_i$ and $d\omega$ is differential solid angle.

TL;DR: $d\omega_i$ is the area of a pixel in the cubemap projected onto the unit sphere.

And then a longer explanation (:

Solid angle is essentially the projected area of an object on a unit sphere and has unit of steradians (sr). Entire unit sphere has surface area of $4\pi$ and hemisphere has the area of $2\pi$, which comes up a lot in lighting calculations due to integrals over spheres and hemispheres respectively.

If you would want to calculate solid angle for an object and point $p$, you would project the object on the unit sphere at $p$ and calculate the area of the projection. Further the object is from $p$ smaller the solid angle gets. As an example, we can calculate solid angle for Sun as seen from the Earth. We know that Sun has about 0.52 degrees subtended angle from Earth, so we can calculate that the solid angle is:
$$2\pi*(1-Cos(0.52/2))\simeq0.00006469sr$$

So the differential solid angle is just an infinitesimally small solid angle. If you would numerically integrate over a sphere ($4\pi$ steradians) by taking $N$ uniform samples on the sphere, your $d\omega$ would be $4\pi/N$. With integrals $N$ goes to infinity, while with numerical approximation of the integral $N$ is some "sufficiently large" number.

However, in this paper you refer to they perform integration by rendering to a cubemap at $p$ and then iterating through all the rendered pixels. But because these pixels are rendered onto planes (cubemap faces), their projection on the unit sphere isn't constant, so $d\omega$ needs to be weighted by the position in the rendered image, which they explain in your second quote:


  Computing the solid angle dωi subtended by a particular texel is a
  little more involved. Texels near the center of the texture subtend a
  somewhat larger angle, while texels near the corner take up a smaller
  solid angle when we map the cube texture onto a sphere.