// worklog · 2026-08-09
Multiple importance sampling, measured
Why my glossy spheres were noisy at grazing angles — and what a 2.3× variance reduction actually costs per sample.
The renders looked fine head-on and fell apart at grazing angles. Glossy spheres near the edge of frame picked up a specific kind of high-frequency noise that more samples barely touched — the tell that you are fighting variance, not sample count.
The setup
A Cornell-box scene, glossy spheres, 512 samples per pixel. Two estimators available at every bounce: sample the light, or sample the BSDF. Each one is excellent in exactly the situation where the other is terrible.
Light sampling wins on small, bright sources and a rough surface. BSDF sampling wins on a tight specular lobe, where only a narrow band of directions carries meaningful energy. At grazing angles on a glossy sphere you land between the two, and either estimator alone produces a high-variance mess.
What MIS does
Multiple importance sampling takes both estimators and weights their contributions by how likely each strategy was to have produced that sample — the power heuristic, in my case with β = 2. Samples land where either strategy is strong, and the weighting suppresses the fireflies that come from a strategy sampling a direction it had no business sampling.
The numbers
At equal sample count, MIS cut variance by 2.3× against the naive BSDF-only estimator on this scene. That is the headline, but it is not the interesting part.
The interesting part is the cost. Every MIS sample evaluates both PDFs — the light PDF for a BSDF-sampled direction and vice versa. On this scene that is roughly 18% more work per sample. So the honest framing is not "2.3× less variance" but "2.3× less variance for 1.18× the cost per sample," which still comes out well ahead on an equal-time basis.
Equal-time is the comparison that matters, and it is the one most write-ups skip.
What surprised me
The win is heavily scene-dependent. On a scene with one large area light and mostly diffuse surfaces, MIS bought almost nothing — light sampling was already near-optimal everywhere, and I paid the extra PDF evaluation for no reduction in variance. The 2.3× is a fact about this scene, not about MIS.
Next
BVH construction, then a profiling pass. Traversal currently dominates the frame time badly enough that renderer-level improvements are hard to measure cleanly — fixing that comes before the WebGPU port.