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.