Differentiable Voronoi Ray Tracing Beyond Rasterization Speeds


TL;DR

A differentiable ray tracer for novel view synthesis that renders faster than most rasterized splatting — 623 FPS on Mip-NeRF 360, 3.2× the fastest prior ray tracer and 2.8× 3D Gaussian Splatting — with fisheye lenses, rolling shutter, and motion blur falling out of ray generation for free.

A camera ray walking cell to cell through the Voronoi diagram of a reconstructed garden scene, with a fisheye inset.
Fig 1.: The highlighted path is an actual camera ray traversing the scene's Voronoi diagram cell by cell; light blue regions are the projected footprints of the cells it visits. The main image has a shallow depth of field and the inset is a fisheye view of the same scene — both from the same trained representation, changing only the rays.

Rays or speed, but not both?

3D Gaussian Splatting made novel view synthesis real-time by borrowing the rasterization playbook: project every primitive, sort, blend. The field has been paying for it ever since. Fisheye and distorted cameras need modified projections, rolling shutter needs time-aware projection, depth of field needs extra passes — and recent methods bolt ray tracing back on top of the rasterizer to recover general image formation.

The general assumption is that rays give flexibility and rasterization gives speed. We think that trade-off is not inherent.

Our starting point is Radiant Foam’s insight: represent the scene as a Voronoi diagram, so a ray steps from cell to neighbouring cell through local adjacency instead of repeatedly intersecting a BVH. Rendering cost then depends only on how many cells each ray visits, not on how many primitives the scene contains — and profiling that renderer, three quarters of kernel time goes to neighbour search alone. So the method reduces to two goals: visit fewer cells, and make each visit cheaper.


Fewer cells: concentrate the opacity

A ray composites every cell it enters until transmittance runs out. Spread opacity across a wide shell of barely-opaque cells and each ray pays for dozens of composites. What we want instead is a thin, opaque surface: rays cross empty cells until they reach one opaque cell whose texture explains the colour, and terminate there.

opacity spread over a shell (Radiant Foam-style)
opacity concentrated near the surface (ours)
cell opacity (darker = more opaque) compositing weight of traversed cell camera ray termination

Drag the camera or click anywhere to aim the ray. Both panels trace the same ray through the same diagram and share one continuous opacity field; the right one concentrates it into a thin surface band, so the ray saturates sooner. Illustrative 2D sketch, not a rendering of either method.

Training pushes the representation toward the right panel. A distortion loss concentrates each ray’s compositing weight at a single depth, and a scale-invariant exponential density makes small and large cells optimize at the same rate. Opacity comes out strongly bimodal — cells are either near-transparent or near-opaque, with 24 % above α = 0.9 against Radiant Foam’s 4 %. Radiant Foam instead strands 44 % of its cells in the semi-transparent middle, and every one of those has to be composited. Ours traverse a mean of 46.1 cells instead of 66.9, a 31 % reduction, using roughly half as many cells per scene.

Garden rendering with two heat maps comparing cells traversed per ray for VoroTracing and Radiant Foam.
Fig 2.: Cells traversed per ray, in image space, on the same held-out Garden view and colour scale. Cost concentrates on foliage and silhouettes and is low on smooth surfaces. The mean drops from 73 to 49 cells per ray through a broad reduction across the image, not a few isolated easy pixels.

Cheaper visits: octahedral textures instead of spherical harmonics

The other cost at every ray–cell interaction is appearance. Degree-3 spherical harmonics mean loading 48 coefficients per cell, and SH can only vary with direction — spatial detail within a single view needs ever more, ever smaller cells, until each cell is seen by one ray from one direction, overfits, and leaves the geometry under-constrained.

We give each cell a tiny 8×8 RGB texture instead, indexed by the direction from the cell’s site to where the ray pierces the cell boundary. Voronoi cells are convex, so that direction identifies the boundary point uniquely, and an octahedral mapping unfolds the sphere of directions onto the square with low distortion and no polar singularities.

Three-panel diagram of the octahedral appearance lookup.
Fig 3.: (a) A camera ray crosses a cell; the direction from the site to the hit point selects the appearance. (b) That direction is normalized onto the unit octahedron. (c) The octahedron unfolds into the square texture, upper hemisphere in the central diamond, lower hemisphere in the corners.

The demo below sweeps that direction around a tilted great circle. As it crosses the equator, watch the sampled point slide out of the central diamond and into the unfolded corners — continuously, with no seams and no poles.

direction from the cell site
unfolded octahedral texture
8×8 RGB texels
sampled colour

Drag the arrow tip to take over (drag elsewhere to rotate the view), or drag directly in the texture — the two panels stay in sync.

A second per-cell texture, indexed by view direction, adds a small residual for highlights and reflections, regularized to stay subordinate to the surface texture. Together the two bilinear fetches load a fixed 24 values in place of 48 SH coefficients, and a single cell can now show spatial detail within one view. This texture block is the largest single quality contribution in our ablations: PSNR 28.23 → 28.98 dB, LPIPS 0.280 → 0.235, while also raising throughput from 475 to 623 FPS.


Training without heuristics

No pruning, no densification, no opacity resets, no resolution schedules. Following EDGS we triangulate a dense point cloud from RoMa v2 correspondences, subsample it to a fixed budget of 2M sites, and optimize positions, densities, and both texture maps for 20k steps. The cell set never changes; cells and adjacency are rebuilt on the GPU as sites move. Training takes 33–50 minutes per scene on a single RTX 5090.

What makes the heuristics unnecessary is a scale-invariant density. Under softplus, the density a cell needs to reach a given opacity scales inversely with the ray’s segment length through it, while the gradient on that density scales linearly with it — so a small cell needs a higher density and receives a proportionally weaker gradient to get there. Parameterizing density as an exponential, σ = exp(ρ), and optimizing ρ makes the segment length cancel exactly, so two cells of equal opacity get identically scaled gradients whatever their size.

Without it, cells that should be empty instead settle at a low but non-zero density and objects keep a persistent haze around them, along with floaters. From a dense initialization this can run away in free space near the camera, and once those cells turn opaque, early ray termination starves everything behind them of gradient and the optimization cannot recover.

Stump scene after 1000 steps: softplus is hazy, exponential is sharp, next to ground truth.
Fig 4.: The same held-out stump view after only 1000 steps. Softplus is still hazy and washed out; the scale-invariant exponential has already recovered sharp geometry and colour.

The distortion weight is then the single speed–quality knob: stronger concentration thins the surfaces and terminates rays sooner.


Results

Mip-NeRF 360 on an RTX 5090. The timed region deliberately includes per-view camera setup and the initial nearest-cell query, making it stricter than the upstream benchmarks of Radiant Foam and 3DGRT.

rasterized ray-traced *VoroTracing reported, not quality-matched

Hover or tap a point. Higher is better for PSNR/SSIM; lower is better for LPIPS, but the axis is flipped so better methods are always higher.

VoroTracing reaches 28.98 dB PSNR / 0.848 SSIM / 0.235 LPIPS at 623 FPS — 3.2× Radiant Foam, 2.8× 3DGS, and 2.1× the fastest prior baseline. Where we do not win: outdoors 3DGS is still 0.71 dB ahead and Triangle Splatting gives the best LPIPS. Indoors it reverses, and at 31.42 dB we have the best indoor PSNR of any real-time method in the comparison.

The renderer and the representation are not separable contributions. Our inference stack — Morton cell ordering, warp-coherent 4×8 ray tiling, and skipping texture evaluation for cells that cannot affect the colour — takes the base renderer from 230 to 623 FPS on our representation, a 2.7× gain at no measurable cost in quality. The same stack applied to Radiant Foam’s own representation gets only 194 to 384 FPS. The gap is the point: as traversal and scheduling overheads fall away, appearance evaluation takes a larger share of the frame, and that is exactly what the octahedral textures and the concentrated opacity attack.

Cropped qualitative comparison between Radiant Foam, PowerFoam, 3DGS, ours, and ground truth.
Fig 5.: Held-out crops of regions observed by few training images, where our fixed 2M-cell budget is most visible: we preserve more structure than Radiant Foam but stay less detailed than 3DGS. Red circles mark representative artifacts.

What rays buy you

Image formation lives entirely in ray generation, so non-pinhole cameras and lens effects need no modified projection maths and no extra passes. Everything below renders the same trained representation, changing only the rays sent to the renderer.

(a) Pinhole morphing to fisheye
(b) Rolling shutter, sweeping readout
(c) Motion blur, sweeping exposure
(d) Interactive on an iPhone 16
Fig 6.: The mobile clip runs the same uncompressed 2M-site Garden model as the desktop evaluation, ported to Metal compute kernels, at roughly 40 FPS. Videos have been compressed to reduce file size.

The renderer also runs in the browser over WebGPU, on the same fp16 inference path, with a live pinhole↔fisheye toggle. It renders entirely on your own GPU — a pre-trained scene file is downloaded once and then traced locally, with nothing computed on a server. The frame rate you get is therefore your machine’s, not the RTX 5090 figures quoted above.

Open the live WebGPU viewer →

Needs Chrome or Edge 113+, or Safari 26+, and a reasonably capable GPU for interactive rates. Scenes are uncompressed 2M-site models and load in full before rendering starts, so each is a ~1.7 GB download.


Limitations

The fixed cell budget is the main constraint. Where few training views observe a region, dense matching supplies too few reliable sites, and since the cell set never changes the model cannot allocate capacity there later; an adaptive strategy could. None of this argues that adaptive cell insertion is unimportant — better densification should improve future systems. The claim is only that it should not be necessary to get high-quality reconstructions out of a well-posed representation.

Separately, fisheye and rolling shutter keep one ray per pixel, but depth of field and motion blur submit several, so the 623 FPS pinhole number does not carry over to them.

A natural next step is explicit surface extraction: a Voronoi diagram with surface-concentrated opacity and surface-indexed textures is a promising starting point for a textured mesh that drops into standard rendering pipelines.


BibTeX

@article{taveira2026vorotracing,
  title={Differentiable Voronoi Ray Tracing Beyond Rasterization Speeds},
  author={Bernardo Taveira and Carl Lindstr{\"o}m and Joakim Johnander and Fredrik Kahl},
  journal={arXiv preprint arXiv:2608.17682},
  year={2026}
}