Handmade Hero»Episode Guide
Smoothing Light Samples Over Time
?
?

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:01Recap and set the stage for the day
🗩
0:01Recap and set the stage for the day
🗩
0:01Recap and set the stage for the day
🗩
1:26Run the game to see the flickering lighting
🏃
1:26Run the game to see the flickering lighting
🏃
1:26Run the game to see the flickering lighting
🏃
2:42Flicker / Sampling: "Monte Carlo" → "Random" → "Stochastic"
🖌
2:42Flicker / Sampling: "Monte Carlo" → "Random" → "Stochastic"
🖌
2:42Flicker / Sampling: "Monte Carlo" → "Random" → "Stochastic"
🖌
6:49How Monte Carlo - as opposed to uniform - sampling can effectively estimate shapes
🖌
6:49How Monte Carlo - as opposed to uniform - sampling can effectively estimate shapes
🖌
6:49How Monte Carlo - as opposed to uniform - sampling can effectively estimate shapes
🖌
13:50"Importance" sampling
🖌
13:50"Importance" sampling
🖌
13:50"Importance" sampling
🖌
15:23"Importance" sampling in the context of lighting
🖌
15:23"Importance" sampling in the context of lighting
🖌
15:23"Importance" sampling in the context of lighting
🖌
17:43The cosθ property of surfaces
🖌
17:43The cosθ property of surfaces
🖌
17:43The cosθ property of surfaces
🖌
22:33Our current "Pure Monte Carlo" sampling scheme, and how SampleHemisphere() is biased
🖌
22:33Our current "Pure Monte Carlo" sampling scheme, and how SampleHemisphere() is biased
🖌
22:33Our current "Pure Monte Carlo" sampling scheme, and how SampleHemisphere() is biased
🖌
26:18Our problem: Low Sampling Rate vs Discontinuities in the Function
🖌
26:18Our problem: Low Sampling Rate vs Discontinuities in the Function
🖌
26:18Our problem: Low Sampling Rate vs Discontinuities in the Function
🖌
33:35Run the game to see the flickering
🏃
33:35Run the game to see the flickering
🏃
33:35Run the game to see the flickering
🏃
34:03Make ComputeLightPropagation() use a different random series every frame
34:03Make ComputeLightPropagation() use a different random series every frame
34:03Make ComputeLightPropagation() use a different random series every frame
35:13Run the game to see this even more pronounced flickering
🏃
35:13Run the game to see this even more pronounced flickering
🏃
35:13Run the game to see this even more pronounced flickering
🏃
37:03Provide the ability to toggle the lighting computation
37:03Provide the ability to toggle the lighting computation
37:03Provide the ability to toggle the lighting computation
39:23Run the game and recompute the lighting at will
🏃
39:23Run the game and recompute the lighting at will
🏃
39:23Run the game and recompute the lighting at will
🏃
40:07Dramatically increase the RayCount in ComputeLightPropagation()
40:07Dramatically increase the RayCount in ComputeLightPropagation()
40:07Dramatically increase the RayCount in ComputeLightPropagation()
40:20Run the game to see less flicker
🏃
40:20Run the game to see less flicker
🏃
40:20Run the game to see less flicker
🏃
40:46Reduce the RayCount in ComputeLightPropagation()
40:46Reduce the RayCount in ComputeLightPropagation()
40:46Reduce the RayCount in ComputeLightPropagation()
40:55Run the game to see more flicker
🏃
40:55Run the game to see more flicker
🏃
40:55Run the game to see more flicker
🏃
42:14Consider how to perform temporal smoothing on the lighting
🗩
42:14Consider how to perform temporal smoothing on the lighting
🗩
42:14Consider how to perform temporal smoothing on the lighting
🗩
45:51"Spatial Correspondence"
🖌
45:51"Spatial Correspondence"
🖌
45:51"Spatial Correspondence"
🖌
47:38Remembering light indices
🖌
47:38Remembering light indices
🖌
47:38Remembering light indices
🖌
51:32Add a LightingIndex to entity_visible_piece
51:32Add a LightingIndex to entity_visible_piece
51:32Add a LightingIndex to entity_visible_piece
56:05Consider examples of poor spatial correspondence
🗩
56:05Consider examples of poor spatial correspondence
🗩
56:05Consider examples of poor spatial correspondence
🗩
57:41Upgrade PushQuad() to set a LightingIndex
57:41Upgrade PushQuad() to set a LightingIndex
57:41Upgrade PushQuad() to set a LightingIndex
59:24Run the game and see no lighting
🏃
59:24Run the game and see no lighting
🏃
59:24Run the game and see no lighting
🏃
59:51Make PushCube() set LightCount and LightIndex
59:51Make PushCube() set LightCount and LightIndex
59:51Make PushCube() set LightCount and LightIndex
1:02:07Run the game to see lighting restored on the cubes but not the sprites
🏃
1:02:07Run the game to see lighting restored on the cubes but not the sprites
🏃
1:02:07Run the game to see lighting restored on the cubes but not the sprites
🏃
1:02:43Enable PushCube() to read from the LightIndexStore
1:02:43Enable PushCube() to read from the LightIndexStore
1:02:43Enable PushCube() to read from the LightIndexStore
1:09:40Run the game to see that it doesn't work
🏃
1:09:40Run the game to see that it doesn't work
🏃
1:09:40Run the game to see that it doesn't work
🏃
1:10:12Add DebugLightIndex to game_mode_world for PushLight() to use
1:10:12Add DebugLightIndex to game_mode_world for PushLight() to use
1:10:12Add DebugLightIndex to game_mode_world for PushLight() to use
1:11:54Run the game to see our lighting
🏃
1:11:54Run the game to see our lighting
🏃
1:11:54Run the game to see our lighting
🏃
1:13:13Enable ExtractReflectorsFromQuads() to use the LightIndex
1:13:13Enable ExtractReflectorsFromQuads() to use the LightIndex
1:13:13Enable ExtractReflectorsFromQuads() to use the LightIndex
1:15:22Run the game to see that the light isn't stable
🏃
1:15:22Run the game to see that the light isn't stable
🏃
1:15:22Run the game to see that the light isn't stable
🏃
1:17:11Step in to ExtractReflectorsFromQuads() and inspect the Solution
🏃
1:17:11Step in to ExtractReflectorsFromQuads() and inspect the Solution
🏃
1:17:11Step in to ExtractReflectorsFromQuads() and inspect the Solution
🏃
1:20:17Add LastEmit and LastDirection to the lighting_solution so ExtractReflectorsFromQuads() can mix in those values at the end of the routine
1:20:17Add LastEmit and LastDirection to the lighting_solution so ExtractReflectorsFromQuads() can mix in those values at the end of the routine
1:20:17Add LastEmit and LastDirection to the lighting_solution so ExtractReflectorsFromQuads() can mix in those values at the end of the routine
1:25:37Run the game to see that we have four frames of lag on the lighting
🏃
1:25:37Run the game to see that we have four frames of lag on the lighting
🏃
1:25:37Run the game to see that we have four frames of lag on the lighting
🏃
1:25:49Enable ComputeLightPropagation() to use our tracked LastEmit and LastDirection
1:25:49Enable ComputeLightPropagation() to use our tracked LastEmit and LastDirection
1:25:49Enable ComputeLightPropagation() to use our tracked LastEmit and LastDirection
1:27:30Run the game to see that the walls didn't get any lighting
🏃
1:27:30Run the game to see that the walls didn't get any lighting
🏃
1:27:30Run the game to see that the walls didn't get any lighting
🏃
1:28:45Run the game to see less flicker
🏃
1:28:45Run the game to see less flicker
🏃
1:28:45Run the game to see less flicker
🏃
1:29:16Make ComputeLightPropagation() interpolate the lighting across 10 frames
1:29:16Make ComputeLightPropagation() interpolate the lighting across 10 frames
1:29:16Make ComputeLightPropagation() interpolate the lighting across 10 frames
1:29:20Run the game to see the lighting
🏃
1:29:20Run the game to see the lighting
🏃
1:29:20Run the game to see the lighting
🏃
1:29:36Make ComputeLightPropagation() interpolate the lighting across 20 frames
1:29:36Make ComputeLightPropagation() interpolate the lighting across 20 frames
1:29:36Make ComputeLightPropagation() interpolate the lighting across 20 frames
1:29:38Run the game to see the lighting
🏃
1:29:38Run the game to see the lighting
🏃
1:29:38Run the game to see the lighting
🏃
1:29:46Make ComputeLightPropagation() interpolate the lighting across 100 frames
1:29:46Make ComputeLightPropagation() interpolate the lighting across 100 frames
1:29:46Make ComputeLightPropagation() interpolate the lighting across 100 frames
1:29:49Run the game to see the lighting
🏃
1:29:49Run the game to see the lighting
🏃
1:29:49Run the game to see the lighting
🏃
1:30:26Make ComputeLightPropagation() interpolate the lighting across 10 frames, and cast more rays
1:30:26Make ComputeLightPropagation() interpolate the lighting across 10 frames, and cast more rays
1:30:26Make ComputeLightPropagation() interpolate the lighting across 10 frames, and cast more rays
1:30:42Run the game and tweak our latency and RayCount
🏃
1:30:42Run the game and tweak our latency and RayCount
🏃
1:30:42Run the game and tweak our latency and RayCount
🏃
1:32:00Step in to ComputeLightPropagation() and inspect the Solution
🏃
1:32:00Step in to ComputeLightPropagation() and inspect the Solution
🏃
1:32:00Step in to ComputeLightPropagation() and inspect the Solution
🏃
1:34:08Make ComputeLightPropagation() normalize or zero the AverageDirectionToLight interpolation
1:34:08Make ComputeLightPropagation() normalize or zero the AverageDirectionToLight interpolation
1:34:08Make ComputeLightPropagation() normalize or zero the AverageDirectionToLight interpolation
1:34:41Run the game to see that that fixed it
🏃
1:34:41Run the game to see that that fixed it
🏃
1:34:41Run the game to see that that fixed it
🏃
1:35:06Reinsert the snake
1:35:06Reinsert the snake
1:35:06Reinsert the snake
1:35:35Run the game to see the lighting with the snake, and the more noticeable lag
🏃
1:35:35Run the game to see the lighting with the snake, and the more noticeable lag
🏃
1:35:35Run the game to see the lighting with the snake, and the more noticeable lag
🏃
1:36:32Q&A
🗩
1:36:32Q&A
🗩
1:36:32Q&A
🗩
1:37:00Note in ComputeLightPropagation() to finish implementing and debugging lighting
🗹
1:37:00Note in ComputeLightPropagation() to finish implementing and debugging lighting
🗹
1:37:00Note in ComputeLightPropagation() to finish implementing and debugging lighting
🗹
1:38:36ataradov Q: Yesterday someone asked if it will be beneficial to have more test scenes for lighting tests. And this was never answered
🗪
1:38:36ataradov Q: Yesterday someone asked if it will be beneficial to have more test scenes for lighting tests. And this was never answered
🗪
1:38:36ataradov Q: Yesterday someone asked if it will be beneficial to have more test scenes for lighting tests. And this was never answered
🗪
1:38:48areriff Q: Don't you use the todo.txt in the code directory to make notes?
🗪
1:38:48areriff Q: Don't you use the todo.txt in the code directory to make notes?
🗪
1:38:48areriff Q: Don't you use the todo.txt in the code directory to make notes?
🗪
1:39:09longboolean Q: Found this video,1 seems related to what we are talking about (render denoising). What is your take on the use of machine learning to approach problems like these?
🗪
1:39:09longboolean Q: Found this video,1 seems related to what we are talking about (render denoising). What is your take on the use of machine learning to approach problems like these?
🗪
1:39:09longboolean Q: Found this video,1 seems related to what we are talking about (render denoising). What is your take on the use of machine learning to approach problems like these?
🗪
1:39:38Wrap up early
🗩
1:39:38Wrap up early
🗩
1:39:38Wrap up early
🗩