Neural Ray Tracing β Radiance Cache
The light-transport analog of the neural physics engine thesis: keep visibility and direct lighting analytic, learn only the indirect transport with a tiny tied MLP. One analytic ray + next-event estimation + a network lookup replaces the many-bounce random walk after the first hit.
How it was done
Render decomposition: L = emitted + direct(analytic) + indirect(learned).
- Ground truth: a small PyTorch path tracer
(
engine3d/raytrace.py) renders high-spp references and splits each pixel into emitted / direct / indirect components. - Training data: first-hit surface points + normals paired with the path-traced indirect radiance at those points.
- The cache (
engine3d/neural_rt.py): one tiny MLP shared across the whole scene (the tied-embedding structure used everywhere in this project) maps (hit point, normal) β indirect RGB. - Composition: at render time, trace one analytic primary ray, add analytic direct lighting (NEE), and look up the cache for the rest.
- Evaluation (
experiments/w9_neural_radiance_cache.py): PSNR on a held-out camera view, compared against an equal-cost few-spp path trace, plus the spp the baseline needs to match the neural render.
experiments/w11_world_lighting.py applies the same recipe to bake a
world ambient/GI field (world_light.pt) over the voxel world β this is
the "neural GI" used live in the
Neural World demo Space,
parsed in-browser by pt_loader.js.
Checkpoints
| file | net | consumed by |
|---|---|---|
experiments/radiance_cache.pt |
indirect radiance cache MLP | w9_neural_radiance_cache.py renders |
experiments/world_light.pt |
world ambient/GI field | Neural World demo (browser) |
Validation
Reproduce
python experiments/w9_neural_radiance_cache.py # trains + renders comparison
python experiments/w11_world_lighting.py # bakes world_light.pt
Inference Providers NEW
This model isn't deployed by any Inference Provider. π Ask for provider support

