← RIVXTRANSPORT → SWEPT SHEETS → VECTOR CONTEXT

A pulse through glass.

Trace the family once. Rasterize its structure. Move a time window through the light.

Cached photon light · reconstructed in HDRBIASED PREVIEW
Ready32,768 / 32,768 emitted rays · 36,989 retained hits · fixed-kernel result
Each glass body adds two Snell interfaces. Isolate a leg to inspect its actual focus.
BEAUTY · RECONSTRUCTED PHOTON LIGHT Drag to orbit · scroll to zoom
6,111 traced rays · 333k triangles · after 1st glass: 6048 · after 2nd: 0 · 725 ms
Biased beauty · cached rays → HDR light → reconstruction
Appearance & ray construction
Self-contained browser study · Three.js sheets + official Rive curves
01 · WHAT IS REAL

The focus comes from Snell’s law.

Neighbouring rays leave the same emitter, enter and exit the glass, then form triangles between matching path segments. Their convergence creates the bright waist. Receiver brightness comes from transmitted flux divided by its traced footprint area.

Change the refractive index: the waist and surface footprint move because the paths are rebuilt. Two separate focuses places a smaller second sphere beyond the first focus, so its outgoing rays converge again. The previous overlap scene remains available: its first focus is inside the lower glass, and a second external waist is not expected. Both scenes trace the second refraction.

02 · WHAT THE GATE MEANS

Glass delays the pulse.

Each vertex retains its source-side optical path length, ∑ nℓ. The source-pulse view reveals where light travels; camera-arrival mode also includes distance from each scattering point to the eye. The gate is a finite Gaussian window, not a zero-width slice.

The meter readout is c × arrival time in the idealized constant-index scene. A one-meter optical path takes about 3.34 ns. Optical delay and fog attenuation are tracked separately: glass distance contributes to the delay but is not counted as fog.

03 · WHERE THE BIAS ENTERS

Beauty from the same photon structure.

Beauty render reconstructs the cached transmitted and first-surface reflected photon sheets in an HDR buffer. Remove angular spokes replaces the discretized triangle receiver with independently traced photon hits; it does not merely blur the same triangles. Angular cells remain available for inspecting why those spokes appear. The progressive receiver independently traces up to 512k source rays in short batches, deposits their floor hits with a normalized finite Gaussian kernel, and accumulates flux. It does not interpolate angular-cell triangles, so increasing its sample count resolves the receiver seams rather than concealing them with screen blur. Camera, gate and kernel changes reuse the hits; increasing the ray budget keeps existing hits and extends the sample population. A changed scene or IOR restarts tracing. The progress indicator distinguishes queued changes from active refinement. A zero kernel setting uses a one-pixel footprint, without extra world-space smoothing; it can look noisy. A fixed nonzero kernel converges to a smoothed result, not an unbiased pointwise solution. Editing emitted rays or kernel, selecting the photon receiver, or restarting photons holds the current animated pose and refines it automatically. Animate scene resumes geometry motion; the optical pulse remains independent. A separate soft screen-space filter handles the volume before exposure and tone mapping. The receiver uses the same traced flux / footprint area. Disable Beauty render to inspect the original schematic. Schematic rays: interior reveals the actual Snell segments between each entry and exit.

This dedicated browser experiment follows the idea behind RadianceLab’s fast hourglass preview. It is not the unbiased strategy 20, nor an exact port of strategy 32. Finite angular quadrature, clamped Jacobians, density caps, reconstruction and display exposure introduce bias. Glass shading uses analytic two-interface camera directions with screen-space radiance lookup and a procedural studio environment. Missing off-screen light, further reflected/TIR branches, full visibility and multiple scattering remain outside this preview.

04 · WHO DRAWS WHAT

Participating medium, drawn as Rive curves.

Three.js / WebGL draws the finite photon sheets, receiver and reflective/refractive glass. Medium density controls extinction; albedo controls the fraction scattered; Henyey–Greenstein anisotropy g controls the view-dependent forward/backward lobe. Glass paths contribute optical delay, but no fog. In Rive medium curves, the sheet mesh is hidden: the official Rive WebGL2 runtime draws a world slice using a pool of ordinary vector shapes. The curve mode remains a density diagnostic: photon track density controls their width, sideways sine displacement, or both. Moving the slice, gate or path-leg filter changes the sampled transport.

The curve field deposits actual traced paths with their angular flux, Fresnel transmission, source-side fog attenuation and optical delay into finite spatial/time bins. A small blur and logarithmic display response make a readable NPR encoding; these curves are not physical ray deflections or exact isophotes. Normalization stays fixed while the pulse moves. There is no framebuffer readback.

This scene is defined in browser code; it is not a general native RIVX file player or an official GPU Canvas export. Coloured emitters are RGB channels, not spectral dispersion.

05 · TWO INDEPENDENT CLOCKS

Move the glass. Watch the pulse reshape.

The dancing lenses and two-focus chain retrace their paths for each animation pose. The breathing shape is an analytical ellipsoid: intersection roots and surface normals come from its quadratic equation, so both refractions change with its shape.

Motion uses a lower angular resolution while playing; pausing rebuilds the selected finer resolution. This is a quasi-static sequence. Geometry moves on a seconds scale, while a pulse crosses the scene in nanoseconds. We freeze each pose during its light flight; moving-boundary Doppler effects and a fully space-time-coupled tracer are not implemented.