Photon Mapping Reference Material The slides have used/adapted material from the following references:

Slides on Photon Mapping by Jan Kautz (web4.cs.ucl.ac.uk/teaching/4074/archive/.../04_photon_maps.pdf)

Slides on Photon Mapping by Bill Clark (http://penguin.ewu.edu/cscd570/2011/PDFNotes/PhotonMapping.pdf)

!"#$"%&'(&)*'+',"-.$/+$0&,"12",$13&4"+*'2/ Photon Mapping

()*+,&-+$&.*/0-/$&"#,)1#+,23)-$#+, !"#$%&'(!)&"**)+(!&)(,-&,)*",&,'./!'(.&$00$*!% 1'2$*!&$00$*!%&02)3&,'./!&!)&)45$*!&!)&$-$&6&0)2&4)!/& 1'00+%$&"(1&%7$*+,"2&,'./!'(.8 4-5&60-7#+, 0)2&1'00+%$&,'./!&+%$%&)(,-&,)*",&$00$*!%&()&.,)4",& ,'./!'(.8 0)2&%7$*+,"2&,'./!&1)$%&1)&%)3$&.,)4",&,'./!'(.&%'(*$& 2$0,$*!$1&2"-%&*"(&42'(.&4"*#&,'./!&02)3&)!/$2&)45$*!%&6& !/+%&'(&!/$&%7$*+,"2&*)37)($(!&.,)4",&,'./!'(.&'%& 72)9'1$18

CSCD 570 !"#$%&' 11/12/08 Uniform vs. Importance Sampling Questions?

75 Samples/Pixel

Naïve sampling strategy Optimal sampling strategy

Veach & Guibas "Optimally Combining Sampling Slide from Jason Lawrence Techniques for Monte Carlo Rendering” SIGGRAPH 95

Leftover from Last Time & Today Ray Casting

• Sampling • Cast a ray from the eye through each pixel • Monte-Carlo vs. • Irradiance Caching • Photon Mapping • Ray Grammar

Photon Mapping

Ray Tracing Monte-Carlo Ray Tracing

• Cast a ray from the eye through each pixel • Cast a ray from the eye through each pixel • Trace secondary rays (light, reflection, refraction) • Cast random rays to accumulate radiance contribution – Recurse to solve the

Should also systematically sample the primary light

3 !"#$"%&'(&)*'+',"-.$/+$0&,"12",$13&4"+*'2/Photon Mapping

()$#*+#,- !"#$%"&!''"()#*%+"#*!#"&,)-!.-/.!#)'".01*#",)!-*021" %2)",)10%2"3,%("!.."%#*),",)10%2'" (%+).'"%2.4"+033/')".01*#021 '&)-/.!,".01*#021"-!2"5)"&,%60+)+"60!"!"*45,0+",)2+),)," #*!#"/')'"5%#*",!+0%'0#4"3%,"#*)"+033/')"#),("!2+",!4" #,!-021"3%,"#*)"'&)-/.!,"#),(7

CSCD 570 !"#$%&' 11/12/08 Lecture Notes #13 - Ray Tracing

R

Reading: Angel: 16.10; Foley: p.792 E R P transmitted

Topics:

Rreflected • Rendering equation • Approximations Let I(b,r) = intensity seen along direction r from point b. I(E, R) = Idirect + Iindirect Ray tracing ! Idirect + Ireflected + Itransmitted Radiosity

Idirect = computed from the Phong model Ireflected = Reflectance* I(P, Rreflected ) I Transmittance* I(P, R ) Photon Mapping transmitted = transmitted COS 426 1 Lecture Notes #13 COS 426 2 Lecture Notes #13

Ray Tracing as Approximation to Rendering Equation The Rendering Equation (Kajiya '86) x x'' xr x x'' x' x' xt L(x' " x' ' ) = E(x' " x' ' ) + f (x, x' , x' ' )L(x " x' )V(x, x' )G(x, x' )dx # r L(x' " x' ' ) = E(x' " x' ' ) + # fr (x, x' , x' ' )L(x " x' )V(x, x' )G(x, x' )dx x x

• L(x'->x'') is the total radiance from x' • fr is the BRDF • Sample the integrand where it is likely to be large: at points x such that: to x'' • V(x,x') is a visibility term: • x is at a light source • E(x'->x'') is the emitted radiance from • 1 if x is visible from x'; 0 • x is in the reflected direction x' to x'' otherwise • non-zero for light sources • x is in the refracted direction • G(x,x') is a geometry term

COS 426 3 Lecture Notes #13 COS 426 4 Lecture Notes #13 #76$86236092:$%;/149<2

ȦB ! PhotonȦ Mapping !"

ICAB-ȦBD$J$%CAB-ȦBD K$œȡABCȦ-ȦBDICA-ȦDLCA-ABDMCA-ABD$3N n

!r !i =>156$476$><2409?/49<2$?@$

ȡABCȦ-ȦBD-$476$06E56>49F94@$ "i CG8.HD$6$14$AB "r

!"#$%%&'$()*+,-$./0123$123$&/4560 !"#$%&'()*+,-(%&.-%)%"-* Photon Mapping

!"#$%#&%#'()*"+'(*,#-&#.(/"+(+%0+%)%#'&#.(*"1(2&.*'( )3,''%+)(,2"#.($,+&"4)(0,'*)(&#(,()3%#%(/+"5('*%( 2&.*'()"4+3%('"('*%(%6%7 8%/&#&'&"#)(9('*%($%+'&3%)("/(,(2&.*'(0,'*(3,#(:%; <(;(,(2&.*'()"4+3% =(;('*%(%6% >(;(,()0%342,+(+%/2%3'&"# 8(;(,(-&//4)%(+%/2%3'&"#

CSCD 570 !"#$%&' 11/12/08 !"#$%&'()*+,-(%&.-%)%"-*&/&01)2,34 Photon Mapping

! "

#

!"#$%&&' ("#$%&' )"#$&&%' CSCD 570 !"#$%&' 11/12/08 !"#$%&'()*+,-(%&.-%)%"-* Photon Mapping

()*+#,-.#),&/).-.#),!"#$%&'(#!$)*#$++,-.! .-/(/,-.0 "102!3!-.$!-#!4-#$!-5!1!$6$./+ "107!3!8$#-!-#!4-#$!-5!1$6$./+ "109!3!8$#-!-#!-.$!1!$6$./ "1:1;0!3!(!1!-#!(!1;!$6$./ <)(4*'$!3!=">:?02?

CSCD 570 !"#$%&' 11/12/08 ;172(<=#%&(&>(.4=<& Photon Mapping

•! '#%$1?>(2@#&2(A&$2(<*%+&"(%6@14&(@@& )($"4&@*+"$B&CDEFGHIJK&L.$&%#$&1M.(@@A& Reflection 51@@& •! 8(4&6*N<.@$A&4(3)@*%+&CGIEGIJ&)($"4K& ;172(<=#%&(&>(.4=<& 1O+O&2172(<=#%&(&<(.4=<& !"#$#%&'())*%+& •! '#%$1?>(2@#&2(A&$2(<*%+&"(%6@14&(@@& •! !($"&$2(<*%+&5#.@6&%116&(&P12A&@.<9A& )($"4&@*+"$B&CDEFGHIJK&L.$&%#$&1M.(@@A& Q24$&"*$& 51@@& •! R*6*21<=#%(@&2(A&$2(<*%+&<(%&Q%6& •! 8(4&6*N<.@$A&4(3)@*%+&CGIEGIJ&)($"4K& ,(%&-(.$/& !"#$#%&'())*%+& 1O+O&2172(<=#%&(&<(.4=<& <(.4=

!"#$#%&'())*%+& :"A&'()&!"#$#%4[&

•! ,1%41%&JT;:&UVK&UW& •! 8*+"&P(2*(%<1&*%&'#%$1?>(2@#& !"#$#%&'())*%+& •! G*3.@($14&$"1&$2(%4)#2$&*%6*P*6.(@&:"A&'()&!"#$#%4[& 21%612*%+4&214.@$4&*%&%#*41& )"#$#%4& •! >#@@1<=#%&61)#4*$16&)"#$#%4& •! !"#$#%4&13*X16&72#3&@*+"$&4#.2<14& *%$#&(&\)"#$#%&3()]&D(&Z?E& •! ,1%41%&JT;:&UVK&UW& •! !"#$#%4&L#.%<1&#Y&4)1<.@(2•! 8*+"&P(2*(%<1&*%&'#%$1?>(2@#&& 4)(=(@&6($(&4$2.<$.21H&)2#P*614&(& 4.27(<14& S.^&61%4*$A&14=3($1& a"1&4<1%1&(L#P1&<#%$(*%4&+@#44A& •! G*3.@($14&$"1&$2(%4)#2$&*%6*P*6.(@& 21%612*%+4&214.@$4&*%&%#*41& 4.27(<14K&(%6&5(4&21%61216&*%&Vb& •! !"#$#%4&61)#4*$16&#%&6*Y.41&4.27(<14& •! 0@.^&4(3)@14&Q@$1216&1(4*12&$"(%& )"#$#%4& –! 81@6&*%&(&Z?E&4)(=(@&6($(&4$2.<$.21&•! 3*%.$14&.4*%+&)"#$#%&3())*%+O&a"1& >#@@1<=#%&61)#4*$16&)"#$#%4& )($"&4(3)@14K&214.@=%+&*%&122#2&($& 4(31&4<1%1&$##9&W&"#.24&7#2&21%612& • –! G.27(<14&%116&%#$&L1&)(2(31$12*/16& ! !"#$#%4&13*X16&72#3&@*+"$&4#.2<14& *%$#&(&\)"#$#%&3()]&D(&Z?E& @#512&721M.1%<*14& 5*$"&;(6*(%<1K&(&21%612*%+&4A4$13&$"($& •! !"#$#%4&!"##$!%$&'()'*+%,'%-+!./0'72#3& •! !"#$#%4&L#.%<1&#Y&4)1<.@(2& •! J22#2&*4&(&214.@$&L*(4K&5"*<"& .416&2(6*#4*$A&7#2&6*Y.41&21S1<=#%&(%6& 1A1& 4)(=(@&6($(&4$2.<$.21H&)2#P*614&(& )($"&$2(<*%+&7#2&+@#44A&21S1<=#%O& 4.27(<14& S.^&61%4*$A&14=3($1& a"1&4<1%1&(L#P1&<#%$(*%4&+@#44A&61<21(414&(4&$"1&%.3L12& •! !"#$#%4&61)#4*$16&#%&6*Y.41&4.27(<14& 4.27(<14K&(%6&5(4&21%61216&*%&Vb&4(3)@14&*%<21(41& •! 0@.^&4(3)@14&Q@$1216&1(4*12&$"(%& •! _%6K&#"&A1("K&*$`4&(&@#$&7(4$12& –! 81@6&*%&(&Z?E&4)(=(@&6($(&4$2.<$.21& 3*%.$14&.4*%+&)"#$#%&3())*%+O&a"1& )($"&4(3)@14K&214.@=%+&*%&122#2&($& 4(31&4<1%1&$##9&W&"#.24&7#2&21%612& –! G.27(<14&%116&%#$&L1&)(2(31$12*/16& @#512&721M.1%<*14& 5*$"&;(6*(%<1K&(&21%612*%+&4A4$13&$"($& •! !"#$#%4&!"##$!%$&'()'*+%,'%-+!./0'72#3& .416&2(6*#4*$A&7#2&6*Y.41&21S1<=#%&(%6& 1A1& •! J22#2&*4&(&214.@$&L*(4K&5"*<"& 61<21(414&(4&$"1&%.3L12& )($"&$2(<*%+&7#2&+@#44A&21S1<=#%O& 4(3)@14&*%<21(41& •! _%6K&#"&A1("K&*$`4&(&@#$&7(4$12&

:"($&*4&(&!"#$#%[& G#.2<14&

!p •! _&)"#$#%&*&*4&(&)(2=<@1&@*+"$& •! !#*%$&4#.2<1& $"($&<(22*14&S.^&!"*D!*K&!*H& –! !"#$#%4&13*X16&.%*7#23@A&*%&(@@& –! !#512B&!"*&c&3(+%*$.61&D*%& 6*21<=#%4& :(X4H&(%6&<#@#2&$"1&S.^&*$& • !"p ! !#512&4#.2<1&D:H&6*4$2*L.$16& <(22*14K&4$#216&(4&(%&;TR&$2*)@1& 1P1%@A&(3#%+&)"#$#%4& –! !#4*=#%B&!*&c&@#<(=#%&$"1& •! )"#$#%& xp 0@.^&1(<"&)"#$#%&1M.(@&$#&4#.2<1& )#512&6*P*616&LA&$#$(@&d&)"#$#%4& –! E*21<=#%B&! &c&$"1&*%<*61%$& * •! 6*21<=#%&!.&.416&$#&<#3).$1& 0#2&1^(3)@1K&(&Wb:&@*+"$&L.@L&5#.@6& *22(6*(%<1& 41%6&#.$&(&$#$(@&ebb-&)"#$#%4K& :"($&*4&(&!"#$#%[& •! !"#$#%4&P4O&2(A4& G#.2<14& 1(<"&<(22A*%+&(&S.^&!"&bOW&3:& –! !"#$#%4&)2#)#+($1&S.^& •! !"#$#%4&41%$&#.$&#%<1&)12&4*3.@(=#%K& !p –! ;(A4&+($"12&2(6*(%<1& %#$&<#%=%.#.4@A&(4&*%&2(6*#4*$A& •! _&)"#$#%&*&*4&(&)(2=<@1&@*+"$& •! !#*%$&4#.2<1& $"($&<(22*14&S.^&!"*D!*K&!*H& –! !"#$#%4&13*X16&.%*7#23@A&*%&(@@& –! !#512B&!"*&c&3(+%*$.61&D*%& 6*21<=#%4& :(X4H&(%6&<#@#2&$"1&S.^&*$& • !"p ! !#512&4#.2<1&D:H&6*4$2*L.$16& <(22*14K&4$#216&(4&(%&;TR&$2*)@1& 1P1%@A&(3#%+&)"#$#%4& –! !#4*=#%B&!*&c&@#<(=#%&$"1& •! )"#$#%& xp 0@.^&1(<"&)"#$#%&1M.(@&$#&4#.2<1& )#512&6*P*616&LA&$#$(@&d&)"#$#%4& –! E*21<=#%B&! &c&$"1&*%<*61%$& * •! 1 6*21<=#%&!.&.416&$#&<#3).$1& 0#2&1^(3)@1K&(&Wb:&@*+"$&L.@L&5#.@6& *22(6*(%<1& 41%6&#.$&(&$#$(@&ebb-&)"#$#%4K& •! !"#$#%4&P4O&2(A4& 1(<"&<(22A*%+&(&S.^&!"&bOW&3:& –! !"#$#%4&)2#)#+($1&S.^& •! !"#$#%4&41%$&#.$&#%<1&)12&4*3.@(=#%K& –! ;(A4&+($"12&2(6*(%<1& %#$&<#%=%.#.4@A&(4&*%&2(6*#4*$A&

1 ;172(<=#%&(&>(.4=<&

•! '#%$1?>(2@#&2(A&$2(<*%+&"(%6@14&(@@& )($"4&@*+"$B&CDEFGHIJK&L.$&%#$&1M.(@@A& 51@@& •! 8(4&6*N<.@$A&4(3)@*%+&CGIEGIJ&)($"4K& !"#$#%&'())*%+& 1O+O&2172(<=#%&(&<(.4=<& •! !($"&$2(<*%+&5#.@6&%116&(&P12A&@.<9A& Q24$&"*$& •! R*6*21<=#%(@&2(A&$2(<*%+&<(%&Q%6& ,(%&-(.$/& <(.4=

01($.2*%+&*3(+14&45*)16&72#3& 81%2*9&:(%%&,1%41%&

Photon Mapping !"#$#%&'())*%+& :"A&'()&!"#$#%4[& Introduction •! ,1%41%&JT;:&UVK&UW& •! 8*+"&P(2*(%<1&*%&'#%$1?>(2@#& •! G*3.@($14&$"1&$2(%4)#2$&*%6*P*6.(@& 21%612*%+4&214.@$4&*%&%#*41& )"#$#%4& •! >#@@1<=#%&61)#4*$16&)"#$#%4& •! !"#$#%4&13*X16&72#3&@*+"$&4#.2<14& *%$#&(&\)"#$#%&3()]&D(&Z?E& •! !"#$#%4&L#.%<1&#Y&4)1<.@(2& 4)(=(@&6($(&4$2.<$.21H&)2#P*614&(& 4.27(<14& S.^&61%4*$A&14=3($1& a"1&4<1%1&(L#P1&<#%$(*%4&+@#44A& 4.27(<14K&(%6&5(4&21%61216&*%&Vb& •! !"#$#%4&61)#4*$16&#%&6*Y.41&4.27(<14& •! 0@.^&4(3)@14&Q@$1216&1(4*12&$"(%& –! 81@6&*%&(&Z?E&4)(=(@&6($(&4$2.<$.21& 3*%.$14&.4*%+&)"#$#%&3())*%+O&a"1& )($"&4(3)@14K&214.@=%+&*%&122#2&($& 4(31&4<1%1&$##9&W&"#.24&7#2&21%612& –! G.27(<14&%116&%#$&L1&)(2(31$12*/16& @#512&721M.1%<*14& 5*$"&;(6*(%<1K&(&21%612*%+&4A4$13&$"($& •! !"#$#%4&!"##$!%$&'()'*+%,'%-+!./0'72#3& .416&2(6*#4*$A&7#2&6*Y.41&21S1<=#%&(%6& 1A1& •! J22#2&*4&(&214.@$&L*(4K&5"*<"& 61<21(414&(4&$"1&%.3L12& )($"&$2(<*%+&7#2&+@#44A&21S1<=#%O& 4(3)@14&*%<21(41& •! _%6K&#"&A1("K&*$`4&(&@#$&7(4$12&

:"($&*4&(&!"#$#%[& G#.2<14&

!p •! _&)"#$#%&*&*4&(&)(2=<@1&@*+"$& •! !#*%$&4#.2<1& $"($&<(22*14&S.^&!"*D!*K&!*H& –! !"#$#%4&13*X16&.%*7#23@A&*%&(@@& –! !#512B&!"*&c&3(+%*$.61&D*%& 6*21<=#%4& :(X4H&(%6&<#@#2&$"1&S.^&*$& • !"p ! !#512&4#.2<1&D:H&6*4$2*L.$16& <(22*14K&4$#216&(4&(%&;TR&$2*)@1& 1P1%@A&(3#%+&)"#$#%4& –! !#4*=#%B&!*&c&@#<(=#%&$"1& •! )"#$#%& xp 0@.^&1(<"&)"#$#%&1M.(@&$#&4#.2<1& )#512&6*P*616&LA&$#$(@&d&)"#$#%4& –! E*21<=#%B&! &c&$"1&*%<*61%$& * •! 6*21<=#%&!.&.416&$#&<#3).$1& 0#2&1^(3)@1K&(&Wb:&@*+"$&L.@L&5#.@6& *22(6*(%<1& 41%6&#.$&(&$#$(@&ebb-&)"#$#%4K& •! !"#$#%4&P4O&2(A4& 1(<"&<(22A*%+&(&S.^&!"&bOW&3:& –! !"#$#%4&)2#)#+($1&S.^& •! !"#$#%4&41%$&#.$&#%<1&)12&4*3.@(=#%K& –! ;(A4&+($"12&2(6*(%<1& %#$&<#%=%.#.4@A&(4&*%&2(6*#4*$A&

1 Questions? Today

• Why do we need “good” random numbers? • Sampling – With a fixed random sequence, we see the structure in the error • Monte-Carlo Ray Tracing vs. Path Tracing • Irradiance Caching • Photon Mapping • Ray Grammar

Henrik Wann Jensen

Readings for Today PhotonPhoton Mapping Mapping • “Rendering Caustics on Non-Lambertian Surfaces”, • Preprocess: cast rays from light sources Henrik Wann Jensen, Graphics Interface 1996. Introduction– independent of viewpoint

• “Global Illumination using Photon Maps”, Henrik Wann Jensen, Rendering Techniques 1996.

Photon Mapping Photon Map

• Store photons • Efficiently store photons for fast access – position + light power + incoming direction • Use hierarchical spatial structure (kd-tree)

6 Questions? Today

• Why do we need “good” random numbers? • Sampling – With a fixed random sequence, we see the structure in the error • Monte-Carlo Ray Tracing vs. Path Tracing • Irradiance Caching • Photon Mapping • Ray Grammar

Henrik Wann Jensen

Readings for Today Photon Mapping

• “Rendering Caustics on Non-Lambertian Surfaces”, • Preprocess: cast rays from light sources Henrik Wann Jensen, Graphics Interface 1996. – independent of viewpoint

• “Global Illumination using Photon Maps”, Henrik Wann Jensen, Rendering Techniques 1996.

Photon Mapping

IntroductionPhoton Mapping Photon Map • Store photons • Efficiently store photons for fast access – position + light power + incoming direction • Use hierarchical spatial structure (kd-tree)

6 Questions? Today

• Why do we need “good” random numbers? • Sampling – With a fixed random sequence, we see the structure in the error • Monte-Carlo Ray Tracing vs. Path Tracing • Irradiance Caching • Photon Mapping • Ray Grammar

Henrik Wann Jensen

Readings for Today Photon Mapping

• “Rendering Caustics on Non-Lambertian Surfaces”, • Preprocess: cast rays from light sources Henrik Wann Jensen, Graphics Interface 1996. – independent of viewpoint

• “Global Illumination using Photon Maps”, Henrik Wann Jensen, Rendering Techniques 1996.

Photon Mapping

Photon Mapping IntroductionPhoton Map • Store photons • Efficiently store photons for fast access – position + light power + incoming direction • Use hierarchical spatial structure (kd-tree)

6 Photon Mapping

IntroductionRendering with Photon Map Photon Map Results • Cast primary rays • For secondary rays – reconstruct irradiance using k closest photons • Combine with irradiance caching and other techniques

Photon Mapping - Caustics Comparison

• Special photon map for specular reflection and Path Tracing refraction 1000 paths/pixel Photon mapping

Glass sphere

Closest Photon Details Today

• Find the tightest sphere that captures k photons • Sampling – NOTE: HW3 code gives you all photons that might be in the query bounding box • Monte-Carlo Ray Tracing vs. Path Tracing (you need to test for exact box and/or exact sphere) • Irradiance Caching • Divide the energy from those photons by the surface area covered by that sphere • Photon Mapping • What about thin surfaces, concave corners, • Ray Grammar & convex corners?

7 Rendering with Photon Map Photon Map Results

• Cast primary rays • For secondary rays – reconstruct irradiance using k closest photons • Combine with irradiance caching and other techniques

Photon Mapping

Introduction Photon Mapping - Caustics Comparison

• Special photon map for specular reflection and Path Tracing refraction 1000 paths/pixel Photon mapping

Glass sphere

Closest Photon Details Today

• Find the tightest sphere that captures k photons • Sampling – NOTE: HW3 code gives you all photons that might be in the query bounding box • Monte-Carlo Ray Tracing vs. Path Tracing (you need to test for exact box and/or exact sphere) • Irradiance Caching • Divide the energy from those photons by the surface area covered by that sphere • Photon Mapping • What about thin surfaces, concave corners, • Ray Grammar & convex corners?

7 ;172(<=#%&(&>(.4=<&

•! '#%$1?>(2@#&2(A&$2(<*%+&"(%6@14&(@@& )($"4&@*+"$B&CDEFGHIJK&L.$&%#$&1M.(@@A& 51@@& •! 8(4&6*N<.@$A&4(3)@*%+&CGIEGIJ&)($"4K& !"#$#%&'())*%+& 1O+O&2172(<=#%&(&<(.4=<& •! !($"&$2(<*%+&5#.@6&%116&(&P12A&@.<9A& Q24$&"*$& •! R*6*21<=#%(@&2(A&$2(<*%+&<(%&Q%6& ,(%&-(.$/& <(.4=(.4=<& 01($.2*%+&*3(+14&45*)16&72#3& 81%2*9&:(%%&,1%41%& •! '#%$1?>(2@#&2(A&$2(<*%+&"(%6@14&(@@& )($"4&@*+"$B&CDEFGHIJK&L.$&%#$&1M.(@@A& 51@@& •! 8(4&6*N<.@$A&4(3)@*%+&CGIEGIJ&)($"4K& !"#$#%&'())*%+& 1O+O&2172(<=#%&(&<(.4=<& •! !($"&$2(<*%+&5#.@6&%116&(&P12A&@.<9A& Q24$&"*$& •! R*6*21<=#%(@&2(A&$2(<*%+&<(%&Q%6& ,(%&-(.$/& <(.4=

01($.2*%+&*3(+14&45*)16&72#3& 81%2*9&:(%%&,1%41%&

!"#$#%&'())*%+& :"A&'()&!"#$#%4[&

•! ,1%41%&JT;:&UVK&UW& •! 8*+"&P(2*(%<1&*%&'#%$1?>(2@#& •! G*3.@($14&$"1&$2(%4)#2$&*%6*P*6.(@& 21%612*%+4&214.@$4&*%&%#*41& )"#$#%4& •! >#@@1<=#%&61)#4*$16&)"#$#%4& •! !"#$#%4&13*X16&72#3&@*+"$&4#.2<14&!"#$#%&'())*%+& :"A&'()&!"#$#%4[&*%$#&(&\)"#$#%&3()]&D(&Z?E& •! !"#$#%4&L#.%<1&#Y&4)1<.@(2& 4)(=(@&6($(&4$2.<$.21H&)2#P*614&(& 4.27(<14&•! ,1%41%&JT;:&UVK&UW& •! 8*+"&P(2*(%<1&*%&'#%$1?>(2@#&S.^&61%4*$A&14=3($1& a"1&4<1%1&(L#P1&<#%$(*%4&+@#44A& •! !"#$#%4&61)#4*$16&#%&6*Y.41&4.27(<14&•! G*3.@($14&$"1&$2(%4)#2$&*%6*P*6.(@& 21%612*%+4&214.@$4&*%&%#*41& 4.27(<14K&(%6&5(4&21%61216&*%&Vb& )"#$#%4& •! >#@@1<=#%&61)#4*$16&)"#$#%4&•! 0@.^&4(3)@14&Q@$1216&1(4*12&$"(%& 3*%.$14&.4*%+&)"#$#%&3())*%+O&a"1& –! 81@6&*%&(&Z?E&4)(=(@&6($(&4$2.<$.21&•! !"#$#%4&13*X16&72#3&@*+"$&4#.2<14& *%$#&(&\)"#$#%&3()]&D(&Z?E&)($"&4(3)@14K&214.@=%+&*%&122#2&($& 4(31&4<1%1&$##9&W&"#.24&7#2&21%612& •! !"#$#%4&L#.%<1&#Y&4)1<.@(2& –! G.27(<14&%116&%#$&L1&)(2(31$12*/16& 4)(=(@&6($(&4$2.<$.21H&)2#P*614&(& 5*$"&;(6*(%<1K&(&21%612*%+&4A4$13&$"($& 4.27(<14& S.^&61%4*$A&14=3($1&@#512&721M.1%<*14&a"1&4<1%1&(L#P1&<#%$(*%4&+@#44A& •! !"#$#%4&!"##$!%$&'()'*+%,'%-+!./0'72#3& 4.27(<14K&(%6&5(4&21%61216&*%&Vb& .416&2(6*#4*$A&7#2&6*Y.41&21S1<=#%&(%6& •! !"#$#%4&61)#4*$16&#%&6*Y.41&4.27(<14& •! 0@.^&4(3)@14&Q@$1216&1(4*12&$"(%&•! J22#2&*4&(&214.@$&L*(4K&5"*<"& 1A1& –! 81@6&*%&(&Z?E&4)(=(@&6($(&4$2.<$.21& 3*%.$14&.4*%+&)"#$#%&3())*%+O&a"1& )($"&$2(<*%+&7#2&+@#44A&21S1<=#%O& )($"&4(3)@14K&214.@=%+&*%&122#2&($& 4(31&4<1%1&$##9&W&"#.24&7#2&21%612& –! G.27(<14&%116&%#$&L1&)(2(31$12*/16& 61<21(414&(4&$"1&%.3L12& @#512&721M.1%<*14& 5*$"&;(6*(%<1K&(&21%612*%+&4A4$13&$"($& •! !"#$#%4&!"##$!%$&'()'*+%,'%-+!./0'72#3& 4(3)@14&*%<21(41&.416&2(6*#4*$A&7#2&6*Y.41&21S1<=#%&(%6& 1A1& •! J22#2&*4&(&214.@$&L*(4K&5"*<"& 61<21(414&(4&$"1&%.3L12&•! _%6K&#"&A1("K&*$`4&(&@#$&7(4$12&)($"&$2(<*%+&7#2&+@#44A&21S1<=#%O& 4(3)@14&*%<21(41& •! _%6K&#"&A1("K&*$`4&(&@#$&7(4$12&

Photon Mapping

What:"($&*4&(&!"#$#%[& is a Photon? G#.2<14& !p :"($&*4&(&!"#$#%[&•! _&)"#$#%&*&*4&(&)(2=<@1&@*+"$& •! !#*%$&4#.2<1&G#.2<14& $"($&<(22*14&S.^& D! K& H& !"* * !* !p –! !"#$#%4&13*X16&.%*7#23@A&*%&(@@& –! 6*21<=#%4& •! _&)"#$#%&!#512B&*&*4&(&)(2=<@1&@*+"$&!"*&c&3(+%*$.61&D*%& •! !#*%$&4#.2<1& :(X4H&(%6&<#@#2&$"1&S.^&*$& !" •! !#512&4#.2<1&D:H&6*4$2*L.$16& <(22*14K&4$#216&(4&(%&;TR&$2*)@1& p $"($&<(22*14&S.^&!"*D!*K&!*H& 1P1%@A&(3#%+&)"#$#%4&–! !"#$#%4&13*X16&.%*7#23@A&*%&(@@& –! !#4*=#%B&!*&c&@#<(=#%&$"1& •! –! !#512B&)"#$#%&!"*&c&3(+%*$.61&D*%& xp 0@.^&1(<"&)"#$#%&1M.(@&$#&4#.2<1&6*21<=#%4& :(X4H&(%6&<#@#2&$"1&S.^&*$& )#512&6*P*616&LA&$#$(@&d&)"#$#%4& –! E*21<=#%B&!*&c&$"1&*%<*61%$& •! !#512&4#.2<1&D:H&6*4$2*L.$16& !"p •! <(22*14K&4$#216&(4&(%&;TR&$2*)@1&6*21<=#%&!.&.416&$#&<#3).$1& 0#2&1^(3)@1K&(&Wb:&@*+"$&L.@L&5#.@6& *22(6*(%<1& 41%6&#.$&(&$#$(@&ebb-&)"#$#%4K&1P1%@A&(3#%+&)"#$#%4& –! !#4*=#%B&! &c&@#<(=#%&$"1& •! !"#$#%4&P4O&2(A4&* 1(<"&<(22A*%+&(&S.^&•! !"&bOW&3:& )"#$#%& xp 0@.^&1(<"&)"#$#%&1M.(@&$#&4#.2<1& –! !"#$#%4&)2#)#+($1&S.^& •! !"#$#%4&41%$&#.$&#%<1&)12&4*3.@(=#%K&)#512&6*P*616&LA&$#$(@&d&)"#$#%4& –! E*21<=#%B&! &c&$"1&*%<*61%$& %#$&<#%=%.#.4@A&(4&*%&2(6*#4*$A& –! ;(A4&+($"12&2(6*(%<1&* •! 6*21<=#%&!.&.416&$#&<#3).$1& 0#2&1^(3)@1K&(&Wb:&@*+"$&L.@L&5#.@6& *22(6*(%<1& 41%6&#.$&(&$#$(@&ebb-&)"#$#%4K& •! !"#$#%4&P4O&2(A4& 1(<"&<(22A*%+&(&S.^&!"&bOW&3:& –! !"#$#%4&)2#)#+($1&S.^& •! !"#$#%4&41%$&#.$&#%<1&)12&4*3.@(=#%K& –! ;(A4&+($"12&2(6*(%<1& %#$&<#%=%.#.4@A&(4&*%&2(6*#4*$A&

1

1 ;172(<=#%&(&>(.4=<&

•! '#%$1?>(2@#&2(A&$2(<*%+&"(%6@14&(@@& )($"4&@*+"$B&CDEFGHIJK&L.$&%#$&1M.(@@A& 51@@& •! 8(4&6*N<.@$A&4(3)@*%+&CGIEGIJ&)($"4K& !"#$#%&'())*%+& 1O+O&2172(<=#%&(&<(.4=<& •! !($"&$2(<*%+&5#.@6&%116&(&P12A&@.<9A& Q24$&"*$& •! R*6*21<=#%(@&2(A&$2(<*%+&<(%&Q%6& ,(%&-(.$/& <(.4=

01($.2*%+&*3(+14&45*)16&72#3& 81%2*9&:(%%&,1%41%&

;172(<=#%&(&>(.4=<&

•! '#%$1?>(2@#&2(A&$2(<*%+&"(%6@14&(@@& )($"4&@*+"$B&CDEFGHIJK&L.$&%#$&1M.(@@A& 51@@& •! 8(4&6*N<.@$A&4(3)@*%+&CGIEGIJ&)($"4K& !"#$#%&'())*%+& 1O+O&2172(<=#%&(&<(.4=<& •! !($"&$2(<*%+&5#.@6&%116&(&P12A&@.<9A& Q24$&"*$& •! R*6*21<=#%(@&2(A&$2(<*%+&<(%&Q%6& ,(%&-(.$/& <(.4=

01($.2*%+&*3(+14&45*)16&72#3& !"#$#%&'())*%+& 81%2*9&:(%%&,1%41%& :"A&'()&!"#$#%4[&

•! ,1%41%&JT;:&UVK&UW& •! 8*+"&P(2*(%<1&*%&'#%$1?>(2@#& •! G*3.@($14&$"1&$2(%4)#2$&*%6*P*6.(@& 21%612*%+4&214.@$4&*%&%#*41& )"#$#%4& •! >#@@1<=#%&61)#4*$16&)"#$#%4& •! !"#$#%4&13*X16&72#3&@*+"$&4#.2<14& *%$#&(&\)"#$#%&3()]&D(&Z?E& •! !"#$#%4&L#.%<1&#Y&4)1<.@(2& 4)(=(@&6($(&4$2.<$.21H&)2#P*614&(& 4.27(<14& S.^&61%4*$A&14=3($1& a"1&4<1%1&(L#P1&<#%$(*%4&+@#44A& 4.27(<14K&(%6&5(4&21%61216&*%&Vb& •! !"#$#%4&61)#4*$16&#%&6*Y.41&4.27(<14& •! 0@.^&4(3)@14&Q@$1216&1(4*12&$"(%& –! 81@6&*%&(&Z?E&4)(=(@&6($(&4$2.<$.21& !"#$#%&'())*%+& :"A&'()&!"#$#%4[& 3*%.$14&.4*%+&)"#$#%&3())*%+O&a"1& )($"&4(3)@14K&214.@=%+&*%&122#2&($& 4(31&4<1%1&$##9&W&"#.24&7#2&21%612& –! G.27(<14&%116&%#$&L1&)(2(31$12*/16& •! ,1%41%&JT;:&UVK&UW& @#512&721M.1%<*14&•! 8*+"&P(2*(%<1&*%&'#%$1?>(2@#& 5*$"&;(6*(%<1K&(&21%612*%+&4A4$13&$"($& •! !"#$#%4&!"##$!%$&'()'*+%,'%-+!./0'72#3& •! G*3.@($14&$"1&$2(%4)#2$&*%6*P*6.(@& 21%612*%+4&214.@$4&*%&%#*41& .416&2(6*#4*$A&7#2&6*Y.41&21S1<=#%&(%6& )"#$#%4& •! J22#2&*4&(&214.@$&L*(4K&5"*<"& 1A1& •! >#@@1<=#%&61)#4*$16&)"#$#%4& )($"&$2(<*%+&7#2&+@#44A&21S1<=#%O& •! !"#$#%4&13*X16&72#3&@*+"$&4#.2<14& *%$#&(&\)"#$#%&3()]&D(&Z?E& •! !"#$#%4&L#.%<1&#Y&4)1<.@(2& 61<21(414&(4&$"1&%.3L12&4)(=(@&6($(&4$2.<$.21H&)2#P*614&(& 4.27(<14& S.^&61%4*$A&14=3($1& a"1&4<1%1&(L#P1&<#%$(*%4&+@#44A& 4(3)@14&*%<21(41& 4.27(<14K&(%6&5(4&21%61216&*%&Vb& •! !"#$#%4&61)#4*$16&#%&6*Y.41&4.27(<14& •! 0@.^&4(3)@14&Q@$1216&1(4*12&$"(%& –! 81@6&*%&(&Z?E&4)(=(@&6($(&4$2.<$.21& 3*%.$14&.4*%+&)"#$#%&3())*%+O&a"1& •! _%6K&#"&A1("K&*$`4&(&@#$&7(4$12&)($"&4(3)@14K&214.@=%+&*%&122#2&($& 4(31&4<1%1&$##9&W&"#.24&7#2&21%612& –! G.27(<14&%116&%#$&L1&)(2(31$12*/16& @#512&721M.1%<*14& 5*$"&;(6*(%<1K&(&21%612*%+&4A4$13&$"($& •! !"#$#%4&!"##$!%$&'()'*+%,'%-+!./0'72#3& .416&2(6*#4*$A&7#2&6*Y.41&21S1<=#%&(%6& 1A1& •! J22#2&*4&(&214.@$&L*(4K&5"*<"& 61<21(414&(4&$"1&%.3L12& )($"&$2(<*%+&7#2&+@#44A&21S1<=#%O& 4(3)@14&*%<21(41& •! _%6K&#"&A1("K&*$`4&(&@#$&7(4$12&

Photon Mapping

:"($&*4&(&!"#$#%[& SourcesG#.2<14& !p :"($&*4&(&!"#$#%[& •! _&)"#$#%&*&*4&(&)(2=<@1&@*+"$& G#.2<14&•! !#*%$&4#.2<1& $"($&<(22*14&S.^&!"*D!*K&!*H& –! !"#$#%4&13*X16&.%*7#23@A&*%&(@@& !–p! !#512B&!"*&c&3(+%*$.61&D*%& 6*21<=#%4& :(X4H&(%6&<#@#2&$"1&S.^&*$& • !"p ! !#512&4#.2<1&D:H&6*4$2*L.$16& •! _&)"#$#%&*&*4&(&)(2=<@1&@*+"$& <(22*14K&4$#216&(4&(%&;TR&$2*)@1& •! !#*%$&4#.2<1&1P1%@A&(3#%+&)"#$#%4& –! !#4*=#%B&!*&c&@#<(=#%&$"1& •! 0@.^&1(<"&)"#$#%&1M.(@&$#&4#.2<1& $"($&<(22*14&S.^&!"*D!*K&!*H& )"#$#%& xp –! !"#$#%4&13*X16&.%*7#23@A&*%&(@@& )#512&6*P*616&LA&$#$(@&d&)"#$#%4& –! E*21<=#%B&! &c&$"1&*%<*61%$& –! !#512B&!"*&c&3(+%*$.61&D*%& * 6*21<=#%4&•! 6*21<=#%&!.&.416&$#&<#3).$1& 0#2&1^(3)@1K&(&Wb:&@*+"$&L.@L&5#.@6& :(X4H&(%6&<#@#2&$"1&S.^&*$& *22(6*(%<1&!" •! !#512&4#.2<1&D:H&6*4$2*L.$16&41%6&#.$&(&$#$(@&ebb-&)"#$#%4K& <(22*14K&4$#216&(4&(%&;TR&$2*)@1& •! !"#$#%4&P4O&2(A4&p 1(<"&<(22A*%+&(&S.^&!"&bOW&3:& –! !"#$#%4&)2#)#+($1&S.^& 1P1%@A&(3#%+&)"#$#%4&•! !"#$#%4&41%$&#.$&#%<1&)12&4*3.@(=#%K& –! !#4*=#%B&! &c&@#<(=#%&$"1& %#$&<#%=%.#.4@A&(4&*%&2(6*#4*$A& * –! ;(A4&+($"12&2(6*(%<1& •! )"#$#%& xp 0@.^&1(<"&)"#$#%&1M.(@&$#&4#.2<1& )#512&6*P*616&LA&$#$(@&d&)"#$#%4& –! E*21<=#%B&! &c&$"1&*%<*61%$& * •! 6*21<=#%&!.&.416&$#&<#3).$1& 0#2&1^(3)@1K&(&Wb:&@*+"$&L.@L&5#.@6& *22(6*(%<1& 41%6&#.$&(&$#$(@&ebb-&)"#$#%4K& •! !"#$#%4&P4O&2(A4& 1(<"&<(22A*%+&(&S.^&!"&bOW&3:& –! !"#$#%4&)2#)#+($1&S.^& •! !"#$#%4&41%$&#.$&#%<1&)12&4*3.@(=#%K& –! ;(A4&+($"12&2(6*(%<1& %#$&<#%=%.#.4@A&(4&*%&2(6*#4*$A& 1

1 Photon Mapping !"#$%&'()*+,$-& H(--"+2&H4(1$I$& Mixed Surfaces ? •! '()*+,$-&.+/$&-0$,(1+)&+2%& •! J)/4&K&L")MN&'OC& !"#$%&'()*+,$-& •! H(--"+2&H4(1$I$& %"3(-$&,45042$26-& !d = 50% H$8$,6$%&8(#&421?&+&*)+,=42&4*& = 30% "2,"%$26&8(#& –! &! &7&%"3(-$&)$8$,6+2,$& !s ? ! •! JP$)&-$/$)+1&)$8$,=42-N&-0$2%"2>& –! &!"&7&-0$,(1+)&)$8$,6+2,$& +&146&4*&=5$&M$$0"2>&6)+,M&4*&/$)?& – •! '()*+,$-&.+/$&-0$,(1+)! &!!&9&!"&:&;&<,42-$)/+=42&4*&&+2%& 1"I1$&8(#& •! J)/4&K&L")MN&'OC& $2$)>?@& •! D2-6$+%N&,4501$6$1?&+B-4)B&-45$&•! %"3(-$&,45042$26-&•! A$6&!&B$&+&(2"*4)5&)+2%45&/+1($& !d = 50% 0.4642-&+2%&,4501$6$1?&)$8$,6&H$8$,6$%&8(#&421?&+&*)+,=42&4*& 46.$)-&&+6&*(11&04G$)& *)45&C&64&;& ! = 30% "2,"%$26&8(#& –! &!!&7&%"3(-$&)$8$,6+2,$& s •! '0$2%&=5$&6)+,"2>&*$G$)&*(11& •! D*&!&:&!!&6.$2&)$8$,6&%"3(-$& 04G$)&0.4642-& •! JP$)&-$/$)+1&)$8$,=42-N&-0$2%"2>& –! & &7&-0$,(1+)&)$8$,6+2,$& •! Q)4B+B"1"6?&4*&)$8$,6+2,$&"-&6.$& !" •! E1-$&"*&!&:&!!&9&!"&6.$2&)$8$,6& +&146&4*&=5$&M$$0"2>&6)+,M&4*&/$)?& -0$,(1+)& )$8$,6+2,$&!R& –! &! &9&! &:&;&<,42-$)/+=42&4*& 1"I1$&8(#&! = 60%" ! " •! F6.$)G"-$&+B-4)B& Russian Roulette Example•! Q)4B+B"1"6?&4*&+B-4)0=42&"-&;&7&!R&& $2$)>?@& •! D2-6$+%N&,4501$6$1?&+B-4)B&-45$& 0.4642-&+2%&,4501$6$1?&)$8$,6& •! A$6&!&B$&+&(2"*4)5&)+2%45&/+1($& Surface reflectance: R = 0.5 *)45&C&64&;& 46.$)-&&+6&*(11&04G$)& Incoming photon: Φp =2W •! '0$2%&=5$&6)+,"2>&*$G$)&*(11& •! D*&!&:&!!&6.$2&)$8$,6&%"3(-$& 04G$)&0.4642-& •! E1-$&"*&!&:&!!&9&!"&6.$2&)$8$,6& •! Q)4B+B"1"6?&4*&)$8$,6+2,$&"-&6.$& -0$,(1+)& r = random(); )$8$,6+2,$&!R& if ( r < 0.5 ) ! = 60%" •! F6.$)G"-$&+B-4)B& •! Q)4B+B"1"6?&4*&+B-4)0=42&"-&;&7&!R&& '64)"2>&Q.4642-& reflect photon with powerLTW&])$$& 2 W else •! S-$-&+&M%T6)$$&7&+&-$U($2,$&4*&+#"-T +1">2$%&0+)==42-& photon is absorbed •! ^"/$2&+&1+)>$&2(5B$)&4*&04"26-&0;N_N02&"2&XW& –! VTW&0+)==42-&+)$&1"2$-& -0+,$&G$&G+26&64&,1+--"*?&6.$5&+2%&B$&+B1$&64& –! XTW&0+)==42-&+)$&01+2$-& •! J#"-&4*&0+)==42-&+16$)2+6$-&G)6& 5+M$&*+-6&U($)"$-`& %$06.&4*&6.$&6)$$& – •! J/$)+>$&+,,$--&=5$&"-&#<14>&$@& !a"2%&+11&6.$&04"26-&G"6."2&+&,(B4"%& •! Y4)-6&,+-$&#<$@&G.$2&6)$$&"-& –!a"2%&+11&6.$&04"26-&G"6."2&+&2$">.B4().44%&4*&+& -$/$)$1?&140-"%$%& •! Z$$%&64&5+"26+"2&+&B+1+2,$%&6)$$N& >"/$2&04"26& G.",.&,+2&B$&%42$&"2&#<$&14>&$@& •! ].$-$&04"26-&+)$&0.4642&04-"=42-&42&-()*+,$-R& •! [+2&\2%&M&2$+)$-6&2$">.B4)-&"2& #<%&9&14>&$@&=5$&(-"2>&+&.$+0&

'64)"2>&Q.4642-& LTW&])$$&

•! S-$-&+&M%T6)$$&7&+&-$U($2,$&4*&+#"-T +1">2$%&0+)==42-& •! ^"/$2&+&1+)>$&2(5B$)&4*&04"26-&0;N_N02&"2&XW& –! VTW&0+)==42-&+)$&1"2$-& -0+,$&G$&G+26&64&,1+--"*?&6.$5&+2%&B$&+B1$&64& –! XTW&0+)==42-&+)$&01+2$-<W&])$$& LTW&])$$& •! J#"-&4*&0+)==42-&+16$)2+6$-&G)6& 5+M$&*+-6&U($)"$-`& •! •! J<W&6)$$&"-&b(-6&+2&+#"-&+1">2$%&c'Q&6)$$R& Y)"6$&0"&d&<#;"N&#V"N&#X"@& %$06.&4*&6.$&6)$$& •! A$6&#be&B$&6.$&5$%"+2&4*&6.$&/+1($-&4*&6.$&b6.&,44)%"2+6$&–!a"2%&+11&6.$&04"26-&G"6."2&+&,(B4"%& •! J/$)+>$&+,,$--&=5$&"-&•! E+,.& 24%$&#<14> 4*& 6.$&&$@& 6)$$& -64)$-& +& -$0+)+=2>& &42$& '6+)6&G"6.&#;e&G.",.&G"11&0+)==42&6.$&4)">"2+1&-$6&4*&04"26-&–!a"2%&+11&6.$&04"26-&G"6."2&+&2$">.B4().44%&4*&+& -$/$)$1?&140-"%$%& "264&6G4&-$6-&<%"/"%$%&+142>&6.$&f&+#"-@R& 4*&6.$&,44)%"2+6$-R&& •! Z4G&+001?&6.$&-+5$&0)4,$%()$&64&$+,.&4*&6.$&1$PT&+2%&)">.6T>"/$2&04"26& •! Z$$%&64&5+"26+"2&+&B+1+2,$%&6)$$N& -$6-N&$#,$06&24G&-(B%"/"%$&42&#Ve&& G.",.&,+2&B$&%42$&"2&•! ].$&1$+/$-&4*&6.$&6)$$&,426+"2&6.$&4)">"2+1&%+6+&#<$&14>&$@& •! Z4G&+001?&6.$&-+5$&0)4,$%()$&)$,()-"/$1?&64&$+,.&4*&6.$-$& 04"26-R&& -(B-$6-&$#,$06&24G&-(B%"/"%$&42&#•! ].$-$&04"26-&+)$&0.4642&04-"=42-&42&-()*+,$-R&Xe&& •! [+2&\2%&M&2$+)$-6&2$">.B4)-&"2& •! L$$0&+001?"2>&6."-&)$,()-"/$1?&(2=1&$+,.&1$+*&4*&6.$&6)$$& #<%&9&14>&$@&=5$&(-"2>&+&.$+0& ,426+"2-&+&%+6+&04"26R&&

2

LTW&])$$& LTW&])$$&

•! •! J<W&6)$$&"-&b(-6&+2&+#"-&+1">2$%&c'Q&6)$$R& Y)"6$&0"&d&<#;"N&#V"N&#X"@& •! A$6&#be&B$&6.$&5$%"+2&4*&6.$&/+1($-&4*&6.$&b6.&,44)%"2+6$& •! E+,.& 24%$& 4*& 6.$& 6)$$& -64)$-& +& -$0+)+=2>& "2+1&-$6&4*&04"26-& 01+2$N&%$\2$%&B?&6.$&5$%"+2&/+1($&+142>&42$& "264&6G4&-$6-&<%"/"%$%&+142>&6.$&f&+#"-@R& 4*&6.$&,44)%"2+6$-R&& •! Z4G&+001?&6.$&-+5$&0)4,$%()$&64&$+,.&4*&6.$&1$PT&+2%&)">.6T -$6-N&$#,$06&24G&-(B%"/"%$&42&#Ve&& •! ].$&1$+/$-&4*&6.$&6)$$&,426+"2&6.$&4)">"2+1&%+6+& •! Z4G&+001?&6.$&-+5$&0)4,$%()$&)$,()-"/$1?&64&$+,.&4*&6.$-$& 04"26-R&& -(B-$6-&$#,$06&24G&-(B%"/"%$&42&& •! L$$0&+001?"2>&6."-&)$,()-"/$1?&(2=1&$+,.&1$+*&4*&6.$&6)$$& ,426+"2-&+&%+6+&04"26R&&

2 !"#$#%&'())*%+&!,#-.//&01.,1*.2 Photon Mapping

!"#$#%&'())*%+&*,&(&-&,$(+.&)/#0.,,1 !)%*&+,&-.#"$#/0&)1%&213)3/&45* 2'*$&)"#$#%,&3/#'&$".&4*+"$, 50($$./&)"#$#%,&*%&$".&,0.%.&6&)"#$#%&*%$./(0$*#%,& 7*$"Y.0$, 5$#/.&)"#$#%,&*%&$".&)"#$#%&'() !)%*&',&67#/0&)1%&*13)3/&85*&#/&95:&)95;#/0&<&=#/5"& 9%/$%9#/0 :$&*%$./,.0$*#%&)#*%$,&;&*%,$.(<&0(40=4($*%+&$".& <*33=,.&4*+"$*%+&0#')#%.%$&3/#'&$".&%#/'(4&>.0$#/?& $".&<*33=,.&4*+"$*%+&0#')#%.%$&0#'.,&3/#'&$".& )"#$#%&'()1

CSCD 570 !"#$%&'( 11/12/08 !"#$%&'()*+,$-& H(--"+2&H4(1$I$& ? •! '()*+,$-&.+/$&-0$,(1+)&+2%& •! J)/4&K&L")MN&'OC&

%"3(-$&,45042$26-& !d = 50% •! H$8$,6$%&8(#&421?&+&*)+,=42&4*& = 30% "2,"%$26&8(#& –! &! &7&%"3(-$&)$8$,6+2,$& !s ! •! JP$)&-$/$)+1&)$8$,=42-N&-0$2%"2>& –! &!"&7&-0$,(1+)&)$8$,6+2,$& +&146&4*&=5$&M$$0"2>&6)+,M&4*&/$)?& –! &!!&9&!"&:&;&<,42-$)/+=42&4*& 1"I1$&8(#& $2$)>?@& •! D2-6$+%N&,4501$6$1?&+B-4)B&-45$& •! A$6&!&B$&+&(2"*4)5&)+2%45&/+1($& 0.4642-&+2%&,4501$6$1?&)$8$,6& *)45&C&64&;& 46.$)-&&+6&*(11&04G$)& •! '0$2%&=5$&6)+,"2>&*$G$)&*(11& •! D*&!&:&!!&6.$2&)$8$,6&%"3(-$& 04G$)&0.4642-& •! E1-$&"*&!&:&!!&9&!"&6.$2&)$8$,6& •! Q)4B+B"1"6?&4*&)$8$,6+2,$&"-&6.$& -0$,(1+)& )$8$,6+2,$&!R& ! = 60%" •! F6.$)G"-$&+B-4)B& •! Q)4B+B"1"6?&4*&+B-4)0=42&"-&;&7&!R&&

Photon Mapping

'64)"2>&Q.4642-& LTW&])$$&

•! S-$-&+&M%T6)$$&7&+&-$U($2,$&4*&+#"-T +1">2$%&0+)==42-& •! ^"/$2&+&1+)>$&2(5B$)&4*&04"26-&0;N_N02&"2&XW& –! VTW&0+)==42-&+)$&1"2$-& -0+,$&G$&G+26&64&,1+--"*?&6.$5&+2%&B$&+B1$&64& –! XTW&0+)==42-&+)$&01+2$-& •! J#"-&4*&0+)==42-&+16$)2+6$-&G)6& 5+M$&*+-6&U($)"$-`& %$06.&4*&6.$&6)$$& – •! J/$)+>$&+,,$--&=5$&"-&#<14>&$@& !a"2%&+11&6.$&04"26-&G"6."2&+&,(B4"%& •! Y4)-6&,+-$&#<$@&G.$2&6)$$&"-& –!a"2%&+11&6.$&04"26-&G"6."2&+&2$">.B4().44%&4*&+& -$/$)$1?&140-"%$%& •! Z$$%&64&5+"26+"2&+&B+1+2,$%&6)$$N& >"/$2&04"26& G.",.&,+2&B$&%42$&"2&#<$&14>&$@& •! ].$-$&04"26-&+)$&0.4642&04-"=42-&42&-()*+,$-R& •! [+2&\2%&M&2$+)$-6&2$">.B4)-&"2& #<%&9&14>&$@&=5$&(-"2>&+&.$+0&

LTW&])$$& LTW&])$$&

•! •! J<W&6)$$&"-&b(-6&+2&+#"-&+1">2$%&c'Q&6)$$R& Y)"6$&0"&d&<#;"N&#V"N&#X"@& •! A$6&#be&B$&6.$&5$%"+2&4*&6.$&/+1($-&4*&6.$&b6.&,44)%"2+6$& •! E+,.& 24%$& 4*& 6.$& 6)$$& -64)$-& +& -$0+)+=2>& "2+1&-$6&4*&04"26-& 01+2$N&%$\2$%&B?&6.$&5$%"+2&/+1($&+142>&42$& "264&6G4&-$6-&<%"/"%$%&+142>&6.$&f&+#"-@R& 4*&6.$&,44)%"2+6$-R&& •! Z4G&+001?&6.$&-+5$&0)4,$%()$&64&$+,.&4*&6.$&1$PT&+2%&)">.6T -$6-N&$#,$06&24G&-(B%"/"%$&42&#Ve&& •! ].$&1$+/$-&4*&6.$&6)$$&,426+"2&6.$&4)">"2+1&%+6+& •! Z4G&+001?&6.$&-+5$&0)4,$%()$&)$,()-"/$1?&64&$+,.&4*&6.$-$& 04"26-R&& -(B-$6-&$#,$06&24G&-(B%"/"%$&42&& •! L$$0&+001?"2>&6."-&)$,()-"/$1?&(2=1&$+,.&1$+*&4*&6.$&6)$$& ,426+"2-&+&%+6+&04"26R&&

2 !"#$%&'()*+,$-& H(--"+2&H4(1$I$& ? •! '()*+,$-&.+/$&-0$,(1+)&+2%& •! J)/4&K&L")MN&'OC&

%"3(-$&,45042$26-& !d = 50% •! H$8$,6$%&8(#&421?&+&*)+,=42&4*& = 30% "2,"%$26&8(#& –! &! &7&%"3(-$&)$8$,6+2,$& !s ! •! JP$)&-$/$)+1&)$8$,=42-N&-0$2%"2>& –! &!"&7&-0$,(1+)&)$8$,6+2,$& +&146&4*&=5$&M$$0"2>&6)+,M&4*&/$)?& –! &!!&9&!"&:&;&<,42-$)/+=42&4*& 1"I1$&8(#& $2$)>?@& •! D2-6$+%N&,4501$6$1?&+B-4)B&-45$& •! A$6&!&B$&+&(2"*4)5&)+2%45&/+1($& 0.4642-&+2%&,4501$6$1?&)$8$,6& *)45&C&64&;& 46.$)-&&+6&*(11&04G$)& •! '0$2%&=5$&6)+,"2>&*$G$)&*(11& •! D*&!&:&!!&6.$2&)$8$,6&%"3(-$& 04G$)&0.4642-& •! E1-$&"*&!&:&!!&9&!"&6.$2&)$8$,6& •! Q)4B+B"1"6?&4*&)$8$,6+2,$&"-&6.$& -0$,(1+)& )$8$,6+2,$&!R& ! = 60%" •! F6.$)G"-$&+B-4)B& •! Q)4B+B"1"6?&4*&+B-4)0=42&"-&;&7&!R&&

'64)"2>&Q.4642-& LTW&])$$&

•! S-$-&+&M%T6)$$&7&+&-$U($2,$&4*&+#"-T +1">2$%&0+)==42-& •! ^"/$2&+&1+)>$&2(5B$)&4*&04"26-&0;N_N02&"2&XW& –! VTW&0+)==42-&+)$&1"2$-& -0+,$&G$&G+26&64&,1+--"*?&6.$5&+2%&B$&+B1$&64& –! XTW&0+)==42-&+)$&01+2$-& •! J#"-&4*&0+)==42-&+16$)2+6$-&G)6& 5+M$&*+-6&U($)"$-`& %$06.&4*&6.$&6)$$& – •! J/$)+>$&+,,$--&=5$&"-&#<14>&$@& !a"2%&+11&6.$&04"26-&G"6."2&+&,(B4"%& •! Y4)-6&,+-$&#<$@&G.$2&6)$$&"-& –!a"2%&+11&6.$&04"26-&G"6."2&+&2$">.B4().44%&4*&+& -$/$)$1?&140-"%$%& •! Z$$%&64&5+"26+"2&+&B+1+2,$%&6)$$N& >"/$2&04"26& G.",.&,+2&B$&%42$&"2&#<$&14>&$@& •! ].$-$&04"26-&+)$&0.4642&04-"=42-&42&-()*+,$-R& •! [+2&\2%&M&2$+)$-6&2$">.B4)-&"2& #<%&9&14>&$@&=5$&(-"2>&+&.$+0&

Photon Mapping

LTW&])$$& LTW&])$$&

•! •! J<W&6)$$&"-&b(-6&+2&+#"-&+1">2$%&c'Q&6)$$R& Y)"6$&0"&d&<#;"N&#V"N&#X"@& •! A$6&#be&B$&6.$&5$%"+2&4*&6.$&/+1($-&4*&6.$&b6.&,44)%"2+6$& •! E+,.& 24%$& 4*& 6.$& 6)$$& -64)$-& +& -$0+)+=2>& "2+1&-$6&4*&04"26-& 01+2$N&%$\2$%&B?&6.$&5$%"+2&/+1($&+142>&42$& "264&6G4&-$6-&<%"/"%$%&+142>&6.$&f&+#"-@R& 4*&6.$&,44)%"2+6$-R&& •! Z4G&+001?&6.$&-+5$&0)4,$%()$&64&$+,.&4*&6.$&1$PT&+2%&)">.6T -$6-N&$#,$06&24G&-(B%"/"%$&42&#Ve&& •! ].$&1$+/$-&4*&6.$&6)$$&,426+"2&6.$&4)">"2+1&%+6+& •! Z4G&+001?&6.$&-+5$&0)4,$%()$&)$,()-"/$1?&64&$+,.&4*&6.$-$& 04"26-R&& -(B-$6-&$#,$06&24G&-(B%"/"%$&42&& •! L$$0&+001?"2>&6."-&)$,()-"/$1?&(2=1&$+,.&1$+*&4*&6.$&6)$$& ,426+"2-&+&%+6+&04"26R&&

2 !"#$%&'()*+,$-& H(--"+2&H4(1$I$& ? •! '()*+,$-&.+/$&-0$,(1+)&+2%& •! J)/4&K&L")MN&'OC&

%"3(-$&,45042$26-& !d = 50% •! H$8$,6$%&8(#&421?&+&*)+,=42&4*& = 30% "2,"%$26&8(#& –! &! &7&%"3(-$&)$8$,6+2,$& !s ! •! JP$)&-$/$)+1&)$8$,=42-N&-0$2%"2>& –! &!"&7&-0$,(1+)&)$8$,6+2,$& +&146&4*&=5$&M$$0"2>&6)+,M&4*&/$)?& –! &!!&9&!"&:&;&<,42-$)/+=42&4*& 1"I1$&8(#& $2$)>?@& •! D2-6$+%N&,4501$6$1?&+B-4)B&-45$& •! A$6&!&B$&+&(2"*4)5&)+2%45&/+1($& 0.4642-&+2%&,4501$6$1?&)$8$,6& *)45&C&64&;& 46.$)-&&+6&*(11&04G$)& •! '0$2%&=5$&6)+,"2>&*$G$)&*(11& •! D*&!&:&!!&6.$2&)$8$,6&%"3(-$& 04G$)&0.4642-& •! E1-$&"*&!&:&!!&9&!"&6.$2&)$8$,6& •! Q)4B+B"1"6?&4*&)$8$,6+2,$&"-&6.$& -0$,(1+)& )$8$,6+2,$&!R& ! = 60%" •! F6.$)G"-$&+B-4)B& •! Q)4B+B"1"6?&4*&+B-4)0=42&"-&;&7&!R&&

'64)"2>&Q.4642-& LTW&])$$&

•! S-$-&+&M%T6)$$&7&+&-$U($2,$&4*&+#"-T +1">2$%&0+)==42-& •! ^"/$2&+&1+)>$&2(5B$)&4*&04"26-&0;N_N02&"2&XW& –! VTW&0+)==42-&+)$&1"2$-& -0+,$&G$&G+26&64&,1+--"*?&6.$5&+2%&B$&+B1$&64& –! XTW&0+)==42-&+)$&01+2$-& •! J#"-&4*&0+)==42-&+16$)2+6$-&G)6& 5+M$&*+-6&U($)"$-`& %$06.&4*&6.$&6)$$& – •! J/$)+>$&+,,$--&=5$&"-&#<14>&$@& !a"2%&+11&6.$&04"26-&G"6."2&+&,(B4"%& •! Y4)-6&,+-$&#<$@&G.$2&6)$$&"-& –!a"2%&+11&6.$&04"26-&G"6."2&+&2$">.B4().44%&4*&+& -$/$)$1?&140-"%$%& •! Z$$%&64&5+"26+"2&+&B+1+2,$%&6)$$N& >"/$2&04"26& G.",.&,+2&B$&%42$&"2&#<$&14>&$@& •! ].$-$&04"26-&+)$&0.4642&04-"=42-&42&-()*+,$-R& •! [+2&\2%&M&2$+)$-6&2$">.B4)-&"2& #<%&9&14>&$@&=5$&(-"2>&+&.$+0&

Photon Mapping

LTW&])$$& LTW&])$$&

•! •! J<W&6)$$&"-&b(-6&+2&+#"-&+1">2$%&c'Q&6)$$R& Y)"6$&0"&d&<#;"N&#V"N&#X"@& •! A$6&#be&B$&6.$&5$%"+2&4*&6.$&/+1($-&4*&6.$&b6.&,44)%"2+6$& •! E+,.& 24%$& 4*& 6.$& 6)$$& -64)$-& +& -$0+)+=2>& "2+1&-$6&4*&04"26-& 01+2$N&%$\2$%&B?&6.$&5$%"+2&/+1($&+142>&42$& "264&6G4&-$6-&<%"/"%$%&+142>&6.$&f&+#"-@R& 4*&6.$&,44)%"2+6$-R&& •! Z4G&+001?&6.$&-+5$&0)4,$%()$&64&$+,.&4*&6.$&1$PT&+2%&)">.6T -$6-N&$#,$06&24G&-(B%"/"%$&42&#Ve&& •! ].$&1$+/$-&4*&6.$&6)$$&,426+"2&6.$&4)">"2+1&%+6+& •! Z4G&+001?&6.$&-+5$&0)4,$%()$&)$,()-"/$1?&64&$+,.&4*&6.$-$& 04"26-R&& -(B-$6-&$#,$06&24G&-(B%"/"%$&42&& •! L$$0&+001?"2>&6."-&)$,()-"/$1?&(2=1&$+,.&1$+*&4*&6.$&6)$$& ,426+"2-&+&%+6+&04"26R&&

2 Photon Mapping !"#$%&''$(#$)*+,-.'$ !"#$%&''$(#$)*+,-.'$

!"#$%&''$(#$)*+,-.'$ !"#$%&''$/01'$

KDTree makeKDTree(int n, point_kd p[], int depth) /*returns a kd-tree for the n 3-dimensional points in p - assume all indices start from 1*/ { if n==1 return a leaf containing p[1]; /*base case*/

x = median of values of (depth mod 3) coordinate in the points; pLeft is the set of points to the left of x and pRight is the set to the right;

leftNode = makeKDTree(n/2,pLeft,depth+1); rightNode = makeKDTree(n/2,pRight,depth+1); /*assumes that the median splits the points exactly in two*/

/*compose a new node and return*/ return compose(leftNode,x,rightNode); }

!"#$%&''$213+45+6'7$ H'I'>5'1$H+19+4>'$

•! 87946$+$!"#$5&''$70.:;04$10'7$405$1'-'41$04$ •! H'>+..$5<'$&'I'>5'1$&+19+4>'$'E:+;04$ 5<'$ -&0391946$ +$ ,'7<$ 04$ 5<'$ 7:&=+>'7$ ?$ 5<'$ !A = !r2 1975&9@:;04$ 0=$ 5<'$ -<05047$ 97$ ,+945+94'1$ 941'-'41'45.A$ 0=$ 5<'$ &'-&'7'45+;04$ 0=$ 5<'$ •! /043'&5$94>91'45$&+19+4>'$9450$94>91'45$I:*$ 7:&=+>'7$ •! %<'$,'5<01$10'7$405$&'.A$04$B&'6:.+&C$7:&=+>'7$ •! H'I'>5'1$&+19+4>'$94$5'&,7$0=$94>91'45$I:*$ 7:><$+7$-0.A6047D$@:5$>0:.1$'E:+..A$F'..$+--.A$ 50$=&+>5+.$5A-'$7:&=+>'7G$ •! J:,'&9>+..A$

3 !"#$%&''$(#$)*+,-.'$ !"#$%&''$(#$)*+,-.'$Photon Mapping

!"#$%&''$(#$)*+,-.'$ !"#$%&''$/01'$

KDTree makeKDTree(int n, point_kd p[], int depth) /*returns a kd-tree for the n 3-dimensional points in p - assume all indices start from 1*/ { if n==1 return a leaf containing p[1]; /*base case*/

x = median of values of (depth mod 3) coordinate in the points; pLeft is the set of points to the left of x and pRight is the set to the right;

leftNode = makeKDTree(n/2,pLeft,depth+1); rightNode = makeKDTree(n/2,pRight,depth+1); /*assumes that the median splits the points exactly in two*/

/*compose a new node and return*/ return compose(leftNode,x,rightNode); }

!"#$%&''$213+45+6'7$ H'I'>5'1$H+19+4>'$

•! 87946$+$!"#$5&''$70.:;04$10'7$405$1'-'41$04$ •! H'>+..$5<'$&'I'>5'1$&+19+4>'$'E:+;04$ 5<'$ -&0391946$ +$ ,'7<$ 04$ 5<'$ 7:&=+>'7$ ?$ 5<'$ !A = !r2 1975&9@:;04$ 0=$ 5<'$ -<05047$ 97$ ,+945+94'1$ 941'-'41'45.A$ 0=$ 5<'$ &'-&'7'45+;04$ 0=$ 5<'$ •! /043'&5$94>91'45$&+19+4>'$9450$94>91'45$I:*$ 7:&=+>'7$ •! %<'$,'5<01$10'7$405$&'.A$04$B&'6:.+&C$7:&=+>'7$ •! H'I'>5'1$&+19+4>'$94$5'&,7$0=$94>91'45$I:*$ 7:><$+7$-0.A6047D$@:5$>0:.1$'E:+..A$F'..$+--.A$ 50$=&+>5+.$5A-'$7:&=+>'7G$ •! J:,'&9>+..A$

3 !"#$%&''$(#$)*+,-.'$ !"#$%&''$(#$)*+,-.'$Photon Mapping

!"#$%&''$(#$)*+,-.'$ !"#$%&''$/01'$

KDTree makeKDTree(int n, point_kd p[], int depth) /*returns a kd-tree for the n 3-dimensional points in p - assume all indices start from 1*/ { if n==1 return a leaf containing p[1]; /*base case*/

x = median of values of (depth mod 3) coordinate in the points; pLeft is the set of points to the left of x and pRight is the set to the right;

leftNode = makeKDTree(n/2,pLeft,depth+1); rightNode = makeKDTree(n/2,pRight,depth+1); /*assumes that the median splits the points exactly in two*/

/*compose a new node and return*/ return compose(leftNode,x,rightNode); }

!"#$%&''$213+45+6'7$ H'I'>5'1$H+19+4>'$

•! 87946$+$!"#$5&''$70.:;04$10'7$405$1'-'41$04$ •! H'>+..$5<'$&'I'>5'1$&+19+4>'$'E:+;04$ 5<'$ -&0391946$ +$ ,'7<$ 04$ 5<'$ 7:&=+>'7$ ?$ 5<'$ !A = !r2 1975&9@:;04$ 0=$ 5<'$ -<05047$ 97$ ,+945+94'1$ 941'-'41'45.A$ 0=$ 5<'$ &'-&'7'45+;04$ 0=$ 5<'$ •! /043'&5$94>91'45$&+19+4>'$9450$94>91'45$I:*$ 7:&=+>'7$ •! %<'$,'5<01$10'7$405$&'.A$04$B&'6:.+&C$7:&=+>'7$ •! H'I'>5'1$&+19+4>'$94$5'&,7$0=$94>91'45$I:*$ 7:><$+7$-0.A6047D$@:5$>0:.1$'E:+..A$F'..$+--.A$ 50$=&+>5+.$5A-'$7:&=+>'7G$ •! J:,'&9>+..A$

3 !"#$%&''$(#$)*+,-.'$ !"#$%&''$(#$)*+,-.'$

!"#$%&''$(#$)*+,-.'$ !"#$%&''$/01'$ Photon Mapping KDTree makeKDTree(int n, point_kd p[], int depth) /*returns a kd-tree for the n 3-dimensional points in p - assume all indices start from 1*/ { if n==1 return a leaf containing p[1]; /*base case*/

x = median of values of (depth mod 3) coordinate in the points; pLeft is the set of points to the left of x and pRight is the set to the right;

leftNode = makeKDTree(n/2,pLeft,depth+1); rightNode = makeKDTree(n/2,pRight,depth+1); /*assumes that the median splits the points exactly in two*/

/*compose a new node and return*/ return compose(leftNode,x,rightNode); }

!"#$%&''$213+45+6'7$ H'I'>5'1$H+19+4>'$

•! 87946$+$!"#$5&''$70.:;04$10'7$405$1'-'41$04$ •! H'>+..$5<'$&'I'>5'1$&+19+4>'$'E:+;04$ 5<'$ -&0391946$ +$ ,'7<$ 04$ 5<'$ 7:&=+>'7$ ?$ 5<'$ !A = !r2 1975&9@:;04$ 0=$ 5<'$ -<05047$ 97$ ,+945+94'1$ 941'-'41'45.A$ 0=$ 5<'$ &'-&'7'45+;04$ 0=$ 5<'$ •! /043'&5$94>91'45$&+19+4>'$9450$94>91'45$I:*$ 7:&=+>'7$ •! %<'$,'5<01$10'7$405$&'.A$04$B&'6:.+&C$7:&=+>'7$ •! H'I'>5'1$&+19+4>'$94$5'&,7$0=$94>91'45$I:*$ 7:><$+7$-0.A6047D$@:5$>0:.1$'E:+..A$F'..$+--.A$ 50$=&+>5+.$5A-'$7:&=+>'7G$ •! J:,'&9>+..A$

3 !"#$%&''$(#$)*+,-.'$ !"#$%&''$(#$)*+,-.'$

!"#$%&''$(#$)*+,-.'$ !"#$%&''$(#$)*+,-.'$

!"#$%&''$(#$)*+,-.'$ !"#$%&''$(#$)*+,-.'$

!"#$%&''$(#$)*+,-.'$ !"#$%&''$/01'$

KDTree makeKDTree(int n, point_kd p[], int depth) !"#$%&''$(#$)*+,-.'$ !"#$%&''$/01'$/*returns a kd-tree for the n 3-dimensional points in p - assume all indices start from 1*/ { KDTree makeKDTree(int if n==1 return an, leaf point_kd containing p[], int p[1];depth) /*base case*/ /*returns a kd-tree for the n 3-dimensional points in p - assume all indices start from 1*/ { x = median of values of (depth mod 3) coordinate in the points; if n==1 return a leaf containing p[1]; /*base case*/ pLeft is the set of points to the left of x and pRight is the set to the right;

x = median of values of (depth mod 3) coordinate in the points; pLeft is the set of leftNode points to the= makeKDTree(n/2,pLeft,depth+1); left of x and pRight is the set to the right; rightNode = makeKDTree(n/2,pRight,depth+1); /*assumes leftNode that = makeKDTree(n/2,pLeft,depth+1); the median splits the points exactly in two*/ !"#$%&''$(#$)*+,-.'$ !"#$%&''$/01'$ rightNode = makeKDTree(n/2,pRight,depth+1); /*assumes that the median splits the points exactly in two*/ /*composeKDTree makeKDTree(int a new node n, point_kd and return*/ p[], int depth) /*returns a kd-treereturn for compose(leftNode,x,rightNode); the n 3-dimensional points in p - assume all indices start from 1*/ /*compose a new node and{ return*/ } return compose(leftNode,x,rightNode); if n==1 return a leaf containing p[1]; /*base case*/

x = median} of values of (depth mod 3) coordinate in the points; pLeft is the set of points to the left of x and pRight is the set to the right;

leftNode = makeKDTree(n/2,pLeft,depth+1); rightNode = makeKDTree(n/2,pRight,depth+1); /*assumes that the median splits the points exactly in two*/

/*compose a new node and return*/ return compose(leftNode,x,rightNode); }

!"#$%&''$213+45+6'7$!"#$%&''$213+45+6'7$ H'I'>5'1$H+19+4>'$H'I'>5'1$H+19+4>'$Photon Mapping •! 87946$+$!"#$5&''$70.:;04$10'7$405$1'-'41$04$•! 87946$+$!"#$5&''$70.:;04$10'7$405$1'-'41$04$ ••!! H'>+..$5<'$&'I'>5'1$&+19+4>'$'E:+;04$H'>+..$5<'$&'I'>5'1$&+19+4>'$'E:+;04$ !"#$%&''$213+45+6'7$ H'I'>5'1$H+19+4>'$ 2 5<'$ -&0391946$5<'$ -&0391946$ +$ ,'7<$ +$ ,'7<$ 04$ 5<'$ 04$ 5<'$ 7:&=+>'7$ 7:&=+>'7$ ?$ ?$ 5<'$ 5<'$ !A = !!r A = !r2 1975&9@:;04$ 0=$ 5<'$ -<05047$ 97$ ,+945+94'1$ 1975&9@:;04$ 0=$ 5<'$ -<05047$•! 87946$+$!"#$5&''$70.:;04$10'7$405$1'-'41$04$ 97$ ,+945+94'1$ •! /043'&5$94>91'45$&+19+4>'$9450$94>91'45$I:*$•! H'>+..$5<'$&'I'>5'1$&+19+4>'$'E:+;04$ 941'-'41'45.A$ 0=$ 5<'$ &'-&'7'45+;04$5<'$ -&0391946$ +$ 0=$ ,'7<$ 5<'$ 04$ 5<'$ 7:&=+>'7$ ?$ 5<'$•! /043'&5$94>91'45$&+19+4>'$9450$94>91'45$I:*$ !A = !r2 941'-'41'45.A$7:&=+>'7$ 0=$ 5<'$ &'-&'7'45+;04$1975&9@:;04$ 0=$ 0=$ 5<'$ 5<'$ -<05047$ 97$ ,+945+94'1$ 7:&=+>'7$ 941'-'41'45.A$ 0=$ 5<'$ &'-&'7'45+;04$ 0=$ 5<'$ •! /043'&5$94>91'45$&+19+4>'$9450$94>91'45$I:*$ •! %<'$,'5<01$10'7$405$&'.A$04$B&'6:.+&C$7:&=+>'7$7:&=+>'7$ •! H'I'>5'1$&+19+4>'$94$5'&,7$0=$94>91'45$I:*$ •! •! %<'$,'5<01$10'7$405$&'.A$04$B&'6:.+&C$7:&=+>'7$7:><$+7$-0.A6047D$@:5$>0:.1$'E:+..A$F'..$+--.A$•! %<'$,'5<01$10'7$405$&'.A$04$B&'6:.+&C$7:&=+>'7$ H'I'>5'1$&+19+4>'$94$5'&,7$0=$94>91'45$I:*$•! H'I'>5'1$&+19+4>'$94$5'&,7$0=$94>91'45$I:*$ 7:><$+7$-0.A6047D$@:5$>0:.1$'E:+..A$F'..$+--.A$50$=&+>5+.$5A-'$7:&=+>'7G$ 7:><$+7$-0.A6047D$@:5$>0:.1$'E:+..A$F'..$+--.A$ 50$=&+>5+.$5A-'$7:&=+>'7G$ •! J:,'&9>+..A$ 50$=&+>5+.$5A-'$7:&=+>'7G$ •! J:,'&9>+..A$ •! J:,'&9>+..A$

3 3 3 Photon Mapping !"#$%&'($)*"+"',-$ B/>+14/'0$

•! !"#$./0$/,$+*1$2/,3$4&2/5,$!-$ •! 9""$;1#$7*"+"',$<&5,1$.>544($ •! 6&401$1'"50*$+*&+$+*1$2/,3$!"#$%&'($)*"+"',-$ B/>+14/'0$41,5>+,$ ,544"5'2,$+*1$"$'1&41,+$ •! C/:7>1$&D14&0/'0$74"25<1,$&$."E$ 7*"+"',8$ •! !"#$./0$/,$+*1$2/,3$4&2/5,$!-$ A&2/&'<1$1,=:&+1$5,/'0$?@$7*"+"',$ •! 9""$;1#$7*"+"',$<&5,1$.>544($F>+14/'0$";$7*"+"',$ •! 9*1$'5:.14$";$7*"+"',$5,12$;"4$•! 6&401$1'"50*$+*&+$+*1$2/,3$ 41,5>+,$•! )*"+"',$'1&414$+"$+*1$,&:7>1$ &$4&2/&'<1$1,=:&+1$,544"5'2,$+*1$"$/,$5,5&>>($"$'1&41,+$ •! C/:7>1$&D14&0/'0$74"25<1,$&$."E$ 7*"+"',8$ .1+#11'$?@$&'2$?@@8$ A&2/&'<1$1,=:&+1$5,/'0$?@$7*"+"',$ F>+14/'0$";$7*"+"',$,*"5>2$.1$#1/0*+12$:"41$*1&D/>($ •! 9*1$'5:.14$";$7*"+"',$5,12$;"4$ •! )*"+"',$'1&414$+"$+*1$,&:7>1$ &$4&2/&'<1$1,=:&+1$"$/,$5,5&>>($ •! A1,5>+,$/'$&$<"'1$F>+14/'0$";$ .1+#11'$?@$&'2$?@@8$ ,*"5>2$.1$#1/0*+12$:"41$*1&D/>($7*"+"',$ •! A1,5>+,$/'$&$<"'1$F>+14/'0$";$ 7*"+"',$

A = r2 A&2/&'<1$1,=:&+1$5,/'0$?@@$ ! ! !A = !r2 A&2/&'<1$1,=:&+1$5,/'0$?@@$ 7*"+"',$7*"+"',$

%5>=7>1$)*"+"'$%&7,$ A1'214/'0$

•! G>".&>$6HCIJKLJ$7*"+"'$:&7$ •! A1'21412$.($0>",,(Q,54;&<1$ %5>=7>1$)*"+"'$%&7,$ 2/,+4/.5+12$4&($+4&1N1K$ ,54;&<1S$ •! G>".&>$6HCIJKLJ$7*"+"'$:&7$ –! P":75+1$2/41<+$/>>5:/'&="'$•! A1'21412$.($0>",,(Q,54;&<1$ –! )*"+"',$2"'O+$,=<3$+"$,71<5>&4$ Caustic map Global map –! P":75+1$41T1<+12$4&2/&'<1$2/,+4/.5+12$4&($+4&".&>$ )*"+"'$,=<3,$+"$2/M5,1$,54;&<1$,54;&<1,$ photons photons ";$<&5,=<$:&7$7*"+"',$• –! U0'"41$0>".&>$:&7$7*"+"',$! R*1'$4&($*/+,$F4,+$2/M5,1$A1+54'$4&2/&'<1$";$<&5,=<$ :&7$ #"$$."5'<1,$+"$'1E+$,54;&<1$H/;$•! P&5,=<$6CCLJ$7*"+"'$:&7$ :&7$7*"+"',$*141Y$.5+$ –! U:7"4+&'<1$,&:7>1$VAJB$,54;&<1S$ % $ 7*"+"',$+"$ /+$,54D/D1,$A5,,/&'$4"5>1N1K$–! !/0*$41,">5="'$ ! /0'"41$0>".&>$:&7$7*"+"',$ 41+54'$ &,$5,5&>–! &P":75+1$2/41<+$/>>5:/'&="'$ –! 4&2/&'<1$ –! )*"+"',$2"'O+$,=<3$+"$6/0*+$,"54<1$5,5&>>($1:/+,$,71<5>&4$ Caustic map Global map –! W,1$0>".&>$7*"+"'$:&7$+"$ #*1'$ 7*"+"',$"'>($/'$2/41<="',$+*&+$ /:7"4+&'<1$,&:7>1$/'5&='0$ W,1$0>".&>$ */+$+*1$+*/'0$<41&='0$+*1$<&5,=<$ 4&2/&'<1$;5'<="'$";$<&5,=<$:&7$7*"+"',$'(& 6/$&+$F4,+$ A1+54'$4&2/&'<1$";$<&5,=<$ :&7$ –! XD&>5&+1$41T1<+&'<1$/'+104&>$–! U0'"41$0>".&>$:&7$7*"+"',$ 2/M5,1$ •! P&5,=<$6CCLJ$7*"+"'$:&7$ .($<&,='0$4&(,$&'2$ /'+14,1<="':&7$7*"+"',$*141Y$.5+$ 7*"+"',$+"$ &<<5:5>&='0$4&2/&'<1,$;4":$–! U:7"4+&'<1$,&:7>1$VAJB$%!$ /0'"41$0>".&>$:&7$7*"+"',$8$ 41+54'$ –! !/0*$41,">5="'$ 0>".&>$7*"+"'$:&7$ &,$5,5&>& 4&2/&'<1$ –! 6/0*+$,"54<1$5,5&>>($1:/+,$ –! W,1$0>".&>$7*"+"'$:&7$+"$ #*1'$ 7*"+"',$"'>($/'$2/41<="',$+*&+$ /:7"4+&'<1$,&:7>1$/'5&='0$ */+$+*1$+*/'0$<41&='0$+*1$<&5,=<$ 4&2/&'<1$;5'<="'$'(& 6/$&+$F4,+$ –! XD&>5&+1$41T1<+&'<1$/'+104&>$ 2/M5,1$ .($<&,='0$4&(,$&'2$ /'+14,1<="' &<<5:5>&='0$4&2/&'<1,$;4":$ 8$ 0>".&>$7*"+"'$:&7$ www.bennolan.com www.bennolan.com XE&:7>1,$ XE&:7>1,$

www.bennolan.com www.bennolan.com XE&:7>1,$ XE&:7>1,$

J/41<+$U>>5:/'&="'$ G>".&>$)*"+"'$%&7$

4

J/41<+$U>>5:/'&="'$ G>".&>$)*"+"'$%&7$

4 Photon Mapping !"#$%&'($)*"+"',-$ B/>+14/'0$

•! !"#$./0$/,$+*1$2/,3$4&2/5,$!-$ •! 9""$;1#$7*"+"',$<&5,1$.>544($ •! 6&401$1'"50*$+*&+$+*1$2/,3$ 41,5>+,$ ,544"5'2,$+*1$"$'1&41,+$ •! C/:7>1$&D14&0/'0$74"25<1,$&$."E$ 7*"+"',8$ A&2/&'<1$1,=:&+1$5,/'0$?@$7*"+"',$ F>+14/'0$";$7*"+"',$ •! 9*1$'5:.14$";$7*"+"',$5,12$;"4$ •! )*"+"',$'1&414$+"$+*1$,&:7>1$ &$4&2/&'<1$1,=:&+1$"$/,$5,5&>>($ .1+#11'$?@$&'2$?@@8$ ,*"5>2$.1$#1/0*+12$:"41$*1&D/>($ •! A1,5>+,$/'$&$<"'1$F>+14/'0$";$ 7*"+"',$

!A = !r2 A&2/&'<1$1,=:&+1$5,/'0$?@@$ 7*"+"',$

%5>=7>1$)*"+"'$%&7,$ A1'214/'0$

•! G>".&>$6HCIJKLJ$7*"+"'$:&7$ •! A1'21412$.($0>",,(Q,54;&<1$ 2/,+4/.5+12$4&($+4&1N1K$ ,54;&<1S$ –! P":75+1$2/41<+$/>>5:/'&="'$ –! )*"+"',$2"'O+$,=<3$+"$,71<5>&4$ Caustic map Global map –! P":75+1$41T1<+12$4&2/&'<1$ ,54;&<1,$ photons photons ";$<&5,=<$:&7$7*"+"',$ B/4,+$2/M5,1$/'+14,1<="'8$ W,1$0>".&>$ –! U0'"41$0>".&>$:&7$7*"+"',$ A1+54'$4&2/&'<1$";$<&5,=<$ :&7$ •! P&5,=<$6CCLJ$7*"+"'$:&7$ :&7$7*"+"',$*141Y$.5+$ –! U:7"4+&'<1$,&:7>1$VAJB$% $ 7*"+"',$+"$ –! !/0*$41,">5="'$ ! /0'"41$0>".&>$:&7$7*"+"',$ 41+54'$ &,$5,5&>& 4&2/&'<1$ –! 6/0*+$,"54<1$5,5&>>($1:/+,$ –! W,1$0>".&>$7*"+"'$:&7$+"$ #*1'$ 7*"+"',$"'>($/'$2/41<="',$+*&+$ /:7"4+&'<1$,&:7>1$/'5&='0$ */+$+*1$+*/'0$<41&='0$+*1$<&5,=<$ 4&2/&'<1$;5'<="'$'(& 6/$&+$F4,+$ –! XD&>5&+1$41T1<+&'<1$/'+104&>$ 2/M5,1$ .($<&,='0$4&(,$&'2$ /'+14,1<="' &<<5:5>&='0$4&2/&'<1,$;4":$ 8$ 0>".&>$7*"+"'$:&7$

www.bennolan.com www.bennolan.com XE&:7>1,$ XE&:7>1,$

J/41<+$U>>5:/'&="'$ G>".&>$)*"+"'$%&7$

4 !"#$%&'($)*"+"',-$!"#$%&'($)*"+"',-$ B/>+14/'0$B/>+14/'0$ •! !"#$./0$/,$+*1$2/,3$4&2/5,$•! !"#$./0$/,$+*1$2/,3$4&2/5,$!!-$-$ •! 9""$;1#$7*"+"',$<&5,1$.>544($•! 9""$;1#$7*"+"',$<&5,1$.>544($ •! 6&401$1'"50*$+*&+$+*1$2/,3$•! 6&401$1'"50*$+*&+$+*1$2/,3$ 41,5>+,$ 41,5>+,$ ,544"5'2,$+*1$,544"5'2,$+*1$"$'1&41,+$"$'1&41,+$ •! C/:7>1$&D14&0/'0$74"25<1,$&$."E$•! C/:7>1$&D14&0/'0$74"25<1,$&$."E$ 7*"+"',8$7*"+"',8$ A&2/&'<1$1,=:&+1$5,/'0$?@$7*"+"',$A&2/&'<1$1,=:&+1$5,/'0$?@$7*"+"',$ F>+14/'0$";$7*"+"',$F>+14/'0$";$7*"+"',$ • •! 9*1$'5:.14$";$7*"+"',$5,12$;"4$! 9*1$'5:.14$";$7*"+"',$5,12$;"4$ •! )*"+"',$'1&414$+"$+*1$,&:7>1$•! )*"+"',$'1&414$+"$+*1$,&:7>1$ &$4&2/&'<1$1,=:&+1$&$4&2/&'<1$1,=:&+1$"$/,$5,5&>>($"$/,$5,5&>>($ .1+#11'$?@$&'2$?@@8$ ,*"5>2$.1$#1/0*+12$:"41$*1&D/>($,*"5>2$.1$#1/0*+12$:"41$*1&D/>($ .1+#11'$?@$&'2$?@@8$ •! A1,5>+,$/'$&$<"'1$F>+14/'0$";$ 7*"+"',$•! A1,5>+,$/'$&$<"'1$F>+14/'0$";$ 7*"+"',$

!A = !r2 A&2/&'<1$1,=:&+1$5,/'0$?@@$ 7*"+"',$ !A = !r2 A&2/&'<1$1,=:&+1$5,/'0$?@@$ 7*"+"',$

Photon Mapping

%5>=7>1$)*"+"'$%&7,$ A1'214/'0$

•! G>".&>$6HCIJKLJ$7*"+"'$:&7$ •! A1'21412$.($0>",,(Q,54;&<1$ 2/,+4/.5+12$4&($+4&=7>1$)*"+"'$%&7,$–! )*"+"'$,=<3,$+"$2/M5,1$,54;&<1$ A1'214/'0$ #"$$."5'<1,$+"$'1E+$,54;&<1$H/;$ •! R*1'$4&($*/+,$F4,+$2/M5,1$ /+$,54D/D1,$A5,,/&'$4"5>1N1K$ ,54;&<1S$ •! G>".&>$6HCIJKLJ$7*"+"'$:&7$ –! P":75+1$2/41<+$/>>5:/'&="'$•! A1'21412$.($0>",,(Q,54;&<1$ –! )*"+"',$2"'O+$,=<3$+"$,71<5>&4$ Caustic map Global map –! P":75+1$41T1<+12$4&2/&'<1$2/,+4/.5+12$4&($+4&".&>$ ,54;&<1,$ photons photons ";$<&5,=<$:&7$7*"+"',$•! R*1'$4&($*/+,$F4,+$2/M5,1$ #"$$."5'<1,$+"$'1E+$,54;&<1$H/;$ –! U0'"41$0>".&>$:&7$7*"+"',$ A1+54'$4&2/&'<1$";$<&5,=<$ :&7$ •! P&5,=<$6CCLJ$7*"+"'$:&7$ ,54;&<1S$ :&7$7*"+"',$*141Y$.5+$ 7*"+"',$+"$ /+$,54D/D1,$A5,,/&'$4"5>1N1K$ –! U:7"4+&'<1$,&:7>1$VAJB$%!$ –! !/0*$41,">5="'$ &,$5,5&>–! P":75+1$2/41<+$/>>5:/'&="'$/0'"41$0>".&>$:&7$7*"+"',$ 41+54'$ –! )*"+"',$2"'O+$,=<3$+"$,71<5>&4$ & 4&2/&'<1$ –! 6/0*+$,"54<1$5,5&>>($1:/+,$ Caustic map Global map –! W,1$0>".&>$7*"+"'$:&7$+"$–! P":75+1$41T1<+12$4&2/&'<1$ #*1'$ ,54;&<1,$7*"+"',$"'>($/'$2/41<="',$+*&+$ photons photons /:7"4+&'<1$,&:7>1$/'5&='0$ W,1$0>".&>$ 4&2/&'<1$;5'<="'$' */+$+*1$+*/'0$<41&='0$+*1$<&5,=<$ –! U0'"41$0>".&>$:&7$7*"+"',$(& A1+54'$4&2/&'<1$";$<&5,=<$6/$&+$F4,+$ :&7$ •! P&5,=<$6CCLJ$7*"+"'$:&7$ –! XD&>5&+1$41T1<+&'<1$/'+104&>$ :&7$7*"+"',$*141Y$.5+$2/M5,1$ 7*"+"',$+"$ –! U:7"4+&'<1$,&:7>1$VAJB$% $ –! !/0*$41,">5="'$ .($<&,='0$4&(,$&'2$ ! /0'"41$0>".&>$:&7$7*"+"',$/'+14,1<="' 41+54'$ &<<5:5>&='0$4&2/&'<1,$;4":$&,$5,5&>& 8$ 0>".&>$7*"+"'$:&7$ 4&2/&'<1$ –! 6/0*+$,"54<1$5,5&>>($1:/+,$ –! W,1$0>".&>$7*"+"'$:&7$+"$ #*1'$ 7*"+"',$"'>($/'$2/41<="',$+*&+$ /:7"4+&'<1$,&:7>1$/'5&='0$ */+$+*1$+*/'0$<41&='0$+*1$<&5,=<$ 4&2/&'<1$;5'<="'$'(& 6/$&+$F4,+$ –! XD&>5&+1$41T1<+&'<1$/'+104&>$ 2/M5,1$ .($<&,='0$4&(,$&'2$ /'+14,1<="' &<<5:5>&='0$4&2/&'<1,$;4":$ 8$ 0>".&>$7*"+"'$:&7$

www.bennolan.com www.bennolan.com XE&:7>1,$ XE&:7>1,$

www.bennolan.com www.bennolan.com XE&:7>1,$ XE&:7>1,$

J/41<+$U>>5:/'&="'$ G>".&>$)*"+"'$%&7$

4 J/41<+$U>>5:/'&="'$ G>".&>$)*"+"'$%&7$

4 !"#$%&'($)*"+"',-$ B/>+14/'0$

•! !"#$./0$/,$+*1$2/,3$4&2/5,$!-$ •! 9""$;1#$7*"+"',$<&5,1$.>544($ •! 6&401$1'"50*$+*&+$+*1$2/,3$!"#$%&'($)*"+"',-$ 41,5>+,$ B/>+14/'0$ ,544"5'2,$+*1$"$'1&41,+$ •! C/:7>1$&D14&0/'0$74"25<1,$&$."E$ 7*"+"',8$ •! !"#$./0$/,$+*1$2/,3$4&2/5,$A&2/&'<1$1,=:&+1$5,/'0$?@$7*"+"',$!-$ F>+14/'0$";$7*"+"',$•! 9""$;1#$7*"+"',$<&5,1$.>544($ •! 9*1$'5:.14$";$7*"+"',$5,12$;"4$•! 6&401$1'"50*$+*&+$+*1$2/,3$ • 41,5>+,$ ,544"5'2,$+*1$"$'1&41,+$ ! )*"+"',$'1&414$+"$+*1$,&:7>1$ &$4&2/&'<1$1,=:&+1$"$/,$5,5&>>($ ,*"5>2$.1$#1/0*+12$:"41$*1&D/>($•! C/:7>1$&D14&0/'0$74"25<1,$&$."E$ .1+#11'$?@$&'2$?@@8$7*"+"',8$ A&2/&'<1$1,=:&+1$5,/'0$?@$7*"+"',$ F>+14/'0$";$7*"+"',$ •! A1,5>+,$/'$&$<"'1$F>+14/'0$";$ •! 9*1$'5:.14$";$7*"+"',$5,12$;"4$ •! )*"+"',$'1&414$+"$+*1$,&:7>1$ &$4&2/&'<1$1,=:&+1$"$/,$5,5&>>($ 7*"+"',$ .1+#11'$?@$&'2$?@@8$ ,*"5>2$.1$#1/0*+12$:"41$*1&D/>($ •! A1,5>+,$/'$&$<"'1$F>+14/'0$";$ 7*"+"',$

!A = !r2 A&2/&'<1$1,=:&+1$5,/'0$?@@$ 7*"+"',$

!A = !r2 A&2/&'<1$1,=:&+1$5,/'0$?@@$ 7*"+"',$

Photon Mapping

%5>=7>1$)*"+"'$%&7,$ A1'214/'0$ %5>=7>1$)*"+"'$%&7,$ A1'214/'0$ •! G>".&>$6HCIJKLJ$7*"+"'$:&7$ •! A1'21412$.($0>",,(Q,54;&<1$ 2/,+4/.5+12$4&($+4&".&>$6HCIJKLJ$7*"+"'$:&7$ •! A1'21412$.($0>",,(Q,54;&<1$ •! R*1'$4&($*/+,$F4,+$2/M5,1$2/,+4/.5+12$4&($+4&1N1K$ ,54;&<1S$ •! R*1'$4&($*/+,$F4,+$2/M5,1$ #"$$."5'<1,$+"$'1E+$,54;&<1$H/;$ –! P":75+1$2/41<+$/>>5:/'&="'$ – /+$,54D/D1,$A5,,/&'$4"5>1N1K$ ,54;&<1S$ ! )*"+"',$2"'O+$,=<3$+"$,71<5>&4$ Caustic map Global map –! P":75+1$41T1<+12$4&2/&'<1$–! P":75+1$2/41<+$/>>5:/'&="'$ B/4,+$2/M5,1$/'+14,1<="'8$ W,1$0>".&>$ ,54;&<1,$ –! )*"+"',$2"'O+$,=<3$+"$photons ,71<5>&4photons$ Caustic map Global map ";$<&5,=<$:&7$7*"+"',$–! P":75+1$41T1<+12$4&2/&'<1$ ,54;&<1,$ photons photons –! U0'"41$0>".&>$:&7$7*"+"',$";$<&5,=<$:&7$7*"+"',$A1+54'$4&2/&'<1$";$<&5,=<$B/4,+$2/M5,1$/'+14,1<="'8$:&7$ W,1$0>".&>$ •! P&5,=<$6CCLJ$7*"+"'$:&7$ :&7$7*"+"',$*141Y$.5+$ –! U:7"4+&'<1$,&:7>1$VAJB$–! U0'"41$0>".&>$:&7$7*"+"',$% $ A1+54'$4&2/&'<1$";$<&5,=<$7*"+"',$+"$ :&7$ – •! P&5,=<$6CCLJ$7*"+"'$:&7$ ! /0'"41$0>".&>$:&7$7*"+"',$:&7$7*"+"',$*141Y$.5+$41+54'$ 7*"+"',$+"$ ! !/0*$41,">5="'$ &,$5,5&> –! U:7"4+&'<1$,&:7>1$VAJB$% $ –! !/0*$41,">5="'$ & ! /0'"41$0>".&>$:&7$7*"+"',$4&2/&'<1$ 41+54'$ –! 6/0*+$,"54<1$5,5&>>($1:/+,$ –! W,1$0>".&>$7*"+"'$:&7$+"$&,$5,5&>& – #*1'$ 4&2/&'<1$ 7*"+"',$"'>($/'$2/41<="',$+*&+$! 6/0*+$,"54<1$5,5&>>($1:/+,$ /:7"4+&'<1$,&:7>1$/'".&>$7*"+"'$:&7$+"$ 1D&>5&='0$ #*1'$ 7*"+"',$"'>($/'$2/41<="',$+*&+$ 4&2/&'<1$;5'<="'$/:7"4+&'<1$,&:7>1$/'5&='0$ */+$+*1$+*/'0$<41&='0$+*1$<&5,=<$ 4&2/&'<1$;5'<="'$(& ' 6/$&+$F4,+$ */+$+*1$+*/'0$<41&='0$+*1$<&5,=<$ –! XD&>5&+1$41T1<+&'<1$/'+104&>$ (& 2/M5,1$ 6/$&+$F4,+$ .($<&,='0$4&(,$&'2$–! XD&>5&+1$41T1<+&'<1$/'+104&>$ /'+14,1<="' 2/M5,1$ &<<5:5>&='0$4&2/&'<1,$;4":$.($<&,='0$4&(,$&'2$ 8$ /'+14,1<="' &<<5:5>&='0$4&2/&'<1,$;4":$ 8$ 0>".&>$7*"+"'$:&7$0>".&>$7*"+"'$:&7$

www.bennolan.comwww.bennolan.com www.bennolan.comwww.bennolan.com XE&:7>1,$ XE&:7>1,$ XE&:7>1,$XE&:7>1,$

J/41<+$U>>5:/'&="'$ G>".&>$)*"+"'$%&7$ J/41<+$U>>5:/'&="'$ G>".&>$)*"+"'$%&7$

4 4 !"#$%&'($)*"+"',-$ B/>+14/'0$ !"#$%&'($)*"+"',-$ B/>+14/'0$ •! !"#$./0$/,$+*1$2/,3$4&2/5,$!-$ •! 9""$;1#$7*"+"',$<&5,1$.>544($ •! !"#$./0$/,$+*1$2/,3$4&2/5,$!-$ •! 6&401$1'"50*$+*&+$+*1$2/,3$ •! 9""$;1#$7*"+"',$<&5,1$.>544($ 41,5>+,$ •! 6&401$1'"50*$+*&+$+*1$2/,3$ ,544"5'2,$+*1$"$'1&41,+$ 41,5>+,$ •! C/:7>1$&D14&0/'0$74"25<1,$&$."E$ 7*"+"',8$ ,544"5'2,$+*1$"$'1&41,+$ A&2/&'<1$1,=:&+1$5,/'0$?@$7*"+"',$•! C/:7>1$&D14&0/'0$74"25<1,$&$."E$F>+14/'0$";$7*"+"',$ 7*"+"',8$ •! 9*1$'5:.14$";$7*"+"',$5,12$;"4$A&2/&'<1$1,=:&+1$5,/'0$?@$7*"+"',$ F>+14/'0$";$7*"+"',$ •! )*"+"',$'1&414$+"$+*1$,&:7>1$ &$4&2/&'<1$1,=:&+1$"$/,$5,5&>>($ •! 9*1$'5:.14$";$7*"+"',$5,12$;"4$ •! )*"+"',$'1&414$+"$+*1$,&:7>1$ ,*"5>2$.1$#1/0*+12$:"41$*1&D/>($ &$4&2/&'<1$1,=:&+1$"$/,$5,5&>>($ .1+#11'$?@$&'2$?@@8$ .1+#11'$?@$&'2$?@@8$ ,*"5>2$.1$#1/0*+12$:"41$*1&D/>($•! A1,5>+,$/'$&$<"'1$F>+14/'0$";$ •! A1,5>+,$/'$&$<"'1$F>+14/'0$";$ 7*"+"',$ 7*"+"',$

!A = !r2 A&2/&'<1$1,=:&+1$5,/'0$?@@$ !A = !r2 A&2/&'<1$1,=:&+1$5,/'0$?@@$ 7*"+"',$ 7*"+"',$

%5>=7>1$)*"+"'$%&7,$%5>=7>1$)*"+"'$%&7,$ A1'214/'0$ A1'214/'0$ •! G>".&>$6HCIJKLJ$7*"+"'$:&7$ •! A1'21412$.($0>",,(Q,54;&<1$ •! G>".&>$6HCIJKLJ$7*"+"'$:&7$ •! A1'21412$.($0>",,(Q,54;&<1$ 2/,+4/.5+12$4&($+4&1N1K$ ,54;&<1S$ /+$,54D/D1,$A5,,/&'$4"5>1N1K$ ,54;&<1S$ –! P":75+1$2/41<+$/>>5:/'&="'$ –! )*"+"',$2"'O+$,=<3$+"$,71<5>&4$ –! P":75+1$2/41<+$/>>5:/'&="'$ –! )*"+"',$2"'O+$,=<3$+"$,71<5>&4$ Caustic map Global map –! P":75+1$41T1<+12$4&2/&'<1$ ,54;&<1,$Caustic map Global map photons –!photonsP":75+1$41T1<+12$4&2/&'<1$ ";$<&5,=<$:&7$7*"+"',$ B/4,+$2/M5,1$/'+14,1<="'8$ W,1$0>".&>$ ,54;&<1,$ photons photons ";$<&5,=<$:&7$7*"+"',$ B/4,+$2/M5,1$/'+14,1<="'8$ W,1$0>".&>$ A1+54'$4&2/&'<1$";$<&5,=<$ :&7$ –A1+54'$4&2/&'<1$";$<&5,=<$! U0'"41$0>".&>$:&7$7*"+"',$ •! P&5,=<$6CCLJ$7*"+"'$:&7$ –! U0'"41$0>".&>$:&7$7*"+"',$ :&7$ :&7$7*"+"',$*141Y$.5+$ 7*"+"',$+"$ •! P&5,=<$6CCLJ$7*"+"'$:&7$ :&7$7*"+"',$*141Y$.5+$ 7*"+"',$+"$ –! U:7"4+&'<1$,&:7>1$VAJB$%!$ /0'"41$0>".&>$:&7$7*"+"',$ 41+54'$ –! !/0*$41,">5="'$ –! U:7"4+&'<1$,&:7>1$VAJB$%!$ /0'"41$0>".&>$:&7$7*"+"',$ 41+54'$ –! !/0*$41,">5="'$ &,$5,5&>& 4&2/&'<1$ &,$5,5&>& 4&2/&'<1$ –! 6/0*+$,"54<1$5,5&>>($1:/+,$ –! W,1$0>".&>$7*"+"'$:&7$+"$ #*1'$ –! 6/0*+$,"54<1$5,5&>>($1:/+,$ –! W,1$0>".&>$7*"+"'$:&7$+"$ #*1'$ 7*"+"',$"'>($/'$2/41<="',$+*&+$ /:7"4+&'<1$,&:7>1$/'5&='0$ 7*"+"',$"'>($/'$2/41<="',$+*&+$ /:7"4+&'<1$,&:7>1$/'5&='0$ */+$+*1$+*/'0$<41&='0$+*1$<&5,=<$ 4&2/&'<1$;5'<="'$'(& 6/$&+$F4,+$ */+$+*1$+*/'0$<41&='0$+*1$<&5,=<$ 4&2/&'<1$;5'<="'$'(& 6/$&+$F4,+$ –! XD&>5&+1$41T1<+&'<1$/'+104&>$ 2/M5,1$ –! XD&>5&+1$41T1<+&'<1$/'+104&>$ 2/M5,1$ .($<&,='0$4&(,$&'2$ /'+14,1<="' .($<&,='0$4&(,$&'2$ /'+14,1<="' &<<5:5>&='0$4&2/&'<1,$;4":$ 8$ &<<5:5>&='0$4&2/&'<1,$;4":$ 8$ 0>".&>$7*"+"'$:&7$ 0>".&>$7*"+"'$:&7$

Photon Mapping www.bennolan.com www.bennolan.com www.bennolan.com www.bennolan.com XE&:7>1,$ XE&:7>1,$ XE&:7>1,$ XE&:7>1,$

J/41<+$U>>5:/'&="'$ J/41<+$U>>5:/'&="'$ G>".&>$)*"+"'$%&7$ G>".&>$)*"+"'$%&7$

4 4 www.bennolan.com www.bennolan.com www.bennolan.com www.bennolan.com !"#$%&'() !"#$%&'() !"#$%&'() !"#$%&'()

*+,-.'/0)*&&1$-+#23+) *+,-.'/0)*&&1$-+#23+) 4-+#&)5'+,'.-+6) 4-+#&)5'+,'.-+6)

Photon Mapping 78303+)9#%)!"#$%&') 78303+)9#%)!"#$%&') 78303+)9#%)!"#$%&') 78303+)9#%)!"#$%&')

http://www.vrayrender.com/stuff/PMapTutorial/http://www.vrayrender.com/stuff/PMapTutorial/ http://www.vrayrender.com/stuff/PMapTutorial/ http://www.vrayrender.com/stuff/PMapTutorial/

78303+)9#%%-+6) 78303+)9#%%-+6)

•! :+')3;)08').'/'+0)3;)08')'(0#<&-(8',)6&3<#&)-&&1$-+#23+) (3&123+() •! :+')3;)08').'/'+0)3;)08')'(0#<&-(8',)6&3<#&)-&&1$-+#23+) (3&123+() •! =#()#)%.'>.'+,'.-+6)%8#(')03)'(2$#0')6&3<#&)-&&1$-+#23+) •! =#()#)%.'>.'+,'.-+6)%8#(')03)'(2$#0')6&3<#&)-&&1$-+#23+) •! ?)%#08)0.#/-+6)%8#(');3.)08')@+#&).'+,'.-+6)A@+#&) 6#08'.-+6B) •! ?)%#08)0.#/-+6)%8#(');3.)08')@+#&).'+,'.-+6)A@+#&) 6#08'.-+6B) •! *0)-()(-6+-@/#+0&C);#(0'.)08#+)%#08)0.#/-+6)A$-+10'() /3$%#.',)03)831.(BD)#+,)08')%.'>.'+,'.-+6)%8#(')3+&C)8#()•! *0)-()(-6+-@/#+0&C);#(0'.)08#+)%#08)0.#/-+6)A$-+10'() 03)<'),3+')3+/'E) /3$%#.',)03)831.(BD)#+,)08')%.'>.'+,'.-+6)%8#(')3+&C)8#() 03)<'),3+')3+/'E) •! 93(0)2$')63'()-+03)08')@+#&).'+,'.-+6)%8#('D)#+,)-+) %#.2/1&#.)-+)'(2$#2+6)08').#,-#+/');.3$)+'#.

5 5 Photon Mapping More Information

Henrik Wann Jensen Jensen Henrik Wann Jensen Realistic Image Synthesis Using Photon Realistic Image Synthesis Using Photon Mapping Realistic Image Mapping Synthesis Foreword by Pat Hanrahan Using Photon The creation of realistic three-dimensional images is central to . Photon mapping, an extension of ray tracing, makes it possible to efficiently simulate global illumination in Mapping complex scenes. Photo mapping can simulate caustics (focused light, such as shimmering waves at the bottom of a swimming pool), diffuse inter-reflections (e.g., the `bleeding' of colored light from a red wall onto a white floor, giving the floor a reddish tint), and participating media (e.g., clouds or smoke). This book is a practical guide to photon mapping; it provides both the theory and the practical insight necessary to implement photon mapping and simulate all types of direct and indirect illumination efficiently.

A K Foreword by Pat Hanrahan A K PETERS LTD. PETERS

http://graphics.stanford.edu/˜henrik [email protected]