Skip to content
Petra Gospodnetic edited this page Aug 17, 2017 · 219 revisions

Google Summer of Code 2017

Weekly Report on Many-light Sampling Method

Goal of the project is to integrate the new many-light sampling algorithm proposed by Nathan Veghdal

  1. May 15th - May 30th (Community Bonding Period)

  2. May 31st – June 2nd

  3. June 5th - June 9th

  4. June 12st – June 16th

  5. June 19th – June 23rd

  6. June 26th – June 30th

  7. July 3rd – July 7th

  8. July 10th – July 14th

  9. July 17th – July 21st

  10. July 24th – July 28th

  11. July 31st – August 4th


Solid Angle Light Evaluation

  • Psychopath doesn't have MIS implemented

  • Shading point in pathvertex can only provide point on the surface to be evaluated, but not the ShadingPoint hit before

    • both DirectLightIntegrator and PathTracer have knowledge about the parent shading point, we just need to expose it to the PathVertex
    • I am currently working on it, but it seems that I am missing a condition when assigning it so I get an assertion error right now
  • Store all shading points of a single path into a memory arena within the PathTracer

  • Store last parent shading point

  • Expose the parent shading point to the PathVertex

  • use ShadingPoint instead of a regular point in node evaluation

  • Use parent shading point for evaluate_pdf both in DirectLightIntegrator and PathTracer

  • added projected solid angle light evaluation

  • debugged edge case output from sub_hemispherical_light_source_contribution() when node probabilities p1 and p2 are of similar values with different signs which is illegal! e.g.

approx_contribution p1:   -5.144703
approx contribution p2:    5.185083
                 total:    0.040380
                    p1:   -127.405693
                    p2:    128.405701
  • The bug was introduced with the solid angle eval approach
  • FIX: handle an edge case where a negative 0 is returned
Light tree with hemispherical light source approximation
converging 30s
CDF LightTree
converging 1min
Light Tree node evaluation comparison
Squared distance Hemispherical light approximation
25spp
NPL-EMT mixed evaluation
CDF lightTree
converging

The new hemispherical approximation produces a defect in rendering with the EMT-NPL scene. (shadow to light transition on the sphere)

  • Built an many EMT light test scene containing 50,340 EMTs
    • use of LightTree reduces noise at 16spp but doesn't offer speed improvement
Appleseed basement workshop scene
CDF LightTree
16spp
Converging 1 min
  • Tested SAHPartitioner with the current LightTree
    • SAHPartitioner does not produce correct result because it doesn't force the split for overlapping bboxes
    • Such behavior results with multiple EMTs being stored in a single node and makes the rendering incorrect because some lights get completely ignored.
SAH partitioner test
Middle partitioner
Median partitioner
SAH partitioner
SAH partitioner test 4x16 triangles
Middle partitioner
SAH partitioner
  • Discussed BVH partitioning significance with Franz and Esteban

    • we decided to implement a new partitioner for the LightTree
  • LightTreePartitioner

    • partitions lights based on:
      • surface
      • intensity
      • orientation

Currently working on:

  • Implement proprietary LightTree partitioner
  • FIX the rendering artefact in the EMT-NPL scene
  • Add reference in the code to the used article

LightTree seem to be working a bit slower than the CDF approach for small number of light sources.

  • Produce many light test scenes
    • many NPL light sources
    • many EMT light sources
    • many mixed light sources

Ideas on Implementing Light Tree Sampling Based on the Light Orientation

  • Cone of normals
  • K-means of children vertices

Optimization TODO

  • Store items within the LightTree nodes
  • Store bbox node info within the node itself
  • Reduce number of variables set by recursive_node_update() (i.e. variables which can be set during the building time)

Collection of useful papers