09 Real time area lights Steve Marschner CS5625 Spring 2019 - - PowerPoint PPT Presentation

09 real time area lights
SMART_READER_LITE
LIVE PREVIEW

09 Real time area lights Steve Marschner CS5625 Spring 2019 - - PowerPoint PPT Presentation

09 Real time area lights Steve Marschner CS5625 Spring 2019 <latexit


slide-1
SLIDE 1

09 Real time area lights

Steve Marschner CS5625 Spring 2019

slide-2
SLIDE 2

Area lighting

when lights are not point-like, we have an integration problem

  • for real time we need fast analytic solutions to (approximations of) this definite integral
  • the form of the solution depends on the form of Li and fr.

diffuse

  • polygonal lights: analytical solution due to Lambert (1760)
  • environment lights: irradiance environment maps

specular

  • polygonal lights: linearly transformed cosines
  • environment lights: prefiltered environment maps

Lr(v) = Z

fr(v, l) Li(l) (l · n) dl

<latexit sha1_base64="5cykLyE0VWrwpOC4rThjC1qBA=">ACb3icbZDfbtMwFMbd8G8U2LpxwQUSsqiQWqk0SduxcjExiRsQlRgS3SY1VeQ4J5012wm2E62K9kx7ml3sBl4B3gAnGQgQR7L083fO8fH5owzbTzvuXcun3n7r2N+0HDx9tbnW2d450misKc5ryVJ1ERANnEuaGQ4nmQIiIg7H0dnbKn9cgNIslZ/NOoOlICvJEkaJsVLYeT8LVS8oij7exwGTJgw+ClgRnDTyAcF7wcDPAtZr0JsuQIc0Dg1NisrKbZK2Ol6w6m/6+2NcQOT1zfwaoz9oVdH9813VMdhuN3aDOKU5gKkoZxovfC9zAwSDl/ksiTKMrhoh3kGjJCz8gKFhYlEaCXZb35BX5hlRgnqbJHGlyrf3aURGi9FpGtFMSc6n9zlfi/3CI3yXRZMpnlBiRtBiU5xybFlY04Zgqo4WsLhCpm/4rpKVGEGmt2O6gbS3eu7c3VSrgzFimi1q6Bc5G4TFKex+DauYqdvyzsU3ab2sHJaDSdVA5WMPZ/wfS3g0ejoT8ep8m3YMPjZVoAz1Fz1EP+WgPHaB36BDNEUWX6Ap9Rd9aP5wnzjMHN6VO6bnMfornP5PFCa8nw=</latexit>

This is all with no shadows! That is a (large-ish) topic for later in the course.

slide-3
SLIDE 3

Diffuse, polygonal lights

In this case the illumination integral simplifies to Lambert worked out a solution to this in 1760

  • where the index is understood to wrap around for the last term
  • (derivation on board; refer to Eric Heitz’s notes linked on the schedule)

Lr = R π Z

Ω(S)

(n · l) dl

<latexit sha1_base64="Mf+1bOjbrUsK5ynE+094bVt9+c=">ACYXicbZDdbtMwFMfd8LUVGN243I1FhdRJo0nabitCaJO4QWIS46PbpLqKHOeks2Y7wXaqVEeZk/DLVxyzQvwCDjpQIA4kuW/+cH/sX54IbGwTfWt6t23fu3ltb9/8HDjUWdz69RkhWYwYZnI9HlMDQiuYGK5FXCea6AyFnAWX76q82cL0IZn6qNd5jCTdK54yhm1zo6L4jV9ikmrKyvdVSXJeYcKVjUryVsKc9j7sVLhHFgoTlmQWk4XYwWQ3cXvU6Qb9cbgXHAzxSoye34j9IQ7QRPdwx+oiZNos7VBkowVEpRlghozDYPc7qYCPqlZSbXlTEDVJoWBnLJLOoepk4pKMLOy+WuFnzonwWm3VIWN+6fHSWVxixl7ColtRfm31xt/i83LWw6npVc5YUFxVaD0kJgm+EaHE64BmbF0gnKNHdvxeyCOmzW4W2TprH0J8adfKOlf8xjTfXSt3AlU58rJoEfDdX86tnC3eV+01DcDQYjEc1wVoMw19i/Jvg6aAfDvBu1H36M0KJVpD2+gJ6qEQHaAj9BqdoAli6Bp9Rl/Q19Z3b93reFurUq910/MY/RXe9k8Oqrk4</latexit>

Lr = R 2π

n

X

i=1

cos−1(li · li+1) li ⇥ li+1 kli ⇥ li+1k

<latexit sha1_base64="mnZwKcjMwFPBAkOHUka0pds4Fc=">ACpHicbVFb9MwGHUyLqPA1jHeLGoQENsTdIWVh4mJvGCRB/Gpdukuo0cx9ms2U5mO9UqL/xP3vkB/ASctFy1T7J0fM53/NnHScGZNmH4zfPXbt2+c3f9Xuv+g4cbm+2tR8c6LxWhY5LzXJ0mWFPOJB0bZjg9LRTFIuH0JLl4V+snc6o0y+UXsyjoVOAzyTJGsHFU3P46ihU8gChTmNhPle2hglVIlyK27CqZhIikuZ3YuqHTnMXP7NDewxpa9jKoXEO2u7CvdMEH1n4bKoubFXRdxe1O2B1Gr8L9PlyCwZsVeN2HUTdsqvP2B2jqKN7yNlCak1JQaQjHWk+isDC7GaeXcmqxMoxwWrVQqWmByQU+oxMHJXaDp7aJq4LPHJPCLFduSQMb9m+HxULrhUhcp8DmXP+v1eRN2qQ02XBqmSxKQyVZDspKDk0O6+xhyhQlhi8cwEQxd1dIzrGLzrgfaqHGaIOxdrtAKxGMWKwWgSGXoksYJLwMqWBm6vY1d7cHeVe0yQ46PWGgzrBGvSjX2D4O8HjXjfqd8OPg87h2WUYB08AU/BDojAPjgE78ERGAMCvnstb9t7D/3R/5nf7xs9b2VZxv8U/7sJ46u0Tk=</latexit>
slide-4
SLIDE 4

Specular shading, polygonal lights

Now the integral (for unit source radiance) reads and analytic solutions are only available for special forms of the BRDF

  • Phong BRDF: 


solution due to Arvo via a generalization of Lambert’s formula

  • Other BRDFs: approximate the function by some convenient function
  • Clever idea due to Heitz: linearly transformed cosine function:

Lr(v) = Z

Ω(S)

fr(v, l) (n · l) dl

<latexit sha1_base64="FEpCGka8LG0GNewNpSZ3sZ546i8=">ACZ3icbVDdihMxGE3Hv7XqbldBG+iRWihdmba6tYLcUbwQVXtLsLTRkymW+6YZPMmGTKlqHP49N4q/gI3vkIZmZWUfGDkJNzvp98J84FNzYIvrW8S5evXL2db194+at7Z3O7u0jkxWawYxlItMnMTUguIKZ5VbASa6ByljAcXz2qtKPV6ANz9QHu85hIelS8ZQzah0VdV4eRLpHVqs+fo4JVzYqyVsJS9p739/gtNEGmKxEnwcVpiwJLM1gckgcXfU6QbDafgk2BvjBkyeXYCnYxwOgzq6L36gOg6j3dY2STJWSFCWCWrMPAxyO0gFfFSLkmrLmYBNmxQGcsrO6BLmDioqwSzKeuMNfuSYBKeZdkdZXLN/VpRUGrOWscuU1J6af7WK/J82L2w6XZRc5YUFxZpBaSGwzXBlH064BmbF2gHKNHd/xeyUasqsM7lN6sLSnxn38o2W/gGPNdVr38K5TH2umCgS8N1czc8fr1wrt03t4GQ0mk4qByswDn+B6W8Hj0bDcDwM3k26+28aK9EWuo8eoh4K0R7aR6/RIZohj6hz+gL+tr67u14d717TarXuqi5g/4K78FP4L6YA=</latexit>

fr(v, l) ∝ (r · l)n

<latexit sha1_base64="PjepGxitSPyZKjvVdjExvkQDYUQ=">ACTXicbVBNb9NAEB2nQEuA0pZjLysiRJFKbCeBhlMrISEOHIpE2kpxiNbrcbvqfpjdtdXI6k/g13CF38CZf8GFG0KsnYIAMdJKb9+b2dn30kJw6LoS9BZuXb9xuraze6t23fW725sbh1ZXRqGE6aFNicptSi4wonjTuBJYZDKVOBxev680Y8rNJZr9cYtCpxJeqp4zhl1npvPMznZiepql2SVOIRSQqjC6eJpwxJWKZdy7/1nb2oP46fRHtDsgSjZ1fg6ZDE/ait3v5XaOtwvhmsJ5lmpUTlmKDWTuOocLu5wHdqVlPjOBN42U1KiwVl5/QUpx4qKtHO6tbXJXngmYzk2vijHGnZPydqKq1dyNR3SurO7L9aQ/5Pm5YuH89qrorSoWLRXkpiHfehEQybpA5sfCAMsP9Xwk7o4Yy56PsJu1gHU6sv4XWyPAVTw01i9DhcxDrpgoMwz9XsMvHlf+Ke+mTXA0GIxHTYINGMa/wPh3gkeDfjzsR69HvYMXyhDbhPuxADHtwAC/hECbA4D18gI/wKfgcfAu+Bz+WrZ3gauYe/FWd1Z/CY7RY</latexit>

fr(v, l)

<latexit sha1_base64="TsjAxMJMrTyGLsEJW3pfsN5VrZI=">ACMXicbVDLbtQwFL1p6YMpfS/ZWIyQitROkpmBTldUQkIsWBSp01aRCPHczO1ajup7UQdRf0OtvANfE13iC0bPgEnUypAvZKl43Pu8b0+S64sUFw5y0sPlaXl92lp7tr6xubW9c2ayQjMcskxk+iKhBgVXOLTcCrzINVKZCDxPrt7V+nmJ2vBMndpZjrGkU8VTzqh1VJyO9V5UlvskKsWr8VY76AzC18Fhj8xB/+gevOmRsBM01X7C5o6GW97G9EkY4VEZmgxozCILf7qcBrFVdUW84E3raiwmBO2RWd4shBRSWauGp2vyUvHTMhabdUZY07N+OikpjZjJxnZLaS/O/VpOPaPCpoO4iovLCo2H5QWgtiM1EGQCdfIrJg5QJnmblfCLqmzLq4WlFjrPyhcTfaOl/5ImeuZbvJGpzxUTxQR9N1fzm4PSPeV+0yTY73YH/TrBGvTCP2DwkOBZtxP2OsGnfv4/TxKWIXn8AL2IRDOIYPcAJDYHANn+ELfPW+eXfed+/HvHXBu/fswj/l/fwNiNSq/Q=</latexit>

g(l)

<latexit sha1_base64="NIaNkXowvgmkLOD9ZFIFM7fh9QY=">ACKnicbVDLThsxFL0DtNDQ8uqyG4sIiUqQmUkChBVISKgLFiA1ASmJkMe5Ewy2Z7A9EdGIf+iWfkO/h1iywfwCfVMaFVQr2Tp+Jx7fK9PlApubBA8eFPTM+/ez859qMx/LSwuLS80jFJphm2WSISfRZRg4IrbFtuBZ6lGqmMBJ5GVweFfjpCbXivtxin1Jh4rHnFHrqM5wvTcSX8+XqkGtFW4FOw0yAc3dF7DdIGEtKu69wxlHZ8vewu9QcIyicoyQY3phkFqN2KB16qfU205E3hb6WUGU8qu6BC7Dioq0fTzculbsuaYAYkT7Y6ypGT/deRUGjOWkeuU1F6Yt1pB/k/rZjZu9XOu0syiYpNBcSaITUiRABlwjcyKsQOUae52JeyCasqsy6nSK4253zbu5hst/SMearHvsUbGftcMZEN0HdzNb/ZHLmn3G/KBJv1eqtZJFiARvgHtP4m2KnXwkYtOGlW9w8nUcIcfIFVWIcQdmAfvsExtIHBJfyAO/jp/fLuvQfvcdI65b14PsOr8p5+Azx+qFM=</latexit>

g(l) ∝ (M−1l) · n

<latexit sha1_base64="HBl5J1d6jqBm4WGWpOvSZYEuLA=">ACTXicbZDNbtNAEMfXKdASoJ/HXlZEiCDR2E7SNj21EpdKgFQk0laKQ7Vej9NV98PdXUeNrDxCn4YrPAPnvkUvSHE2i4IECOt9Nv/zOzs/OM2OD4MZrLDx4+Ghx6XHzydNnyura+vHRuWawpAqrvRpTAxwJmFomeVwmkgIuZwEl+8KfMnU9CGKfnRzjIYCzKRLGWUWCedrb6ctKMpf4WjTKvMKtyOxPtPxVY4x7VME2UduspW0BmE28FuD9fQ37uHnR4O0EVrf1bVMXR2Zq3HCWK5gKkpZwYMwqDzL5OVzKcUG0ZTDvBnlBjJCL8gERg4lEWDGRbXHL9wSoJTpd2RFlfqnx0FEcbMROwqBbHn5t9cKf4vN8ptOhgXTGa5BUnrQWnOsTOgNAknTAO1fOaAUM3cXzE9J5pQ6xsRlVj4Q+Nu/lGC/8dizXRM9/ClUh9JinPE/DdXM2utqbuKbdN5WC/2x30SwdL6IW/YPDbweNuJ+x1g/91sHb2kq0hDbRc9RGIdpFB+gQHaEhougafUZf0Ffvm3fnfd+1KUN75nA/0VjcWfPGW0Ew=</latexit>
slide-5
SLIDE 5

Linearly transformed cosines

See Heitz’s slides, video, and WebGL demo

  • https://eheitzresearch.wordpress.com/415-2/
slide-6
SLIDE 6

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

  • diffuse 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

slide-7
SLIDE 7

Standard reflection map

For mirror-specular surface, the illumination integral reduces to This is a function only of r

  • so store it in a cubemap and look up using r(v, n).

Lr(v) = Li(r(v, n))

<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>
slide-8
SLIDE 8

Irradiance environment map

For diffuse surface, illumination integral reduces to This is a function only of n

  • so store it in a cubemap and look up using n.

Lr = R π Z

Li(l) (n · l) dl

<latexit sha1_base64="IaqHgxQwXRGt6294Fawpmh2WdCM=">ACZnicbVBdb9MwFHUzPrYCpRuaeODFokIa0miStrDuAVGJFyQqMRDdJtV5Dg3nTXbCbZTrYr6d/ZreAWJf8AjPwEnLQgQV7Lu8bn3+PqeOBfc2CD41vC2bty8dXt7p3n7r3W/fbu3qnJCs1gwjKR6fOYGhBcwcRyK+A810BlLOAsvnxd1c8WoA3P1Ee7zGEm6VzxlDNqHRW1R+NI45eYpJqy8sOqJDlfYcKVjcg7CXOKxE/IAvxFJNDlxVhSWbxhkhcjtqdoDsMnwdHfbwGg+MNeNHYTeo/PqB6rjJNptEiSsUKCskxQY6ZhkNvDVMAnNSuptpwJWDVJYSCn7JLOYeqgohLMrKwXuEnjklwml3lMU1+6eipNKYpYxdp6T2wvxbq8j/1aFTYezkqu8sKDYelBaCGwzXLmHE6BWbF0gDLN3V8xu6DO+s8bpJaWPoT426+0dIf81hTvfQtXMnU54qJIgHfzdX86tnCPeW2qR0c9HrDQeVgBfrhLzD87eBprxv2u8H7QWf0dm0l2kaP0GN0gEJ0hEboDTpBE8TQNfqMvqCvje9ey9v3Hq5bvcZG8wD9FR7+Cex5uvk=</latexit>
slide-9
SLIDE 9

Irradiance environment map

environment map irradiance map

Gary King in GPU Gems 2 http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter10.html

slide-10
SLIDE 10

Irradiance map illumination

McGuire et al. HPG ’11 10.1145/2018323.2018327

slide-11
SLIDE 11

Irradiance map illumination

McGuire et al. HPG ’11 10.1145/2018323.2018327

slide-12
SLIDE 12

Prefiltered environment map

For a general specular surface, approximate the BRDF by a function

  • where g defines a lobe of width σ that is symmetric around r

The illumination integral is This depends only on r and the scalar σ

  • so store it in an array of cubemaps indexed by σ, and look up using r

fr(v, l) (n · l) ≈ gσ(l · r)

<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>

Lr(v) ≈ Z

gσ(l · r) Li(l) dl

<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>
slide-13
SLIDE 13

Irradiance environment mapping

Akenine-Möller et al. RTR 3e

prefiltered map 
 for glossy surface environment map 
 for specular surface prefiltered map 
 for diffuse surface

slide-14
SLIDE 14

Prefiltered environment map

environment map prefiltered for Phong

Gary King in GPU Gems 2 http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter10.html

slide-15
SLIDE 15

blitzcode.net

slide-16
SLIDE 16

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

slide-17
SLIDE 17

Manson & Sloan 2016