A renderer that doesn't sample.
It solves.
Noise-free CPU global illumination using deterministic surfel radiosity on signed distance fields.0.5 MB standalone binary. Three dependencies.


Radiosity died in the 1990s because it needed meshing.
Signed distance fields don't have meshes. So it deserves a second look — and with no GPU and no neural denoiser allowed, the calculus inverts.
Classical Polygonal Radiosity
Classical radiosity (Goral et al., 1984) produced beautiful, completely noise-free, view-independent global illumination. It lost to path tracing for one reason: it needed every surface subdivided into well-conditioned planar patches.
- Fragile automatic meshing algorithms
- Topological singularities & light leaking at T-junctions
- Quadratic matrix explosion on complex polygon models
Interflect: Meshless SDF Radiosity
An SDF has no mesh to subdivide. Its surface is the zero level set, and any point in space projects onto it by Newton iteration along the gradient in a handful of steps.
- Zero Meshes: Patches generate directly at any density
- No Topological Seams: Analytic continuity of distance fields
- Bit-Identical: Low-discrepancy Halton sequences replace RNG
Nobody revisited radiosity because from 1995 onward everyone moved to GPUs, where Monte Carlo plus a neural denoiser is unbeatable.Refuse the GPU and refuse the denoiser, and the calculus inverts.
The 5-Stage Pipeline
How Interflect turns mathematical level sets and pure calculus into deterministic, converged radiance without throwing a single random ray.
Analytic SDF & Binned-SAH BVH
Scene objects are exact mathematical distance functions: spheres, capsules, boxes, cylinders, cones, and tori with constructive solid geometry (CSG).
Newton Surfel Projection
A deterministic Halton low-discrepancy point set in space is projected onto the SDF zero level set via Newton iteration along the gradient vector.
Analytic Closed-Form LTC Lighting
Area lights are integrated in closed form using Lambert's 1760 polygon formula (identity case of Linearly Transformed Cosines). Shadows are cone-traced.
Sparse CSR Transfer Matrix
Disc-to-disc Nusselt-analog form factors between surfels and normal-bucketed clusters, with cone-traced visibility, cached into a sparse Compressed Sparse Row matrix.
Jacobi Radiosity Solve
Jacobi iteration on the cached transfer matrix. Each bounce is simply one sparse matrix-vector multiplication until residual convergence.
The View-Independence Payoff: --turntable 12
Because the radiosity solve is view-independent, a new camera pays only the gather pass. Orbiting a scene solves global illumination once in 390 ms, then renders each extra camera frame in just 80 ms.
What the Radiosity Solve Contributes
Inspect the light transport. In --mode direct, shadows are pitch-black. Everything the human eye reads as fill light, ambient occlusion, and color bleed arrives strictly from the solve.




The Converged Solution
Combines closed-form LTC area lights with 12–16 Jacobi bounces on the surfel form-factor matrix. Because distance fields don't sample, the result has zero high-frequency grain.
$ interflect render scenes/alcove.rad -o beauty.pngZero Radiosity Fill
Renders without the radiosity solve. Only direct rays from the area light emitters are computed. Shadows cast by the cone tracer are unlit and harsh. The difference between direct and beauty is mathematically exact.
$ interflect render scenes/alcove.rad -o direct.png --mode directPure Interreflection
Subtracts direct illumination to isolate the radiant transfer matrix. You see only the light that bounced off surfels into other surfels.
$ interflect render scenes/alcove.rad -o indirect.png --mode indirectAnalytic Geometry Vocabulary
Interflect's vocabulary consists of pure primitives: spheres, boxes, capsules, cylinders, cones, and tori. Drill a hole in a sphere with CSG: subtract_sphere: [[0, 1.2, 0], 0.4] without re-tessellation or boolean rebuilding!
$ interflect render scenes/product.rad -o product.pngMeasured, not claimed.
Benchmarked against a converged path trace of the identical scene. Reproducible with ./bench.sh.
| Scene Name | Interflect | CPU Path Tracer | Speedup | SSIM Accuracy | Energy Ratio |
|---|---|---|---|---|---|
| sphere_only | 1,381 ms | 26,136 ms | 18.9× | 0.850 | 1.090 |
| box_only | 1,757 ms | 39,115 ms | 22.3× | 0.839 | 1.066 |
| high_albedo | 1,395 ms | 31,190 ms | 22.4× | 0.820 | 1.049 |
| cornell | 1,613 ms | 28,364 ms | 17.6× | 0.806 | 1.050 |
Draftsman note on SSIM: Read SSIM against a ceiling of 0.892, not 1.0. The reference path tracer is stochastic, and SSIM penalises its own residual noise even against a perfect image. Total energy lands within 4.9–9.0% of ground truth.
Same file on 1 or 12 threads. Verified in CI.
Floating-point order is strictly governed. Halton sequences replace random numbers, and Jacobi iteration guarantees that every thread evaluates light independently without reduction races.27 automated regression test scenes enforce bit-identical MD5 checksums on every single commit across 1, 4, 8, and 12 threads.
$ interflect render scenes/cornell.rad -o a.png -t 1
$ interflect render scenes/cornell.rad -o b.png -t 12
$ md5sum a.png b.png
766c77aeb5d34275625765212ebaa9b6 a.png
766c77aeb5d34275625765212ebaa9b6 b.png
[PASS: HASHES IDENTICAL]Scenes are plain text. You never touch Rust.
Define geometry, materials, and area lights with zero boilerplate. CSG boolean operations work right out of the box.
Web Scene Builder
Drag shapes in dual front and top views, tweak dimensions, and adjust colors with live sliders. Runs entirely in your browser with zero dependencies—no server, no 3D experience needed.
render { width: 800, height: 600, surfels: 20000, bounces: 16 }
camera { pos: [0, 1.8, 6.0], look: [0, 0.7, 0], fov: 38 }
material "red" { albedo: [0.70, 0.15, 0.12], roughness: 0.8 }
sphere { center: [0, 0.6, 0], radius: 0.6, mat: "red" }
box { center: [1.6, 0.5, 0], size: [1, 1, 1], round: 0.08, mat: "red" }
capsule { a: [0,0,0], b: [0,1.3,0], radius: 0.25, mat: "red" }
torus { center: [0, 0.12, 0], major: 0.45, minor: 0.12, mat: "red" }
# Drill a hole with CSG -- no polygon rebuild, no re-tessellation
sphere { center: [0,1,0], radius: 0.5, mat: "red",
subtract_sphere: [[0,1.2,0], 0.4] }
# Analytic area light emitter (Lambertian LTC closed form)
light { verts: [[-1.5,4,-1.5],[1.5,4,-1.5],[1.5,4,1.5],[-1.5,4,1.5]],
emit: [13,12.5,11.5] }The Limits of the Formulation
Every rendering architecture is a compromise. Marketing pages dress strengths as negatives; serious systems software states its boundaries plainly. Here is what Interflect cannot do today.
Analytic SDF Primitives Only
Scene objects must be expressed as exact mathematical distance functions (spheres, capsules, boxes, cylinders, cones, tori) and CSG operations. There is no importer for .obj, .gltf, or polygon meshes.
No Caustics & No Refraction
Interflect solves diffuse-to-diffuse interreflection using Nusselt disc form factors. Specular transmission, Snell refraction through glass or water, and focused caustic light patterns are outside this formulation.
Surfel radiosity evaluates diffuse bounce, not curved dielectric transmission.No Participating Media
Light transfer coefficients assume unobstructed travel through clear air or vacuum. Volumetric fog, smoke, atmospheric dust scattering, and subsurface scattering (SSS) are not simulated.
Surfel-to-surfel rays do not scatter through medium volumes.Reflections Attenuated, Not Blurred
Non-zero material roughness scales specular highlight intensity down rather than convolving across a multi-sample BRDF lobe. Glossy reflections are sharp or faded, not physically blurred.
A deliberate speed tradeoff to preserve zero-sample determinism.Penumbra Banding Artifact
Cone-traced soft shadows across grazing angles can produce subtle discrete stepped bands near occluder silhouettes where the analytical sphere marcher crosses distance threshold boundaries.
Documented in TESTING.md; visible at extreme light grazing angles.Static Geometry for Radiosity
Orbiting a camera costs only 80 ms/frame because the radiosity solve is view-independent. However, moving geometry or area lights alters form factors and requires a matrix re-solve.
Ideal for architectural visualization & product turntables.When to use Interflect vs a Path Tracer
If your scene requires refractive caustics on a million-polygon mesh, use a path tracer. If your scene requires instant, bit-identical, noise-free global illumination on analytic geometry without a GPU or neural denoiser, Interflect was designed specifically for you.
Standing on the shoulders of giants.
Almost nothing in this renderer is original. The one novel piece is the combination:meshless surfel placement on an SDF feeding a classical radiosity solve. Every component was solved decades before there was a reason to render with it.
Johann Heinrich Lambert · Photometria
The closed form for a polygon's cosine-weighted solid angle. A modern path tracer spends hundreds of shadow rays approximating what he solved analytically 266 years ago.
Wilhelm Nusselt · Thermal Radiation Form Factors
The disc-to-disc geometric form factor at the heart of Interflect's transfer matrix. A heat-transfer physicist working on thermal radiation who never saw a digital computer.
John Halton · Low-Discrepancy Point Sets
The deterministic sequence that seeds every surfel in space. Choosing this over a pseudo-random number generator is precisely why Interflect is bit-identical across thread counts.
Cindy M. Goral, Kenneth E. Torrance, Donald P. Greenberg, Bennett Battaile
Modeling the Interaction of Light between Diffuse Surfaces. Radiosity itself. This renderer is an argument about their landmark paper.
John C. Hart · Sphere Tracing
Every primary and shadow ray. Sphere tracing requires only a bound on the derivative, which is why it survives creased and non-differentiable CSG surfaces.
Eric Heitz, Jonathan Dupuy, Stephen Hill, David Neubelt · LTCs
Linearly Transformed Cosines: the modern generalization of Lambert's result for real-time and analytical area light integration with microfacet distributions.
Inigo Quilez · iquilezles.org
Every signed distance primitive, cone-traced soft shadows, and tone-mapping formulations. Published freely for decades, and the primary reason SDF rendering is accessible to anyone today.
Built by Arunvpp
Product Engineer building dynamic web applications, mobile systems, and open-source tools.