Skip to content

Graphics demo - split-screen chase loops

The escape that never resolves

Two cinematic endless near-escape split-screen loops - a snowmobile outrunning an avalanche and a surfer deep in a curling wave - each rendered with a pure-C# CPU ray tracer. Every visible motion is a real rigid-body plus fluid-proxy simulation stepped as a pure function of the frame index: no clock, no RNG in the render path, and the last frame seams to the first. The left panel is a real narrowed-FOV telescope (the optics genuinely zoom 3x, 10x, 20x); the right panel is the third-person cinematic chase.

Split-screen avalanche loop: telescope observer left, third-person chase right, live physics HUD
Avalanche - snowmobile on a 34 degree face

A snowmobile carves the fall line while a powder avalanche tears down behind. Gravity-along-slope, a Coulomb traction cap (mu drops from 0.55 to 0.16 on the ice patch, forcing a real fishtail-then-counter-steer recovery), aero drag, traction-limited drive, spring-damper suspension over hashed terrain. The tracked distance-to-front closes 42 to 16 to 5 m at the danger peak, then recovers to the opening geometry so the loop never resolves. Powder cloud and near-camera spray are composited overlays; the solids and their shadows are ray-traced.

Avalanche debug loop with projected physics vectors
Avalanche - debug (physics-overlay arrows)

The same shot with real simulation vectors projected into the frame, proving the motion is driven, not keyframed.

rider velocity traction drag / brake powder-front danger cone
Split-screen surf loop: telescope observer left, third-person chase right, live physics HUD
Surf - surfer on a traveling Gerstner wave

A surfer and board rigid body rides a trochoidal Gerstner wave (y = A * sin(kx - wt), dispersion w = sqrt(gk) giving a ~11.8 m/s phase speed). The wave phase-time completes a whole number of periods per loop, so the whole surface seams. Gravity-down-face, buoyancy, hydro-planing lift, drag (spiking in the deep pocket), board yaw and roll from rider lean drive it; the tracked distance-to-lip closes 9 to 4 to 2 m before a real bottom-turn counter-lean recovery. Foam and spray are overlays; the water is a low-reflectivity angle-dependent dielectric.

Surf debug loop with projected physics vectors
Surf - debug (physics-overlay arrows)

The same shot with the wave normal, hydro-lift, drag, sightline and lip-distance vectors projected from the live sim.

surfer velocity hydro lift drag wave normal

The telescope is real optics

The left panel's zoom is not a post-scale of the image. The pinhole camera's vertical FOV is narrowed via the thin-lens telescope relation FOV = 2 * atan(tan(FOV0/2) / z) with a 46 degree base and magnification z in {3, 10, 20}, so a 20x zoom captures a ~2.4 degree cone and the subject genuinely fills the scope because fewer world-degrees map across the panel. A circular vignette, black rim, tick-mark reticle, crosshair, chromatic edge fringe and zoom-scaled haze are composited on top, plus deterministic hand and tripod jitter that grows with magnification and fades to zero at the seam.

How it renders

Ray traced

Per-pixel primary ray, per-light shadow-ray visibility - shadows are never painted.

3 lights

Warm golden-hour sun, cool sky fill, snow or water environment bounce.

150 frames

Seamless ~6 s loop; state is a pure function of SetFrame(f) - no RNG, no clock.

604 x 348

Two 300x300 panels plus a label strip and physics HUD band.

Rendered with Parallel.For over scanlines. Avalanche renders at ~68 fps (~2 s/variant); surf is ~10x heavier (~2 fps, ~75 s/variant) because its Gerstner surface is tessellated into ~300 water columns scanned linearly per ray - a deliberately simple, dependency-free intersector with no BVH. The GIFs here are decimated to 75 frames to fit the page budget; the native renders are 150 frames.