RIVX · representation laboratory

Keep the path. Draw the moment.

Orbit a retained 3D path set and slide its time window. A small pool of ordinary Rive shapes changes live—no image per angle, no frame per time step.

Official Rive · WebGL2Loading the local Rive runtime…
Drag to orbit · wheel to zoom
—visible Rive shapes
—retained path legs
—CPU submission ms
0frame images stored

The same world-space data is reprojected for every camera pose.

3D → ∿

A vector renderer has a useful job

Keep spatial and temporal logic outside the drawing backend. Turn selected structures into a compact set of paths, strokes and shapes that stay crisp as the canvas grows. Here, the official Rive runtime—not an imitation—draws all the geometry.

t ∩ [a,b]

One segment replaces many points

A beam's endpoints carry arrival times. Intersect that interval with the shutter window and interpolate the two cut positions. Points instead need many separate shapes. Compare the live counts at the same budget; overflow is reported, never silently claimed as full data.

.riv + data

Preserve what must remain editable

The .riv file is a reusable drawing pool. Camera and time remain host-controlled over retained world geometry. This is a bounded hybrid player, not a universal .rivx loader or a full glass renderer. Its four-color, hard-gated strokes are a schematic display; changing the light or material requires retracing the native cache.

What the counters measure and what remains limited

The CPU time includes projection, clipping, Rive node updates, artboard advance and draw submission. It excludes asynchronous GPU completion and is not a universal Rive performance limit. The drawing pool contains 384 shapes even when fewer are visible; invisible nodes are scaled to zero. Rendering is skipped while unchanged or suspended.

The example uses a fixed four-color palette, constant artboard-space stroke width, a rectangular temporal kernel and opaque strokes in fixed pool paint order. It does not solve camera visibility, scattering weights, medium extinction or refraction. Native path-cache colors are assigned to the nearest palette color. Sampling points is a display discretization, not a Monte Carlo estimator.

Native interchange: RIVX-PATHS-1 JSON stores paths with vertices[{position:[x,y,z],timeNs,color:[r,g,b]}]. Files stay local in this page. Camera pose and display knobs are not baked into the cache.