Audit date: 2026-09-13. Baseline inspected at 13cc7d6, followed by the additive mesh-sheet preview, PP33 surface curves, scene-translation measurement, support/volume laboratories and enhanced raster appearance. This is a call-path review, not a new numerical validation of every integrator. “Implemented” means executable code is connected to the selected mode. It does not by itself mean unbiased, complete, or fast. The validation record distinguishes numerical checks, native captures and timing experiments. Existing measured PP results remain in their individual experiment reports.
RadianceLab has ten selectable main render modes, a richer set of GPU tracer strategies, and a separate family of photon-primitive estimators. These are three different menus. Shared scene editing and display controls do not imply that every backend implements every material, emitter, medium, camera effect, or measurement.
The ten main modes
The authoritative dispatcher is EngineRender.cpp, especially the cpuIntegratorActive block and the calls to each renderPass. CPU modes 3–8 use half-resolution films. Mode 9 can use full resolution; all remain subject to scene cost and selected quality. Moving the camera clears or invalidates the appropriate film rather than turning a slow estimator into a GPU algorithm.
| Mode | Executed path | What is implemented | Important scope / qualification |
|---|---|---|---|
| 0 · Rasterizer | RasterRenderer::renderToFBO → basic.vert / basic.frag; opt-in EnhancedRasterRenderer |
Mesh/material/NPR drawing, analytical LTC approximation, baked/projector routes; new reduced-resolution vacuum surface guide plus selected PP scattering and Beer camera attenuation | Enhanced raster is an explicitly biased appearance composite. It inherits the guide's missing mesh transport and each PP family's restricted path class. It does not add complete surface–medium exchange or repair the LTC fit. See implementation and fixtures. |
| 1 · Tracer | ComputePathTracer → pathTrace.comp |
Eye-path sampling, NEE/MIS, light tracing, BDPT connections, RGB/hero-wavelength rendering, analytical geometry, procedural media, camera/projector controls, path-length gates and modulation | The broadest interactive transport path, but heterogeneous transport and several material models are approximate. Pure triangle meshes are skipped by uploadScene; see geometry below. GPU feature-mask fallback can disable an expensive feature. |
| 2 · Photon mapper | Engine::buildPhotonMaps → PhotonMapper::buildPhotonMaps → SSBO upload → GPU gather/display |
CPU light paths, global/caustic photon maps, KD trees, fixed/progressive gathering, path/merge inspection | Finite-radius density estimation. PhotonMapper::traceRay skips volumes. Optional beam records span surface bounces without testing whether the segment is in a medium. The pmGPUTrace UI field has no engine consumer in the audited tree; it does not switch this build to GPU photon tracing. |
| 3 · VCM | VCMIntegrator::renderPass, buildLightPaths, traceEyePath |
Light and eye subpaths, explicit vertex connections, KD-tree merging, shrinking radius, strategy diagnostics | An experimental VCM implementation. Endpoint evaluation in connection/gather is largely Lambertian; cross-strategy combination ends with a fixed 0.5 factor, rather than full path-space MIS across all splits. Skips media. Do not use as a general unbiased oracle. |
| 4 · MLT | MLTIntegrator::{bootstrap,proposeMutation,mutate,tracePath} |
Bootstrap normalization, large/small random-vector mutations, Metropolis acceptance and film splats | Works over a recorded primary random vector, not the original full path-space mutation repertoire. Camera paths find emissive surfaces/environment; no medium transport or photon-primitive connection. Material sampling is a subset of the GPU implementation. |
| 5 · PSSMLT | PSSMLTIntegrator::{getPrimarySample,mutatePrimarySamples,tracePathFromPrimary,mutate} |
Lazy primary samples, backup/restore on rejection, large/small steps, dual-splat correction | A distinct lazy-stream implementation of primary-sample-space MLT. The legacy bias toggles change estimator/display behavior; comparisons must record them. Surface-only analytical geometry, not full GPU feature parity. |
| 6 · UPBP | UPBPIntegrator::{buildLightPaths,traceEyePath,deltaTrack,ratioTrack} |
Surface/volume vertices, beams, point/beam gathering, selected procedural density evaluation, HG phase sampling | Substantial working experimental code, but not a complete reproduction of published UPBP. Fixed cross-strategy weights and medium weighting issues remain; see the concrete audit findings below. |
| 7 · Path guiding | PathGuidingIntegrator::{initGrid,tracePath,sampleGuidedDirection} |
Spatial grid with 16×16 directional histograms, warm-up/training, learned directional proposals and debug arrows | Grid/histogram guiding, not an adaptive SD-tree. Mixture/PDF inconsistencies remain in the diffuse branch. Good for inspecting the learning mechanism; not an unbiased reference. Skips media. |
| 8 · Manifold exploration | ManifoldIntegrator::{tracePath,proposeMutation,renderPass} |
MCMC renderer with smaller random perturbations at detected specular bounces; chain visualization | Specular-aware mutation prototype. The current proposal does not solve manifold constraints. newtonIterations / newtonStepSize are not consumed by a solver; recorded newtonSteps is zero. This is not the full Jakob–Marschner manifold algorithm. |
| 9 · Photon-primitive estimator | PPIntegrator::renderPass → strategy-specific builders/crossings; 32 enters PPMeshSheetRenderer, 33 enters PPSurfaceCurveRenderer |
Swept-coordinate estimators, finite-radius methods, selected MIS sets, analytic sphere hourglass/chain, numerical mesh sheets, native angular-sheet surface receiver curves and companion shading | Support is per strategy and often a restricted path class. Surface33 traces selected delta chains to one non-delta receiver, not arbitrary diffuse continuation. Correlated/raster modes are execution arrangements, not additional unbiased estimators. |
Implementation sources: raster, LTC tables, GPU tracer, photon mapper, VCM, MLT/PSSMLT, UPBP, guiding, manifold prototype, PP.
GPU tracer strategies are a separate axis
lightStrategy selects naive eye tracing, NEE, NEE/continuation MIS, naive light tracing, light-tracing camera connections, BDPT, or diagnostic selections. The GPU BDPT route really builds interior connections; it is not only a collection of diagrams.
- The older A weighting route uses
bdptMISWeightinpt_bdpt.glsl, which falls back to flat1/Neven when a balance/power label is selected. - B balance / B power has a separate implemented path-PDF construction in
pathTrace.comp, beginning atFEAT_BDPT_MIS_B. It evaluates eye-emission, NEE, light-to-camera and interior connection weights. Its scope is surface transport; the volume showcase disables it. ComputePathTracer::featureMaskonly requests B when BDPT, a non-flat scheme, method B, and no volume showcase are selected. Shader compilation can fall back by removingFEAT_BDPT_MIS_B; inspect the log as well as the UI.bdptVolumeShowcaseis expressly a biased experimental volume showcase. It must not be described as a complete volumetric BDPT implementation.
These distinctions matter in a strategy pyramid: an actual rendered (s,t) contribution is evidence that the path construction runs, but a visually plausible combined image is not a proof that all PDFs and delta cases match.
Geometry, media, and emission are backend-specific
| Capability | Active implementation | Boundary of support |
|---|---|---|
| Triangle-mesh display | Raster renderer | Direct mesh drawing is supported. |
| Ordinary CPU ray intersections | SceneIntersect.cpp, intersectScene |
Sphere, plane, box and their volume bounds; no general triangle traversal. Applies to the ordinary CPU transport modes and legacy PP walks. |
| GPU tracer geometry | ComputePathTracer::uploadScene and shader analytical primitive intersections |
PrimType::None is skipped. The member named m_triangleSSBO actually stores packed analytical primitives. A monkey mesh visible in raster mode is not automatically present in the GPU tracer. |
| Mesh photon sheets | PPMeshSheets.inl, MeshSheetGeometry.h |
Own triangle BVH and dielectric ray families, independent of the ordinary tracer's geometry path. See mesh-sheet scope. |
| Native surface curves | PPSurfaceCurves.inl, SurfaceCurveMeasure |
PP33 shares the private mesh traversal, follows actual interface branches and deposits at a first supported non-delta receiver. Pinhole projection, geometric normals and closed non-overlapping glass; homogeneous extinction only. |
| Homogeneous participating media | GPU tracer, UPBP, PP medium paths | Extent clipping and weighting differ between backends. Match the path class and medium settings before using one as a reference. |
| Heterogeneous noise / SDF / dynamic density | GPU eye-volume block; UPBP evalDensity supports a smaller subset |
GPU supports visual procedural/texture density but is not a validated general null-collision implementation. UPBP does not implement ReactionDiffusion, SDF, Physics or NanoVDB parity. Ordinary PP sheets use homogeneous coefficients. |
| Uniform volume emitters | PP ppSampleEmissiveEntity, strategies 5/6/7; GPU sampleLight with uVolLightSampling |
PP5/6 sweep one brightest matching uniform box/ball. GPU samples volume positions uniformly and evaluates density there; this is not an importance sampler fitted to a complex emitter's density. |
| Spectral transport | GPU hero wavelength; selected PP RGB hero-channel dispersion | PP's selected dispersive branches use a three-channel Cauchy approximation, not the GPU's continuous hero-wavelength transport across every strategy. Modes 3–8 have no spectral configuration in their dispatcher. Mesh sheets use central-IOR RGB. |
| Node material evaluation | Several CPU getMaterial(hit) paths call applyNodeOverrides; GPU uploads node data |
Sharing overrides does not make all CPU BSDF evaluators equivalent to the GPU ones. |
| TOF gates / modulated projector | GPU tracer path-length logic and tofModulationFactor |
PP0–33 have no native temporal gate or transient-kernel channel. The new time-support lab is independent. Four-bucket recovery has existing convention/calibration limitations; see temporal support audit. |
Concrete medium issues to resolve before reference-grade comparisons
These are implementation findings, not general objections to the algorithms:
- UPBP survival weighting.
deltaTracksamples extinction events usingsigmaS + sigmaA. On no event, bothbuildLightPathsandtraceEyePathmultiply by anotherratioTrack. In a homogeneous segment, that contribution is selected with probabilityTand then weighted byTagain, givingT²rather thanT. An absorption-only slab with a known background is a clean regression fixture. Correcting only this branch is not enough to certify the rest of UPBP. - UPBP caps and merge measure. Both trackers cap at 128 steps; ratio tracking stops when
T <= 0.001without a compensating roulette rule. Volume-vertex gathering uses anr^-2Epanechnikov expression and does not isolate a pure 3D vertex population. Connection and merging also have fixed0.5cross-strategy factors. These need separate measure/normalization tests. - GPU null events. The main
pathTraceeye-medium block samples one candidate for a volume. Its rejectioncontinueadvances the outer volume-entity loop, rather than continuing through further null events in the same medium. This differs from a complete delta-tracking loop. On the no-collision branch it also applies extra absorption. The standalone helper nameddeltaTrackVolumeis not evidence that this main path uses it correctly. - GPU shadow attenuation.
pt_volume.glsl,evalVolumeTr, applies homogeneous Beer attenuation over each bounding primitive; it does not evaluate its procedural density along the shadow ray. - Volume NEE measure.
sampleLightinpt_light.glslcomputesp_V r². This is a joint radial/directional density, not a marginalized solid-angle density. It can be used for the sampled volume integral with the corresponding distance variable; inserting it directly beside a phase-only density in generic MIS requires a matched joint measure. The generic volume-NEE MIS path needs this audit before an unbiased claim. - Guiding proposal accounting. The guided branch divides by a guided/cosine mixture, while the cosine branch uses only
throughput *= albedo. Hemisphere folding also requires summing densities of both preimages; the current sampler returns only the selected bin's density. These are independent of how attractive the guiding visualization looks.
The survival/ratio-tracking distinction follows the executable reference treatment in PBRT, Transmittance. The published UPBP formulation explicitly handles the different estimator measures; its guarantee should not be transferred to this implementation by name alone.
Photon-primitive strategy roster
The main roster lives in PPIntegrator.cpp: kPPClass, sampleOneStrategy, ppSceneRefusal, ppCompRefusal, and the actual builder/crossing functions. The table below groups strategies 0–33. It records what the branch does; flags in kPPClass alone are not a complete proof of scene support.
| IDs | Family / implemented construction | Scope and caveats |
|---|---|---|
| 0 | Camera-ray/emitter baseline via buildCamRayOnly_Area / ppEvalContribution |
Direct emission class, not a complete renderer. |
| 1, 2 | NEE and NEE/continuation camera walks | Backup/open-class estimators; optional surface NEE, specular continuation and caustic photon map enlarge their coverage. They are the reference for matched restricted PP experiments, not automatic full-scene mesh or heterogeneous references. |
| 3 | UV plane: translate a sampled emitter quad; ppBuildQuadPrim, ppCrossQuadPrim |
Direct single scatter. Legacy scene helper chooses a quad; the historical standalone path lacks the full light-leg occlusion coverage of the custom combination. |
| 4 | Swept spherical emitter surface | Direct single scatter from a matching emissive sphere, not a photon sphere around an arbitrary sampled source point. |
| 5, 6 | UVW emitter cube / emitter ball | Translate the complete solid emitter; intersect a chord and Monte Carlo sample along it. Real 3D emitter support; no surface-normal Jacobian. One brightest matching emissive entity, uniform emission and homogeneous fog. Not an arbitrary SDF emitter or multiple-scattering volume solver. |
| 7 | Photon sphere: sample source point + free-flight radius, sweep both angular coordinates | Direct single scatter. Samples area, point and uniform volume emitter origins. The repaired scene-admission gate accepts the real entity-emitter roster without requiring a fictitious area/point light. Tangency and near-source singular behavior require careful statistics. |
| 8, 9 | Directional disk / cone | Direct single scatter; complementary angular/distance parameterizations, not different material models. |
| 10, 11, 12 | UT plane / VT plane / UV+UT+VT MIS | ppPlanePdf and ppSamplePlaneXY express competing techniques in a shared measure. Use compatible quad emission and matched medium; legacy single-quad helpers do not cover every source in a heterogeneous multi-light scene. |
| 13 | Sphere+disk+cone MIS | Direct single-scatter directional family. Distinct from the curve trio and the later arbitrary custom mask. |
| 14, 15, 16 | Arbitrary plane, randomized arbitrary-plane variant, fixed arbitrary plane | Kernel-free plane experiments. Their legacy standalone paths have occlusion/ownership restrictions. Strategy 31 has a separate corrected fixed-plane ledger rather than blindly adding these whole films. |
| 17 | Camera-sphere construction | Restricted direct-scatter experiment with its own visibility limitations; not a general camera model. |
| 18 | Traced photon beam | Finite-width line kernel, can carry traced light-side specular paths. Bias remains at fixed radius. |
| 19 | Traced photon point | 3D ball kernel. Different kernel dimension and shrinking schedule from beams; not kernel-free. |
| 20 | Photon hourglass, including selected sphere-chain/relay extensions | Analytic sphere family; stable sheet solver, light-side sphere refraction, optional camera-specular gather. Collinear chains preserve rotational structure; one supported off-axis follower uses sampled rulings/root search. Guard/branch cuts can discard energy. Off-axis support and correlated support are not identical. |
| 21 | Beam+point+hourglass combination | Shared caustic experiment. Beam/point partners retain finite-radius effects. The MIS treatment can cover a solo hourglass's problematic regions; it does not automatically admit every relay or chain supported by 20. |
| 22, 23, 24 | Vertex-seeded hourglass / exit cone / reflected cone | Selected sphere refraction/reflection classes, with emitter/roughness and guard restrictions. They are useful controlled comparisons, not arbitrary mesh sheets. |
| 25 | Rasterized batch execution | Resolves to family 3, 18 or 20 with an all-N correlated record pool. The rasterizer restricts candidate pixels and keeps the same crossing/evaluation; it is not a new estimator. |
| 26 | Three planes + three directional strategies | Six-way restricted direct-scatter combination. More techniques are not necessarily cheaper or better per second. |
| 27 | Glossy sphere ring-alt | Dedicated glossy sphere reflection experiment using an evaluable non-delta lobe. Not the blurred photon ring 28; comp-mode ownership is deliberately refused. |
| 28, 29, 30 | Photon ring / arc / beam+ring+arc | Shared finite-radius curve family; source/receiver visibility in ppRAPayload. Mixture weights form a limiting density ledger, not a claim of pointwise finite-radius unbiasedness. |
| 31 | Custom subset: UV, UT, VT, fixed arbitrary plane, sphere, disk, cone, beam, ring, arc | Can combine subsets, including UV+sphere. Kernel-free members use a common-measure MIS ledger. Curve-only combinations retain finite-radius bias. Mixed sheet/curve selections use an explicit fixed blend between groups, not cross-measure MIS. See ppCustomMISStatus and ppCustomMISKernelBlend. |
| 32 | Mesh photon sheets | Actual dielectric mesh ray families, interpolated numerical sheets, camera gather, selected multiglass chains and homogeneous fog. Finite angular quadrature/adaptive topology cuts make it an approximation. The additive fast raster preview is another approximation; see below. |
| 33 | Surface receiver curves from angular photon sheets | Native light-side cone/meridian charts sample actual area/point lights and trace real glass/mirror interfaces to one supported non-delta receiver. Flux, BSDF and pixel-projection Jacobian determine the splat. Stratified stochastic mode uses finite pixels without a spatial blur; midpoint/blur mode is an explicit approximation. Shared per-sheet Fresnel streams correlate neighboring rulings without changing their marginal branch law. Not full surface-sheet MIS, diffuse multibounce or transient transport. |
Applicability and execution are part of the experiment
- Custom 31 checks for one homogeneous medium containing the whole sampled emitter, not just its center. Selecting any plane requires emissive quads only, so every technique covers the same source roster. It refuses unsupported medium/emitter combinations instead of pretending a partial image covers them.
- Directional 7/8/9/13 now declare
NEED_LIGHT_OR_ENTITY, matching their actual preference forppSampleEmissiveEntityand fallback to area/pointscene.lights. Uniform emitting boxes/balls are sampled in their interiors with1/V, isotropically and without a surface cosine. This fixes an availability gate; it does not add SDF/noise-weighted emission or general heterogeneous attenuation. Forty focused assertions inppCustomMISSelfCheckcover source admission, actual volume-origin sampling, disabled emitters, point fallback, and unchanged restrictions on 18/20/32. - Comp mode partitions path classes between a primary and a backup. It is different from MIS. It refuses modes such as custom31 and mesh32 whose finite-kernel/separate-pass behavior does not fit the analytic ownership claim.
PPCompReportreports structural drops as well as the class declaration. - Correlated does not mean hardware rasterized.
ppCorrelatedPasscan reconstruct a primitive at every pixel;ppCorrelatedPassRecordsonly has frozen-record builders for quad, beam and hourglass. Directional spheres/disks/cones can therefore have expensive correlated fallback behavior even before considering projected coverage or singularities. Verify the[PP] [corr]/[PP] [raster]log. - Freeze pool changes which random data are refreshed. Replaying a finite fixed pool improves inspection but is not equivalent to adding independent samples forever.
- Mesh32 fast preview, implemented separately in
PPMeshSheets.inl::renderPreviewwithFastSheetRaster.h, uses reduced-resolution projected triangles, vertex-interpolated radiance, blur and a tangency clamp. It is a convenient viewfinder. Use the original mesh-sheet gather for numerical comparisons; neither is an exact general unbiased estimator.
Surface rendering, surface curves and derivative experiments
surfaceNEE, surfaceBSDF, surfaceSpec and the finite-radius surface photon map remain distinct from the new PP33 angular-sheet receiver curves. PP33 samples one chart coordinate, stratifies the other, traces the actual path, and projects the first non-delta receiver to the camera. Its input is angular flux; adding an incident cosine again at the receiver would double-count the angular-to-area change. The final BSDF and camera projection have their own measures. It has no diffuse continuation after that receiver and no general cross-family surface MIS.
The independent LightTranslationLab now measures a selected source translation in a snapshot of the actual scene. Matched camera/emitter random numbers produce two central finite differences at epsilon and epsilon/2. It includes direct Lambertian shading, distance/cosine changes and optional visibility changes for the ordinary analytical scene-intersection geometry, with plane-backed area sources using native emission profiles0/3 or explicit point sources. The source's triangle mesh supplies its sampled area; arbitrary mesh-only emitters are not admitted. This is a direct scene measurement with finite epsilon, not automatic differentiation of PP33 or arbitrary multibounce transport. The older analytic collimated-edge experiment remains useful alongside it; see extension assessment.
The volume estimator lab compares collision, survival track length and ratio tracking against one independent scalar reference. Its passing numerical checks validate that lab, not the existing GPU/UPBP tracking implementations. The support/time lab likewise computes restricted spatial and temporal intersections without changing native PP time support.
Showcase choices that expose underused capabilities
| Experiment | Use | What to measure / label |
|---|---|---|
| One pure emitting box/ball inside a larger fog box | PP5/6 against matched PP1/2; PP7 for volume-origin+angular sweep | Keep one emitter and homogeneous fog. Show the swept solid and chord, not just a bright surface shell. Compare sample count and time separately. |
| Colored small/medium/large quads, then narrow/cone/diffuse emission | Custom31 individual sheets, directional trio, mixed subsets | Record source-selection PDFs and actual emission profile. Equal radiance and equal total flux are different experiments. |
| Glossy sphere with moderate roughness | PP27 versus its restricted reference | Expose the glossy sampled vertex and distinguish it from blurred ring28. |
| Mirror relay or collinear glass chain | PP20, then matching companion surface layer | Label unsupported correlated/off-axis combinations and guard settings. Do not transfer 20's extra path classes to 21 without matched weighting. |
| Finite-width curve family | PP18/28/29/30 and curve subsets of31 | Show radius ladders; a cleaner fixed-radius image may retain bias. Record kernel dimension and schedule. |
| Meshes and multiglass caustic chains | PP32 normal gather / fast preview | Render both using the mesh-aware path. Ordinary GPU PT does not intersect PrimType::None meshes, so it is not an oracle for these scenes. |
| MCMC, guiding, and connection anatomy | Modes3–8 diagnostic views | Show actual attempts, acceptances, proposals and connections. Label the unresolved transport approximations instead of presenting them as equal reference solvers. |
Scene-to-strategy map and remaining showcase gaps
Existing numeric IDs below are verified against the builder dispatch in EngineRender.cpp, not just menu names. New IDs 88–109 are specified by the additive ShowcasePresets.h catalogue and paired showcase guide. Their paired defaults are implemented; the final run/QA report establishes first-image behavior. A scene listed as reusable does not automatically switch to that main integrator.
Main-mode coverage
| Main mode | Existing usable scenes | New scenes / remaining presentation gap |
|---|---|---|
| 0 Rasterizer | 0 Cornell, 1 open spheres, 3 material showcase; raster view of 83–87 mesh objects | New enhanced-raster fixtures pair 94 legacy/enhanced/GPU reference and 88/98 scattering/mesh previews. These close the appearance-comparison fixture gap; a dedicated fitted-LTC or baked editing workflow remains separate. |
| 1 GPU tracer | 20–23 NEE diagnostics, 30 prism, 40 Veach-style lights/roughness, 2/15/16 media, 5–13 reaction-diffusion, 56 Apothecary | 91 luminous SDF/noise; 92 shafts; 93 colored/HG volumes; 94 conductors; 95 dispersion; 96 layered finishes; 97 vacuum beauty. New 103/104 retain the same chamber and sources while changing homogeneous density to NoiseLab mist; inherited heterogeneous approximations remain. |
| 2 Photon mapper | 0 Cornell; 1 open sphere scene for caustic paths/KD-tree overlays | New 101 pairs diffuse receivers, glass and mirror with a 40,000-photon emission budget, kNN gathering, radius 0.2 and the existing v2 output. Deposits/KD trees remain inspectable. This closes the dedicated PM scene gap; it does not remove finite-radius bias. |
| 3 VCM | 0 Cornell, 40 lights/roughness; enable connection/merge overlays | New 102 uses exactly 101's scene and camera, with 1,000 light subpaths, radius 0.15, six bounces, connection and merging enabled. Toggle those branches to inspect the existing experimental weighting; no new unbiased-reference claim. |
| 4 MLT | 0 Cornell / 1 open spheres; emissive geometry reachable by camera paths | New 100 provides an opening, glass and reachable bright source with acceptance statistics. Starts with 2,000 seeds, two mutations per pixel, depth 8, large-step probability 0.3 and small-step scale 0.01. A dedicated mutation-anatomy scene is now paired. |
| 5 PSSMLT | Same 0/1 scene lets the lazy stream be compared with mode 4 | New 100 with Showcases.ps1 -Scene 100 -Mode 5 uses the same geometry and matched seed/mutation/depth/step settings. The lazy stream keeps its dual-splat correction. A separate geometry would weaken this comparison; it is an explicit companion launch. |
| 6 UPBP | 2 static media, 33 homogeneous fog, 35 simple fog box | No new dedicated UPBP auto-setup. 92 is GPU-only heterogeneous presentation and must not be used to imply UPBP parity. Tracker/merge diagnostic improvements are prerequisites for a quantitative correctness showcase. |
| 7 Path guiding | 0 Cornell can train its grid and display directional arrows | New 99 implements the offset-doorway study: 12³ cells, 16×16 directional bins, three warm-up passes, depth 8, 50% guiding mixture and field arrows enabled. Compare strength 0 versus 0.5 to inspect proposal behavior. This closes the scene gap, while the existing PDF correctness gaps remain. |
| 8 Manifold prototype | 0/1 with specular objects; chain/acceptance overlays | Dedicated showcase missing: a constrained mirror/glass path study should expose which mutations preserve useful paths. It must be labeled a specular-aware MCMC prototype, not a Newton solver demo. |
| 9 PP | 35–43 direct/single-scatter references; 47–79 caustic/gloss/chain families; 80–82 multi-light custom combinations; 83–87 mesh sheets | 88 area/angular loom; 89 cube/90 equal-volume ball; 98 fast multiglass preview. New 105/106 hold per-light photometric flux fixed across size/profile changes. 107–109 pair PP33 with direct surface/torus receivers, two-glass caustics and a four-glass relay. |
Complete PP-family scene index
| PP strategies | Scene IDs and purpose | Coverage / discoverability |
|---|---|---|
| 0 | 42 camera-ray direct-emitter reference | Dedicated known-answer fixture; File → NEE Diagnostics. |
| 1/2 | 35/36 simple/open fog box, 41 single-scatter reference, 40 surface MIS test | Existing reference fixtures; enable only the intended surface/medium path classes. |
| 3 | 35/36, 58–62 source-size ladder | Existing quad-sweep comparisons. |
| 4 | 38 spherical surface-emitter fog box | Builder exists, but ID38 was not listed in the audited File menu. A discoverability gap, not a missing implementation. |
| 5 | 39 uniform emitting cube; new89 cube-origin scene | Builder39 exists but is absent from that menu. New89 defaults to7; manually selecting5 tests the volume-coordinate sweep on the same geometry. |
| 6 | 43 uniform emitting ball; new90 equal-volume ball | Builder43 exists but is absent from that menu. New90 defaults to7; select6 for the volume-coordinate comparison. |
| 7/8/9/13 | 35/36 direct scatter; 58–62 source-size ladder; 80–82 custom subsets | Existing directional-sweep test space. New89/90 default to7 and expose real uniform box/ball origins. The repaired admission check also accepts these origins for8/9/13; nonuniform volumetric emission remains outside this sampler. |
| 10/11/12 | 35/36, 58–62 UV/UT/VT comparisons | Existing plane family; for multiple lights use the custom31 source ledger rather than assuming each legacy helper visits the complete roster. |
| 14/15/16 | 35/36 arbitrary/fixed plane under changed camera direction | Reusable fixture, no dedicated arbitrary-plane hero preset. Custom31 fixed-plane option is a separate controlled comparison. |
| 17 | 41 single-scatter/camera-sphere study | Reusable geometry; no separately paired presentation. Respect its visibility restrictions. |
| 18/19 | 47 caustic lab, 48 one-ball validation; 35 for kernel-only direct scattering | Existing beam/point references, with radius controls. |
| 20 | 48 one-ball validation, 52 dispersive fan, 68 collinear pair, 69 off-axis pair, 70/71 mirror pair, 77/78 double chains | Strong existing showcase coverage. The old69 menu text still says “refused”; actual availability depends on the newer off-axis configuration and correlated restrictions, so inspect the runtime report. |
| 21 | 49 lens array, 50 IOR ladder, 51 fold close-up, 54 Gate, 55 Reliquary, 57 Cellar, 63 exterior, 64–67 gate variants, 79 Atrium | Strong existing beauty plus technical coverage; several scenes need the companion surface configuration to show full rooms. |
| 22/23/24 | 48 one-ball caustic and 47 glass/reflector lab; 58–62 light-size comparison for20 versus22 | Suitable controlled existing rigs; exit/reflection-cone strategies do not yet each have a dedicated auto-selected showcase. |
| 25 | 35 with raster family3, 48 with18/20 | Existing geometry; demonstrate same primitive pool/crossings and timing, rather than a different-looking scene. |
| 26 | 58–62 single-source ladder | Existing six-way comparison. No need for an invented “super estimator” scene; show member cost and variance on the same source. |
| 27 | 72–76 GLOSS roughness ladder | Already dedicated and in File menu. Not a missing scene; improved auto-selection/captions could make it easier to find. |
| 28/29/30 | 35/36 direct scatter; 80–82 custom curve subsets | Existing fixture, no bespoke ring/arc hero scene. Radius/time comparison is more informative than another unrelated beauty shot. |
| 31 | 80 tiny-to-huge, 81 angular profiles, 82 nine-source matrix; 88 chromatic loom; 105/106 equal-flux size/profile studios | Dedicated multi-source support and editable member subsets. 105/106 normalize source area, profile integral and luminance; separate positions/colors still make these inspection scenes, not isolated single-source variance ablations. |
| 32 | 83 Suzanne, 84 teapot, 85 glass spheres, 86 torus, 87 multiglass chain; new98 fast-preview pairing | Dedicated scene/renderer setup. Keep gather and preview clearly distinguished. |
| 33 | 107 floor/wall/sphere/box/mesh-torus atlas; 108 two glass spheres; 109 four-glass chain with surface catchers | Dedicated no-fog physical area-light rigs. 107 admits direct receiver paths; 108/109 default to caustic-only deposits plus a separate specular/emitter context layer. |
The new 99–102 bundle closes the guiding-learning, mutation-anatomy and paired PM/VCM scene gaps. EngineRender.cpp applies their main-mode enable flags, camera, exposure and backend settings, and disables stale auxiliary renderers when loading a paired preset. Startup configuration can override the mode; explicit menu selection reapplies the pair. This is launch-path evidence, not a substitute for runtime image checks or convergence measurements.
The follow-up 103–109 bundle adds controlled fog/source comparisons and native surface receiver paths. Enhanced-raster A/B fixtures now exist. Remaining presentation gaps include a dedicated fitted-LTC/baked editing workflow, a native UPBP tracker/merge diagnostic after its weighting issues are addressed, and a clearly labeled specular-mutation study for mode8. The independent tracking lab covers the underlying laws; it does not close UPBP's production correctness gap. Missing algorithms such as Newton manifold solving or full surface-sheet MIS are a separate backlog and should not be filled with a misleading preset name.
How to keep this matrix current
Start with EngineRender.cpp and follow the selected function into its implementation. Check scene filtering, source selection, probability density, BSDF/phase evaluation, visibility, accumulation and feature masks. Search both definition and callers: DiffRenderer.h, Holography.h, pmGPUTrace, and the unused Newton configuration show why a declaration or attractive control panel is insufficient evidence.
New scene bundles and native experiments should cite their specific backend and path class. A screenshot proves a configuration produced an image; it does not settle bias, completeness, convergence, or speed outside that configuration.