09 Real time area lights Steve Marschner CS5625 Spring 2019
<latexit sha1_base64="5cykLyE0VWrwpOC4rThjC1qBA=">ACb3icbZDfbtMwFMbd8G8U2LpxwQUSsqiQWqk0SduxcjExiRsQlRgS3SY1VeQ4J5012wm2E62K9kx7ml3sBl4B3gAnGQgQR7L083fO8fH5owzbTzvuXcun3n7r2N+0HDx9tbnW2d450misKc5ryVJ1ERANnEuaGQ4nmQIiIg7H0dnbKn9cgNIslZ/NOoOlICvJEkaJsVLYeT8LVS8oij7exwGTJgw+ClgRnDTyAcF7wcDPAtZr0JsuQIc0Dg1NisrKbZK2Ol6w6m/6+2NcQOT1zfwaoz9oVdH9813VMdhuN3aDOKU5gKkoZxovfC9zAwSDl/ksiTKMrhoh3kGjJCz8gKFhYlEaCXZb35BX5hlRgnqbJHGlyrf3aURGi9FpGtFMSc6n9zlfi/3CI3yXRZMpnlBiRtBiU5xybFlY04Zgqo4WsLhCpm/4rpKVGEGmt2O6gbS3eu7c3VSrgzFimi1q6Bc5G4TFKex+DauYqdvyzsU3ab2sHJaDSdVA5WMPZ/wfS3g0ejoT8ep8m3YMPjZVoAz1Fz1EP+WgPHaB36BDNEUWX6Ap9Rd9aP5wnzjMHN6VO6bnMfornP5PFCa8nw=</latexit> Area lighting when lights are not point-like, we have an integration problem Z L r ( v ) = f r ( v , l ) L i ( l ) ( l · n ) d l Ω • for real time we need fast analytic solutions to (approximations of) this definite integral • the form of the solution depends on the form of L i and f r . di ff use This is all with no • polygonal lights: analytical solution due to Lambert (1760) shadows! That is a (large-ish) topic for • environment lights: irradiance environment maps later in the course. specular • polygonal lights: linearly transformed cosines • environment lights: prefiltered environment maps
<latexit sha1_base64="mnZwKcjMwFPBAkOHUka0pds4Fc=">ACpHicbVFb9MwGHUyLqPA1jHeLGoQENsTdIWVh4mJvGCRB/Gpdukuo0cx9ms2U5mO9UqL/xP3vkB/ASctFy1T7J0fM53/NnHScGZNmH4zfPXbt2+c3f9Xuv+g4cbm+2tR8c6LxWhY5LzXJ0mWFPOJB0bZjg9LRTFIuH0JLl4V+snc6o0y+UXsyjoVOAzyTJGsHFU3P46ihU8gChTmNhPle2hglVIlyK27CqZhIikuZ3YuqHTnMXP7NDewxpa9jKoXEO2u7CvdMEH1n4bKoubFXRdxe1O2B1Gr8L9PlyCwZsVeN2HUTdsqvP2B2jqKN7yNlCak1JQaQjHWk+isDC7GaeXcmqxMoxwWrVQqWmByQU+oxMHJXaDp7aJq4LPHJPCLFduSQMb9m+HxULrhUhcp8DmXP+v1eRN2qQ02XBqmSxKQyVZDspKDk0O6+xhyhQlhi8cwEQxd1dIzrGLzrgfaqHGaIOxdrtAKxGMWKwWgSGXoksYJLwMqWBm6vY1d7cHeVe0yQ46PWGgzrBGvSjX2D4O8HjXjfqd8OPg87h2WUYB08AU/BDojAPjgE78ERGAMCvnstb9t7D/3R/5nf7xs9b2VZxv8U/7sJ46u0Tk=</latexit> <latexit sha1_base64="Mf+1bOjbrUsK5ynE+094bVt9+c=">ACYXicbZDdbtMwFMfd8LUVGN243I1FhdRJo0nabitCaJO4QWIS46PbpLqKHOeks2Y7wXaqVEeZk/DLVxyzQvwCDjpQIA4kuW/+cH/sX54IbGwTfWt6t23fu3ltb9/8HDjUWdz69RkhWYwYZnI9HlMDQiuYGK5FXCea6AyFnAWX76q82cL0IZn6qNd5jCTdK54yhm1zo6L4jV9ikmrKyvdVSXJeYcKVjUryVsKc9j7sVLhHFgoTlmQWk4XYwWQ3cXvU6Qb9cbgXHAzxSoye34j9IQ7QRPdwx+oiZNos7VBkowVEpRlghozDYPc7qYCPqlZSbXlTEDVJoWBnLJLOoepk4pKMLOy+WuFnzonwWm3VIWN+6fHSWVxixl7ColtRfm31xt/i83LWw6npVc5YUFxVaD0kJgm+EaHE64BmbF0gnKNHdvxeyCOmzW4W2TprH0J8adfKOlf8xjTfXSt3AlU58rJoEfDdX86tnC3eV+01DcDQYjEc1wVoMw19i/Jvg6aAfDvBu1H36M0KJVpD2+gJ6qEQHaAj9BqdoAli6Bp9Rl/Q19Z3b93reFurUq910/MY/RXe9k8Oqrk4</latexit> Di ff use, polygonal lights In this case the illumination integral simplifies to L r = R Z ( n · l ) d l π Ω ( S ) Lambert worked out a solution to this in 1760 n cos − 1 ( l i · l i +1 ) l i ⇥ l i +1 L r = R X 2 π k l i ⇥ l i +1 k i =1 • 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)
<latexit sha1_base64="HBl5J1d6jqBm4WGWpOvSZYEuLA=">ACTXicbZDNbtNAEMfXKdASoJ/HXlZEiCDR2E7SNj21EpdKgFQk0laKQ7Vej9NV98PdXUeNrDxCn4YrPAPnvkUvSHE2i4IECOt9Nv/zOzs/OM2OD4MZrLDx4+Ghx6XHzydNnyura+vHRuWawpAqrvRpTAxwJmFomeVwmkgIuZwEl+8KfMnU9CGKfnRzjIYCzKRLGWUWCedrb6ctKMpf4WjTKvMKtyOxPtPxVY4x7VME2UduspW0BmE28FuD9fQ37uHnR4O0EVrf1bVMXR2Zq3HCWK5gKkpZwYMwqDzL5OVzKcUG0ZTDvBnlBjJCL8gERg4lEWDGRbXHL9wSoJTpd2RFlfqnx0FEcbMROwqBbHn5t9cKf4vN8ptOhgXTGa5BUnrQWnOsTOgNAknTAO1fOaAUM3cXzE9J5pQ6xsRlVj4Q+Nu/lGC/8dizXRM9/ClUh9JinPE/DdXM2utqbuKbdN5WC/2x30SwdL6IW/YPDbweNuJ+x1g/91sHb2kq0hDbRc9RGIdpFB+gQHaEhougafUZf0Ffvm3fnfd+1KUN75nA/0VjcWfPGW0Ew=</latexit> <latexit sha1_base64="FEpCGka8LG0GNewNpSZ3sZ546i8=">ACZ3icbVDdihMxGE3Hv7XqbldBG+iRWihdmba6tYLcUbwQVXtLsLTRkymW+6YZPMmGTKlqHP49N4q/gI3vkIZmZWUfGDkJNzvp98J84FNzYIvrW8S5evXL2db194+at7Z3O7u0jkxWawYxlItMnMTUguIKZ5VbASa6ByljAcXz2qtKPV6ANz9QHu85hIelS8ZQzah0VdV4eRLpHVqs+fo4JVzYqyVsJS9p739/gtNEGmKxEnwcVpiwJLM1gckgcXfU6QbDafgk2BvjBkyeXYCnYxwOgzq6L36gOg6j3dY2STJWSFCWCWrMPAxyO0gFfFSLkmrLmYBNmxQGcsrO6BLmDioqwSzKeuMNfuSYBKeZdkdZXLN/VpRUGrOWscuU1J6af7WK/J82L2w6XZRc5YUFxZpBaSGwzXBlH064BmbF2gHKNHd/xeyUasqsM7lN6sLSnxn38o2W/gGPNdVr38K5TH2umCgS8N1czc8fr1wrt03t4GQ0mk4qByswDn+B6W8Hj0bDcDwM3k26+28aK9EWuo8eoh4K0R7aR6/RIZohj6hz+gL+tr67u14d717TarXuqi5g/4K78FP4L6YA=</latexit> <latexit sha1_base64="NIaNkXowvgmkLOD9ZFIFM7fh9QY=">ACKnicbVDLThsxFL0DtNDQ8uqyG4sIiUqQmUkChBVISKgLFiA1ASmJkMe5Ewy2Z7A9EdGIf+iWfkO/h1iywfwCfVMaFVQr2Tp+Jx7fK9PlApubBA8eFPTM+/ez859qMx/LSwuLS80jFJphm2WSISfRZRg4IrbFtuBZ6lGqmMBJ5GVweFfjpCbXivtxin1Jh4rHnFHrqM5wvTcSX8+XqkGtFW4FOw0yAc3dF7DdIGEtKu69wxlHZ8vewu9QcIyicoyQY3phkFqN2KB16qfU205E3hb6WUGU8qu6BC7Dioq0fTzculbsuaYAYkT7Y6ypGT/deRUGjOWkeuU1F6Yt1pB/k/rZjZu9XOu0syiYpNBcSaITUiRABlwjcyKsQOUae52JeyCasqsy6nSK4253zbu5hst/SMearHvsUbGftcMZEN0HdzNb/ZHLmn3G/KBJv1eqtZJFiARvgHtP4m2KnXwkYtOGlW9w8nUcIcfIFVWIcQdmAfvsExtIHBJfyAO/jp/fLuvQfvcdI65b14PsOr8p5+Azx+qFM=</latexit> <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> <latexit sha1_base64="PjepGxitSPyZKjvVdjExvkQDYUQ=">ACTXicbVBNb9NAEB2nQEuA0pZjLysiRJFKbCeBhlMrISEOHIpE2kpxiNbrcbvqfpjdtdXI6k/g13CF38CZf8GFG0KsnYIAMdJKb9+b2dn30kJw6LoS9BZuXb9xuraze6t23fW725sbh1ZXRqGE6aFNicptSi4wonjTuBJYZDKVOBxev680Y8rNJZr9cYtCpxJeqp4zhl1npvPMznZiepql2SVOIRSQqjC6eJpwxJWKZdy7/1nb2oP46fRHtDsgSjZ1fg6ZDE/ait3v5XaOtwvhmsJ5lmpUTlmKDWTuOocLu5wHdqVlPjOBN42U1KiwVl5/QUpx4qKtHO6tbXJXngmYzk2vijHGnZPydqKq1dyNR3SurO7L9aQ/5Pm5YuH89qrorSoWLRXkpiHfehEQybpA5sfCAMsP9Xwk7o4Yy56PsJu1gHU6sv4XWyPAVTw01i9DhcxDrpgoMwz9XsMvHlf+Ke+mTXA0GIxHTYINGMa/wPh3gkeDfjzsR69HvYMXyhDbhPuxADHtwAC/hECbA4D18gI/wKfgcfAu+Bz+WrZ3gauYe/FWd1Z/CY7RY</latexit> Specular shading, polygonal lights Now the integral (for unit source radiance) reads Z L r ( v ) = f r ( v , l ) ( n · l ) d l Ω ( S ) and analytic solutions are only available for special forms of the BRDF • Phong BRDF: f r ( v , l ) ∝ ( r · l ) n solution due to Arvo via a generalization of Lambert’s formula • Other BRDFs: approximate the function by some convenient function g ( l ) f r ( v , l ) • Clever idea due to Heitz: linearly transformed cosine function: g ( l ) ∝ ( M − 1 l ) · n
Linearly transformed cosines See Heitz’s slides, video, and WebGL demo • https://eheitzresearch.wordpress.com/415-2/
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
Recommend
More recommend