Preparing for Octahedral Indirect Lighting
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:04Recap our new radial interpolation of lighting samples and set the stage for the day
🗩
0:04Recap our new radial interpolation of lighting samples and set the stage for the day
🗩
0:04Recap our new radial interpolation of lighting samples and set the stage for the day
🗩
3:43This is Molly Bean
🗩
3:43This is Molly Bean
🗩
3:43This is Molly Bean
🗩
4:58Determine to: 1) Use the ray caster in the octahedral light maps, and 2) Streamline the lighting voxels intermediate storage out of the equation
🗩
4:58Determine to: 1) Use the ray caster in the octahedral light maps, and 2) Streamline the lighting voxels intermediate storage out of the equation
🗩
4:58Determine to: 1) Use the ray caster in the octahedral light maps, and 2) Streamline the lighting voxels intermediate storage out of the equation
🗩
8:55Demo the current state of the lighting, noting our artifacts when a light passes through a probe, and the persistent flower shape due to texel interpolation
🏃
8:55Demo the current state of the lighting, noting our artifacts when a light passes through a probe, and the persistent flower shape due to texel interpolation
🏃
8:55Demo the current state of the lighting, noting our artifacts when a light passes through a probe, and the persistent flower shape due to texel interpolation
🏃
11:14Toggle off the light probe drawing in EndLightingComputation()
11:14Toggle off the light probe drawing in EndLightingComputation()
11:14Toggle off the light probe drawing in EndLightingComputation()
11:31Traverse the garden without visible light probes
🏃
11:31Traverse the garden without visible light probes
🏃
11:31Traverse the garden without visible light probes
🏃
12:06Toggle off EDGE_COLORING in EndLightingComputation() and the light and depth map viewers in OpenGLEndFrame()
12:06Toggle off EDGE_COLORING in EndLightingComputation() and the light and depth map viewers in OpenGLEndFrame()
12:06Toggle off EDGE_COLORING in EndLightingComputation() and the light and depth map viewers in OpenGLEndFrame()
12:51Traverse the clean garden, with the determination to bounce light around
🏃
12:51Traverse the clean garden, with the determination to bounce light around
🏃
12:51Traverse the clean garden, with the determination to bounce light around
🏃
13:19Set up to use the ray caster in the octahedral light maps
📖
13:19Set up to use the ray caster in the octahedral light maps
📖
13:19Set up to use the ray caster in the octahedral light maps
📖
14:36Remove the accumulation data from light_voxel_cell, for EndLightingComputation() to update the light directly, enabling TEST_LIGHT_TRANSFER
14:36Remove the accumulation data from light_voxel_cell, for EndLightingComputation() to update the light directly, enabling TEST_LIGHT_TRANSFER
14:36Remove the accumulation data from light_voxel_cell, for EndLightingComputation() to update the light directly, enabling TEST_LIGHT_TRANSFER
17:26See a data-less world
🏃
17:26See a data-less world
🏃
17:26See a data-less world
🏃
17:37Remove SpamVoxel() and trim down SpamVoxelSlice()
17:37Remove SpamVoxel() and trim down SpamVoxelSlice()
17:37Remove SpamVoxel() and trim down SpamVoxelSlice()
20:36Consider casting rays from locations other than at light probes
🗩
20:36Consider casting rays from locations other than at light probes
🗩
20:36Consider casting rays from locations other than at light probes
🗩
22:23Rename SpamVoxelSlice() to SpamVoxel() and make it blend in the lighting directly, augmenting lighting_solution with tUpdateBlend
22:23Rename SpamVoxelSlice() to SpamVoxel() and make it blend in the lighting directly, augmenting lighting_solution with tUpdateBlend
22:23Rename SpamVoxelSlice() to SpamVoxel() and make it blend in the lighting directly, augmenting lighting_solution with tUpdateBlend
28:36Make TestCastFromProbes() pass an octahedral light map location to SpamVoxel(), introducing GetOctahedralOffset()
28:36Make TestCastFromProbes() pass an octahedral light map location to SpamVoxel(), introducing GetOctahedralOffset()
28:36Make TestCastFromProbes() pass an octahedral light map location to SpamVoxel(), introducing GetOctahedralOffset()
39:30See some lighting
🏃
39:30See some lighting
🏃
39:30See some lighting
🏃
41:40Investigate our apparent voxel spamming bug
📖
41:40Investigate our apparent voxel spamming bug
📖
41:40Investigate our apparent voxel spamming bug
📖
44:05Make TestCastFromProbes() always call SpamVoxel(), whether or not we hit a light
44:05Make TestCastFromProbes() always call SpamVoxel(), whether or not we hit a light
44:05Make TestCastFromProbes() always call SpamVoxel(), whether or not we hit a light
44:25See that we mostly write out a tile's lighting only once we stand on it
🏃
44:25See that we mostly write out a tile's lighting only once we stand on it
🏃
44:25See that we mostly write out a tile's lighting only once we stand on it
🏃
45:03Investigate our light writing bug
📖
45:03Investigate our light writing bug
📖
45:03Investigate our light writing bug
📖
46:31Scrutinise OctahedralFromUnitVector() and GetOctahedralOffset() for bugs
📖
46:31Scrutinise OctahedralFromUnitVector() and GetOctahedralOffset() for bugs
📖
46:31Scrutinise OctahedralFromUnitVector() and GetOctahedralOffset() for bugs
📖
49:45Break in to GetOctahedralOffset() and inspect its values
🏃
49:45Break in to GetOctahedralOffset() and inspect its values
🏃
49:45Break in to GetOctahedralOffset() and inspect its values
🏃
54:25Make SpamVoxel() write structured art into the voxel
54:25Make SpamVoxel() write structured art into the voxel
54:25Make SpamVoxel() write structured art into the voxel
56:28See no structured art in the voxels
🏃
56:28See no structured art in the voxels
🏃
56:28See no structured art in the voxels
🏃
57:05Scrutinise EndLightingComputation() for bugs
📖
57:05Scrutinise EndLightingComputation() for bugs
📖
57:05Scrutinise EndLightingComputation() for bugs
📖
58:47Make SpamVoxel() write red everywhere
58:47Make SpamVoxel() write red everywhere
58:47Make SpamVoxel() write red everywhere
59:02Only see red in voxels we land on
🏃
59:02Only see red in voxels we land on
🏃
59:02Only see red in voxels we land on
🏃
59:15Wonder why we're apparently not spamming the voxels
📖
59:15Wonder why we're apparently not spamming the voxels
📖
59:15Wonder why we're apparently not spamming the voxels
📖
1:00:41Break in to SpamVoxel() and watch it write to all the voxels
🏃
1:00:41Break in to SpamVoxel() and watch it write to all the voxels
🏃
1:00:41Break in to SpamVoxel() and watch it write to all the voxels
🏃
1:02:25Try making TestCastFromProbes() pass an upward-pointing OctOffset vector to SpamVoxel()
1:02:25Try making TestCastFromProbes() pass an upward-pointing OctOffset vector to SpamVoxel()
1:02:25Try making TestCastFromProbes() pass an upward-pointing OctOffset vector to SpamVoxel()
1:03:16See red spammed as expected
🏃
1:03:16See red spammed as expected
🏃
1:03:16See red spammed as expected
🏃
1:03:43Revert SpamVoxel() to use the computed lighting values
1:03:43Revert SpamVoxel() to use the computed lighting values
1:03:43Revert SpamVoxel() to use the computed lighting values
1:04:02Find that moving the light around does not change the intensity
🏃
1:04:02Find that moving the light around does not change the intensity
🏃
1:04:02Find that moving the light around does not change the intensity
🏃
1:04:40Make TestCastFromProbes() fall-off the light
1:04:40Make TestCastFromProbes() fall-off the light
1:04:40Make TestCastFromProbes() fall-off the light
1:05:44See our lighting fall-off work correctly
🏃
1:05:44See our lighting fall-off work correctly
🏃
1:05:44See our lighting fall-off work correctly
🏃
1:06:28Revert TestCastFromProbes() to only call SpamVoxel() if we hit a light
1:06:28Revert TestCastFromProbes() to only call SpamVoxel() if we hit a light
1:06:28Revert TestCastFromProbes() to only call SpamVoxel() if we hit a light
1:06:38Find that we fail to light into newly visible corners
🏃
1:06:38Find that we fail to light into newly visible corners
🏃
1:06:38Find that we fail to light into newly visible corners
🏃
1:06:59Make TestCastFromProbes() always call SpamVoxel(), but blank out the LightC it we didn't hit a light
1:06:59Make TestCastFromProbes() always call SpamVoxel(), but blank out the LightC it we didn't hit a light
1:06:59Make TestCastFromProbes() always call SpamVoxel(), but blank out the LightC it we didn't hit a light
1:07:44Find that our light interpolation is pretty fast
🏃
1:07:44Find that our light interpolation is pretty fast
🏃
1:07:44Find that our light interpolation is pretty fast
🏃
1:08:24Try reducing the tUpdateBlend in EndLightingComputation()
1:08:24Try reducing the tUpdateBlend in EndLightingComputation()
1:08:24Try reducing the tUpdateBlend in EndLightingComputation()
1:08:38Find that our light fades out slower than it fades in
🏃
1:08:38Find that our light fades out slower than it fades in
🏃
1:08:38Find that our light fades out slower than it fades in
🏃
1:09:38Try further reducing the tUpdateBlend in EndLightingComputation()
1:09:38Try further reducing the tUpdateBlend in EndLightingComputation()
1:09:38Try further reducing the tUpdateBlend in EndLightingComputation()
1:09:46Watch the speed of light fading
🏃
1:09:46Watch the speed of light fading
🏃
1:09:46Watch the speed of light fading
🏃
1:11:09Prevent TestCastFromProbes() from boosting the light brightness
1:11:09Prevent TestCastFromProbes() from boosting the light brightness
1:11:09Prevent TestCastFromProbes() from boosting the light brightness
1:11:19Briefly watch our light fade
🏃
1:11:19Briefly watch our light fade
🏃
1:11:19Briefly watch our light fade
🏃
1:11:34Increase the tUpdateBlend in TestCastFromProbes()
1:11:34Increase the tUpdateBlend in TestCastFromProbes()
1:11:34Increase the tUpdateBlend in TestCastFromProbes()
1:11:50Consider our light fade in and out to be more uniform
🏃
1:11:50Consider our light fade in and out to be more uniform
🏃
1:11:50Consider our light fade in and out to be more uniform
🏃
1:12:08Reduce the tUpdateBlend in TestCastFromProbes()
1:12:08Reduce the tUpdateBlend in TestCastFromProbes()
1:12:08Reduce the tUpdateBlend in TestCastFromProbes()
1:12:10Find that our light fades out slower than it fades in
🏃
1:12:10Find that our light fades out slower than it fades in
🏃
1:12:10Find that our light fades out slower than it fades in
🏃
1:13:45Hunt the code for other pieces of non-linearity in the light fade in / out
📖
1:13:45Hunt the code for other pieces of non-linearity in the light fade in / out
📖
1:13:45Hunt the code for other pieces of non-linearity in the light fade in / out
📖
1:16:54Make a note in SpamVoxel() to hunt down the attack / decay non-linearity
1:16:54Make a note in SpamVoxel() to hunt down the attack / decay non-linearity
1:16:54Make a note in SpamVoxel() to hunt down the attack / decay non-linearity
1:17:37Our faster attack may happen if two out of three probes switch from 0 to 1
🗩
1:17:37Our faster attack may happen if two out of three probes switch from 0 to 1
🗩
1:17:37Our faster attack may happen if two out of three probes switch from 0 to 1
🗩
1:18:36Make GenerateRoom() generate one, rather than two, light probes per tile
1:18:36Make GenerateRoom() generate one, rather than two, light probes per tile
1:18:36Make GenerateRoom() generate one, rather than two, light probes per tile
1:19:17Find that our light still fades out slower than it fades in
🏃
1:19:17Find that our light still fades out slower than it fades in
🏃
1:19:17Find that our light still fades out slower than it fades in
🏃
1:20:11Make GenerateRoom() generate zero light probes per tile
1:20:11Make GenerateRoom() generate zero light probes per tile
1:20:11Make GenerateRoom() generate zero light probes per tile
1:20:24See no lighting
🏃
1:20:24See no lighting
🏃
1:20:24See no lighting
🏃
1:20:27Make GenerateRoom() generate one light probe per tile
1:20:27Make GenerateRoom() generate one light probe per tile
1:20:27Make GenerateRoom() generate one light probe per tile
1:20:44Find that our light still fades out slower than it fades in
🏃
1:20:44Find that our light still fades out slower than it fades in
🏃
1:20:44Find that our light still fades out slower than it fades in
🏃
1:21:02Revert GenerateRoom() to generate two light probes per tile
1:21:02Revert GenerateRoom() to generate two light probes per tile
1:21:02Revert GenerateRoom() to generate two light probes per tile
1:21:06Consider how to investigate our fading speed discrepancy
🗩
1:21:06Consider how to investigate our fading speed discrepancy
🗩
1:21:06Consider how to investigate our fading speed discrepancy
🗩
1:21:48Begin to plot our lighting update equation in Desmos1
📖
1:21:48Begin to plot our lighting update equation in Desmos1
📖
1:21:48Begin to plot our lighting update equation in Desmos1
📖
1:24:29Set the day
🗹
1:24:29Set the day
🗹
1:24:29Set the day
🗹
1:25:26Lighting Linear Blend Per Frame: In vs Out
🖌
1:25:26Lighting Linear Blend Per Frame: In vs Out
🖌
1:25:26Lighting Linear Blend Per Frame: In vs Out
🖌
1:33:46Further study: Perceptual rate of fading in vs out
🖌
1:33:46Further study: Perceptual rate of fading in vs out
🖌
1:33:46Further study: Perceptual rate of fading in vs out
🖌
1:35:25Remove Frumbledygok(), and toggle from TestCastFromProbes() to ComputeLightPropagation() in EndLightingComputation()
1:35:25Remove Frumbledygok(), and toggle from TestCastFromProbes() to ComputeLightPropagation() in EndLightingComputation()
1:35:25Remove Frumbledygok(), and toggle from TestCastFromProbes() to ComputeLightPropagation() in EndLightingComputation()
1:37:26Make ComputeLightPropagationWork() call SpamVoxel() and cast our real rays into the octahedral light map
1:37:26Make ComputeLightPropagationWork() call SpamVoxel() and cast our real rays into the octahedral light map
1:37:26Make ComputeLightPropagationWork() call SpamVoxel() and cast our real rays into the octahedral light map
1:42:34Begin to update ComputeVoxelIrradianceAt() to sample the octahedral light map
1:42:34Begin to update ComputeVoxelIrradianceAt() to sample the octahedral light map
1:42:34Begin to update ComputeVoxelIrradianceAt() to sample the octahedral light map
1:45:47Diffuse Sampling
🖌
1:45:47Diffuse Sampling
🖌
1:45:47Diffuse Sampling
🖌
1:49:47Consult 'Dynamic Diffuse Global Illumination with Ray-Traced Irradiance Fields'2 on diffuse sampling
📖
1:49:47Consult 'Dynamic Diffuse Global Illumination with Ray-Traced Irradiance Fields'2 on diffuse sampling
📖
1:49:47Consult 'Dynamic Diffuse Global Illumination with Ray-Traced Irradiance Fields'2 on diffuse sampling
📖
1:52:22Consult 'Real-Time Global Illumination using Precomputed Light Field Probes'3 on diffuse sampling
📖
1:52:22Consult 'Real-Time Global Illumination using Precomputed Light Field Probes'3 on diffuse sampling
📖
1:52:22Consult 'Real-Time Global Illumination using Precomputed Light Field Probes'3 on diffuse sampling
📖
2:03:13Spec out specular sampling in ComputeVoxelIrradianceAt()
2:03:13Spec out specular sampling in ComputeVoxelIrradianceAt()
2:03:13Spec out specular sampling in ComputeVoxelIrradianceAt()
2:05:24Glimpse the (broken) specular lighting
🏃
2:05:24Glimpse the (broken) specular lighting
🏃
2:05:24Glimpse the (broken) specular lighting
🏃
2:05:32Defer figuring out diffuse sampling of the octahedral map
🗩
2:05:32Defer figuring out diffuse sampling of the octahedral map
🗩
2:05:32Defer figuring out diffuse sampling of the octahedral map
🗩
2:06:24Q&A
🗩
2:06:24Q&A
🗩
2:06:24Q&A
🗩
2:07:50xxthebigfoxx Q: Is the diffuse component going to be computed on the CPU or the GPU then?
🗪
2:07:50xxthebigfoxx Q: Is the diffuse component going to be computed on the CPU or the GPU then?
🗪
2:07:50xxthebigfoxx Q: Is the diffuse component going to be computed on the CPU or the GPU then?
🗪
2:08:33relvet Q: Since hardware standards move quickly, have you considered doing a pass on the codebase to move to newer versions of OpenGL and SSE? The optimization implications alone should be worth it, or?
🗪
2:08:33relvet Q: Since hardware standards move quickly, have you considered doing a pass on the codebase to move to newer versions of OpenGL and SSE? The optimization implications alone should be worth it, or?
🗪
2:08:33relvet Q: Since hardware standards move quickly, have you considered doing a pass on the codebase to move to newer versions of OpenGL and SSE? The optimization implications alone should be worth it, or?
🗪
2:09:56cerdus What is the current OpenGL version?
🗪
2:09:56cerdus What is the current OpenGL version?
🗪
2:09:56cerdus What is the current OpenGL version?
🗪
2:10:38philliptrudeau Q: Did the paper4 say that they compute a separate cosine-weighted radiance for every probe? Where do they store that information?
🗪
2:10:38philliptrudeau Q: Did the paper4 say that they compute a separate cosine-weighted radiance for every probe? Where do they store that information?
🗪
2:10:38philliptrudeau Q: Did the paper4 say that they compute a separate cosine-weighted radiance for every probe? Where do they store that information?
🗪
2:12:10erdomina Q: Any pointers on reading research papers effectively?
🗪
2:12:10erdomina Q: Any pointers on reading research papers effectively?
🗪
2:12:10erdomina Q: Any pointers on reading research papers effectively?
🗪
2:12:35philliptrudeau Is this a "research paper"?
🗪
2:12:35philliptrudeau Is this a "research paper"?
🗪
2:12:35philliptrudeau Is this a "research paper"?
🗪
2:13:25philliptrudeau Journal of Fluffy Opinion Papers
🗪
2:13:25philliptrudeau Journal of Fluffy Opinion Papers
🗪
2:13:25philliptrudeau Journal of Fluffy Opinion Papers
🗪
2:13:58Wrap it up
🗩
2:13:58Wrap it up
🗩
2:13:58Wrap it up
🗩