Introduction

Path tracing with naive sampling strategies suffers from high variance this causes effects like fireflies, noise, and slow convergence. While Multiple Importance Sampling (MIS) is the standard solution, choosing which techniques to combine and how to budget samples remains poorly documented outside research papers.

This article compares different MIS strategy combinations across four test scenes, measuring both render time and perceptual error (FLIP metric). The goal: understand when the added complexity of techniques like split-lobe BSDF sampling or environment map sampling actually pays off.

Key question: Does combining more sampling strategies always improve results, or do diminishing returns make simpler approaches more practical?

Background: Multiple Importance Sampling

The Variance Problem

Consider rendering a scene with a small, bright light source. BSDF sampling (shooting rays based on material properties) will rarely hit the light by chance, producing mostly black samples with occasional extreme values (fireflies). Light sampling (shooting rays directly at lights) solves this but fails for glossy reflections where the BSDF is highly directional.

Neither strategy alone handles both cases efficiently.

The MIS Solution

MIS combines multiple sampling strategies with optimal weights that minimize variance. Two main heuristics exist:

Balance Heuristic

$$ w_1(x) = \frac{n_1 \cdot p_1(x)}{n_1 \cdot p_1(x) + n_2 \cdot p_2(x)} $$

Weights each sample by its relative "reliability", strategies that would have sampled this direction with high probability get more credit.

Why use it: Provably optimal in minimizing variance. Safe default choice with solid theoretical guarantees.

Power Heuristic (β=2)

$$w_1(x) = \frac{(n_1 \cdot p_1(x))^2}{(n_1 \cdot p_1(x))^2 + (n_2 \cdot p_2(x))^2}$$

Raises PDFs to power β before computing weights, which more aggressively suppresses poorly-performing techniques.

Why use it: Often reduces variance 5-20% vs balance in practice by penalizing weak samples harder. Industry standard (used in PBRT, Mitsuba, most production renderers). Minimal downside, rarely performs worse than balance.

The crucial insight: Both heuristics automatically adapt to scene conditions. When BSDF sampling works well, it gets high weight. When light sampling is better, it dominates. Neither strategy can "break" the estimate.

Sampling Techniques Tested

Core Strategies

BSDF Sampling: Sample directions based on material BRDF/BTDF. Works well for glossy reflections and diffuse surfaces, but poorly for small/distant light sources.

Light Sampling (Next Event Estimation): Explicitly sample light sources each bounce. Excels with small emitters, struggles with large area lights or environment lighting.

Environment Sampling: Sample the environment map as an area light. Essential for outdoor scenes or dominant distant lighting, but adds overhead.

Split-Lobe BSDF Sampling

Materials like GGX have distinct diffuse and specular lobes with very different PDF shapes. Unified BSDF sampling must compromise between them. Split-lobe sampling treats them as separate techniques:

This should reduce variance for materials with strong lobe separation (rough metals, coated surfaces) but adds overhead.

Experimental Methodology

Test Scenes

Scene 1: Veach MIS (Classic MIS test case)

Scene 2: Sponza (Architectural interior)

Scene 3: Bistro Exterior (Outdoor urban scene)

Scene 4: Bistro Interior (Complex indoor lighting)

Each scene stresses different aspects: Veach validates correctness, Sponza tests indirect lighting, Bistro tests real-world complexity.

Evaluation Metrics

Render Time: Wall-clock time to render

FLIP Error: Perceptual image difference vs reference (4096 SPP ground truth rendered in RTXPT)

MIS Weighting

All tests use the power heuristic (β=2) for combining techniques. When combining 3+ strategies (BSDF + Light + Env), each sample is weighted by:

$$w_i(x) = \frac{(n_i \cdot p_i(x))^2}{\sum_j (n_j \cdot p_j(x))^2}$$

Where $i$ ranges over all active sampling techniques for that path vertex.

Strategy Combinations Tested

We test 8 configurations per scene:

Baseline

Two-Technique MIS

Split-Lobe Variants (Equal SPP)

Predictions

Before analyzing results, here are my hypotheses:

1: BSDF + Light will dominate Veach and Bistro Interior (small emitters)
2: Environment sampling will show large gains in Sponza and Bistro Exterior, minimal elsewhere
3: Split-lobe will reduce variance for rough metals in Bistro scenes but add overhead in Veach
4: Equal-cost split-lobe will rarely justify its complexity vs unified BSDF

Results and Analysis

Reference
Veach Reference
Technique
Rendered Output
FLIP Error Map
Time
FLIP
BSDF Only
BSDF Only
FLIP
Time
Run 1: 2.63ms
Run 2: 2.56ms
Run 3: 2.72ms
Average: 2.64ms
FLIP
Mean: 0.150
Median: 0.350
Q1: 0.136
Q3: 0.581
BSDF + Light
BSDF+Light
Best
FLIP
Time
Run 1: 7.54ms
Run 2: 7.60ms
Run 3: 7.56ms
Average: 7.57ms
FLIP
Mean: 0.120
Median: 0.288
Q1: 0.108
Q3: 0.503
BSDF + Env
BSDF+Env
FLIP
Time
Run 1: 2.67ms
Run 2: 2.77ms
Run 3: 2.58ms
Average: 2.67ms
FLIP
Mean: 0.149
Median: 0.350
Q1: 0.136
Q3: 0.580
BSDF + Light + Env
All
FLIP
Time
Run 1: 5.22ms
Run 2: 5.32ms
Run 3: 5.30ms
Average: 5.28ms
FLIP
Mean: 0.120
Median: 0.288
Q1: 0.108
Q3: 0.503
Split-Lobe BSDF
Split BSDF
FLIP
Time
Run 1: 1.69ms
Run 2: 1.86ms
Run 3: 1.90ms
Average: 1.82ms
FLIP
Mean: 0.160
Median: 0.383
Q1: 0.153
Q3: 0.594
Split + Light
Split+Light
FLIP
Time
Run 1: 4.92ms
Run 2: 5.14ms
Run 3: 4.99ms
Average: 5.02ms
FLIP
Mean: 0.120
Median: 0.293
Q1: 0.108
Q3: 0.505
Split + Env
Split+Env
FLIP
Time
Run 1: 1.79ms
Run 2: 1.91ms
Run 3: 1.94ms
Average: 1.88ms
FLIP
Mean: 0.160
Median: 0.383
Q1: 0.153
Q3: 0.594
Split + Light + Env
Split All
FLIP
Time
Run 1: 5.06ms
Run 2: 5.31ms
Run 3: 5.11ms
Average: 5.16ms
FLIP
Mean: 0.120
Median: 0.293
Q1: 0.108
Q3: 0.503
Reference
Sponza Reference
Technique
Rendered Output
FLIP Error Map
Time
FLIP
BSDF Only
BSDF Only
FLIP
Time
Run 1: 15.73ms
Run 2: 16.26ms
Run 3: 15.67ms
Average: 15.89ms
FLIP
Mean: 0.640
Median: 0.828
Q1: 0.634
Q3: 0.954
BSDF + Light
BSDF+Light
FLIP
Time
Run 1: 19.73ms
Run 2: 20.05ms
Run 3: 19.64ms
Average: 19.81ms
FLIP
Mean: 0.639
Median: 0.827
Q1: 0.632
Q3: 0.953
BSDF + Env
BSDF+Env
Best
FLIP
Time
Run 1: 27.94ms
Run 2: 27.84ms
Run 3: 28.01ms
Average: 27.93ms
FLIP
Mean: 0.592
Median: 0.741
Q1: 0.573
Q3: 0.865
BSDF + Light + Env
All
FLIP
Time
Run 1: 33.00ms
Run 2: 33.06ms
Run 3: 32.93ms
Average: 33.00ms
FLIP
Mean: 0.590
Median: 0.738
Q1: 0.571
Q3: 0.862
Split-Lobe BSDF
Split BSDF
FLIP
Time
Run 1: 21.58ms
Run 2: 21.51ms
Run 3: 21.71ms
Average: 21.60ms
FLIP
Mean: 0.607
Median: 0.769
Q1: 0.591
Q3: 0.901
Split + Light
Split+Light
FLIP
Time
Run 1: 23.60ms
Run 2: 23.54ms
Run 3: 23.65ms
Average: 23.60ms
FLIP
Mean: 0.606
Median: 0.767
Q1: 0.589
Q3: 0.898
Split + Env
Split+Env
FLIP
Time
Run 1: 41.18ms
Run 2: 41.27ms
Run 3: 41.13ms
Average: 41.19ms
FLIP
Mean: 0.585
Median: 0.733
Q1: 0.565
Q3: 0.860
Split + Light + Env
Split All
FLIP
Time
Run 1: 41.68ms
Run 2: 41.53ms
Run 3: 41.63ms
Average: 41.63ms
FLIP
Mean: 0.492
Median: 0.608
Q1: 0.446
Q3: 0.744
Reference
Bistro Exterior Reference
Technique
Rendered Output
FLIP Error Map
Time
FLIP
BSDF Only
BSDF Only
FLIP
Time
Run 1: 70.83ms
Run 2: 70.45ms
Run 3: 70.43ms
Average: 70.57ms
FLIP
Mean: 0.492
Median: 0.618
Q1: 0.453
Q3: 0.766
BSDF + Light
BSDF+Light
FLIP
Time
Run 1: 77.22ms
Run 2: 77.75ms
Run 3: 77.40ms
Average: 77.46ms
FLIP
Mean: 0.491
Median: 0.616
Q1: 0.451
Q3: 0.764
BSDF + Env
BSDF+Env
Best
FLIP
Time
Run 1: 86.90ms
Run 2: 87.50ms
Run 3: 87.10ms
Average: 87.17ms
FLIP
Mean: 0.466
Median: 0.578
Q1: 0.426
Q3: 0.723
BSDF + Light + Env
All
FLIP
Time
Run 1: 103.67ms
Run 2: 103.22ms
Run 3: 103.29ms
Average: 103.39ms
FLIP
Mean: 0.464
Median: 0.576
Q1: 0.423
Q3: 0.722
Split-Lobe BSDF
Split BSDF
FLIP
Time
Run 1: 105.85ms
Run 2: 105.95ms
Run 3: 105.29ms
Average: 105.70ms
FLIP
Mean: 0.444
Median: 0.546
Q1: 0.397
Q3: 0.701
Split + Light
Split+Light
FLIP
Time
Run 1: 112.89ms
Run 2: 113.22ms
Run 3: 113.60ms
Average: 113.24ms
FLIP
Mean: 0.443
Median: 0.544
Q1: 0.396
Q3: 0.699
Split + Env
Split+Env
FLIP
Time
Run 1: 125.03ms
Run 2: 125.66ms
Run 3: 124.88ms
Average: 125.19ms
FLIP
Mean: 0.430
Median: 0.523
Q1: 0.382
Q3: 0.675
Split + Light + Env
Split All
FLIP
Time
Run 1: 137.49ms
Run 2: 138.00ms
Run 3: 137.26ms
Average: 137.58ms
FLIP
Mean: 0.440
Median: 0.519
Q1: 0.390
Q3: 0.664
Reference
Bistro Interior Reference
Technique
Rendered Output
FLIP Error Map
Time
FLIP
BSDF Only
BSDF Only
FLIP
Time
Run 1: 77.03ms
Run 2: 76.60ms
Run 3: 76.79ms
Average: 76.81ms
FLIP
Mean: 0.267
Median: 0.334
Q1: 0.225
Q3: 0.452
BSDF + Light
BSDF+Light
FLIP
Time
Run 1: 49.60ms
Run 2: 50.44ms
Run 3: 48.73ms
Average: 49.59ms
FLIP
Mean: 0.294
Median: 0.370
Q1: 0.252
Q3: 0.491
BSDF + Env
BSDF+Env
Best
FLIP
Time
Run 1: 53.83ms
Run 2: 64.04ms
Run 3: 53.90ms
Average: 57.26ms
FLIP
Mean: 0.269
Median: 0.335
Q1: 0.226
Q3: 0.452
BSDF + Light + Env
All
FLIP
Time
Run 1: 80.77ms
Run 2: 80.55ms
Run 3: 81.76ms
Average: 81.03ms
FLIP
Mean: 0.267
Median: 0.334
Q1: 0.225
Q3: 0.452
Split-Lobe BSDF
Split BSDF
FLIP
Time
Run 1: 53.07ms
Run 2: 52.92ms
Run 3: 53.24ms
Average: 53.08ms
FLIP
Mean: 0.285
Median: 0.357
Q1: 0.239
Q3: 0.485
Split + Light
Split+Light
FLIP
Time
Run 1: 75.54ms
Run 2: 75.97ms
Run 3: 76.12ms
Average: 75.88ms
FLIP
Mean: 0.281
Median: 0.353
Q1: 0.236
Q3: 0.480
Split + Env
Split+Env
FLIP
Time
Run 1: 79.98ms
Run 2: 79.66ms
Run 3: 79.71ms
Average: 79.78ms
FLIP
Mean: 0.273
Median: 0.341
Q1: 0.228
Q3: 0.467
Split + Light + Env
Split All
FLIP
Time
Run 1: 101.32ms
Run 2: 101.90ms
Run 3: 101.10ms
Average: 101.44ms
FLIP
Mean: 0.283
Median: 0.381
Q1: 0.238
Q3: 0.532