Radiosity

Models diffuse reflection = indirect diffuse lighting.

Screenshot%202014-09-25%2013.14.26.png

Direct lighting only takes into account sources. Radiosity accounts for diffuse reflections of everything in the scene.

Screenshot%202014-09-25%2013.14.29.png

Diffuse: an object reflects off in all directions, not just one like in specular (raytracing accounts for that)

Energy Transfers

By dividing the scene up into small patches and calculating the energy transfer between patches we can do a reasonable job at indirect diffuse lighting.

Screenshot%202014-09-25%2013.14.32.png

// Energy transfer equation. p is the diffuse reflection coefficient//

Light Input to a Patch

Screenshot%202014-09-25%2013.14.35.png

A patch receives input to the sum of the output of all the other patches.

Screenshot%202014-09-25%2013.14.38.png

Form Factors

Screenshot%202014-09-25%2013.14.45.png

Form factors depend on the shapes of each patch, the distance between them and the relative orientation of each patch

We can use the above equation, but it’s difficult (and doesn’t take occlusion (hidden surfaces) into account). So instead we have the Nusselt Analog.

Nusselt Analog

  1. Render the scene from the patch’s point of view onto a unit hemisphere
  2. Project the hemisphere orthographically onto a unit circle
  3. Divide by the area of the circle

Hemicube Method

Screenshot%202014-09-25%2013.14.50.png

If we instead render onto a hemicube and weight the pixels for distortion

Solving the Energy Transfer

Screenshot%202014-09-25%2013.14.57.png

We could use a lot of matrix math to do this, or we can iteratively update the radiosity values with multiple passes.

Iterative Approximation

Screenshot%202014-09-25%2013.15.02.png

Screenshot%202014-09-25%2013.15.06.png

Progressive Refinement

The iterative approach is inefficient as it spends a lot of time computing inputs from patches that make minimal or no contribution.

Instead we prioritise patches by light output (as these will contribute the most to the scene).

Screenshot%202014-09-25%2013.15.09.png

To do this we can work out the form factor for light sent from i to j, rather than light received at j from every i (which is what Nusselt’s Analog does).

Screenshot%202014-09-25%2013.15.33.png