chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · surface integrators...
TRANSCRIPT
![Page 1: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/1.jpg)
Surface Integrators
Digital Image Synthesisg g yYung-Yu Chuang
with slides by Peter Shirley, Pat Hanrahan, Henrik Jensen, Mario Costa Sousa and Torsten Moller
![Page 2: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/2.jpg)
Direct lighting via Monte Carlo integration
diff diffuse
![Page 3: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/3.jpg)
Direct lighting via Monte Carlo integration
parameterization over hemisphere
parameterization over surface
have to add visibilityhave to add visibility
![Page 4: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/4.jpg)
Direct lighting via Monte Carlo integration
take one sample according to a density function
let’s takelet s take
![Page 5: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/5.jpg)
Direct lighting via Monte Carlo integration1 sample/pixel
100 samples/pixel
Lights’ sizes matter more than shapes.pNoisy because•x’ could be on the
b kback•cos varies
![Page 6: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/6.jpg)
Noise reduction
choose better density function
)1(
It is equivalent to uniformly sampling overthe cone cap in the last lecture.
max11 cos)1(cos
22 maxcos
![Page 7: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/7.jpg)
Direct lighting from many luminaries
• Given a pair , use it to select light and generate new pair for sampling that lightgenerate new pair for sampling that light.
• α could be constant for proportional to power
![Page 8: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/8.jpg)
Main rendering loopvoid Scene::Render() {
Sample *sample = new Sample(surfaceIntegrator,volumeIntegratorvolumeIntegrator,this);
...while (sampler >GetNextSample(sample)) {while (sampler->GetNextSample(sample)) {
RayDifferential ray;float rW = camera->GenerateRay(*sample, &ray);<Generate ray differentials for camera ray><Generate ray differentials for camera ray>float alpha;Spectrum Ls = 0.f;if (rW > 0 f)if (rW > 0.f)
Ls = rW * Li(ray, sample, &alpha);...camera->film->AddSample(*sample ray Ls alpha);camera >film >AddSample( sample,ray,Ls,alpha);...
}......camera->film->WriteImage();
}
![Page 9: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/9.jpg)
Scene::Li
Spectrum Scene::Li(RayDifferential &ray,Sample *sample float *alpha)Sample *sample, float *alpha)
{Spectrum Lo=surfaceIntegrator >Li( );Spectrum Lo=surfaceIntegrator->Li(…);Spectrum T=volumeIntegrator->Transmittance(…);Spectrum Lv volumeIntegrator >Li( );Spectrum Lv=volumeIntegrator->Li(…);return T * Lo + Lv;
}}
LoLv
T
![Page 10: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/10.jpg)
Surface integrators
• Responsible for evaluating the integral equation/ * i /*• core/transport.* integrator/*
Whitted, directlighting, path, bidirectional, i di h h tirradiancecache, photonmapigi, exphotonmap
class COREDLL Integrator {Spectrum Li(Scene *scene, RayDifferential
&ray, Sample *sample, float *alpha);void Proprocess(Scene *scene)void RequestSamples(Sample*, Scene*)
};class SurfaceIntegrator : public Integrator
![Page 11: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/11.jpg)
Surface integrators• void Preprocess(const Scene *scene)
Called after scene has been initialized; do sceneCalled after scene has been initialized; do scene-dependent computation such as photon shooting for photon mapping.p pp g
• void RequestSamples(Sample *sample, const Scene *scene)Sample is allocated once in Render(). There, sample’s constructor will call integrator’s RequestSamples to ll t i t allocate appropriate space.
Sample::Sample(SurfaceIntegrator *surf,VolumeIntegrator *vol const Scene *scene) {VolumeIntegrator vol, const Scene scene) {// calculate required number of samples // according to integration strategysurf->RequestSamples(this, scene);...
![Page 12: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/12.jpg)
Direct lighting
dLfLL ||)()()()( Rendering equation
iiiiiooeoo dpLpfpLpL |cos|),(),,(),(),(
If we only consider direct lighting, we can replace
iiidiooeoo dpLpfpLpL |cos|),(),,(),(),(
y g g, pLi by Ld.
iiidiooeoo • simplest form of equation• somewhat easy to solve (but a gross approximation)• kind of what we do in Whitted ray tracing• Not too bad since most energy comes from direct lights
![Page 13: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/13.jpg)
Direct lighting
• Monte Carlo sampling to solve
• Sampling strategy A: sample only one light
iiidio dpLpf |cos|),(),,(• Sampling strategy A: sample only one light
– pick up one light as the representative for all lightsdistribute N samples over that light– distribute N samples over that light
– Use multiple importance sampling for f and Ld
N Lf ||)()(
N
j j
jjdjo
ppLpf
N 1 )(|cos|),(),,(1
– Scale the result by the number of lights NL
Randomly pick f or g and then sample, ][ fE
j
Randomly pick f or g and then sample, multiply the result by 2][ gfE
![Page 14: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/14.jpg)
Direct lighting
• Sampling strategy B: sample all lightsd A f h li ht– do A for each light
– sum the resultst ld b t l li ht di t – smarter way would be to sample lights according to
their power
LN
jiiijdio dpLpf
1)( |cos|),(),,(
j 1
sample f or g separately and then sum ][ fE sample f or g separately and then sum them together][ gfE
![Page 15: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/15.jpg)
DirectLighting
enum LightStrategy { SAMPLE ALL UNIFORM, SAMPLE ONE UNIFORM,_ _ , _ _ ,
SAMPLE_ONE_WEIGHTED}; two possible strategies; if there are many image samples for a pixel
( d t d th f fi ld) f l li li ht t (e.g. due to depth of field), we prefer only sampling one light at atime. On the other hand, if there are few image samples, we prefersampling all lights at once.
class DirectLighting : public SurfaceIntegrator {public:
i l d thp
DirectLighting(LightStrategy ls, int md);...
maximal depth
}
![Page 16: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/16.jpg)
RequestSamples
•Different types of lights require different number of samples, usually 2D samples.samples, usually 2D samples.
•Sampling BRDF requires 2D samples.•Selection of BRDF components requires 1D samples.
3 1 2
D t D
n1D n2D 2 2 1 1 2 2 sample
allocate together to avoid cache miss
filled in by integrators
oneD twoD allocate together to avoid cache miss
mem
bsdfComponent lightSample bsdfSample
integratorbsdfComponent lightSample bsdfSample
![Page 17: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/17.jpg)
DirectLighting::RequestSamplesvoid RequestSamples(Sample *sample, const Scene *scene) {if (strategy == SAMPLE_ALL_UNIFORM) {u_int nLights = scene->lights.size();lightSampleOffset = new int[nLights];bsdfSampleOffset = new int[nLights];bsdfSampleOffset = new int[nLights];bsdfComponentOffset = new int[nLights];for (u_int i = 0; i < nLights; ++i) {const Light *light = scene->lights[i];int lightSamples
= scene->sampler->RoundSize(light->nSamples);gives sampler a chance to adjust to an appropriate value
p ( g p );lightSampleOffset[i] = sample->Add2D(lightSamples);bsdfSampleOffset[i] = sample->Add2D(lightSamples);b dfC tOff t[i] l >Add1D(li htS l )bsdfComponentOffset[i] = sample->Add1D(lightSamples);
}lightNumOffset = -1;
}
![Page 18: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/18.jpg)
DirectLighting::RequestSampleselse {lightSampleOffset = new int[1];bsdfSampleOffset = new int[1];bsdfSampleOffset = new int[1];bsdfComponentOffset = new int[1];
lightSampleOffset[0] = sample->Add2D(1);lightSampleOffset[0] = sample->Add2D(1);bsdfSampleOffset[0] = sample->Add2D(1);bsdfComponentOffset[0] = sample->Add1D(1);
lightNumOffset = sample->Add1D(1);}
}which light to sample
}
![Page 19: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/19.jpg)
DirectLighting::LiSpectrum DirectLighting::Li(Scene *scene,
RayDifferential &ray, Sample *sample, float *alpha){
Intersection isect;Spectrum L(0.);if (scene->Intersect(ray, &isect)) {
// Evaluate BSDF at hit pointBSDF *bsdf = isect.GetBSDF(ray);( y);Vector wo = -ray.d;const Point &p = bsdf->dgShading.p;const Normal &n = bsdf->dgShading nn;const Normal &n = bsdf >dgShading.nn;<Compute emitted light; see next slide>
}else {else {
// handle ray with no intersection}return L;
}
![Page 20: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/20.jpg)
DirectLighting::Li
iiidiooeoo dpLpfpLpL |cos|),(),,(),(),(
L += isect.Le(wo);if (scene->lights.size() > 0) {( g () ) {switch (strategy) {case SAMPLE_ALL_UNIFORM:L + U if S l AllLi ht ( b dfL += UniformSampleAllLights(scene, p, n, wo, bsdf,sample, lightSampleOffset, bsdfSampleOffset, bsdfComponentOffset);break;
case SAMPLE_ONE_UNIFORM:L += UniformSampleOneLight(scene p n wo bsdfL += UniformSampleOneLight(scene, p, n, wo, bsdf,sample, lightSampleOffset[0], lightNumOffset,bsdfSampleOffset[0], bsdfComponentOffset[0]);break;
![Page 21: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/21.jpg)
DirectLighting::Licase SAMPLE_ONE_WEIGHTED:L += WeightedSampleOneLight(scene, p, n, wo, bsdf,
sample according to power
sample, lightSampleOffset[0], lightNumOffset,bsdfSampleOffset[0], bsdfComponentOffset[0], avgY,avgYsample, cdf, overallAvgY);break;
}}if (rayDepth++ < maxDepth) {// add specular reflected and transmitted contributions
}This part is essentially the same as Whitted integrator }This part is essentially the same as Whitted integrator.
The main difference between Whitted and DirectLighting is the way they sample lights. Whitted uses sample L to take one sample for each light. sample lights. Whitted uses sample_L to take one sample for each light. DirectLighting uses multiple Importance sampling to sample both lights and BRDFs.
![Page 22: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/22.jpg)
Whitted::Li...// Add contribution of each light sourceVector wi;for (i = 0; i < scene->lights.size(); ++i){{
VisibilityTester visibility;Spectrum Li = scene->lights[i]->
Sample_L(p, &wi, &visibility);if (Li.Black()) continue;Spectrum f = bsdf->f(wo, wi);Spectrum f bsdf >f(wo, wi);if (!f.Black() &&
visibility.Unoccluded(scene))L += f * Li * AbsDot(wi, n) *
visibility.Transmittance(scene);}}...
![Page 23: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/23.jpg)
UniformSampleAllLightsSpectrum UniformSampleAllLights(...) {
Spectrum L(0.);for (u_int i=0;i<scene->lights.size();++i) {
Light *light = scene->lights[i];int nSamples =
(sample && lightSampleOffset) ?sample->n2D[lightSampleOffset[i]] : 1;p [ g p [ ]] ;
Spectrum Ld(0.);for (int j = 0; j < nSamples; ++j)Ld += EstimateDirect( );Ld += EstimateDirect(...);
L += Ld / nSamples;}return L;
compute contribution for one sample for one light
return L;}
)(|cos|),(),,(
j
jjdjo
ppLpf
)( jp
![Page 24: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/24.jpg)
UniformSampleOneLightSpectrum UniformSampleOneLight (...) {
int nLights = int(scene->lights.size());int lightNum;if (lightNumOffset != -1)lightNum =
Floor2Int(sample->oneD[lightNumOffset][0]*nLights);elselightNum = Floor2Int(RandomFloat() * nLights);
lightNum = min(lightNum, nLights-1);Light *light = scene->lights[lightNum];Light light = scene >lights[lightNum];return (float)nLights * EstimateDirect(...);
}
![Page 25: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/25.jpg)
Multiple importance sampling
ff )()()()()()(
gf n
j jg
igjj
g
n
i if
ifii
f YpYwYgYf
nXpXwXgXf
n 11 )()()()(1
)()()()(1
j jggiff
sss
xpnxw
)()( i ii
s xpn )()(
![Page 26: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/26.jpg)
EstimateDirectSpectrum EstimateDirect(Scene *scene, Light *light, Point &p, Normal &n, Vector &wo, BSDF *bsdf, Sample *sample, int lightSamp int bsdfSamp int bsdfComponentint lightSamp, int bsdfSamp, int bsdfComponent, u_int sampleNum)
{Spectrum Ld(0 ); )(
|cos|),(),,( jjdjo
ppLpf
Spectrum Ld(0.);float ls1, ls2, bs1, bs2, bcs;if (lightSamp != -1 && bsdfSamp != -1 &&
sampleNum < sample->n2D[lightSamp] &&
)( jp
sampleNum < sample >n2D[lightSamp] &&sampleNum < sample->n2D[bsdfSamp]) {ls1 = sample->twoD[lightSamp][2*sampleNum];ls2 = sample->twoD[lightSamp][2*sampleNum+1];p [ g p][ p ];bs1 = sample->twoD[bsdfSamp][2*sampleNum];bs2 = sample->twoD[bsdfSamp][2*sampleNum+1];bcs = sample->oneD[bsdfComponent][sampleNum];p p p
} else {ls1 = RandomFloat();ls2 = RandomFloat(); ...
}
![Page 27: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/27.jpg)
Sample light with MISSpectrum Li = light->Sample_L(p, n, ls1, ls2, &wi,
&lightPdf, &visibility);if (lightPdf > 0. && !Li.Black()) {Spectrum f = bsdf->f(wo, wi);if (!f Black() && visibility Unoccluded(scene)) {if (!f.Black() && visibility.Unoccluded(scene)) {Li *= visibility.Transmittance(scene);if (light->IsDeltaLight())Ld += f * Li * AbsDot(wi, n) / lightPdf;
else {bsdfPdf = bsdf->Pdf(wo, wi);( , );float weight = PowerHeuristic(1,lightPdf,1,bsdfPdf);Ld += f * Li * AbsDot(wi, n) * weight / lightPdf;
}}}
})(
)(|cos|),(),,( jLjjdjo wpLpf )( jp
![Page 28: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/28.jpg)
Sample BRDF with MISif (!light->IsDeltaLight()) {BxDFType flags = BxDFType(BSDF_ALL & ~BSDF_SPECULAR);Spectrum f = bsdf >Sample f(wo &wi bs1 bs2 bcs
Only for non-delta light and BSDF
Spectrum f = bsdf->Sample_f(wo, &wi, bs1, bs2, bcs, &bsdfPdf, flags);
if (!f.Black() && bsdfPdf > 0.) {lightPdf = light->Pdf(p n wi);lightPdf = light->Pdf(p, n, wi);if (lightPdf > 0.) {
// Add light contribution from BSDF samplingfloat weight = PowerHeuristic(1,bsdfPdf,1,lightPdf);float weight PowerHeuristic(1,bsdfPdf,1,lightPdf);Spectrum Li(0.f);RayDifferential ray(p, wi);if (scene->Intersect(ray, &lightIsect)) {( ( y, g )) {if (lightIsect.primitive->GetAreaLight() == light)Li = lightIsect.Le(-wi);
} else Li = light->Le(ray); for infinite area lightg yif (!Li.Black()) {Li *= scene->Transmittance(ray);Ld += f * Li * AbsDot(wi, n) * weight / bsdfPdf;
f f g
}}
}
![Page 29: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/29.jpg)
Direct lighting
![Page 30: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/30.jpg)
The light transport equation
• The goal of integrator is to numerically solve the light transport equation governing the the light transport equation, governing the equilibrium distribution of radiance in a scene.
![Page 31: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/31.jpg)
The light transport equation
![Page 32: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/32.jpg)
Analytic solution to the LTE
• In general, it is impossible to find an analytic solution to the LTE because of complex BRDF solution to the LTE because of complex BRDF, arbitrary scene geometry and intricate visibility.F t l i l i id • For an extremely simple scene, e.g. inside a uniformly emitting Lambertian sphere, it is h ibl Thi i f l f d b ihowever possible. This is useful for debugging.
• Radiance should be the same for all points• Radiance should be the same for all points
LcLL e
![Page 33: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/33.jpg)
Analytic solution to the LTE
LcLL e
hhe
LLLLLL
)(
ehhehhe
hhehhe
LLLLLL
...(( )(
ihh
ehhehhe
L
((
hhi
eL 0
L
hh
eLL
1
1hh
![Page 34: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/34.jpg)
Surface form of the LTE
![Page 35: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/35.jpg)
Surface form of the LTE
These two forms are equivalent, but they represent two different ways of approaching light transport.
![Page 36: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/36.jpg)
Surface form of the LTE
![Page 37: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/37.jpg)
Surface form of the LTE
![Page 38: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/38.jpg)
Surface form of the LTE
![Page 39: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/39.jpg)
Delta distribution
![Page 40: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/40.jpg)
Partition the integrand
![Page 41: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/41.jpg)
Partition the integrand
![Page 42: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/42.jpg)
Partition the integrand
![Page 43: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/43.jpg)
Rendering operators
![Page 44: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/44.jpg)
Solving the rendering equation
![Page 45: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/45.jpg)
Successive approximation
![Page 46: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/46.jpg)
Successive approximation
![Page 47: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/47.jpg)
Light Transport Notation (Hekbert 1990)
• Regular expression denoting sequence of events along a light path alphabet: {L E S D G}along a light path alphabet: {L,E,S,D,G}– L a light source (emitter)
E h – E the eye– S specular reflection/transmission– D diffuse reflection/transmission– G glossy reflection/transmissionG glossy reflection/transmission
• operators:(k) f k– (k)+ one or more of k
– (k)* zero or more of k (iteration)– (k|k’) a k or a k’ event
![Page 48: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/48.jpg)
Light Transport Notation: Examples
• LSD th t ti t li ht h i l – a path starting at a light, having one specular
reflection and ending at a diffuse reflection
LD
S
![Page 49: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/49.jpg)
Light Transport Notation: Examples
• L(S|D)+DE th t ti t li ht h i diff – a path starting at a light, having one or more diffuse
or specular reflections, then a final diffuse reflection toward the eyereflection toward the eye
E
D LD
S
![Page 50: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/50.jpg)
Light Transport Notation: Examples
• L(S|D)+DE th t ti t li ht h i diff – a path starting at a light, having one or more diffuse
or specular reflections, then a final diffuse reflection toward the eyereflection toward the eye
E
L
ED
S
SD
![Page 51: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/51.jpg)
![Page 52: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/52.jpg)
![Page 53: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/53.jpg)
Rendering algorithms
• Ray casting: E(D|G)LWhi d E[S*](D|G)L• Whitted: E[S*](D|G)L
• Kajiya: E[(D|G|S)+(D|G)]L• Goral: ED*L
![Page 54: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/54.jpg)
The rendering equation
![Page 55: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/55.jpg)
The rendering equation
![Page 56: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/56.jpg)
The radiosity equation
![Page 57: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/57.jpg)
Radiosity
• formulate the basic radiosity equation:N
Bm Em m BnFmnn1
N
• Bm = radiosity = total energy leaving surface m (energy/unit area/unit time)
n 1
(energy/unit area/unit time)• Em = energy emitted from surface m (energy/unit
area/unit time)area/unit time)• m = reflectivity, fraction of incident light reflected
back into environment• Fmn = form factor, fraction of energy leaving surface n
that lands on surface m• (Am = area of surface m)
![Page 58: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/58.jpg)
Radiosity
• Bring all the B’s on one side of the equation
Em Bm m BnFmnm
• this leads to this equation system:m
EBFFF1
N
N
EE
BB
FFFFFF
2
1
2
1
22222212
11121111
...1
...1
EBFFF
1 NNNNNNNNN EBFFF 21 1...
EBS EBS
![Page 59: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/59.jpg)
Path tracing
• Proposed by Kajiya in his classic SIGGRAPH 1986 paper rendering equation as the solution forpaper, rendering equation, as the solution for
• Incrementally generates path of scattering y g p gevents starting from the camera and ending at light sources in the scene.g
• Two questions to answer– How to do it in finite time?How to do it in finite time?– How to generate one or more paths to compute
![Page 60: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/60.jpg)
Infinite sum
• In general, the longer the path, the less the impactimpact.
• Use Russian Roulette after a finite number of bbounces– Always compute the first few terms– Stop after that with probability q
![Page 61: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/61.jpg)
Infinite sum
• Take this idea further and instead randomly consider terminating evaluation of the sum at consider terminating evaluation of the sum at each term with probability qi
![Page 62: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/62.jpg)
Path generation (first trial)
• First, pick up surface i in the scene randomly and uniformly Aand uniformly
j j
ii A
Ap
• Then, pick up a point on this surface randomly and uniformly with probability
iA1
• Overall probability of picking a random surface point in the scene:
iA
p
i
iA AAAApp 11)(
j jij jiA AAA
pp )(
![Page 63: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/63.jpg)
Path generation (first trial)
• This is repeated for each point on the path.L i h ld b l d li h • Last point should be sampled on light sources only.
• If we know characteristics about the scene (such as which objects are contributing most indirect lighting to the scene), we can sample more smartly.
• Problems:– High variance: only few points are mutually visible, g y p y ,
i.e. many of the paths yield zero.– Incorrect integral: for delta distributions, we rarely g y
find the right path direction
![Page 64: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/64.jpg)
Incremental path generation
• For pathA h fi d di BSDF
ijji pppppp ...... 110 – At each pj, find pj+1 according to BSDF – At pi-1, find pi by multiple importance
sampling of BSDF and L • This algorithm distributes samples according to g p g
solid angle instead of area. So, the distribution pA needs to be adjusted pA j
)(2
1ii ppppp
|cos|
)(i
iA ppp
![Page 65: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/65.jpg)
Incremental path generation
• Monte Carlo estimator
• Implementation re-uses path for new path ip1ip• Implementation re uses path for new path This introduces correlation, but speed makes up for it
ip1ip
for it.
![Page 66: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/66.jpg)
Path tracing
![Page 67: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/67.jpg)
Direct lighting
![Page 68: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/68.jpg)
Path tracing
8 samples per pixel
![Page 69: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/69.jpg)
Path tracing
1024 samples per pixel
![Page 70: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/70.jpg)
Bidirectional path tracing
• Compose one path from two pathst t d t th d
p–p1p2…pi started at the camera p0 and –qjqj-1…q1 started at the light source q0
• Modification for efficiency:
1121 ...,... qqqpppp jjii
y–Use all paths whose lengths ranging from lengths ranging from 2 to i+j
H l f l f th it ti i hi h li ht diffi lt Helpful for the situations in which lights are difficult to reach and caustics
![Page 71: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/71.jpg)
Bidirectional path tracing
![Page 72: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/72.jpg)
Noise reduction/removal
• More samples (slow convergence)B li ( ifi d i )• Better sampling (stratified, importance etc.)
• Filtering• Caching and interpolation
![Page 73: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/73.jpg)
Biased approaches
• By introducing bias (making smoothness assumptions) biased methods produce images assumptions), biased methods produce images without high-frequency noiseU lik bi d th d t b • Unlike unbiased methods, errors may not be reduced by adding samples in biased methods
• On contrast, when there is little error in the result of an unbiased method, we are confident that it is close to the right answer
• Three biased approachespp– Filtering– Irradiance cachingIrradiance caching– Photon mapping
![Page 74: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/74.jpg)
The world is more diffuse!
![Page 75: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/75.jpg)
Filtering
• Noise is high frequencyM h d• Methods:– Simple filters– Anisotropic filters– Energy preserving filters
• Problems with filtering: everything is filtered (blurred)
![Page 76: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/76.jpg)
Path tracing (10 paths/pixel)
![Page 77: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/77.jpg)
3x3 lowpass filter
![Page 78: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/78.jpg)
3x3 median filter
![Page 79: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/79.jpg)
Caching techniques
• Irradiance caching: compute irradiance at selected points and interpolateselected points and interpolate
• Photon mapping: trace photons from the lights d t th i h t th t b and store them in a photon map, that can be
used during rendering
![Page 80: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/80.jpg)
Direct illumination
![Page 81: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/81.jpg)
Global illumination
![Page 82: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/82.jpg)
Indirect irradiance
Indirect illumination tends to be low frequency
![Page 83: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/83.jpg)
Irradiance caching
• Introduced by Greg Ward 1988I l d i R di d• Implemented in Radiance renderer
• Contributions from indirect lighting often vary smoothly →cache and interpolate results
![Page 84: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/84.jpg)
Irradiance caching
• Compute indirect lighting at sparse set of samplessamples
• Interpolate neighboring values from this set of lsamples
• Issues– How is the indirect lighting represented– How to come up with such a sparse set of samples?– How to store these samples?– When and how to interpolate?p
![Page 85: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/85.jpg)
Set of samples
• Indirect lighting is computed on demand, store irradiance in a spatial data structure If there is irradiance in a spatial data structure. If there is no good nearby samples, then compute a new irradiance sampleirradiance sample
• Irradiance (radiance is direction dependent, i t t )expensive to store)
iH iii dpLpE 2|cos|),()(
• If the surface is Lambertian, H
|cos|)()()( dpLpfpL |cos|),(
|cos|),(),,(),(
2
2
dpL
dpLpfpL
iH iii
iH iiiiooo
)( pEH
![Page 86: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/86.jpg)
Set of samples
• For diffuse scenes, irradiance alone is enough information for accurate computationinformation for accurate computation
• For nearly diffuse surfaces (such as Oren-Nayar l f ith id l or a glossy surface with a very wide specular
lobe), we can view irradiance caching makes th f ll i i tithe following approximation
|cos|),(),,(),( dpLdpfpL iiiiii )()(
|cos|),(),,(),(
21
22
pE
dpLdpfpL
ohd
iH iiiiH iooo
directional reflectance
![Page 87: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/87.jpg)
Set of samples
• Not a good approximation for specular surfaces l Whi d i • specular → Whitted integrator
• Diffuse → irradiance caching– Interpolate from known points– Cosine-weighted – Path tracing sample points
iiii dpLpE |cos|),()( iH iii dpLpE 2|cos|),()(
jji pLpE
)(|cos|),(1)(
j jpNp
)()(
ji pLN
pE ),()( cos)( p
jjiN
![Page 88: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/88.jpg)
Storing samples
{E,p,n,d}
ddi
![Page 89: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/89.jpg)
Interpolating from neighbors
• Skip samplesN l t diff t– Normals are too different
– Too far awayI f t – In front
• Weight (ad hoc)2
'11
NNddwi
• Final irradiance estimate is simply the weighted
max
NNd
sum
i ii Ew
Ei iw
![Page 90: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/90.jpg)
IrradianceCache
class IrradianceCache : public SurfaceIntegrator {...float maxError; how frequently irradiance samples are
computed or interpolatedint nSamples; how many rays for irradiance samplesint maxSpecularDepth, maxIndirectDepth;mutable int specularDepth; current depth for specularmutable int specularDepth; current depth for specular
}
![Page 91: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/91.jpg)
IrradianceCache::LiL += isect.Le(wo);L += UniformSampleAllLights(scene, p, n, wo,...);if (specularDepth++ < maxSpecularDepth) {
<Trace rays for specular reflection and refraction>
}--specularDepth;
// Estimate indirect lighting with irradiance cache...BxDFType flags = BxDFType(BSDF REFLECTION |BxDFType flags = BxDFType(BSDF_REFLECTION |
BSDF_DIFFUSE | BSDF_GLOSSY);L+=IndirectLo(p, ng, wo, bsdf, flags, sample, scene);
flags = BxDFType(BSDF_TRANSMISSION |BSDF_DIFFUSE | BSDF_GLOSSY);
di ( b df fl l )L+=IndirectLo(p, -ng, wo, bsdf, flags, sample,scene);
![Page 92: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/92.jpg)
IrradianceCache::IndirectLoif (!InterpolateIrradiance(scene, p, n, &E)) {... // Compute irradiance at current pointfor (int i = 0; i < nSamples; ++i) {
<Path tracing to compute radiances along ray for irradiance sample>for irradiance sample>E += L;float dist = r.maxt * r.d.Length(); // max distance
I Di t + 1 f / di tsumInvDists += 1.f / dist;}E *= M_PI / float(nSamples);_... // Add computed irradiance value to cacheoctree->Add(IrradianceSample(E,p,n,nSamples/sumInvDists),
sampleExtent);sampleExtent);}return .5f * bsdf->rho(wo, flags) * E;
![Page 93: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/93.jpg)
Octree• Constructed at Preprocess()void IrradianceCache::Preprocess(const Scene *scene)p ( ){BBox wb = scene->WorldBound();V t d lt 01f * ( b M b Mi )Vector delta = .01f * (wb.pMax - wb.pMin);wb.pMin -= delta;wb.pMax += delta;octree=new Octree<IrradianceSample,IrradProcess>(wb);
}
struct IrradianceSample {Spectrum E;Normal n;Point p;float maxDist;float maxDist;
};
![Page 94: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/94.jpg)
InterpolateIrradianceBool InterpolateIrradiance(const Scene *scene,
const Point &p, const Normal &n, Spectrum *E) {
if (!octree) return false;IrradProcess proc(n, maxError);octree->Lookup(p, proc); Traverse the octree; for each node where the query point is inside, calla method of proc to process for each irradiacne sample.
if (!proc.Successful()) return false;*E = proc GetIrradiance();
f p p f p
E = proc.GetIrradiance();return true;
}
![Page 95: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/95.jpg)
IrradProcessvoid IrradProcess::operator()(const Point &p,
const IrradianceSample &sample) {// Skip if surface normals are too differentif (Dot(n, sample.n) < 0.01f) return;// Skip if it's too far from the sample pointfloat d2 = DistanceSquared(p, sample.p);if (d2 > sample.maxDist * sample.maxDist) return;( p p ) ;// Skip if it's in front of point being shadedNormal navg = sample.n + n;if (Dot(p - sample p navg) < - 01f) return;if (Dot(p sample.p, navg) < .01f) return;// Compute estimate error and possibly use samplefloat err=sqrtf(d2)/(sample.maxDist*Dot(n,sample.n));if (err < 1 ) {if (err < 1.) {
float wt = (1.f - err) * (1.f - err);E += wt * sample.E; sumWt += wt;
}
211
d
}} max '
1
NNdwi
![Page 96: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/96.jpg)
Comparison with same limited time
Irradiance caching Path tracingh fBlotch artifacts High-frequency noises
![Page 97: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/97.jpg)
Irradiance caching
Irradiance caching Irradiance samplepositions
![Page 98: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/98.jpg)
Photon mapping
• It can handle both diffuse and glossy reflection; specular reflection is handled by recursive ray specular reflection is handled by recursive ray tracingT t ti l t i l ith• Two-step particle tracing algorithm
• Photon tracing– Simulate the transport of individual photons– Photons emitted from source– Photons deposited on surfaces– Photons reflected from surfaces to surfaces
• Rendering– Collect photons for renderingCollect photons for rendering
![Page 99: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/99.jpg)
Photon tracing
• Preprocess: cast rays from light sources
![Page 100: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/100.jpg)
Photon tracing
• Preprocess: cast rays from light sourcesS h ( i i li h • Store photons (position + light power + incoming direction)
![Page 101: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/101.jpg)
Photon map
• Efficiently store photons for fast accessU hi hi l i l (kd )• Use hierarchical spatial structure (kd-tree)
![Page 102: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/102.jpg)
Rendering (final gathering)
• Cast primary rays; for the secondary rays, reconstruct irradiance using the k closest stored reconstruct irradiance using the k closest stored photon
![Page 103: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/103.jpg)
Rendering (without final gather)
iiiiiooeoo dpLpfpLpL |cos|),(),,(),(),(
![Page 104: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/104.jpg)
Rendering (with final gather)
![Page 105: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/105.jpg)
Photon mapping results
photon map rendering
![Page 106: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/106.jpg)
Photon mapping - caustics
• Special photon map for specular reflection and f tirefraction
![Page 107: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/107.jpg)
Caustics
Path tracing: Photon mapping1,000 paths/pixel Photon mapping
![Page 108: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/108.jpg)
PhotonIntegratorclass PhotonIntegrator : public SurfaceIntegrator {int nCausticPhotons,nIndirectPhotons,nDirectPhotons;int nLookup; number of photons for interpolation (50~100)int specularDepth, maxSpecularDepth;fl t Di tS d h di t t l t float maxDistSquared; search distance; too large, waste
time; too small, not enough samplesbool directWithPhotons, finalGather;bool directWithPhotons, finalGather;int gatherSamples;
}L ftLeft:100K photons50 photons inradiance estimateradiance estimate
Right:500K h t500K photons500 photons inradiance estimate
![Page 109: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/109.jpg)
Photon map
Kd-tree is used to store photons store photons, decoupled from the scene geometry
![Page 110: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/110.jpg)
Photon shooting
• Implemented in Preprocess methodTh f h ( i di i di )• Three types of photons (caustic, direct, indirect)
struct Photon {Point p;S t l hSpectrum alpha;Vector wi;
};};
wi
p
α
![Page 111: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/111.jpg)
Photon shooting
• Use Halton sequence since number of samples is unknown beforehand starting from a sample is unknown beforehand, starting from a sample light with energy . Store photons for non-specular surfaces
),(),(
00
00
pppLe
specular surfaces.
![Page 112: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/112.jpg)
Photon shootingvoid PhotonIntegrator::Preprocess(const Scene *scene){{
vector<Photon> causticPhotons;vector<Photon> directPhotons;vector<Photon> indirectPhotons;while (!causticDone || !directDone|| !indirectDone) {{
++nshot;<trace a photon path and store contribution>p p
}}
![Page 113: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/113.jpg)
Photon shootingSpectrum alpha = light->Sample_L(scene, u[0], u[1],
u[2], u[3], &photonRay, &pdf);[ ], [ ], p y, p );alpha /= pdf * lightPdf;While (scene->Intersect(photonRay, &photonIsect)) {alpha *= scene->Transmittance(photonRay);<record photon depending on type><sample next direction><sample next direction>Spectrum fr = photonBSDF->Sample_f(wo, &wi, u1, u2,
u3, &pdf, BSDF ALL, &flags);, p , _ , g )alpha*=fr*AbsDot(wi, photonBSDF->dgShading.nn)/ pdf;photonRay = RayDifferential(photonIsect.dg.p, wi);if (nIntersections > 3) {
if (RandomFloat() > .5f) break;alpha /= 5f;alpha /= .5f;
}}
![Page 114: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/114.jpg)
Rendering
• Partition the integrand
2
||)()(
|cos|),(),,(S iiiiio
dLf
dpLpf
2
2
|cos|),(),(),(),,(
|cos|),(),,(
,,,S iiiciiiiidiio
S iiiiio
dpLpLpLpf
dpLpf
,,,S
![Page 115: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/115.jpg)
RenderingL += isect.Le(wo);
// Compute direct lighting for photon map integratorif (directWithPhotons) L += LPhoton(directMap,...);else L += UniformSampleAllLights(...);
// Compute indirect lighting for photon map integrator// Compute indirect lighting for photon map integrator
L += LPhoton(causticMap, ...);
if (finalGather) {<Do one-bounce final gather for photon map>
} elseL += LPhoton(indirectMap, ...);
// Compute specular reflection and refraction// Compute specular reflection and refraction
![Page 116: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/116.jpg)
Final gatherfor (int i = 0; i < gatherSamples; ++i) {
<compute radiance for a random BSDF-sampled p pdirection for final gather ray>
}i/fl ( h S l )L += Li/float(gatherSamples);
![Page 117: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/117.jpg)
Final gatherBSDF *gatherBSDF = gatherIsect.GetBSDF(bounceRay);Vector bounceWo = -bounceRay.d;Spectrum Lindir =
LPhoton(directMap, nDirectPaths, nLookup, gatherBSDF gatherIsect bounceWo maxDistSquared)gatherBSDF, gatherIsect, bounceWo, maxDistSquared)
+ LPhoton(indirectMap, nIndirectPaths, nLookup,gatherBSDF, gatherIsect, bounceWo, maxDistSquared)
+ LPhoton(causticMap, nCausticPaths, nLookup,gatherBSDF, gatherIsect, bounceWo,maxDistSquared);
Lindir *= scene->Transmittance(bounceRay);Lindir scene >Transmittance(bounceRay);Li += fr * Lindir * AbsDot(wi, n) / pdf;
![Page 118: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/118.jpg)
Rendering
50,000 direct photons shadow rays are traced f d l h
50,000 direct photonsfor direct lighting
![Page 119: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/119.jpg)
Rendering
500,000 direct photons caustics500,000 direct photons caustics
![Page 120: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/120.jpg)
Photon mapping
Direct illumination Photon mappingDirect illumination Photon mapping
![Page 121: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/121.jpg)
Photon mapping + final gathering
Photon mapping Photon mapping+final gathering
Photon mapping
![Page 122: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/122.jpg)
Photon interpolation
• LPhoton() finds the nLookup closest photons and uses them to compute the radiance at the and uses them to compute the radiance at the point.A kd t i d t t h t T i t i • A kd-tree is used to store photons. To maintain the nLookup closest photons efficiently during
h h i dsearch, a heap is used.• For interpolation, a statistical technique,
density estimation, is used. Density estimation constructs a PDF from a set of given samples, for example, histogram.
![Page 123: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/123.jpg)
Kernel method
1k(x)dx where1)(ˆN
i
hxxk
Nhxp
-1i hNh
window widthh too wide→too smoothh too narrow→too bumpy
5 5/)21(75.0)(
2 tttk
py
otherwise 0)(tk
h=0 1h 0.1
![Page 124: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/124.jpg)
Generalized nth nearest-neighbor estimate
1)(ˆ
N
ixxkxp )()(
)(1
i n
i
n xdk
xNdxp
distance to nth nearest neighbordistance to nth nearest neighbor
1||
)(1 x
xk 2D constant kernel otherwise 0
)(xk 2D constant kernel
o
float scale=1.f/(float(nPaths)*maxDistSquared* M_PI);
![Page 125: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/125.jpg)
LPhotonif (bsdf->NumComponents(BxDFType(BSDF_REFLECTION |
BSDF_TRANSMISSION | BSDF_GLOSSY)) > 0) {// i di f h f l f// exitant radiance from photons for glossy surfacefor (int i = 0; i < nFound; ++i) {
BxDFType flag=Dot(Nf, photons[i].photon->wi)> 0.f ?BSDF_ALL_REFLECTION : BSDF_ALL_TRANSMISSION;
L += bsdf->f(wo, photons[i].photon->wi, flag) *(scale * photons[i].photon->alpha);( p [ ] p p );
}} else {// exitant radiance from photons for diffuse surfaceSpectrum Lr(0 ) Lt(0 );Spectrum Lr(0.), Lt(0.);for (int i = 0; i < nFound; ++i)
if (Dot(Nf, photons[i].photon->wi) > 0.f)Lr += photons[i] photon >alpha;Lr += photons[i].photon->alpha;
else Lt += photons[i].photon->alpha;L+=(scale*INV_PI)*(Lr*bsdf->rho(wo,BSDF_ALL_REFLECTION)
*b df h ( S S SS O ))+Lt*bsdf->rho(wo, BSDF_ALL_TRANSMISSION));}
![Page 126: chap16 integrator.ppt [相容模式] - 國立臺灣大學 · 2009. 12. 17. · Surface integrators • void Preprocess(const Scene *scene) Called after scene has been initialized;](https://reader033.vdocument.in/reader033/viewer/2022053119/60a023a47541bd603f1a22ea/html5/thumbnails/126.jpg)
Results