Post on 09-Jan-2016
description
Optimally Combining Sampling Techniques for Monte Carlo Rendering
Eric Veach and Leonidas J. GuibasComputer Science Department Stanford University
SIGGRAPH 1995
Variance
Sampling the light sources Sampling the BRDF
Sp
ecula
r Ro
ug
hn
ess
Highly specular surface and large light source
Very rough surface and small light source
Multi-sample Model
n
i
n
j ji
jijii
i
i
Xp
XfXw
nF
1 1 ,
,, )(
)()(
1 i
i xw 1)(,where
)()()()()(
)()(1][
1
xdxfxdxpxp
xfxwn
nFE i
i
ii
n
i i
Weighted combination of all the sample values
jjj
iii pc
pcwAn example of wi
(balance heuristic)
ci: relative number of samples taken from pi
Theorem 1
21
min
1][]ˆ[ F
nnFVFV
iiii
jjj
iii pc
pcw
wi: any non-negative functions with i
i xw 1)(
No choice of the wi can improve upon the variance of the balance heuristic by more than (1/mini ni – 1/N)F2
Weighting Heuristics
jjj
iii pc
pcw
jj
ii p
pw
otherwise
ppifw ii 0
1 max
otherwiseppp
pppif
w
jjj
i
i
i
max
max
|
0
(a) balance
(b) cutoff
(c) power
(d) maximum
variance
roughness
Combine Sampling
With power heuristic )2(
A simple test scene
(a) Sampling the light source(b) Sampling the hemisphere according to the projected solid angle(c) Combination of samples using the power heuristic
(a) (b) (c)
One area light source and an adjacent diffuse surface.
Bidirectional Path Tracing
3
2
)()()()()()()()(
)()()()()(
,,
21021212101010
10101010
M
pre
M
pe
ie
ippp
xdAxdAxdAxxWxxGxxxfxxGxxL
xdAxdAxxWxxGxxL
LTWLWI
Bidirectional Sampling Strategies
(a) Standard MC path tracing.(b) Standard MC path tracing with direct lighting.(c) Depositing light on a visible surface (photomap).(d) Depositing light when a photon hits the camera lens.
Bidirectional Path Tracing
Standard path tracing using the same amount of work (same computation time)
Combines samples from all the bidirectional techniques
25 samples per pixel 56 samples per pixel
Conclusion
• Power heuristic (with beta=2) gave the best results.
• These techniques are practical, and the additional cost is small – less than 10%
PBRT
inline float BalanceHeuristic(int nf, float fPdf, int ng, float gPdf) {return (nf * fPdf) / (nf * fPdf + ng * gPdf);
}inline float PowerHeuristic(int nf, float fPdf, int ng, float gPdf) {
float f = nf * fPdf, g = ng * gPdf;return (f*f) / (f*f + g*g);
}
PBRT define balance and power heuristic in “mc.h”