HXA7241 (logo)

four cornell box variants

PERCEPTUUM - sequences

a global illumination renderer development project

main rendering sequence

this is a kind of shorthand description, lacking detail, not clarifying instances, but class and method names are real. indentation means deeper in the call stack, or inside a loop or conditional, braces contain shortened descriptions of calls, brackets contain comments.

Render.render
   RenderKernel.construct
      ImageAccumulation {get from state}
      SamplingControl {get from state}
      SpacetimeIndex {construct with Scene}
      Illumination {construct with RenderingOptions}
      RasterizerTracing {construct with RenderingOptions}

   while not RenderKernel.isCompleted
      RenderKernel.renderFrame
         if not ImageAccumulation.isCompleted()
            SpacetimeIndex.update with SamplingControl
               Scene.update with timepoint from SamplingControl

            Illumination.makeIllumination with SpacetimeIndex and SamplingControl
               for all EmitterPaths [each only using its initial node]
                  EmitterPath.trace with SpacetimeIndex and SamplingControl
                  SamplingControl.advanceIllumination0
               while photon maps not full
                  EmitterPath.trace with SpacetimeIndex and SamplingControl [temporary EmitterPath within this scope]
                  PhotonMaps {add nodes in EmitterPath}
                  SamplingControl.advanceIllumination1

            Rasterizer.rasterizeFrame with SamplingControl, SpacetimeIndex, Illumination and ImageAccumulation
               for all pixels
                  if ImageAccumulation.shouldSample
                     Camera.getRay
                     EyePath.trace with SamplingControl, SpacetimeIndex, Illumination, Ray
                     EyePath.getEyeEndLight
                     ImageAccumulation.addSample

            ImageAccumulation.analyse
            SamplingControl.advanceFrame

      Render.attendToFrameDone {display image to app window}

   Render.attendToRenderDone {display image to app window}



EmitterPath.trace
   EmitterPath.chooseLightSourceStart with Scene from SpacetimeIndex
      Scene.getEmitted with SamplingControl
   while path not ended
      SpacetimeIndex.getNextIntersection with ray
         Scene.getRootObject.getIntersection with Ray
      EmitterPathNode.setEmitterPathNode with Intersection, Ray and Light
      EmitterPathNode.getNextPathStep with SamplingControl {use Bssdf}



EyePath.trace
   while path not ended
      SpacetimeIndex.getNextIntersection with ray
      EyePathNode.setSurfacePoint with Intersection
      EyePathNode.getNextPathStep with SamplingControl
   if path end is diffuse
      Illumination.getIllumination
         Illumination.getDirectIllumination
            for all EmitterPaths
               EmitterPath.getSpreadLight
               EyePathNode.getGatheredLightDistal
         Illumination.getPhotonMapIllumination
            PhotonMap.getIllumination
            EyePathNode.getGatheredLightLocal
   
2004-08-22