The Fast structure preview (biased) toggle is available in analytical hourglass 20, raster-family 20 and numerical mesh-sheet 32. It is off by default. Turning it off restores the existing solver. There is no new MIS strategy ID: this is a viewfinder approximation, not an additional unbiased estimator.
This toggle is not strategy 32 itself. Normal strategy 32 constructs a finite triangulated approximation of the refracted family, builds a sheet BVH, and lets camera rays gather the sheets they cross. The toggle keeps the light-side sheet construction but replaces that camera gather with projected triangle rasterization. On strategy 20, the input geometry comes from the analytical sphere-hourglass family; on strategy 32, it comes from rays traced through the triangle mesh. The raster stage is shared, while the sheet generators are not.
The preview traces real light rays through the glass, including chains and mesh interfaces. Adjacent rays with matching interaction topology become triangular sheets. Instead of asking every camera ray to intersect a sheet BVH or solve the analytical hourglass equation, it rasterizes these triangles into a smaller image. The screen rasterizer integrates fractional triangle coverage inside each pixel, so narrow folds are retained even when no pixel center lands inside them. Color and depth use perspective-correct interpolation.
A first-solid depth buffer hides caustics behind objects. Optional glass and stage shading is ray traced at the same preview resolution. The caustic layer has its own normalized screen filter; the complete image is bilinearly enlarged for display. Its operating cost is therefore a finite light sweep, a reduced surface/depth pass and covered-pixel rasterization. It avoids the sheet BVH and per-pixel sheet crossing work. Whether that is faster for a particular scene must be measured; large projected sheets can still cause substantial overdraw.
Controls
| Configuration key | Default | Meaning |
|---|---|---|
pp.hourglassFastPreview |
false |
Opt into the approximation in 20/32/raster-family 20 |
pp.fastSheetScale |
2 |
Linear downsample; 2 uses one quarter as many raster pixels |
pp.fastSheetRulings |
96 |
Initial light rays along each angular sheet |
pp.fastSheetBatch |
8 |
Independently sampled sheets per pass |
pp.fastSheetBlur |
1.0 |
Caustic filter standard deviation in raster pixels; 0 disables |
pp.fastSheetMinCos |
0.01 |
Camera tangency regularization floor |
pp.fastSheetDirectFog |
false |
Add unrefracted single-scatter context |
The existing meshSheetDepth, meshSheetSmoothNormals, meshSheetSurfaces
and bend-limit controls still apply. Preview ray counts are independent of the
reference controls. Resetting or changing a preview option clears accumulated
film. Repeated passes average new light/azimuth samples; they do not eliminate
discretization or filtering bias.
What changes physically
- The preview uses a pinhole projection, also for its surface/depth cameras. Depth of field and tilt-shift effects are omitted.
- It draws direct camera-visible fog sheets only. Sheet contributions reached through camera-side glass or mirrors are omitted. The first glass surface therefore clips that layer, even though glass beauty shading can transmit.
- Light-side rays carry transmission and internal total reflection through closed, nonoverlapping glass solids. Analytical planar mirror relays and externally reflected light families are not reproduced.
- Finite angular triangulation, dropped unresolved topology changes, interpolated phase/attenuation, a grazing denominator floor, finite screen coverage, reduced resolution and screen filtering introduce approximation. The blur can spread light across an occlusion edge.
- The underlying mesh-sheet model uses homogeneous fog, scalar IOR/RGB and single scattering after a glass path. It does not become a spectral, heterogeneous or multiple-scattering solver by enabling this toggle.
- Emission follows mode 32's physical emitter convention. Analytical 20 uses a different uniform-intensity convention in some configurations. A brightness difference between those modes must not be described as numerical error.
This is useful for framing a chain, finding a caustic fold, adjusting a model or inspecting how light support moves. Disable it for radiometric reference, singularity analysis, estimator comparisons or MIS variance measurements.
Reproducible checks
PrismMeshSheetTest now also checks exact projected-area integration, shared
edges, subpixel sheets, projective interpolation and degenerate rejection. It
is a geometry test, not evidence of unbiased rendering.
After a combined native build, run:
python docs/mesh-photon-sheets/benchmark_fast_preview.py build/fast-preview-check --before-binary C:/path/to/checkpoint/Prism.exe
The harness retains the executable hash, exact configuration, native float
film, PNG and timing for every case. It first checks disabled mode 20 on
scene 48 and mode 32 on scene 84 against the checkpoint, byte for byte. For
the selected scene it then uses the same emission, ruling count, sheet batch,
glass-interface depth and timing warmup for both
paths: first-pass cost, steady-pass cost and approximately equal-render-time
films. The default isolates the refracted fog so nonblack pixels cannot be
explained only by stage surfaces. Add --surfaces for the complete viewfinder.
--scene selects any paired mesh scene: 83 Suzanne, 84 teapot (default),
85 spheres, 86 torus or 87 glass chain. Use a separate output root for each
scene and binary; the retained-film checks reject replacing a previous run
with different settings. --depth defaults to 12 glass interfaces, and
--warmup defaults to two excluded steady passes. Both paths receive the
same values. Initial and equal-time measurements exclude no passes, so their
recorded time includes the first geometry construction.
python docs/mesh-photon-sheets/benchmark_fast_preview.py build/fast-preview-spheres --scene 85
python docs/mesh-photon-sheets/benchmark_fast_preview.py build/fast-preview-chain --scene 87 --depth 12 --rulings 96 --batch 8
The report records speed rather than assuming it. First-pass geometry setup and process launch are separate from steady rendering; approximately equal time includes a recorded pass-count cap. Compare the retained images as well as the timing ratio. No measured performance claim is implied until that report has been produced on the tested binary.