Radiosity

Radiosity

@article{goral1984modeling,
  title={Modeling the interaction of light between diffuse surfaces},
  author={Goral, Cindy M and Torrance, Kenneth E and Greenberg, Donald P and Battaile, Bennett},
  journal={ACM SIGGRAPH computer graphics},
  volume={18},
  number={3},
  pages={213--222},
  year={1984},
  publisher={ACM New York, NY, USA}
}
radiosity_96a035721a09cf70b112059b210b1d49562e907b.svg

with

radiosity_2d0fd59679ac09b7ed0c862950f46a77ad4a7bd2.svg

Nusselt-Analog #

  • For two patches in the radiosity method:

  • For all two points on the two surfaces:

  • The geometry factor accounting to the Area Foreshortening can be assumed as a constant.

Discrete Radiosity Equation #

<img src="/ltximg/radiosity_b33b28740c911682aeb0410c79f6ff76b6912d9c.svg" alt="radiosity_b33b28740c911682aeb0410c79f6ff76b6912d9c.svg" class="org-svg" />

with:

  • radiosity_08e1ee9e65d02cf9d69e36c8b24906895cd92d9b.svg = The average fraction of energy that leaves finite element i and directly arrives at element j

Form Factors #

Idea: Double Projection

Properties #

  • Planar patch: radiosity_502681218bd19421b56ccc20f4ae565f4059954d.svg
  • Energy conservation: radiosity_3eb5d03382b4732fcd0c13528caa49ce7b3c55af.svg
  • Reciprocity: radiosity_28ee51aa819b653c22505d9788d081b423121d33.svg

Computation #

Formular to compute the form factor to some Area radiosity_8105090df04e6dbb613098958f86d4cc51e28e96.svg at radiosity_345edae9da39e106a45b5d265566c09b174e7494.svg to radiosity_47171f1eb6027ed0b8390d52335469dc03bc47b3.svg:

radiosity_feced92bdeddccedfce40e078ca1b96c904acd82.svg

Hemicube Algorithm #

  • Use the Nusselt Analog

  • precompute formfactors for hemicube

  • When rendering, project other patches onto the cube (respect visibility)

Using hardware acceleration #

  1. Put camera in the center of the hemicube
  2. Render cube maps
  3. Each fragment just writes some unique per patch ID, no color
  4. Standard depth test takes care of visibility
  5. After that, sum up the contributions of the objects by their ID

Rendering the scene #

  1. Render per patch radiosity values
  2. Color the vertices according to their neighboring patch colors and use Gouraud shading .

Comparison to raytracing #

  • Raytracing is good at specular reflection and refraction, but bad at diffuse interactions
  • Radiosity is good at diffuse lighting but bad at other stuff

Both methods are global, use them both at the same time!

Calendar October 22, 2023