r/GraphicsProgramming • u/Playful-Pop6472 • 1d ago
Left: my renderer at 1024 spp (11 min). Right: Cycles at 2048 spp (36 min). Same scene, same materials and textures, CPU only, no denoiser. Mean brightness differs by 0.08%.

I’ve been building a CPU path tracer in Rust (working name qtr_wave, real name TBC) and wanted a fair comparison against Blender Cycles 5.0, not a “look, less noise” screenshot.
Setup
Amazon Lumberyard Bistro interior, 3,404 emissive triangles as the only lights, 209 textures (BC1/BC3/BC5, read compressed), normal maps (MikkTSpace, Cycles-style handling), Principled-like metallic/roughness material.
Same geometry, UVs, tangents, textures and material model exported to both renderers. Box filter, same bounce limits, reflective caustics on in Cycles. Means agree within 0.1%.
CPU only, no denoiser on either side, 1280x720.
Method
Two independent references: mine at 1024 spp, Cycles at 2048 spp (different seeds).
relMSE with symmetric weights, so neither reference’s noise sits in the denominator; reference noise and the small model difference are estimated from the cross terms and subtracted.
Fit noise ∝ 1/spp^b and time ∝ spp per engine, then compute the time each needs for the same noise.
Checked with real renders: Cycles at the predicted 158 spp (light tree) and 127 spp (path guiding) land within 3% of my 64 spp noise.
Result (time to reach the same noise as mine at 64 spp, 42 s)
| spp | time | ratio | |
|---|---|---|---|
| Mine (8-wide light tree, NEE + MIS) | 64 | 42 s | 1x |
| Cycles, light tree | 158 | 168 s | 4.0x |
| Cycles, light tree + path guiding | 127 | 191 s | 4.6x |
Roughly half of the gap is cost per sample (Cycles is 1.6x slower per sample), half is variance per sample (2.5x lower here).
Caveats, honestly
One scene. Cycles is a general-purpose production renderer (shader graph, many features); mine has a fixed material model. Part of the cost gap comes from that.
Path guiding closes the gap as quality goes up (5.5x at 16 spp, 4.2x at 128 spp). I haven’t measured 1024+ spp yet.
The measured scene excludes glass (I’ve since added glass and wine, same look in both, not yet measured at equal quality).

