Weekly Reports 2023

Week 14: January 02 - 06

Cycles/Geometry Nodes: working on the microfacet_hair branch

  • Try out different normal modes in the geometry node for the hair curve, such as aligning with the curvature vector or the direction with the minimal potential energy (Cycles only supported hair with circular cross-sections. The new hair BSDF supports elliptical cross-section, it is therefore important to compute meaningful orientations of the ellipse along the curve.)

Week 15: January 09 - 12

Cycles: working on the microfacet_hair branch

  • Replaced the default interpolation weight between the minimal twist vector and the curvature vector with a user-defined weight (rB8ee7e626a5a6)
  • Discussed with Jacques/Hans/Brecht, the new normal mode will be set aside for now, in order to separate Cycles and Geometry Nodes development.
  • Small cleanups and bug fixes in preparation of merging the branch to master.

Week 16: January 16 - 20

Cycles: Refactoring and cleanups.

Week 17: January 23 - 27

Cycles: cleanups and patch reviews.

  • More cleanups in the microfacet_hair branch (API changes and comments).
  • Reviewed some Microfacet BSDF-related patches (D17123, D17100).
  • Added support for non-uniform spot light size to match the gizmo in the view port (D17129).

Experimenting with new gizmo types for lights.

Week 18: January 30 - February 3


  • Created task T104280: Improve visualisation and manipulation of lights in the viewport, including
  1. Add new cage2d draw style for circular shapes (fe5d54d3d0ee)
  2. Add gizmo for adjusting spot light blend (rB3c8c0f1094a3)
  3. Add gizmos for spot and point light radius (afd6358fc0)
  • Fixed spot light blend circle drawn at the wrong position (rBce42906b8962)

Week 19: February 6 - 9


  • Fixed area light gizmo not following the cursor. Perform constrained resizing when dragging the edges, and free-form resizing when dragging the corners (701f90c677)
  • Hold shift key to resize area light uniformly. (104418)
  • Some explorations of showing the light color in overlay and enabling undo for gizmos

Week 20: February 13 - February 15, February 17


Week 21: February 20 - 24


  • Some improvements of gizmo undo pull request
  • Support scaling of light gizmos with zero size (6166dac3ee)

Week 22: February 27 - March 2


  • Continuing explorations of showing the light color in overlay
  • Failed attempt of changing the cursor orientation depending on the hover region on a cage2d gizmo


  • Reading recent rendering papers

Week 23: March 6 - 10


  • Added an optional overlay to show light colors (6fbc52bdca3)
  • For area light gizmo, different constraints apply depending on the hover region (edges for X/Y axis constraint, corners for free-form). Now different handles are shown depending on the hover region to make the constraint more clear (275d69467be)
  • Slightly increased cage2d corner margins for better free-form scaling (48944e7a8ea)


  • Hair BSDFs return black color due to lacking proper implementation. Temporarily fall back to diffuse BSDF to at least show some feedback (b9649c2e72)


  • Fix custom normals not normalized in Cycles shader nodes (e7a3a2c261)
  • A bit on Microfacet Hair BSDF again, fixed initialising with zero Transmission due to copying the Transmission property from the default Principled BSDF (6858fba43d)

Week 24: March 13 - 18


  • Fix artefacts caused by trying to lift the shading normal of diffuse materials (105776)
  • Fix growing BoundBox with empty BoundBox modifies the original BoundBox (d9273d8578)
  • Build light tree in parallel for large scenes (105862)

Week 25: March 20 - 24


  • Refactor light tree implementation to improve readability and efficiency (17c8e0d309)
  • Fix bugs related to light tree bounding cone computation (791f35e2c0, e77b666ae9)
  • Implement faster make_orthonormals() (#106053)

Week 26: March 27 - 31


  • Working on adding instance support in light tree

Week 27: April 3 - 7


Week 28: April 11 - 14


  • Finish adding instance support in light tree (bfd1836861)
  • Clean up Microfacet Hair BSDF implementation (#105600)
  • Some code reviews

Week 29, 30: April 17, 18, 28


  • Finish cleaning up Microfacet Hair BSDF implementation

Week 31: May 1 - 5


  • Address energy loss issue in the Microfacet Hair BSDF (#105600)
  • Review pull request (#107560)

Week 32: May 8 - 13


  • Fix wrong ray-offset of motion triangles (#107748)
  • Fix light tree stack overflow due to queried the area of an empty bounding box (8e70ab9905)
  • Fix bugs in area lights regarding MNEE (Manifold Next Event Estimation) (3d96cab01f 1a1f06bd9a)

Week 33: May 15 - 19

  • Review pull request (#107958)
  • Investigate issues regarding conversion between power and radiance of light sources (#108505)

Week 34: May 22 - 26


Week 35: May 29 - June 2


  • Implement more efficient and better-behaved sampling of spherical triangles (97d9bbbc97)
  • Further implementation of sphere light regarding sampling (#108506)

Week 36: June 5 - 9


  • Fix compiler error (0e20e2320b)
  • Fix wrong normal transformation in Vector Transform shader node (ebd431d580)
  • Fix light texture invisible when looking at a light (84863dae89)
  • Enable normal transformation of lights in Vector Transform node (2ab020cc3c)
  • Further implementation of sphere light regarding UV


  • Cleanup: simplify computation in disk LTC (d54fe40807)

Week 38: June 19 - 23


  • Review pull request regarding sun light, fix wrong conversion factor (#108996)
  • Add regression test for light UV (#108691)
  • Small optimization regarding light sources (9aaf28954b 37d3daaea6)
  • Replace spotlight disk sampling with sphere sampling, add texture and reduce noise (#109329)


  • Change point light to double-sided sphere light (#108506)
  • Fix wrong conversion from power to radiance of area lights (#109153)

Week 39 June 26 - 30

Mainly attending EGSR

Week 40 July 3 - 7


  • Implementing faster visible normal distribution sampling (PR #109757, not used in the end)
  • Use low-distortion mapping when sampling cone and hemisphere (PR #109774)
  • Add texture to sun light (PR #109842)


  • Adjust sun light factors to match the recent change in Cycles (PR #109831)

Week 41 July 10 - 14


Week 42 July 17 - 21

Start working on spectral Cycles, mainly working on the design and going through the code base

Week 43 July 24 - 28

Spectral Cycles:

  • Clean up the code base
  • Implement wavelength-dependent Fresnel (14ac7ddfe2)
  • Fix some visibility issues

Week 44 July 31 - August 4

Spectral Cycles:

  • Change pdf type from float to Spectrum (807d86eee5)
  • Weight paths by the pdf to reduce color noise in dispersive materials (cb1b7c7a53)
  • Cleanups in microfacet BSDF


  • Copy socket values with the same identifier instead of name (PR #110792)

Regular Cycles:

Week 45 August 7 - 11

Mainly attending SIGGRAPH

Week 46 August 14 - 18


  • Fixing transparency issues in microfacet hair, address reviews (PR #105600)
  • Merge microfacet hair into main (renamed as Principled Hair BSDF, Huang model, 6f8011edf7), added TODOs #111257)
  • Review pull request (PR #111155)


  • Default roughness distribution to Multiscatter GGX (PR #111267)

Week 47 August 21 - 25


  • Fix illegal address error in Cycles Light Tree when no emitter is selected (c076202e23)


  • Fix incorrect GGX BRDF pdf and BTDF evaluation (PR #111591)
  • Fix incorrect GGX BRDF LUT coordinates (67843e188b)


  • Review pull requests regarding panoramic camera projection (PR #111310) and Cycles light tree (PR #111292)
  • Debugging issues when overwriting newer files in an older Blender version (b075c84ba3)

Week 48 August 28 - September 1


  • Cleanup terms in multiscatter GGX (PR #111634)
  • Use utility function for LUTs parametrized by cos_theta and roughness (PR #111651)
  • Fix runtime-generated BSDF LUT does not match the precomputed LUT (PR #111632)
  • Change Glass BSDF to match Cycles (PR #111687)
  • Change Principled BSDF to match Cycles (PR #111754)


  • Add distance-dependent transmission color in Principled BSDF (PR #111806)

Week 49 September 4 - 8


  • List several inconsistencies in BSDF sampling and evaluation (#111941)
  • Fix NaN in Principled Huang Hair sphg_dir() (df26271db4)
  • Fix precision issues in ray sphere intersection (fedeaab30f)
  • Fix Principled Huang Hair renders black on horizontal particle hair (077022e45f)
  • Remove defensive sampling at the first interaction (bf82f9442c)
  • Cleanup microfacet BSDF implementation (21ca47d81f,f96b9db610) and path guiding (4c6164e292)
  • Fix inconsistent normal checks when sampling and evaluating BSDF (063a9e8964)
  • Fix wrong refractive index in path guiding (PR #112157)
  • Adjust the pdf of picking reflection/refraction lobes by the tint (PR #112158)
  • Add tint control in Specular and Transmission component of Principled BSDF (PR #112192)


  • Fix Principled BSDF not matching Cycles near IOR == 1 (db4a2de620)