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
