Differentiable Voronoi Ray Tracing Beyond Rasterization Speeds
VoroTracing is a differentiable Voronoi ray tracer for real-time novel view synthesis. Ray-based rendering expresses non-pinhole effects such as distortion, rolling shutter, and depth of field naturally, but is generally assumed too slow to compete with rasterization. We analyze the factors that govern throughput in differentiable Voronoi ray tracing (traversal length, per-cell work, and memory locality) and co-design the scene representation, the optimization, and the GPU execution around those costs.
Compact octahedral appearance textures cut memory traffic, surface-concentrated opacity promotes early ray termination, and the fixed-budget representation is optimized without pruning or densification. On Mip-NeRF 360, VoroTracing renders at 623 FPS on an RTX 5090, giving 3.2× the throughput of the fastest prior ray-based method and 2.8× that of 3D Gaussian Splatting at competitive reconstruction quality.
This repository contains the training, evaluation, and viewing code for the paper. Voronoi diagram construction is provided by Paragram.
The code requires an NVIDIA GPU with CUDA 12.x and NVCC. The CUDA extension is compiled lazily on first use, which takes a few minutes the first time.
Clone with submodules (external/eigen and external/cubql are required to build):
git clone --recurse-submodules https://github.com/zenseact/VoroTracing.gitIf you already cloned without them:
git submodule update --init --recursiveThen install the environment with uv from the repository root:
uv syncUseful build environment variables:
MAX_JOBS: parallel compile jobs (defaults to 10).VERBOSE=1: print the full build log.DEBUG_CUDA=1: compile with debug CUDA flags.PROFILE_CUDA=1: compile with line info for profiling.USE_PRECOMPILED_HEADERS=1: enable precompiled headers.
Datasets are read in COLMAP format and are expected under data/:
data/mipnerf360/garden/images
data/mipnerf360/garden/images_2
data/mipnerf360/garden/images_4
data/mipnerf360/garden/sparse/0
Downsampled image folders (images_2, images_4, images_8) are used directly: indoor scenes train at images_2 and outdoor scenes at images_4. Every 8th image is held out as the test split, matching the standard Mip-NeRF 360 protocol.
Train a Mip-NeRF 360 outdoor scene:
uv run python train.py vorotracing-outdoor --dataset-config.data-path data/mipnerf360 --dataset-config.scene gardenUse vorotracing-outdoor for garden, bicycle, and stump; use vorotracing-indoor for bonsai, counter, kitchen, and room. The two configs differ in training resolution and appearance regularization.
The interactive viewer attaches to the running job by default and serves on http://localhost:7007, so you can watch the scene converge. Pass --no-viewer for headless runs, and --wandb to log metrics and validation renders to Weights & Biases.
Outputs are written to output/<experiment-name>_<timestamp>/ and contain model.pt and the resolved config.yaml.
Run uv run python train.py vorotracing-outdoor --help to see every option.
Evaluate all checkpoints found under an output directory:
uv run python benchmark_eval.py --base-dir output --dataset-dir data/mipnerf360 --csv results.csvThis walks every model.pt under --base-dir and reports PSNR, SSIM, LPIPS, LPIPS-3DGS, milliseconds per frame, and FPS for each. The scene name and evaluation resolution are read from each checkpoint's config, so a single run can cover all seven scenes at once; test sets are loaded once and shared across checkpoints.
The inference settings used in the paper are exposed as flags, with the paper defaults already in place:
--quantize {fp16,q8}: attribute quantization (defaultfp16).--no-sort-morton: disable Morton-code reordering of cells before inference.--no-use-warp-perm: disable warp-coherent 4×8 screen-space tiling.--weight-threshold: transmittance threshold for early ray termination (default0.01).--cell-skip-threshold: per-cell contribution gate, fp16 only (default1e-3).
Two viewers are available.
Web viewer. Explore the pretrained scenes in the browser, no install required: research.zenseact.com/publications/vorotracing/viewer
Local viewer. Launch the viser-based viewer on a local checkpoint:
uv run python viewer.py --ckpt-dir output/vorotracing-outdoor_20260819_120000/model.ptIt serves on http://localhost:7007 and exposes RGB and depth render modes, the primal point cloud, and per-cell inspection overlays. The config YAML next to the checkpoint is picked up automatically.
If you find this work useful, please consider citing:
@article{taveira2026vorotracing,
author = {Taveira, Bernardo and Lindstr{\"o}m, Carl and Johnander, Joakim and Kahl, Fredrik},
title = {Differentiable Voronoi Ray Tracing Beyond Rasterization Speeds},
journal = {arXiv preprint arXiv:2608.17682},
year = {2026}
}This work builds on Paragram for GPU Voronoi diagram construction, cuBQL for BVH queries, Eigen, and nerfview with viser for the interactive viewer.
Apache License 2.0. See LICENSE.