11 Environment and ambient illumination Steve Marschner CS5625 Spring 2020
Real-time environment illumination Now incident radiance field is stored in a texture, not defined by a polygon • this makes it easy to do mirror reflections: single cubemap lookup Two special kinds of BRDFs are convenient • di ff use BRDFs: irradiance depends only on surface normal (not v ) …leads to irradiance environment maps • rotationally symmetric lobes (e.g. Phong): it’s a convolution of the environment map …leads to prefiltered environment maps
<latexit sha1_base64="lzHQhec/0+3wgVOSm7sGDJyI+ec=">ACQ3icbZDPahRBEMZrEv/EVeMmOYrQuAhZiDszu2uyOYgBL4J7iOAmgZ1l6OmtSZp094zdPUOWIac8jVd9Bh/CZ/Ai4lWwZzaKigUNv/q6vrS3LBjQ2Cz97K6o2bt26v3WndvXd/UF7Y/PIZIVmOGZyPRJQg0KrnBiuRV4kmukMhF4nJy/rOvHJWrDM/XWLnKcSXqeMoZtU6K24/Gsd6OyrJLnpNxzB026Q6JStXtxu1O0BuFz4K9AVnCcP8adgck7AVNdF58hSYO4w1vPZpnrJCoLBPUmGkY5HYnFfhOzSqLWcCL1tRYTCn7Jye4tShohLNrGq2uSRPnDInabdUZY06p8dFZXGLGTibkpqz8y/tVr8X21a2HQ0q7jKC4uKLQelhSA2I7U1ZM41MisWDijT3P2VsDOqKbPOwFbUNFb+xLjMN1r6Y5oqhe+xQuZ+lwxUczRd3M1v3hauqfcNo2Dw35/NKwdrGEQ/oLRbweP+r1w0AveDsHr5dWwho8hMewDSHswQG8gkOYAIMreA8f4KP3yfvifO+L6+ueNc9W/BXeD9+Au1BsHo=</latexit> Standard reflection map For mirror-specular surface, the illumination integral reduces to L r ( v ) = L i ( r ( v , n )) This is a function only of r • so store it in a cubemap and look up using r ( v , n ).
<latexit sha1_base64="IaqHgxQwXRGt6294Fawpmh2WdCM=">ACZnicbVBdb9MwFHUzPrYCpRuaeODFokIa0miStrDuAVGJFyQqMRDdJtV5Dg3nTXbCbZTrYr6d/ZreAWJf8AjPwEnLQgQV7Lu8bn3+PqeOBfc2CD41vC2bty8dXt7p3n7r3W/fbu3qnJCs1gwjKR6fOYGhBcwcRyK+A810BlLOAsvnxd1c8WoA3P1Ee7zGEm6VzxlDNqHRW1R+NI45eYpJqy8sOqJDlfYcKVjcg7CXOKxE/IAvxFJNDlxVhSWbxhkhcjtqdoDsMnwdHfbwGg+MNeNHYTeo/PqB6rjJNptEiSsUKCskxQY6ZhkNvDVMAnNSuptpwJWDVJYSCn7JLOYeqgohLMrKwXuEnjklwml3lMU1+6eipNKYpYxdp6T2wvxbq8j/1aFTYezkqu8sKDYelBaCGwzXLmHE6BWbF0gDLN3V8xu6DO+s8bpJaWPoT426+0dIf81hTvfQtXMnU54qJIgHfzdX86tnCPeW2qR0c9HrDQeVgBfrhLzD87eBprxv2u8H7QWf0dm0l2kaP0GN0gEJ0hEboDTpBE8TQNfqMvqCvje9ey9v3Hq5bvcZG8wD9FR7+Cex5uvk=</latexit> Irradiance environment map For di ff use surface, illumination integral reduces to L r = R Z L i ( l ) ( n · l ) d l π Ω This is a function only of n • so store it in a cubemap and look up using n .
Irradiance environment map environment map irradiance map Gary King in GPU Gems 2 http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter10.html
Irradiance map illumination McGuire et al. HPG ’11 10.1145/2018323.2018327
McGuire et al. HPG ’11 10.1145/2018323.2018327 Irradiance map illumination
<latexit sha1_base64="lIC2K78XcxySqv6DyL9lSW0PkUI=">ACbHicbVDtahQxFM1O/air1q36rwjBRanQ7szsbu36y4IgtWcNvCZhkymTvT0CQzJplhl6Fv5NP4T/QZxEcwM1tFxQshJ+e2/uiQvBjQ2CLx1v49r1Gzc3b3Vv37m7da+3f/E5KVmMGO5yPVZTA0IrmBmuRVwVmigMhZwGl+8avKnFWjDc/XBrgpYSJopnJGraOi3utpHdJVT3DhBaFzpeYcGUj8k5CRnEWEcMzSZ1CYMKS3GJSafdm0a8IRuYuDvq9YPBJDwIDkd4DcYvrsDzEQ4HQRv9lz9QG8fRdmeLJDkrJSjLBDVmHgaF3UsFfFSLmrLmYDLikNFJRd0AzmDioqwSzqdu1L/MQxCU5z7Y6yuGX/rKipNGYlY6eU1J6bf3MN+b/cvLTpZFzVZQWFsPSkuBbY4bD3HCNTArVg5Qprn7K2bnVFNmndNd0hbW/sy4l2+09Kc81lSvfAtLmfpcMVEm4Lu5mi/3K9fKbdM6OB4OJ+PGwQaMwl9g8tvBk+EgHA2C9+P+0du1lWgT7aDHaBeF6BAdoTfoGM0Q5/QZ/QVfet89x56O96jtdTrXNU8QH+F9/QnEzy9Tw=</latexit> <latexit sha1_base64="qHRkES0l4m/bzqAshvDx3MfcZjw=">ACZXicbVDLbtNAFJ2YVwm0pFCxYcGICKmV0thOAk1XrcQGCRZFIm2lOLG4+t01HmYmbGVyOrn9GvYlgVfwJZPYOykCBXGunc+5j7klyzowNgu8t787de/cfbDxsP3q8ufWks/301KhCU5hQxZU+T4gBziRMLMcznMNRCQczpLd7V+VoI2TMnPdpnDTJC5ZBmjxDoq7hxlsd6NyrKHo5Lv4aiHXSYjmiq7Zkiea7XA8zgybC6Ikzm+1fVe3OkG/XH4JjgY4hUYHa7B2yEO+0ET3aOfqImTeLu1FaWKFgKkpZwYMw2D3PYyDl/krCLaMsrhqh0VBnJCL8kcpg5KIsDMqubeK/zaMSnOlHZPWtywf3ZURBizFImrFMRemH+1mvyfNi1sNp5VTOaFBUlXi7KCY6twbR5OmQZq+dIBQjVzf8X0gmhCrbO4HTWNlT8xLvONFv5Hlmil76Fhch8JikvUvDdXs0W+6Ub5a5pHBwNBuNR7WANhuEtGP928HTQD4f94NOoe/xhZSXaQC/QK7SLQnSAjtF7dImiKJr9BXdoG+tH96mt+M9X5V6rXPM/RXeC9/Aaisumo=</latexit> Prefiltered environment map For a general specular surface, approximate the BRDF by a function f r ( v , l ) ( n · l ) ≈ g σ ( l · r ) • where g defines a lobe of width σ that is symmetric around r The illumination integral is Z L r ( v ) ≈ g σ ( l · r ) L i ( l ) d l Ω This depends only on r and the scalar σ • so store it in an array of cubemaps indexed by σ , and look up using r
Irradiance environment mapping Akenine-Möller et al. RTR 3e environment map prefiltered map prefiltered map for specular surface for glossy surface for diffuse surface
Prefiltered environment map environment map prefiltered for Phong Gary King in GPU Gems 2 http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter10.html
blitzcode.net
Prefiltered map variants Many approaches to approximating the BRDF with symmetric lobes • classic is to use a single lobe, loses stretching at grazing angles • many techniques use multiple samples, similar to anisotropic texture filtering • modern thought process is to treat the whole precomputation as approximating more accurate BRDF lobes using multiple samples from arbitrary maps stored in mipmaps
Manson & Sloan 2016
Shadow baking Rendering with no shadows, Floor shaded with irradiance darker diffuse floor from shadow texture Irradiance texture computed using rectangular light
a convex diffuse object in a constant-radiance environment
a non-convex diffuse scene under constant-radiance illumination
a non-convex diffuse object in a constant-radiance environment
a non-convex diffuse scene under constant-radiance illumination
object in a constant-radiance environment with no shadowing
Akenine-Möller et al. RTR 3e
AO Maps slide courtesy of Kavita Bala, Cornell University
Ray traced vertex AO Kavan et al. EGSR 2011 ambient occlusion sampled at vertices, ambient occlusion sampled inside ambient occlusion computed at each interpolated as vertex color triangles, vertex values fit to samples, pixel (ground truth) interpolated as vertex color
NVIDIA OptiX implementation images https://developer.nvidia.com/optix-prime-baking-sample
NVIDIA OptiX implementation images https://developer.nvidia.com/optix-prime-baking-sample
NVIDIA OptiX implementation images https://developer.nvidia.com/optix-prime-baking-sample
EnvMap slide courtesy of Kavita Bala, Cornell University
AO slide courtesy of Kavita Bala, Cornell University
Total slide courtesy of Kavita Bala, Cornell University
Akenine-Möller et al. RTR 3e
Ambient Occlusion: Improvement • At each point find – Fraction of hemisphere that is occluded – Also, average unoccluded direction B � (bent normal) � Use B for lighting (see later) slide courtesy of Kavita Bala, Cornell University
What about B? • The unoccluded direction gives an idea of where the main illumination is coming from slide courtesy of Kavita Bala, Cornell University
SSAO • Restrict the hemisphere – Why? Think of AO in box • Typically add a drop-off as you get to the hemisphere boundary slide courtesy of Kavita Bala, Cornell University
Crytek for Crisis: SSAO • Take z-buffer • Consider sphere around a point p – Distribute samples – Project to screen space and compare to z buffer slide courtesy of Kavita Bala, Cornell University
Martin Mittring, Crysis GmBH http://crytek.com/cryengine/presentations/finding-next-gen-cryengine--2
Martin Mittring, Crysis GmBH http://crytek.com/cryengine/presentations/finding-next-gen-cryengine--2
Martin Mittring, Crysis GmBH http://crytek.com/cryengine/presentations/finding-next-gen-cryengine--2
Hemisphere vs. Sphere John Chapman http://john-chapman-graphics.blogspot.co.uk/2013/01/ssao-tutorial.html
Irradiance map + SSAO McGuire et al. HPG ’11 10.1145/2018323.2018327
Irradiance map + SSAO McGuire et al. HPG ’11 10.1145/2018323.2018327
McGuire et al. HPG ’11 10.1145/2018323.2018327 Irradiance map + SSAO
McGuire et al. HPG ’11 10.1145/2018323.2018327 Irradiance map + SSAO
slide courtesy of Kavita Bala, Cornell University
slide courtesy of Kavita Bala, Cornell University
slide courtesy of Kavita Bala, Cornell University
slide courtesy of Kavita Bala, Cornell University
slide courtesy of Kavita Bala, Cornell University
slide by Frédo Durand, MIT Denoising from 1 image • We can’t take average over Noisy input multiple images
slide by Frédo Durand, MIT Denoising from 1 image • We can’t take average over Noisy input multiple images • Idea 1: take a spatial average - Most pixels have roughly teh same color as their neighbor - Noise looks high frequency => do a low pass • Here: Gaussian blur
slide by Frédo Durand, MIT Gaussian blur • Noise is mostly gone After Gaussian blur • But image is blurry - duh!
slide by Frédo Durand, MIT adapted from slide by Frédo Durand, MIT Gaussian blur • Noise is mostly gone After Gaussian blur • But image is blurry - duh! • Question: how to blur/ smooth/abstract image, but without destroying important features?
Recommend
More recommend