6
$\begingroup$

After reading a wikipedia article about Global Illumination It mentions a variety of techniques like Ray Tracing, Path Tracing and Ambient Occlusion. One technique it mentions is Radiosity which I don't know much about.

After a quick google search I found this blog post which discusses what it is, a basic overview & implementation details. However I'm still a little confused. So from what I gather it is a way to precompute diffuse lighting on to a lightmap to give the illusion of light bounces? Could someone explain it to me over here without all the jargon? Is this technique used alongside techniques like Image Based Lighting & Ambient Occlusion or is it intended to be an entire Global Illumination technique by itself?

$\endgroup$
  • $\begingroup$ Radiosity is a way to compute global illumination under the assumption that all surfaces are perfectly diffuse (Lambertian). $\endgroup$ – Rahul Oct 29 '16 at 17:24
3
$\begingroup$

Radiosity is a way to calculate diffuse GI, i.e. every surface is assumed to be Lambertian surface without specular component. In the radiosity algorithm you split surfaces into small patches and calculate "form factor" between two patches, which defines how much energy is transferred from one patch to the other.

The form factor between patches is calculated using the distance between patches (patches further apart means less energy transferred between them), their respective orientation (two patches facing each other transfer more energy than when they face away from each other), the visibility (if patch is occluded, it doesn't transfer energy to the patch) and their size (larger surfaces emit more energy). The form factor obeys reciprocity which means that the factor for patches A and B can be used for energy transmission calculation from A to B and from B to A.

enter image description here

To calculate radiosity for a patch, you iterate through all patches and accumulate the energy from other patches using their respective form factors and the luminance of each patch. This is a single iteration of the radiosity algorithm, and for multiple light bounces you can run multiple iterations of this same algorithm. This can be implemented for example by rendering scene around each patch to a hemicube and accumulating the result from the cube for each patch.

To answer your question if radiosity is a full GI solution - no it's not. Since all surfaces are Lambertian, there's no specular component to it, so you would need to use other techniques in addition for the full lighting solution. The result of radiosity is usually also cached into lightmaps with limited resolution so you may need to use AO to provide higher frequency lighting details.

$\endgroup$
  • $\begingroup$ Do most engines like UE4, Unity, Frostbite etc use this as a global illumination technique alongside other methods? I know UE4 has Lightmass and Unity uses Enlighten, are they basically radiosity 'engines'? What other ways can you bake light or calculate indirect lighting in real time? $\endgroup$ – Arjan Singh Oct 30 '16 at 5:49
  • 2
    $\begingroup$ All real-time engines combine some kind of indirect illumination approximation (radiosity based or something else) with other techniques for more complete rendering equation. Your question about different techniques to approximate indirect illumination warrants its own question though as it's too broad of a question to answer in comments. $\endgroup$ – JarkkoL Oct 30 '16 at 16:38
  • $\begingroup$ Could you recommend any good tutorials on the topic? $\endgroup$ – Arjan Singh Nov 2 '16 at 8:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.