Monte Carlo Rendering Jan ByΕ‘ka (inspired by Keenan Crane lectures) PA213 Mass–Energy Equivalence 𝐸 = π‘šπ‘2 Albert Einstein 2 Rendering Equation James Kajiya πŽπ‘– 𝑡 πœƒπ‘– 𝒙 𝝎 π‘Ÿ 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + ΰΆ± Ξ© π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– π‘‘πŽπ‘– 3 Rendering Equation 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + ΰΆ± Ξ© π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– π‘‘πŽπ‘– πŽπ‘– 𝐍 πœƒπ‘– 𝒙 𝝎 π‘Ÿ β€’ 𝐿 π‘Ÿ is radiance β€’ amount of light emitted from 𝒙 in direction 𝝎 π‘Ÿ β€’ 𝐿 𝑒 is emitted radiance β€’ non-zero, if 𝒙 is a light source β€’ 𝐿𝑖 is incoming radiance β€’ amount of light arriving to 𝒙 from direction πŽπ‘– β€’ π‘“π‘Ÿ is bidirectional reflectance distribution function (BRDF) β€’ material property at 𝒙 β€’ it is a ratio of the light reflected along 𝝎 π‘Ÿ to the light incoming from πŽπ‘– β€’ cos πœƒπ‘– = 𝐍 β‹… πŽπ‘– β€’ describes Lambert’s cosine law 4 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + ΰΆ± Ξ© π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– π‘‘πŽπ‘– Lambert’s Cosine Law 5 β€’ Light is measured in terms of energy per unit area (π‘Š/π‘š2) β€’ Radiance: amount of light from a single direction (π‘Š/π‘ π‘Ÿ π‘š2 ) β€’ Irradiance: amount of light from possibly all directions (π‘Š/π‘š2 ) Bidirectional Reflectance Distribution Function (BRDF) 𝐍 π’™π‘“π‘Ÿ 𝒙, πŽπ’Š, 𝝎 𝒓 = 𝑑𝐿 π‘Ÿ πœ” π‘Ÿ 𝑑𝐸𝑖(πœ”π‘–) partial radiance: light reflected in the infinitely small cone partial irradiance: light incoming from the infinitely small cone radiance from the solid angle projected onto the surface infinitely small part of the surface = 𝑑𝐿 π‘Ÿ πœ” π‘Ÿ 𝐿𝑖 cos πœƒ π‘‘πœ”π‘– πŽπ‘–πŽ π‘Ÿ 6 Bidirectional Reflectance Distribution Function (BRDF) β€’ Properties of BRDF π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ : β€’ Energy conservation: A surface cannot reflect more light than falls on it form πŽπ‘– β€’ For each πŽπ‘– we have ‫׬‬Ω π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ cos πœƒπ‘Ÿ π‘‘πŽ π‘Ÿ ≀ 1 β€’ (Helmholtz) Reciprocity principle: π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ = π‘“π‘Ÿ 𝒙, 𝝎 π‘Ÿ, πŽπ‘– β€’ The value π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ remains the same if we swap πŽπ‘– and 𝝎 π‘Ÿ β€’ Isotropic: The value π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ remains the same, if we rotate the surface about the normal at 𝒙 by any angle β€’ Example: smooth plastic β€’ Anisotropic: The value π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ change, if we rotate the surface about the normal at 𝒙 by some angle β€’ Example: Brushed metal, hair 7 πŽπ‘– 𝐍 πœƒπ‘Ÿ 𝒙 𝝎 π‘Ÿ Surface Appearance 8 Distribution Functions β€’ Bidirectional transmittance distribution function (BTDF) β€’ Like BRDF but for the opposite side of the surface. β€’ BSSRDF + BSSTDF β€’ Like BRDF and BTDF but include subsurface scattering β€’ Bidirectional Scattering Distribution Function (BSDF) β€’ Superset and the generalization of the BSSRDF and BSSTDF β€’ When subsurface is omitted then BSDF = BRDF + BTDF 9 Evaluating Rendering Function 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + ΰΆ± Ξ© π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– π‘‘πŽπ‘– 𝒙 = 𝒂 𝒙 = 𝒃 𝒇(𝒙) 𝒙 ΰΆ± 𝒂 𝒃 𝒇 𝒙 𝒅𝒙 = ? 10 Trapezoid Rule π‘₯0 = π‘Ž π‘₯4 = 𝑏 𝑓(π‘₯) π‘₯1 π‘₯2 π‘₯3 ΰΆ± π‘Ž 𝑏 𝑓(π‘₯)𝑑π‘₯ β‰ˆ ෍ 𝑖=1 𝑛 𝑓(π‘₯π‘–βˆ’1) + 𝑓 π‘₯𝑖 2 𝑏 βˆ’ π‘Ž 𝑛 = 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 𝑓(π‘₯π‘–βˆ’1) + 𝑓 π‘₯𝑖 2 βˆ†π‘₯ = 𝑏 βˆ’ π‘Ž 𝑛 π‘₯ 11 Rectangle Rule π‘Ž 𝑏 𝑓(π‘₯) π‘₯1 π‘₯2 π‘₯3 ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑑π‘₯ β‰ˆ ෍ 𝑖=1 𝑛 𝑓 π‘₯𝑖 𝑏 βˆ’ π‘Ž 𝑛 = 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 𝑓 π‘₯𝑖 π‘₯4 π‘₯ βˆ†π‘₯ = 𝑏 βˆ’ π‘Ž 𝑛 12 Disadvantages π‘Ž 𝑏 𝑓(π‘₯) π‘₯1 π‘₯2 π‘₯3 π‘₯4 π‘₯ β€’ Computationally expensive and the complexity increases with dimensions π‘₯0 = π‘Ž π‘₯4 = 𝑏 𝑓(π‘₯) π‘₯1 π‘₯2 π‘₯3 13 Random Sampling 𝑓(π‘₯) π‘₯π‘Ž 𝑏π‘₯1 π‘₯4π‘₯3 π‘₯2 ? 14 Random Sampling 𝑓(π‘₯) π‘₯1 π‘₯π‘Ž 𝑏 15 Random Sampling 𝑓(π‘₯) π‘₯π‘Ž 𝑏π‘₯2 + 16 Random Sampling 𝑓(π‘₯) π‘₯π‘Ž 𝑏π‘₯3 + + 17 Random Sampling 𝑓(π‘₯) π‘₯π‘Ž 𝑏π‘₯4 + ++ 18 Random Sampling 𝑓(π‘₯) π‘₯π‘Ž 𝑏 + ++ 19 Random Sampling 𝑏 + ++( ) / 4 π‘₯π‘Ž π‘₯1 π‘₯4π‘₯3 π‘₯2 𝐢 𝑓(π‘₯) ? 20 Monte Carlo Estimator 𝑓(π‘₯) π‘₯π‘Ž 𝑏 𝑀𝐢𝐸(𝑋) = 1 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 (𝑏 βˆ’ π‘Ž) π‘₯1 π‘₯4π‘₯3 π‘₯2 ? 21 Monte Carlo Estimator 𝑓(π‘₯) π‘₯π‘Ž 𝑏 𝑀𝐢𝐸(𝑋) = 1 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 (𝑏 βˆ’ π‘Ž) = 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 π‘₯1 π‘₯4π‘₯3 π‘₯2 ? 22 β€’ Intuition: Random variable 𝐗 represents potential values for a random process β€’ 𝑋𝑖 denotes ith realization of the random variable 𝑋 β€’ π‘₯𝑖 denotes the actual value of the 𝑋𝑖 β€’ Probability mass/density function (PMF/PDF) 𝑋~𝑝(π‘₯) describes relative probability that a random process chooses value x β€’ Example: unbiased die β€’ All values are equally likely (uniform PMF) β€’ 𝑝 1 = 𝑝 2 = 𝑝 3 = 𝑝 4 = 𝑝 5 = 𝑝 6 = 1 6 β€’ Properties PMF: β€’ 𝑝 π‘₯𝑖 β‰₯ 0 π‘Žπ‘›π‘‘ σ𝑖=1 π‘˜ 𝑝 π‘₯𝑖 = 1 β€’ Properties PDF: β€’ 𝑝 π‘₯ β‰₯ 0 π‘Žπ‘›π‘‘ ‫׬‬𝐷 𝑝 π‘₯ 𝑑π‘₯ = 1 Random Variable continuous PDF π‘₯1 𝑝(π‘₯1) discrete PMF 23 Expected Value β€’ Intuition: what value does a random variable take, on average? β€’ Example: β€’ coin with heads = 1, tails = 0 β€’ fair coin with probability Β½ for each outcome β€’ expected value: Β½ βˆ— 1 + Β½ βˆ— 0 = Β½ 𝐸 𝑋 = ෍ 𝑖=1 π‘˜ π‘₯𝑖 𝑝𝑖 expected value of random variable X number of possible outcomes probability of ith outcome value of ith outcome 𝐸 𝑋 = ΰΆ± 𝐷 π‘₯ 𝑝 π‘₯ 𝑑π‘₯ PDF values of the random variable over domain 𝐷 24 Expected Value of Function β€’ Applying a function 𝑓: ℝ β†’ ℝ to a random variable results in a new random variable 𝐸 𝑓(𝑋) = ΰΆ± 𝐷 𝑓 π‘₯ 𝑝 π‘₯ 𝑑π‘₯𝐸 𝑋 = ΰΆ± 𝐷 π‘₯ 𝑝 π‘₯ 𝑑π‘₯ 25 Monte Carlo Estimator 𝑓(π‘₯) π‘₯π‘Ž 𝑏π‘₯1 π‘₯4π‘₯3 π‘₯2 ? 𝑀𝐢𝐸(𝑋) = 1 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 (𝑏 βˆ’ π‘Ž) = 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 26 Monte Carlo Integration 𝑀𝐢𝐸(𝑋) = 1 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 (𝑏 βˆ’ π‘Ž) = 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 𝐸 𝑀𝐢𝐸(𝑋) = 𝐸 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 𝐸 𝑀𝐢𝐸(𝑋) = 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 𝐸 𝑓 𝑋𝑖 𝐸 𝑓(𝑋) = ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑝 π‘₯ 𝑑π‘₯ 𝐸 𝑀𝐢𝐸(𝑋) = 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑝 π‘₯ 𝑑π‘₯ think about this as E[𝑓 𝑋 ] since in each step we are drawing from the same random variable 𝐸 π‘Žπ‘‹ = π‘ŽπΈ[𝑋] 𝐸 ෍ 𝑖 𝑋𝑖 = ෍ 𝑖 𝐸[𝑋𝑖] 27 Monte Carlo Integration Assuming uniform distribution 𝑋~𝑝(π‘₯) 𝑝(π‘₯) π‘Ž 𝑏 π‘₯ ΰΆ± π‘Ž 𝑏 𝑝 π‘₯ 𝑑π‘₯ = 1 1 𝑏 βˆ’ π‘Ž 𝐸 𝑀𝐢𝐸(𝑋) = 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑝 π‘₯ 𝑑π‘₯ 28 Monte Carlo Integration Assuming uniform distribution 𝑋~𝑝(π‘₯) 𝑝(π‘₯) π‘Ž 𝑏 π‘₯ ΰΆ± π‘Ž 𝑏 𝑝 π‘₯ 𝑑π‘₯ = 1 1 𝑏 βˆ’ π‘Ž 𝐸 𝑀𝐢𝐸(𝑋) = 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 1 𝑏 βˆ’ π‘Ž 𝑑π‘₯ 29 Monte Carlo Integration Assuming uniform distribution 𝑋~𝑝(π‘₯) 𝐸 𝑀𝐢𝐸(𝑋) = 1 𝑛 ෍ 𝑖=1 𝑛 ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑑π‘₯ 𝐸 𝑀𝐢𝐸(𝑋) = ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑑π‘₯ 𝐸 𝑀𝐢𝐸(𝑋) = 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 1 𝑏 βˆ’ π‘Ž 𝑑π‘₯ 1 𝑛 ෍ 𝑖=1 𝑛 𝐴 = 𝐴 30 Monte Carlo Integration Assuming uniform distribution 𝑋~𝑝(π‘₯) 𝐢 𝑓(π‘₯) π‘₯π‘Ž 𝑏π‘₯1 π‘₯4π‘₯3 π‘₯2 ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑑π‘₯ = 𝐸 𝑀𝐢𝐸(𝑋) = 𝐸 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 = 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 𝐸 𝑓 𝑋𝑖 𝐸 𝑓(𝑋) = ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑝 π‘₯ 𝑑π‘₯ 31 does not really help us Law of Large Numbers β€’ For any random variable, the average value of 𝑛 trials approaches the expected value as we increase 𝑛 𝐸 𝑋 = lim π‘›β†’βˆž 1 𝑛 ෍ 𝑖=1 𝑛 𝑋𝑖 number of trials 32 Monte Carlo Integration Assuming uniform distribution 𝑋~𝑝(π‘₯) 𝐢 𝑓(π‘₯) π‘₯π‘Ž 𝑏π‘₯1 π‘₯4π‘₯3 π‘₯2 ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑑π‘₯ β‰ˆ 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 33 Monte Carlo Integration Assuming arbitrary distribution 𝑋~𝑝(π‘₯) 𝐢 𝑓(π‘₯) π‘₯π‘Ž 𝑏π‘₯1 π‘₯4π‘₯3 π‘₯2 = ?ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑑π‘₯ = ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑝(π‘₯) 𝑝(π‘₯)𝑑π‘₯ 34 Monte Carlo Integration Assuming arbitrary distribution 𝑋~𝑝(π‘₯) = ΰΆ± π‘Ž 𝑏 𝑔 π‘₯ 𝑝(π‘₯)𝑑π‘₯ 𝑔 π‘₯ = 𝑓 π‘₯ 𝑝 π‘₯ 𝐸 𝑓(𝑋) = ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑝 π‘₯ 𝑑π‘₯ = 𝐸 𝑔 𝑋 = 𝐸 𝑓 𝑋 𝑝(𝑋) 𝑔 π‘₯ = 𝑓 π‘₯ 𝑝 π‘₯ ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑑π‘₯ = ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑝(π‘₯) 𝑝(π‘₯)𝑑π‘₯ 35 Monte Carlo Integration Assuming arbitrary distribution 𝑋~𝑝(π‘₯) 𝐢 𝑓(π‘₯) π‘₯π‘Ž 𝑏π‘₯1 π‘₯4π‘₯3 π‘₯2 ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑑π‘₯ β‰ˆ 1 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 𝑝(𝑋𝑖) 36 Monte Carlo Integration Assuming arbitrary distribution 𝑋~𝑝(π‘₯) ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑑π‘₯ β‰ˆ 1 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 𝑝(𝑋𝑖) 37 Evaluating Rendering Function πŽπ‘– 𝐍 πœƒπ‘– 𝒙 𝝎 π‘Ÿ 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + ΰΆ± Ξ© π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– π‘‘πŽπ‘– β‰ˆ 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 2πœ‹ 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑑π‘₯ β‰ˆ 𝑏 βˆ’ π‘Ž 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 38 Evaluating Rendering Function 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + ΰΆ± Ξ© π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– π‘‘πŽπ‘– πŽπ‘– 𝐍 πœƒπ‘– 𝒙 𝝎 π‘Ÿ ΰΆ± π‘Ž 𝑏 𝑓 π‘₯ 𝑑π‘₯ β‰ˆ 1 𝑛 ෍ 𝑖=1 𝑛 𝑓 𝑋𝑖 𝑝(𝑋𝑖) β‰ˆ 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 𝑝(πŽπ‘–) 39 Evaluating Rendering Function 40 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 1 𝑝(πŽπ‘–) 𝒙 βˆ’πŽ π‘Ÿ πŽπ’Š 𝐿 π‘Ÿ 𝒙′ , 𝝎 π‘Ÿ β€² = 𝐿 𝑒 𝒙′ , 𝝎 π‘Ÿ β€² + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ β€² 𝒙′ , πŽπ‘– β€² , 𝝎 π‘Ÿ β€² 𝐿𝑖 𝒙′ , πŽπ‘– β€² cos πœƒπ‘– β€² π‘‘πŽπ‘– β€² 1 𝑝(πŽπ‘– β€² ) 𝐿 π‘Ÿ 𝒙′′ , 𝝎 π‘Ÿ β€²β€² = 𝐿 𝑒 𝒙′′ , 𝝎 π‘Ÿ β€²β€² + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ β€²β€² 𝒙′′ , πŽπ‘– β€²β€² , 𝝎 π‘Ÿ β€²β€² 𝐿𝑖 𝒙′′ , πŽπ‘– β€²β€² cos πœƒπ‘– β€²β€² π‘‘πŽπ‘– β€²β€² 1 𝑝(πŽπ‘– β€²β€² ) 𝐿 π‘Ÿ 𝒙′′′, 𝝎 π‘Ÿ β€²β€²β€² = 𝐿 𝑒 𝒙′′′, 𝝎 π‘Ÿ β€²β€²β€² + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ β€²β€²β€² 𝒙′′′, πŽπ‘– β€²β€²β€² , 𝝎 π‘Ÿ β€²β€²β€² 𝐿𝑖 𝒙′′′, πŽπ‘– β€²β€²β€² cos πœƒπ‘– β€²β€²β€² π‘‘πŽπ‘– β€²β€²β€² 1 𝑝(πŽπ‘– β€²β€²β€² ) 𝒙′ 𝒙′′ Direct Illumination 41 𝒙 βˆ’πŽ π‘Ÿ πŽπ’Š 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 1 𝑝(πŽπ‘–) 𝐿 π‘Ÿ 𝒙′ , 𝝎 π‘Ÿ β€² = 𝐿 𝑒 𝒙′ , 𝝎 π‘Ÿ β€² + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ β€² 𝒙′ , πŽπ‘– β€² , 𝝎 π‘Ÿ β€² 𝐿𝑖 𝒙′ , πŽπ‘– β€² cos πœƒπ‘– β€² π‘‘πŽπ‘– β€² 1 𝑝(πŽπ‘– β€² ) 𝐿 π‘Ÿ 𝒙′′ , 𝝎 π‘Ÿ β€²β€² = 𝐿 𝑒 𝒙′′ , 𝝎 π‘Ÿ β€²β€² + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ β€²β€² 𝒙′′ , πŽπ‘– β€²β€² , 𝝎 π‘Ÿ β€²β€² 𝐿𝑖 𝒙′′ , πŽπ‘– β€²β€² cos πœƒπ‘– β€²β€² π‘‘πŽπ‘– β€²β€² 1 𝑝(πŽπ‘– β€²β€² ) 𝐿 π‘Ÿ 𝒙′′′, 𝝎 π‘Ÿ β€²β€²β€² = 𝐿 𝑒 𝒙′′′, 𝝎 π‘Ÿ β€²β€²β€² + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ β€²β€²β€² 𝒙′′′, πŽπ‘– β€²β€²β€² , 𝝎 π‘Ÿ β€²β€²β€² 𝐿𝑖 𝒙′′′, πŽπ‘– β€²β€²β€² cos πœƒπ‘– β€²β€²β€² π‘‘πŽπ‘– β€²β€²β€² 1 𝑝(πŽπ‘– β€²β€²β€² ) Direct Illumination 42 𝒙 βˆ’πŽ π‘Ÿ πŽπ’Š 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 1 𝑝(πŽπ‘–) 𝐿 π‘Ÿ 𝒙′ , 𝝎 π‘Ÿ β€² = 𝐿 𝑒 𝒙′ , 𝝎 π‘Ÿ β€² + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ β€² 𝒙′ , πŽπ‘– β€² , 𝝎 π‘Ÿ β€² 𝐿𝑖 𝒙′ , πŽπ‘– β€² cos πœƒπ‘– β€² π‘‘πŽπ‘– β€² 1 𝑝(πŽπ‘– β€² ) 𝐿 π‘Ÿ 𝒙′′ , 𝝎 π‘Ÿ β€²β€² = 𝐿 𝑒 𝒙′′ , 𝝎 π‘Ÿ β€²β€² + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ β€²β€² 𝒙′′ , πŽπ‘– β€²β€² , 𝝎 π‘Ÿ β€²β€² 𝐿𝑖 𝒙′′ , πŽπ‘– β€²β€² cos πœƒπ‘– β€²β€² π‘‘πŽπ‘– β€²β€² 1 𝑝(πŽπ‘– β€²β€² ) 𝐿 π‘Ÿ 𝒙′′′, 𝝎 π‘Ÿ β€²β€²β€² = 𝐿 𝑒 𝒙′′′, 𝝎 π‘Ÿ β€²β€²β€² + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ β€²β€²β€² 𝒙′′′, πŽπ‘– β€²β€²β€² , 𝝎 π‘Ÿ β€²β€²β€² 𝐿𝑖 𝒙′′′, πŽπ‘– β€²β€²β€² cos πœƒπ‘– β€²β€²β€² π‘‘πŽπ‘– β€²β€²β€² 1 𝑝(πŽπ‘– β€²β€²β€² ) 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿 𝑒 𝒙′, 𝝎 π‘Ÿ β€² cos πœƒπ‘– 1 𝑝(πŽπ‘–) Direct Illumination 𝒙 βˆ’πŽ π‘Ÿ 𝝎 π‘Ÿ β€² = βˆ’πŽπ’Š πŽπ’Š evaluates to 0 for non-emissive objects π‘Ÿ 𝑑 43 Uniformly Sample Unit Circle 44 Rejection Technique β€’ Randomly generate (π‘₯, 𝑦) β€’ π‘₯ ∈ [0,1] β€’ 𝑦 ∈ [0,1] β€’ keep when π‘₯2 + 𝑦2 ≀ 1 45 Polar Coordinates β€’ πœƒ uniform random angle between 0 and 2πœ‹ β€’ π‘Ÿ uniform random angle between 0 and 1 π‘Ÿ πœƒ 46 Polar Coordinates β€’ πœƒ uniform random angle between 0 and 2πœ‹ β€’ π‘Ÿ uniform random angle between 0 and 1 πœƒ π‘Ÿ ? 47 β€’ Samples closer to the center are more likely to be chosen Sampling is NOT Uniform in Area! 48 Cumulative Distribution Function (CDF) β€’ Probability that random variable 𝑋 will take a value ≀ π‘₯𝑖 β€’ For PMF: 𝑷(π’™π’Š) = σ𝒋=𝟏 π’Š 𝒑 𝒙𝒋 β€’ For PDF: 𝑃(π‘₯) = ‫׬‬0 π‘₯ 𝑝(π‘₯) 𝑑π‘₯ β€’ Properties β€’ 0 < 𝑃(π‘₯) < 1 β€’ 𝑃(𝑛) = 1 β€’ Sampling probability distributions β€’ Select π‘₯𝑖 if 𝑃(π‘₯π‘–βˆ’1) < πœ‰ < 𝑃(π‘₯𝑖) CDF: PMF: canonical uniform random variable ∊ [0,1) 𝑃(π‘₯1) 1 0 𝑃(π‘₯2) π‘₯1 π‘₯2 π‘₯3 π‘₯4 𝑝(π‘₯1) π‘₯2 π‘₯3 π‘₯4π‘₯1 𝑝(π‘₯2) 𝑝(π‘₯3) 𝑝(π‘₯4) 𝝃 𝑃(π‘₯3) 𝑃(π‘₯4) 49 Cumulative Distribution Function (CDF) β€’ Probability that random variable 𝑋 will take a value ≀ π‘₯ β€’ For PMF: 𝑃(π‘₯𝑖) = Οƒ 𝑗=1 𝑖 𝑝 π‘₯𝑗 β€’ For PDF: 𝑷(𝒙) = β€«Χ¬β€¬πŸŽ 𝒙 𝒑(𝒙) 𝒅𝒙 β€’ Properties β€’ 0 < 𝑃(π‘₯) < 1 β€’ 𝑃(𝑛) = 1 β€’ Sampling probability distributions β€’ Select 𝒙 = π‘·βˆ’πŸ (𝝃) 1 𝑃(π‘₯) 𝑝(π‘₯) 10 10 𝝃 CDF: PDF: canonical uniform random variable ∊ [0,1) 50 β€’ Area of the unit disk: πœ‹ β€’ Since we want uniform distribution over the disk and ‫׬‬𝐷 𝑝 π‘₯, 𝑦 = 1 β€’ π‘Ÿ, πœƒ are independent β†’ 𝑝 π‘Ÿ, πœƒ = 𝑝 π‘Ÿ 𝑝(πœƒ) Better Sampling Using Inversion Method https://www.pbr-book.org/3ed-2018/Monte_Carlo_Integration/Transforming_between_Distributions https://www.pbr-book.org/3ed-2018/Monte_Carlo_Integration/2D_Sampling_with_Multidimensional_Transformations 𝑝 π‘₯, 𝑦 = 𝑝 π‘Ÿ, πœƒ π‘Ÿ β†’ 𝑝 π‘Ÿ, πœƒ = π‘Ÿ 𝑝 π‘₯, 𝑦 𝐴 = πœ‹π‘Ÿ2 𝑝 π‘₯, 𝑦 = 1 πœ‹ 𝑝 πœƒ = 1 2πœ‹ 𝑝 π‘Ÿ, πœƒ = π‘Ÿ πœ‹ π‘ƒβˆ’1 πœ‰1 = 2πœ‹πœ‰1𝑃 πœƒ = πœƒ 2πœ‹ 𝑝 π‘Ÿ = 2π‘Ÿ π‘ƒβˆ’1 πœ‰2 = πœ‰2𝑃 π‘Ÿ = π‘Ÿ2 51 Better Sampling Using Inversion Method πœƒ = 2πœ‹πœ‰1 π‘Ÿ = πœ‰2 πœƒ = 2πœ‹πœ‰1 π‘Ÿ = πœ‰2 52 Uniform Hemisphere Sampling 𝑝 π‘Ÿ, πœƒ, πœ‘ = π‘Ÿ2 π‘ π‘–π‘›πœƒ 𝑝 π‘₯, 𝑦, 𝑧 𝑝 πœ” = 1 2πœ‹ πœƒ πœ‘ 𝑧 𝑦 π‘₯ 𝐴 = 2πœ‹π‘Ÿ2 𝑝 πœƒ, πœ‘ = sin πœƒ 2πœ‹ 𝑝 πœƒ = sin πœƒ π‘ƒβˆ’1 πœ‰1 = cosβˆ’1(1 βˆ’ πœ‰1) cosβˆ’1(πœ‰1)𝑃 πœƒ = 1 βˆ’ cos πœƒ 𝑝 πœ‘ = 1 2πœ‹ π‘ƒβˆ’1 πœ‰2 = 2πœ‹πœ‰2𝑃 πœ‘ = πœ‘ 2πœ‹ note that we ignore π‘Ÿ π‘₯ = π‘Ÿ sin πœƒ cos πœ‘ = 1 βˆ’ πœ‰1 2 cos(2πœ‹πœ‰2) y = π‘Ÿ sin πœƒ sin πœ‘ = 1 βˆ’ πœ‰1 2 sin(2πœ‹πœ‰2) 𝑧 = π‘Ÿ cos πœƒ 53 Uniform Hemisphere Sampling 𝑝 πœ” = 1 2πœ‹ πœƒ πœ‘ 𝑧 𝑦 π‘₯ 𝐴 = 2πœ‹π‘Ÿ2 𝑝 πœƒ, πœ‘ = sin πœƒ 2πœ‹ 𝑝 πœƒ = sin πœƒ π‘ƒβˆ’1 πœ‰1 = cosβˆ’1(1 βˆ’ πœ‰1) cosβˆ’1(πœ‰1)𝑃 πœƒ = 1 βˆ’ cos πœƒ 𝑝 πœ‘ = 1 2πœ‹ π‘ƒβˆ’1 πœ‰2 = 2πœ‹πœ‰2𝑃 πœ‘ = πœ‘ 2πœ‹ π‘₯ = π‘Ÿ sin πœƒ cos πœ‘ = 1 βˆ’ πœ‰1 2 cos(2πœ‹πœ‰2) y = π‘Ÿ sin πœƒ sin πœ‘ = 1 βˆ’ πœ‰1 2 sin(2πœ‹πœ‰2) 𝑧 = π‘Ÿ cos πœƒ = πœ‰1 note that we ignore π‘Ÿ 𝑝 π‘Ÿ, πœƒ, πœ‘ = π‘Ÿ2 π‘ π‘–π‘›πœƒ 𝑝 π‘₯, 𝑦, 𝑧 HOMEWORK HELP 54 Transforming Samples 𝑐 = 0,0,0 55 Transforming Samples β€’ We do not care about hemisphere rotation β€’ So for a local sample (π‘₯, 𝑦, 𝑧) and surface normal 𝑁 β€’ 𝑼 = α‰Š 0, 0, 1 π‘€β„Žπ‘’π‘› 𝑡. 𝑧 < 0.999 0, 1, 0 π‘œπ‘‘β„Žπ‘’π‘Ÿπ‘€π‘–π‘ π‘’ β€’ 𝑻 = 𝑼 Γ— 𝑡 β€’ 𝑩 = 𝑡 Γ— 𝑻 β€’ πŽπ’Š = 𝑻π‘₯ + 𝑩𝑦 + 𝑡𝑧 cross products, order is important, do not forget to normalize sample local coordinates assuming we want actual position πŽπ’Š + 𝑐 𝑐 HOMEWORK HELP 56 Direct Illumination Trace(ray) { radiance ← (0,0,0) hit ← ClosestHit(ray) if(hit == miss) return radiance Le = hit.material.emission for(i=0; i < samples; i++) { sample ← GetNextSample(hit, ray) next_ray ← Ray(hit.intersection + epsilon * hit.normal, sample.direction) next_hit ← ClosestHit(next_ray); if(next_hit == miss || sample.pdf == 0) continue //i.e., skip this sample brdf ← ComputeBRDF(hit, next_ray.direction, -ray.direction) emission ← next_hit.material.emission radiance += brdf * emission * dot(hit.normal, next_ray.direction) / sample.pdf } return Le + radiance samples } 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿 𝑒 𝒙′, 𝝎 π‘Ÿ β€² cos πœƒπ‘– 1 𝑝(πŽπ‘–) 57 𝒙 βˆ’πŽ π‘Ÿ πŽπ‘– Direct Illumination π‘“π‘Ÿ = 1.0, 𝑛 = 100, 𝑝 πŽπ‘– = 1 2πœ‹ 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿 𝑒 𝒙′, 𝝎 π‘Ÿ β€² cos πœƒπ‘– 1 𝑝(πŽπ‘–) 58 𝒙 βˆ’πŽ π‘Ÿ πŽπ‘– Direct Illumination 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿 𝑒 𝒙′, 𝝎 π‘Ÿ β€² cos πœƒπ‘– 1 𝑝(πŽπ‘–) π‘“π‘Ÿ = 1.0, 𝑛 = 1000, 𝑝 πŽπ‘– = 1 2πœ‹ 59 𝒙 βˆ’πŽ π‘Ÿ πŽπ‘– Lambert’s Cosine Law 𝒙 𝐍 πœƒπ‘– 𝐿 𝑒 𝒙′, 𝝎 π‘Ÿ β€² 𝒙 𝐍 πœƒπ‘– 𝐿 𝑒 𝒙′ , 𝝎 π‘Ÿ β€² 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿 𝑒 𝒙′, 𝝎 π‘Ÿ β€² cos πœƒπ‘– 1 𝑝(πŽπ‘–) 60 Cosine-Weighted Sampling more samples where it matters 𝑝 πœ” ∝ cosπœƒ ΰΆ± Ξ© 𝑝 πœ” π‘‘πœ” = 1 β†’ 𝑝 πœ” = cosπœƒ πœ‹ 𝒙 𝝎 π‘Ÿ 𝐍 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿 𝑒 𝒙′, 𝝎 π‘Ÿ β€² cos πœƒπ‘– 1 𝑝(πŽπ‘–) 61 Cosine-Weighted Sampling 𝑝 πœ” = cosπœƒ πœ‹ πœƒ πœ‘ 𝑧 𝑦 π‘₯𝑝 πœƒ, πœ‘ = cos πœƒ sin πœƒ πœ‹ 𝑝 πœƒ = 2 cos πœƒ sin πœƒ π‘ƒβˆ’1 πœ‰1 = cosβˆ’1 1 βˆ’ πœ‰1𝑃 πœƒ = 1 βˆ’ cos2 πœƒ 𝑝 πœ‘ = 1 2πœ‹ π‘ƒβˆ’1 πœ‰2 = 2πœ‹πœ‰2𝑃 πœ‘ = πœ‘ 2πœ‹ π‘₯ = π‘Ÿ sin πœƒ cos πœ‘ = πœ‰1 cos 2πœ‹πœ‰2 y = π‘Ÿ sin πœƒ sin πœ‘ = πœ‰1 sin(2πœ‹πœ‰2) 𝑧 = π‘Ÿ cos πœƒ = 1 βˆ’ πœ‰1 = 1 βˆ’ π‘₯2 βˆ’ 𝑦2 note that we ignore π‘Ÿ 𝑝 π‘Ÿ, πœƒ, πœ‘ = π‘Ÿ2 π‘ π‘–π‘›πœƒ 𝑝 π‘₯, 𝑦, 𝑧 62 Cosine-Weighted Sampling 𝑝 πœ” = cosπœƒ πœ‹ πœƒ πœ‘ 𝑧 𝑦 π‘₯𝑝 πœƒ, πœ‘ = cos πœƒ sin πœƒ πœ‹ π‘ƒβˆ’1 πœ‰1 = cosβˆ’1 1 βˆ’ πœ‰1 𝑝 πœ‘ = 1 2πœ‹ π‘ƒβˆ’1 πœ‰2 = 2πœ‹πœ‰2𝑃 πœ‘ = πœ‘ 2πœ‹ π‘₯ = π‘Ÿ sin πœƒ cos πœ‘ = πœ‰1 cos 2πœ‹πœ‰2 y = π‘Ÿ sin πœƒ sin πœ‘ = πœ‰1 sin(2πœ‹πœ‰2) 𝑧 = π‘Ÿ cos πœƒ = 1 βˆ’ πœ‰1 = 1 βˆ’ π‘₯2 βˆ’ 𝑦2 note that we ignore π‘Ÿ 𝑝 π‘Ÿ, πœƒ, πœ‘ = π‘Ÿ2 π‘ π‘–π‘›πœƒ 𝑝 π‘₯, 𝑦, 𝑧 Malley’s method HOMEWORK HELP 63 𝑃 πœƒ = 1 βˆ’ cos2 πœƒπ‘ πœƒ = 2 cos πœƒ sin πœƒ Cosine-Weighted Sampling = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿 𝑒 𝒙′, 𝝎 π‘Ÿ β€² cos πœƒπ‘– πœ‹ cos πœƒπ‘– 𝑝 πŽπ‘– = cos πœƒπ‘– πœ‹ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿 𝑒 𝒙′ , 𝝎 π‘Ÿ β€² πœ‹ 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿 𝑒 𝒙′, 𝝎 π‘Ÿ β€² cos πœƒπ‘– 1 𝑝(πŽπ‘–) Observation: We no longer care about the light direction, because we have more samples around the normal, thus the contribution will be stronger from there 64 Comparison π‘“π‘Ÿ = 1.0, 𝑛 = 100, 𝑝 πŽπ‘– = 1 2πœ‹ π‘“π‘Ÿ = 1.0, 𝑛 = 100, 𝑝 πŽπ‘– = cos πœƒ πœ‹ 65 β€’ Sum of energy reflected in all directions: Energy Non-Conserving BRDF 𝐿 𝑒 𝒙′ , 𝝎 π‘Ÿ β€² 𝒙 𝝎 π‘Ÿ 𝐍 πœƒπ‘– π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ = 1 ΰΆ± Ξ© π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ cos πœƒπ‘Ÿ π‘‘πŽ π‘Ÿ > 1 πœƒπ‘Ÿ 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 1 𝐿 𝑒 𝒙′, 𝝎 π‘Ÿ β€² cos πœƒπ‘– 1 𝑝(πŽπ‘–) HOMEWORK HELP 66 β€’ Sum of energy reflected in all directions: Lambertian BRDF 𝒙 𝐍 πœƒπ‘– 𝝎 π‘Ÿ π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ ≀ 1 ‫׬‬Ω cos πœƒπ‘Ÿ π‘‘πŽ π‘Ÿ π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ ≀ 1 πœ‹ 𝐿 𝑒 𝒙′ , 𝝎 π‘Ÿ β€² 𝜌 – albedo [0,1] – defines how much light is absorbed by the surface ΰΆ± Ξ© π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ cos πœƒπ‘Ÿ π‘‘πŽ π‘Ÿ ≀ 1 πœƒπ‘Ÿ π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ = 𝜌 πœ‹ 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 𝜌 πœ‹ 𝐿 𝑒 𝒙′, 𝝎 π‘Ÿ β€² cos πœƒπ‘– 1 𝑝(πŽπ‘–) HOMEWORK HELP 67 Lambertian BRDF Comparison π‘“π‘Ÿ = 1, 𝑛 = 100, 𝑝 πŽπ‘– = π‘π‘œπ‘ πœƒ πœ‹ π‘“π‘Ÿ = 1 πœ‹ , 𝑛 = 100, 𝑝 πŽπ‘– = π‘π‘œπ‘ πœƒ πœ‹ 68 Lambertian BRDF Comparison π‘“π‘Ÿ = 𝜌, 𝑛 = 100, 𝑝 πŽπ‘– = π‘π‘œπ‘ πœƒ πœ‹ π‘“π‘Ÿ = 𝜌 πœ‹ , 𝑛 = 100, 𝑝 πŽπ‘– = π‘π‘œπ‘ πœƒ πœ‹ 69 Gamma Correction β€’ Humans do not perceive luminance linearly β€’ much more sensitive to changes in dark tones β€’ We can use gamma correction to fix that β€’ Nonlinear operation used to encode and decode luminance β€’ π‘œπ‘’π‘‘π‘π‘’π‘‘ = 𝑖𝑛𝑝𝑒𝑑 𝛾 70 Lambertian BRDF Comparison (with Gamma Correction) π‘“π‘Ÿ = 𝜌, 𝑛 = 100, 𝑝 πŽπ‘– = π‘π‘œπ‘ πœƒ πœ‹ π‘“π‘Ÿ = 𝜌 πœ‹ , 𝑛 = 100, 𝑝 πŽπ‘– = π‘π‘œπ‘ πœƒ πœ‹ 71 Lambertian BRDF Comparison π‘“π‘Ÿ = 𝜌, 𝑛 = 100, 𝑝 πŽπ‘– = π‘π‘œπ‘ πœƒ πœ‹ π‘“π‘Ÿ = 𝜌 πœ‹ , 𝑛 = 100, 𝑝 πŽπ‘– = π‘π‘œπ‘ πœƒ πœ‹ 72 Evaluating Rendering Function 73 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 1 𝑝(πŽπ‘–) 𝒙 βˆ’πŽ π‘Ÿ πŽπ’Š Trace(ray) { radiance ← (0,0,0) hit ← ClosestHit(ray) if(hit == miss) return radiance Le = hit.material.emission for(i=0; i < samples; i++) { sample ← GetNextSample(hit, ray) next_ray ← Ray(hit.intersection + epsilon * hit.normal, sample.direction) next_hit ← ClosestHit(next_ray); if(next_hit == miss || sample.pdf == 0) continue //i.e., skip this sample brdf ← ComputeBRDF(hit, next_ray.direction, -ray.direction) emission ← next_hit.material.emission radiance += brdf * Trace(next_ray) * dot(hit.normal, next_ray.direction) / sample.pdf } return Le + radiance samples } Recursion on GPU β€’ Not a good idea as GPU is heavy SIMD architecture β€’ Cache divergence β€’ Flow divergence β€’ OpenGL/GLSL does not support/allow it β€’ Solution: β€’ Rewrite using custom stack/queue β€’ Pain but it works (no dynamic allocation) β€’ Utilize properties of Monte Carlo integration β€’ Random samples can be accumulated over time cs.emory.edu 74 Trace(ray) { radiance ← (0,0,0) throughput ← (1,1,1) for(i=0; i < bounces; i++) { hit ← ClosestHit(ray) if(hit == miss) return radiance if(hit.emissive){ radiance += hit.material.emission * throughput return radiance } sample ← GetNextSample(hit, ray) brdf ← ComputeBRDF(hit, sample.direction, -ray.direction) throughput *= brdf * dot(hit.normal, sample.direction) / sample.pdf ray ← Ray(hit.intersection + epsilon * hit.normal, sample.direction) } return radiance } Path Tracing 75 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 1 𝑝(πŽπ‘–) Path Tracing 76 π‘“π‘Ÿ = 𝜌 πœ‹ , 𝑛 = 100, 𝑝 πŽπ‘– = π‘π‘œπ‘ πœƒ πœ‹ , π‘π‘œπ‘’π‘›π‘π‘’π‘  = 10 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 1 𝑝(πŽπ‘–) Comparision π‘“π‘Ÿ = 𝜌 πœ‹ , 𝑛 = 100, 𝑝 πŽπ‘– = π‘π‘œπ‘ πœƒ πœ‹ , π‘π‘œπ‘’π‘›π‘π‘’π‘  = 10π‘“π‘Ÿ = 𝜌 πœ‹ , 𝑛 = 100, 𝑝 πŽπ‘– = 1 2πœ‹ , π‘π‘œπ‘’π‘›π‘π‘’π‘  = 10 77 Surface Lighting Effects 78 Diffuse Reflection Specular Reflection Refraction Reflection & Refraction β€’ Described by Fresnel equations (S,P polarizations) β€’ Schlick’s approximation: 79 𝑅 𝑠 = πœ‚1 βˆ— cos πœƒπ‘– βˆ’ πœ‚2 βˆ— cos πœƒπ‘‘ (πœ‚1 βˆ— cos(πœƒπ‘–) + πœ‚2 βˆ— cos(πœƒπ‘‘)) 2 𝑅 𝑝 = πœ‚1 βˆ— cos πœƒπ‘‘ βˆ’ πœ‚2 βˆ— cos πœƒπ‘– πœ‚1 βˆ— cos πœƒπ‘‘ + πœ‚2 βˆ— cos πœƒπ‘– 2 πΉπ‘†π‘β„Žπ‘™π‘–π‘π‘˜ (𝑅0, πŽπ‘–, 𝑁) = 𝑅0 + 1 βˆ’ 𝑅0 1 βˆ’ πŽπ‘– Β· 𝑁 5 𝐍 𝝎 π‘Ÿ πœƒπ‘– 𝐱 𝝎 𝑑 πœƒπ‘‘ πœ‚1 πœ‚2 βˆ’π πœƒπ‘Ÿ in GLSL you may want to clamp this to [0,1] πœ‚1, πœ‚2 – Indices of refraction 𝑅 𝑒𝑓𝑓 = 1 2 (𝑅 𝑠 + 𝑅 𝑝) HOMEWORK HELP πŽπ‘– Microfacet Model β€’ Macrosurface (actual geometry) β€’ Microsurface (used for illumination) β€’ Mirrors smaller than β€˜pixel’ β€’ Not for displacement in geometry β€’ Not for normal mapping β€’ Multiple models exist 𝑡 𝑡 π‘šπ‘΅ π‘šπ‘΅ π‘šπ‘΅ π‘šπ‘΅ π‘š 𝑡 π‘šπ‘΅ π‘š 𝑡 π‘š 80 Microfacet Model BRDF Torrance–Sparrow Model π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ = 𝐹(πŽπ‘–, πŽβ„Ž)𝐺(πŽπ’Š, 𝝎 π‘Ÿ)𝐷(πŽβ„Ž) 4 cos πœƒπ‘– cos πœƒπ‘Ÿ Fresnel Geometric Attenuation Normal Distribution Function 𝝎 𝒉 = 𝝎 𝒓 + πŽπ’Š 𝝎 𝒓 + πŽπ’Š Normalization 𝒙 𝝎 π‘Ÿ πŽπ‘– 𝐍 πœƒβ„Ž πŽβ„Ž πœƒπ‘–πœƒπ‘Ÿ HOMEWORK HELP 81 Geometric Attenuation β€’ Shadowing: Facets occlude the light for other facets β€’ Masking: Facets cannot be seen due to other facets β€’ Interreflection: Facets reflect the light to other facets, and then the light is reflected to the viewer 82 Geometric Attenuation β€’ Multiple models for geometric attenuation exist (𝛼 stands for roughness) β€’ E.g., Smith GGX β€’ G πŽπ‘–, 𝝎 π‘Ÿ = 2 cos πœƒ 𝑖 cos πœƒ π‘Ÿ cos πœƒ π‘Ÿ 𝛼2+(1βˆ’π›Ό2) cos2 πœƒ 𝑖) + cos πœƒ 𝑖 𝛼2+(1βˆ’π›Ό2) cos2 πœƒ π‘Ÿ) HOMEWORK HELP 83 Normal Distribution Function β€’ Multiple NDFs exist 𝛼 stands for roughness of the material β€’ Smith GGX β€’ 𝐷 π‘€β„Ž = 𝛼2 πœ‹ 𝛼2βˆ’1 cos2 πœƒβ„Ž+1 2 β€’ Beckmann β€’ 𝐷 π‘€β„Ž = π‘ π‘–π‘›πœƒβ„Ž πœ‹π›Ό2 cos3 πœƒβ„Ž 𝑒 βˆ’ tan2 πœƒβ„Ž 𝛼2 β€’ Blinn β€’ 𝐷 π‘€β„Ž = 𝛼+2 2πœ‹ cos 𝛼+1 πœƒβ„Ž sin πœƒβ„Ž 𝒙 𝝎 π‘Ÿ πŽπ‘– 𝐍 πœƒβ„Ž πŽβ„Ž πœƒπ‘–πœƒπ‘Ÿ HOMEWORK HELP 84 Microfacet Model BRDF π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ = 𝐹(πœ”π‘–, πœ”β„Ž)𝐺(πœ”π‘–, πœ” π‘Ÿ)𝐷(πœ”β„Ž) 4 cos πœƒπ‘– cos πœƒπ‘Ÿ 𝑝 πŽπ‘– = cos πœƒπ‘– πœ‹ 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 1 𝑝(πŽπ‘–) 𝑛 = 100, π‘Ÿπ‘œπ‘’π‘”π‘›π‘’π‘ π‘  = 0.2, π‘”π‘Žπ‘šπ‘Ž = 𝑂𝑁 85 𝒙 𝐍 Sampling BRDF π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ = 𝐹(πœ”π‘–, πœ”β„Ž)𝐺(πœ”π‘–, πœ”π‘Ÿ)𝐷(πœ”β„Ž) 4 cos πœƒπ‘– cos πœƒπ‘Ÿ 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 1 𝑝(πŽπ‘–) πŽπ‘– 𝝎 π‘Ÿ 86 𝒙 𝝎 π‘Ÿ Sampling BRDF 𝑝 πœ” ∝ π‘“π‘Ÿ(…) 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 1 𝑝(πŽπ‘–) 𝐍 87 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ = 𝐹(πœ”π‘–, πœ”β„Ž)𝐺(πœ”π‘–, πœ”π‘Ÿ)𝐷(πœ”β„Ž) 4 cos πœƒπ‘– cos πœƒπ‘Ÿ Sampling Microfacet BRDF β€’ The 𝐷(πŽβ„Ž) has the largest influence on the result β€’ We can use the inversion method to compute sampling according to 𝐷(πŽβ„Ž) 1. Express 𝑝 𝝎 ∝ 𝐷(πŽβ„Ž) 2. Convert 𝑝 𝝎 to 𝑝 πœƒ, πœ‘ and separate to 𝑝 πœƒ) 𝑝(πœ‘ 3. Compute P πœƒ and P πœ‘ by integrating 𝑝 πœƒ an 𝑝 πœ‘ , respectively 4. Compute Pβˆ’1 πœƒ and Pβˆ’1 πœ‘ 5. Use canonical uniform distribution to sample hemisphere 6. Convert back to Cartesian coordinates 𝒙 𝝎 π‘Ÿ 𝐍 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ = 𝐹(πŽπ‘–, πŽβ„Ž)𝐺(πŽπ’Š, 𝝎 𝒓)𝐷(πŽβ„Ž) 4 cos πœƒπ‘– cos πœƒπ‘Ÿ 88 Example GGX https://agraphicsguynotes.com/posts/sample_microfacet_brdf 𝑝 πœ”β„Ž = 𝛼2 cos πœƒβ„Ž πœ‹ 𝛼2 βˆ’ 1 cos2 πœƒβ„Ž + 1 2 𝐷 πœ”β„Ž = 𝛼2 πœ‹ 𝛼2 βˆ’ 1 cos2 πœƒβ„Ž + 1 2 𝑝 πœƒβ„Ž, πœ‘β„Ž = 𝛼2 cos πœƒβ„Ž sin πœƒβ„Ž πœ‹ 𝛼2 βˆ’ 1 cos2 πœƒβ„Ž + 1 2 𝜽 𝒉 = 𝐚𝐫𝐜𝐜𝐨𝐬 𝟏 βˆ’ 𝝃 𝟏 𝝃 𝟏 𝜢 𝟐 βˆ’ 𝟏 + 𝟏 𝝋 𝒉 = πŸπ…πƒ 𝟐 π‘₯β„Ž = π‘Ÿ sin πœƒβ„Ž cos πœ‘β„Ž yh = π‘Ÿ sin πœƒβ„Ž 𝑠𝑖𝑛 πœ‘β„Ž π‘§β„Ž = π‘Ÿ cos πœƒβ„Ž do not forget to convert the sample to world coordinates HOMEWORK HELP 89 PDF respecting solid angle Example GGX β€’ To compute πŽπ‘– we need to reflect βˆ’πŽ π‘Ÿ along πŽβ„Ž β€’ Assuming 𝝎 𝒓 β€² = βˆ’πŽ π‘Ÿ β€’ πŽπ‘– = 𝝎 𝒓 β€² βˆ’ 𝟐𝝎 𝒉 𝝎 𝒓 β€² βˆ™ 𝝎 𝒉 β€’ We need to express the probability with respect to πŽπ‘– β€’ 𝑝 πŽπ‘– = 𝐷 πŽβ„Ž cos πœƒβ„Ž 4(𝝎 π‘Ÿβˆ™πŽβ„Ž) https://agraphicsguynotes.com/posts/sample_microfacet_brdf 𝒙 𝝎 π‘Ÿ πŽπ‘– 𝐍 πœƒβ„Ž πŽβ„Ž πœƒπ‘–πœƒπ‘Ÿ in GLSL you may want to use reflect (𝝎 𝒓 β€² ,𝝎 𝒉) HOMEWORK HELP 90 Microfacet Model BRDF https://agraphicsguynotes.com/posts/sample_microfacet_brdf π‘“π‘Ÿ = 𝐹(πœ”π‘–, πœ”β„Ž)𝐺(πœ”π‘–, πœ”π‘Ÿ)𝐷(πœ”β„Ž) 4 cos πœƒπ‘– cos πœƒπ‘Ÿ 𝑝 πŽπ‘– = 𝐷 πœ”β„Ž cos πœƒβ„Ž 4(𝝎 π‘Ÿ βˆ™ πœ”β„Ž) 𝑛 = 100, π‘Ÿπ‘œπ‘’π‘”π‘›π‘’π‘ π‘  = 0.2, π‘”π‘Žπ‘šπ‘Ž = 𝑂𝐹𝐹 91 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 1 𝑝(πŽπ‘–) HOMEWORK HELP β€’ Sampling BRDF converges faster for specular surfaces β€’ Sampling according to cos πœƒπ‘– converges faster for diffuse surfaces Combining BRDFs 𝒙 𝒙 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 1 𝑝(πŽπ‘–) 92 Comparison 𝑛 = 100, 𝑏 = 10, π‘Ÿπ‘œπ‘’π‘”π‘›π‘’π‘ π‘  = 1.0, π‘”π‘Žπ‘šπ‘Ž = 𝑂𝐹𝐹 π‘“π‘Ÿ = 𝜌 πœ‹ , 𝑝 πŽπ‘– = π‘π‘œπ‘ πœƒ πœ‹ , 𝑛 = 100, 𝑏 = 10, π‘”π‘Žπ‘šπ‘Ž = 𝑂𝑁 𝑛 = 100, 𝑏 = 10, π‘Ÿπ‘œπ‘’π‘”π‘›π‘’π‘ π‘  = 1.0, π‘”π‘Žπ‘šπ‘Ž = 𝑂𝐹𝐹 π‘“π‘Ÿ = 𝐹(πŽπ’Š, 𝝎 𝒉)𝐺(πŽπ’Š, 𝝎 𝒓)𝐷(𝝎 𝒉) 4 cos πœƒπ‘– cos πœƒπ‘Ÿ 𝑝 πŽπ‘– = 𝐷 𝝎 𝒉 cos πœƒβ„Ž 4(𝝎 π‘Ÿ βˆ™ 𝝎 𝒉) 93 β€’ Mixing two unbiased estimators produces unbiased estimator Combining BRDFs 𝐸 ෍ 𝑖 𝑋𝑖 = ෍ 𝑖 𝐸[𝑋𝑖] 𝒙 𝒙 94 β€’ Mixing two unbiased estimators produces unbiased estimator Combining BRDFs 𝐸 ෍ 𝑖 𝑋𝑖 = ෍ 𝑖 𝐸[𝑋𝑖] HOMEWORK HELP Algorithm Draw random number πœ‰ from uniform distribution If π‘Ÿπ‘œπ‘’π‘”π‘›π‘’π‘ π‘  > πœ‰ Compute diffuse π‘ π‘Žπ‘šπ‘π‘™π‘’ and corresponding 𝑃𝐷𝐹𝑑 Set specular 𝑃𝐷𝐹𝑠 = 1 Else Compute specular (e.g, GGX) π‘ π‘Žπ‘šπ‘π‘™π‘’ and corresponding 𝑃𝐷𝐹𝑠 Set diffuse 𝑃𝐷𝐹𝑑 = 1 Mix the PDFs based on π‘Ÿπ‘œπ‘’π‘”π‘›π‘’π‘ π‘  p Ο‰ = (π‘Ÿπ‘œπ‘’π‘”π‘›π‘’π‘ π‘ )𝑃𝐷𝐹𝑑 + (1 βˆ’ π‘Ÿπ‘œπ‘’π‘”π‘›π‘’π‘ π‘ )𝑃𝐷𝐹𝑠 95 Comparison GGX Only , 𝑛 = 100, 𝑏 = 10, 𝑔 = 𝑂𝑁 GGX + Cosine, 𝑛 = 100, 𝑏 = 10, 𝑔 = 𝑂𝐹𝐹 96 Light Importance Sampling 𝒙 𝝎 π‘Ÿ 𝐍 ΰΆ± Ξ© π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– π‘‘πŽπ‘– ΰΆ± A 𝐿 π‘œ 𝒙′ , 𝝎 𝒐 𝑽 𝒙, 𝒙′ cos πœƒπ‘– cos πœƒπ‘– β€² π‘₯ βˆ’ π‘₯2 2 𝑑𝐴 πœƒπ‘– πŽπ’Š = βˆ’πŽ 𝒐 𝝎 𝒐 = βˆ’πŽπ’Š πœƒπ‘– β€² integrate over light area outgoing radiance visibility term light orientation distance from light 𝑝 πœ” ∝ 1 𝐴 𝒙′𝐍′ 97 Uniform Sphere Sampling 𝑝 πœ” = 1 4πœ‹ 𝑝 πœƒ, πœ‘ = π‘ π‘–π‘›πœƒ 4πœ‹ 𝑝 πœƒ = π‘ π‘–π‘›πœƒ π‘ƒβˆ’1 πœ‰1 = cosβˆ’1(1 βˆ’ πœ‰1) cosβˆ’1(πœ‰1)𝑃 πœƒ = 1 βˆ’ cos πœƒ 𝑝 πœ‘ = 1 4πœ‹ π‘ƒβˆ’1 πœ‰2 = 4πœ‹πœ‰2𝑃 πœ‘ = πœ‘ 4πœ‹ π‘₯ = π‘Ÿ sin πœƒ cos πœ‘ = 1 βˆ’ πœ‰1 2 cos 4πœ‹πœ‰2 = 1 βˆ’ πœ‰1 2 cos 2πœ‹πœ‰2 y = π‘Ÿ sin πœƒ 𝑠𝑖𝑛 πœ‘ = 1 βˆ’ πœ‰1 2 sin(4πœ‹πœ‰2) = 1 βˆ’ πœ‰1 2 cos 2πœ‹πœ‰2 𝑧 = π‘Ÿ cos πœƒ = πœ‰1 note that we ignore π‘Ÿ 𝑝 π‘Ÿ, πœƒ, πœ‘ = π‘Ÿ2 π‘ π‘–π‘›πœƒ 𝑝 π‘₯, 𝑦, 𝑧 πœƒ πœ‘ 𝑧 𝑦 π‘₯ 𝐴 = 4πœ‹π‘Ÿ2 98 Uniform Sphere Sampling 𝑝 πœ” = 1 4πœ‹ 𝑝 πœƒ, πœ‘ = π‘ π‘–π‘›πœƒ 4πœ‹ 𝑝 πœƒ = π‘ π‘–π‘›πœƒ π‘ƒβˆ’1 πœ‰1 = cosβˆ’1(1 βˆ’ πœ‰1) cosβˆ’1(πœ‰1)𝑃 πœƒ = 1 βˆ’ cos πœƒ 𝑝 πœ‘ = 1 4πœ‹ π‘ƒβˆ’1 πœ‰2 = 4πœ‹πœ‰2𝑃 πœ‘ = πœ‘ 4πœ‹ π‘₯ = π‘Ÿ sin πœƒ cos πœ‘ = 1 βˆ’ πœ‰1 2 cos 4πœ‹πœ‰2 = 1 βˆ’ πœ‰1 2 cos 2πœ‹πœ‰2 y = π‘Ÿ sin πœƒ 𝑠𝑖𝑛 πœ‘ = 1 βˆ’ πœ‰1 2 sin(4πœ‹πœ‰2) = 1 βˆ’ πœ‰1 2 sin 2πœ‹πœ‰2 𝑧 = π‘Ÿ cos πœƒ = πœ‰1 note that we ignore π‘Ÿ 𝑝 π‘Ÿ, πœƒ, πœ‘ = π‘Ÿ2 π‘ π‘–π‘›πœƒ 𝑝 π‘₯, 𝑦, 𝑧 πœƒ πœ‘ 𝑧 𝑦 π‘₯ 𝐴 = 4πœ‹π‘Ÿ2 99 Sampling Spherical Lights β€’ Pick a random light and obtain its [position, radius] with some probability p 𝒍 β€’ 𝑝, π‘Ÿ ← PickRandomLight() β€’ Compute a random sample on a sphere using canonical uniform distribution β€’ 𝑠 ← UniformSampleSphere(πœ‰1, πœ‰2) β€’ Compute a sample ray πŽπ’Š to integrate β€’ 𝒙′ = 𝒑 + 𝒔 βˆ— 𝒓 β€’ πŽπ’Š = 𝒙′ βˆ’ 𝒙 β€’ Compute probability the given ray to be selected β€’ p πŽπ’Š = π‘₯βˆ’π‘₯β€² 2 4πœ‹π‘Ÿ2 𝑝(𝑙) 𝒙 𝝎 π‘Ÿ 𝐍 πœƒπ‘– πŽπ’Š = βˆ’πŽ 𝒐 𝝎 𝒐 = βˆ’πŽπ’Š πœƒπ‘– β€² 𝒙′𝐍′ when lights are picked uniformly 𝑝 𝑙 = 1 π‘›π‘’π‘šπ‘π‘’π‘Ÿ π‘œπ‘“ π‘™π‘–π‘”β„Žπ‘‘π‘  100 Comparison GGX + Cosine , 𝑛 = 100, 𝑏 = 10, 𝑔 = 𝑂𝑁 GGX+Cosine+Lights, 𝑛 = 100, 𝑏 = 10, 𝑔 = 𝑂𝐹𝐹 101 Light Importance Sampling 𝒙 β€’ In each step, we can sample both towards the light and BRDF spikes β€’ Sample light to get direct illumination β€’ Sample BRDF to get indirect illumination 𝒙 102 Example https://www.shadertoy.com/view/4sSXWt 103 Combining BRDFs 104 Snell’s Law https://pixelandpoly.com/ior.html sin πœƒπ‘‘ sin πœƒ 𝑖 = πœ‚1 πœ‚2 = πœ‚ πœ‚1, πœ‚2 – Indices of refraction 𝝎 𝑑 = βˆ’πœ‚πŽ π‘Ÿ + πœ‚(𝐍 β‹… 𝝎 π‘Ÿ) βˆ’ 1 βˆ’ πœ‚2 1 βˆ’ (𝐍 β‹… 𝝎 π‘Ÿ)2 𝐍 πœ‚ = πœ‚1 πœ‚2 π‘€β„Žπ‘’π‘› 𝑁 ≑ 𝑁𝑓𝑓 πœ‚2 πœ‚1 π‘œπ‘‘β„Žπ‘’π‘Ÿπ‘€π‘–π‘ π‘’ 𝑡 𝑓𝑓 = α‰Š 𝑡 π‘€β„Žπ‘’π‘› 𝑡 βˆ™ βˆ’πŽ π‘Ÿβ‰€ 0 βˆ’π‘΅ π‘œπ‘‘β„Žπ‘’π‘Ÿπ‘€π‘–π‘ π‘’ in GLSL you may use refract(βˆ’πŽ 𝒓, 𝑡 𝒇𝒇, 𝜼) 𝐍 𝝎 π‘Ÿ πœƒπ‘– 𝐱 𝝎 𝑑 πœƒπ‘‘ πœ‚1 πœ‚2 βˆ’π πœƒπ‘Ÿ 105 Transmission when we hit transparent surface we choose πŽπ’Š or 𝝎 𝒕 based on a probability 106 Transmission A bit hacky solution. if (K < 0.0 || prob > πœ‰){ return SampleReflection(hit, ray) } else { dir ← normalize(refract(βˆ’πŽ π‘Ÿ, 𝑡 𝑓𝑓, 𝜼)) pdf ← 1.0 return BSDFSample(dir , pdf) } π‘π‘Ÿπ‘œπ‘ = 𝐹 πœ‚1 βˆ’ πœ‚2 πœ‚1 + πœ‚2 2 Κ = 1.0 βˆ’ πœ‚2 βˆ— 1.0 βˆ’ (βˆ’πŽ π‘Ÿβˆ™ 𝑡 𝑓𝑓 2 ) πœ‚ = πœ‚1 πœ‚2 π‘€β„Žπ‘’π‘› 𝑁 ≑ 𝑁𝑓𝑓 πœ‚2 πœ‚1 π‘œπ‘‘β„Žπ‘’π‘Ÿπ‘€π‘–π‘ π‘’ 𝑡 𝑓𝑓 = α‰Š 𝑡 π‘€β„Žπ‘’π‘› 𝑡 βˆ™ βˆ’πŽ π‘Ÿβ‰€ 0 βˆ’π‘΅ π‘œπ‘‘β„Žπ‘’π‘Ÿπ‘€π‘–π‘ π‘’ πœ‰ = π‘Ÿπ‘Žπ‘›π‘‘π‘œπ‘š π‘›π‘’π‘šπ‘π‘’π‘Ÿ [0 βˆ’ 1] 𝐹(𝑅0) = 𝑅0 + 1 βˆ’ 𝑅0 (1 βˆ’ 𝝎 π‘Ÿ βˆ™ 𝑡 𝒇𝒇 )5 107 Result GGX+Cosine, 𝑛 = 1000, 𝑏 = 10, π‘Ÿ = 0.8, π‘”π‘Žπ‘šπ‘Ž = 𝑂𝑁GGX+Cosine, 𝑛 = 1000, π‘Ÿ = 0.2 𝑏 = 10, π‘”π‘Žπ‘šπ‘Ž = 𝑂𝑁 108 Problems with Transmission 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 1 𝑝(πŽπ‘–) 𝐍 𝐟𝐟 β€’ When computing new ray, we need to correctly offset the origin β€’ Rendering equation is not really build for BTDF β€’ cos πœƒπ‘– = 𝑁 βˆ™ πŽπ’Š will be always negative β€’ you may invert πŽπ’Š or better ignore it completely ray = Ray(hit.intersection + (hit.glass ? -EPSILON * hit.ffnormal : EPSILON * hit.ffnormal), sample.direction) 𝐍 𝐟𝐟 109 β€’ When computing new ray, we need to correctly offset the origin β€’ Rendering equation is not really designed for BTDF β€’ cos πœƒπ‘– = 𝑁 βˆ™ πŽπ’Š will be always negative β€’ Solution: β€’ you may invert πŽπ’Š (produces dark edges) β€’ better ignore it completely Problems with Transmission 𝐿 π‘Ÿ 𝒙, 𝝎 π‘Ÿ = 𝐿 𝑒 𝒙, 𝝎 π‘Ÿ + 1 𝑛 ෍ 𝑖=1 𝑛 π‘“π‘Ÿ 𝒙, πŽπ‘–, 𝝎 π‘Ÿ 𝐿𝑖 𝒙, πŽπ‘– cos πœƒπ‘– 1 𝑝(πŽπ‘–) ray = Ray(hit.intersection + (hit.glass ? -EPSILON * hit.ffnormal : EPSILON * hit.ffnormal), sample.direction) 110 More Reading www.pbr-book.org/3ed-2018/contents docs.unrealengine.com