RadianceLab · Native implementation document

Scenes that expose a technique

Paired cameras, materials, medium and renderer settings make each technique immediately inspectable.

These presets load geometry, lights, materials, camera, exposure and the renderer that supports the feature. The catalogue is src/scene/ShowcasePresets.h; IDs 88–109 have an independent builder in src/scene/ScenePresetShowcases.cpp, except ID 98, which reuses the verified mesh chain from ID 87 and changes the paired rendering settings.

Use File → Scene Presets → Technique showcases / paired beauty scenes. Hover an entry for its technical intent. Showcases.bat opens scene 97 in an isolated session; Showcases.bat -Scene 91 opens another preset. Loading a menu entry explicitly applies its paired settings, while startup JSON overrides remain available for experiments. The ordinary prism.json and an already-open viewer are not overwritten.

ID Scene Paired renderer What to inspect
88 Chromatic light loom Photon primitives, strategy 31: UV plane + sphere + disk A slit, a cone-profile area source and a broad back aperture cross in homogeneous fog; edit their sizes and angular profiles.
89 Luminous cube Photon sphere 7; B side preselected to UVW cube 5 A 3D emitter origin plus a two-dimensional angular sweep. Use -Compare for the same-emitter A/B view.
90 Luminous ball Photon sphere 7; B side preselected to UVW ball 6 The same emitter volume and emission density as 89, with a different shape. Use -Compare to compare angular sweep with source-volume sweep.
91 Luminous atlas GPU path tracer, volume-light NEE A gold SDF torus, violet octahedral shell and cyan NoiseLab cloud, with rough amber metal and dispersive glass receivers. Dispersion spread 6 is deliberately exaggerated.
92 Cloud theatre GPU path tracer Three coloured apertures and silhouettes in a NoiseLab density field. The GPU evaluates spatially varying density; this is a visual showcase, not a validated heterogeneous reference.
93 Tinted atmospheres GPU path tracer Separate bounded volumes with backward, isotropic and forward HG phase functions and different scattering colours.
94 Brushed observatory GPU path tracer Five staggered conductors: roughness, anisotropy and tangent rotation change elongated softbox reflections. No medium.
95 Prismatic still life GPU path tracer Smooth dispersive spheres, a rough glass block and narrow white target strips. Dispersion spread 6 is intentionally exaggerated; set it to 1 for the native physical-scale Cauchy model.
96 Lacquer constellation GPU path tracer Cherry/petrol coats, thin-film thicknesses 280/450/620 nm, and a gold glint accent. No medium.
97 Amber hour GPU path tracer Warm/cool glass and metal, dark pedestals and luminous architectural strips: a vacuum beauty scene.
98 Fast glass procession Photon primitives 32 + additive fast sheet preview Same multi-glass geometry as 87. Use it for interactive framing and compare with 87's numerical sheet path before treating a result as final.
99 Learn the doorway Path-guiding prototype, main mode 7 Bright illumination behind an offset portal teaches a spatial/directional histogram. Directional field arrows are enabled; compare guiding strength 0 and 0.5.
100 Find the bright path Recorded-vector MLT, main mode 4 An emitter seen through an opening and smooth glass, with acceptance statistics. -Mode 5 runs lazy PSSMLT on the same scene and mutation controls.
101 Deposit the light Surface photon mapper, main mode 2 Glass and mirror shapes redirect two differently sized, coloured lamps onto a diffuse receiver. Inspect photon positions, KD-tree and gather radius.
102 Connect and merge VCM prototype, main mode 3 Exactly the optical scene and camera from 101. Toggle connections and merges individually to see their roles.
103 Homogeneous fog chamber GPU path tracer Three fixed coloured sources, occluders and one bounded uniform medium.
104 Heterogeneous fog chamber GPU path tracer Identical camera, geometry and base coefficients with a frozen NoiseLab density field. Visual density comparison, not an unbiased transport reference.
105 Equal-flux emitter sizes PP31 Tiny, medium and broad Lambertian quads, normalized for both area and colour luminance.
106 Equal-flux emission profiles PP31 Equal-sized laser-like, cone and diffuse sources, normalized by their actual angular integrals.
107 Direct surface-curve atlas PP33 Diffuse floor, wall, sphere, block and a triangle torus; two coloured Lambertian area lights. Mesh-aware receiver experiment.
108 Glass surface caustics PP33 Two close apertures illuminate disjoint glass spheres above floor and wall catchers. Caustic path class, no fog.
109 Four-glass surface procession PP33 Close upper aperture, four separate glass relays and diffuse catchers. Actual interface branches rather than a painted caustic texture.

Volume estimators and surface follow-ups

The volume estimator lab computes collision, survival track-length and ratio-tracking estimates of the same scalar integral, with actual sampled events, running errors and a deterministic quadrature reference. It is independent of the scene renderer and does not silently repair existing GPU or UPBP weighting. Open it with Showcases.ps1 -Scene 104 -Research.

Scenes 103/104 isolate a density-field change while retaining the chamber; 105/106 emphasize emitter area and angular support. The latter use one common homogeneous medium and the multi-emitter PP31 ledger. Source colours and positions differ, so these are inspectable spatial studies rather than isolated single-source variance rankings. The earlier source matrices 80–82 remain.

Scenes 107–109 are surface-curve research fixtures. Use the PP33 stochastic mode for its sampled surface-path estimator; deterministic quadrature and any screen blur are distinct finite approximations. Scene 107 includes a real triangle torus, so the ordinary GPU tracer—which skips general mesh entities—is not a complete-scene numerical oracle. Direct diffuse sphere/box/plane receivers also provide useful geometry for the independent emitter-translation experiment. The caustic fixtures place their light close to the first glass object so useful paths do not depend on an extremely rare aperture hit. They contain no medium; the surface estimator is responsible for the displayed caustic class.

Learning, mutation and density-estimation starting points

Entries 99–102 provide actual executable scenes for inspecting the native backends. They do not certify those backends' outstanding mathematics. Scene 99 uses the existing 16×16 directional histogram and a 12³ spatial grid, with three warm-up passes, eight surface bounces and a 50% guiding mixture. The source sits behind an offset doorway; the dim blue fill keeps orientation possible while the stronger rear source creates a concentrated useful direction. The current guiding mixture/PDF limitations are recorded in the support audit.

Scene 100 uses one geometrical setup for two primary-random-vector mutation implementations: recorded-vector MLT and lazy-stream PSSMLT. Defaults match the seed count, mutation count, depth, large-step probability and small-step scale; PSSMLT retains its dual-splat correction. The acceptance display is a real renderer statistic. The aperture is deliberately large enough for bootstrap paths to find the emitter, rather than presenting a black image while hoping for a rare initial sample. Neither mode is claimed to implement every published path-space mutation.

Scenes 101 and 102 use identical source positions, power, surfaces and camera. The PM preset uses a 40,000-photon emission budget, kNN gathering with radius 0.2, and the existing v2 output. It builds once and remains editable; rebuilding is available from the renderer controls. VCM starts with 1,000 light subpaths, merge radius 0.15 and six bounces. Changing the selected mode therefore exposes a backend difference rather than a silently altered scene. The VCM implementation still has experimental cross-strategy weighting; its name alone does not make it an unbiased oracle. Both are surface scenes without media.

.\Showcases.ps1 -Scene 99                 # learned doorway directions
.\Showcases.ps1 -Scene 100                # recorded-vector MLT + acceptance stats
.\Showcases.ps1 -Scene 100 -Mode 5        # lazy PSSMLT, identical scene
.\Showcases.ps1 -Scene 101                # surface photon deposits / gathering
.\Showcases.ps1 -Scene 102                # VCM on exactly the same optical setup
.\Showcases.ps1 -Scene 102 -Mode 1        # GPU visual comparison, not a certified ratio test

The high-dimensional comparison

Scenes 89 and 90 each have exactly one uniform volumetric emitter and one homogeneous scattering domain. The cube is 2 × 2 × 2; the ball has radius (6/π)^(1/3), so both emit from volume 8. Their emission density, colour, extinction, camera and receiver geometry match. There is no proxy point light and no emissive surface shell. The source's zero extinction does not carve a cavity out of the surrounding fog; the PP medium lookup already skips zero-extinction emitter volumes.

The strategies address the same single-scatter path class with different coordinates:

The solid sweep cancels a distance-squared Jacobian against inverse-square airlight geometry and has no surface-normal grazing denominator. The angular sphere retains its projected-area geometry, so different viewing angles and source sizes can affect its variance differently. This motivates a comparison; it does not establish an efficiency ranking without measured error and time. Compare at equal wall time, and inspect rare bright samples as well as a mean image. Equal sample counts alone do not measure equal work.

.\Showcases.ps1 -Scene 89 -Compare       # A: sphere 7; B: UVW cube 5
.\Showcases.ps1 -Scene 90 -Compare       # A: sphere 7; B: UVW ball 6
.\Showcases.ps1 -Scene 89 -Strategy 1    # one-scatter volume-NEE reference
.\Showcases.ps1 -Scene 90 -Strategy 6    # translated-ball sweep alone

The matte receiver and offset silhouettes give the experiments spatial context; they do not make these methods full multi-bounce renderers. A raw single-scatter PP image and a default multi-bounce GPU image contain different path classes. For a GPU reference, pin the medium bounce budget to one and align the surface/direct-emission choices before reporting a numerical ratio. Strategies 5 and 6 select the brightest matching uniform volume emitter, so do not add a second emitting solid and assume the same test still covers it.

Supported features and deliberate boundaries

The SDF/NoiseLab scenes use existing GPU density and emission evaluation. Their emission is not claimed to be supported by the uniform-volume sweeps 5/6. The implementation audit identifies incomplete null-event traversal, homogeneous shadow attenuation and a volume-NEE MIS measure that still needs validation. Scenes 91/92 therefore demonstrate implemented visual features; their images are not unbiased heterogeneous ground truth. The material studios use the real GPU Metal, Anisotropic, Glass, DispersiveGlass, CoatedDiffuse, Iridescent and Glint families. They are not paired to a PP surface path that only supports a subset of those BSDFs.

Noise motion is initially stopped so accumulating a clean image is possible. Turn on Animate volumes and raise the selected volume's time speed for moving clouds. The first view favours composition and legible optical behaviour; all source strengths, HG parameters, roughnesses and shape parameters remain editable in the normal inspector.

Scene 93 intentionally changes both scattering colour and phase shape for a colourful overview. It is not a controlled phase-only benchmark. Scene 88 intentionally combines different source sizes and profiles; use the existing equal-power source matrices 80–82 for a controlled size/profile study.

The new scenes do not add unimplemented GPU mesh intersection, a Newton manifold solver, or a new wave transport integrator. The native research workbench is available separately with Showcases.bat -Scene 94 -Research.

Validation and reproducible previews

The native render gallery contains all fifteen new scenes, the material studios at 1,024 GPU samples/pixel, additional source-volume sweep captures, and six reference/preview timing studies. See the validation record for build hashes, test counts and measured limitations.

PrismShowcaseTest validates the actual builders without a graphics context: finite and nondegenerate meshes, outward winding, valid material references, exact source-mesh area versus sampled area, matching analytical/raster source radiance and normals, no hidden point sources, volume boundaries without opaque shells, the equal-volume experiment, real material parameters and paired renderer selection. Build and run this target alongside the existing geometry tests. Render QA is separate: a structurally valid scene still needs an exposure/composition review.

The launcher can prepare an isolated session without opening it:

$session = .\Showcases.ps1 -Scene 94 -DumpSamples 128 -PrepareOnly
Start-Process -FilePath (Join-Path $session 'Prism.exe') -WorkingDirectory $session -WindowStyle Hidden

For GPU and photon-map mode 2 this writes pp_gpu_ref.bin after the requested samples/passes; modes 3–8 use the existing pp.dumpCpuAt hook to write pp_cpu_ref.bin. These hooks do not exit the viewer automatically. PP mode 9 writes pp_pp_ref.bin and requests exit after its dump. -DumpSamples is a pass-count capture aid, not a benchmark result or a claim that one CPU pass equals one GPU sample. A launcher copies the newest available built executable, so rebuild after changing the catalogue.

The first native render review found that the studio softboxes' backs intruded into the image and left the conductors under-lit. The revised studio places the broad frontal source behind the camera, moves the side/key fixtures outside the view, increases their useful illumination, and uses a tighter, less oblique framing. The regression fixture now checks that those three softboxes stay outside both 4:3 and 16:9 authored camera frusta. SDF torus/octahedron scale and the cloud theatre's optical depth were adjusted from the actual renders, not by altering captured images.

The paired branch accepts scoped render.resolutionScale, render.tonemapMode, render.spectralMode and render.enableMedium startup controls, in addition to existing PP/render keys. The default resolution scale is 0.65 for the GPU view; PP uses its separate half-resolution interactive film unless pp.fullRes is explicitly enabled. The scene menu intentionally reapplies the authored view, including its camera and display gain.