Separating Lighting and Geometry Submission
?
?

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:15Recap and set the stage for the day
🗩
0:15Recap and set the stage for the day
🗩
0:15Recap and set the stage for the day
🗩
1:03Run the game to see a debug visualisation of our current lighting solution
🏃
1:03Run the game to see a debug visualisation of our current lighting solution
🏃
1:03Run the game to see a debug visualisation of our current lighting solution
🏃
1:53Make UseProgramBegin() use glVertexAttribIPointer() rather than glVertexAttribPointer() for LightIndex and LightCount1
1:53Make UseProgramBegin() use glVertexAttribIPointer() rather than glVertexAttribPointer() for LightIndex and LightCount1
1:53Make UseProgramBegin() use glVertexAttribIPointer() rather than glVertexAttribPointer() for LightIndex and LightCount1
5:22Run the game to see our correctly coloured scene, and thank seventh_chord for the suggestion
🏃
5:22Run the game to see our correctly coloured scene, and thank seventh_chord for the suggestion
🏃
5:22Run the game to see our correctly coloured scene, and thank seventh_chord for the suggestion
🏃
6:52Try to make VertLightIndex, VertLightCount, FragLightIndex and FragLightCount regular signed ints
6:52Try to make VertLightIndex, VertLightCount, FragLightIndex and FragLightCount regular signed ints
6:52Try to make VertLightIndex, VertLightCount, FragLightIndex and FragLightCount regular signed ints
7:52Run the game to see the exact same results
🏃
7:52Run the game to see the exact same results
🏃
7:52Run the game to see the exact same results
🏃
8:11Let SumLight() loop over the whole LightCount and call SumLight()
8:11Let SumLight() loop over the whole LightCount and call SumLight()
8:11Let SumLight() loop over the whole LightCount and call SumLight()
8:56Run the game to see that we're in striking distance
🏃
8:56Run the game to see that we're in striking distance
🏃
8:56Run the game to see that we're in striking distance
🏃
10:41Cursorily investigate why the light seems to be so blown out
10:41Cursorily investigate why the light seems to be so blown out
10:41Cursorily investigate why the light seems to be so blown out
12:12Run the game and consider what we need to do
🏃
12:12Run the game and consider what we need to do
🏃
12:12Run the game and consider what we need to do
🏃
16:13Light / Geometry Specification: 1) Occluders separate from sprites
🖌
16:13Light / Geometry Specification: 1) Occluders separate from sprites
🖌
16:13Light / Geometry Specification: 1) Occluders separate from sprites
🖌
20:43Light / Geometry Specification: 2) Sampling Control
🖌
20:43Light / Geometry Specification: 2) Sampling Control
🖌
20:43Light / Geometry Specification: 2) Sampling Control
🖌
24:21Our tasks: 1) "No Lighting" Lighting; 2) Occluder Buffer; 3) Samples for Occluders
🖌
24:21Our tasks: 1) "No Lighting" Lighting; 2) Occluder Buffer; 3) Samples for Occluders
🖌
24:21Our tasks: 1) "No Lighting" Lighting; 2) Occluder Buffer; 3) Samples for Occluders
🖌
25:12Make CompileZBiasProgram() keep FragLightIndex unlit
25:12Make CompileZBiasProgram() keep FragLightIndex unlit
25:12Make CompileZBiasProgram() keep FragLightIndex unlit
26:48Run the game to see our one unlit primitive
🏃
26:48Run the game to see our one unlit primitive
🏃
26:48Run the game to see our one unlit primitive
🏃
27:11Add LightingEnabled and LightIndex to render_group, and enable PushQuad() to use these values
27:11Add LightingEnabled and LightIndex to render_group, and enable PushQuad() to use these values
27:11Add LightingEnabled and LightIndex to render_group, and enable PushQuad() to use these values
29:53Run the game to see nothing lit
🏃
29:53Run the game to see nothing lit
🏃
29:53Run the game to see nothing lit
🏃
30:35Try to increase the main resolution to 1920x1080
30:35Try to increase the main resolution to 1920x1080
30:35Try to increase the main resolution to 1920x1080
30:42Run the game to see that it runs fine
🏃
30:42Run the game to see that it runs fine
🏃
30:42Run the game to see that it runs fine
🏃
31:13Introduce EnableLighting() for UpdateAndRenderWorld() to call
31:13Introduce EnableLighting() for UpdateAndRenderWorld() to call
31:13Introduce EnableLighting() for UpdateAndRenderWorld() to call
33:40Run the game to see our debug system correctly unlit
🏃
33:40Run the game to see our debug system correctly unlit
🏃
33:40Run the game to see our debug system correctly unlit
🏃
34:10Make UpdateAndRenderWorld() only call EnableLighting() if we are not ShowLighting
34:10Make UpdateAndRenderWorld() only call EnableLighting() if we are not ShowLighting
34:10Make UpdateAndRenderWorld() only call EnableLighting() if we are not ShowLighting
34:27Run the game to see that everything is lit as expected
🏃
34:27Run the game to see that everything is lit as expected
🏃
34:27Run the game to see that everything is lit as expected
🏃
35:57Demonstrate the necessity of an occluder buffer caused by the tree sprites
🏃
35:57Demonstrate the necessity of an occluder buffer caused by the tree sprites
🏃
35:57Demonstrate the necessity of an occluder buffer caused by the tree sprites
🏃
39:02Try to run the lighting in real time
39:02Try to run the lighting in real time
39:02Try to run the lighting in real time
39:52Run the game to see that it is surprisingly fast, but exhibiting flickering artifacts
🏃
39:52Run the game to see that it is surprisingly fast, but exhibiting flickering artifacts
🏃
39:52Run the game to see that it is surprisingly fast, but exhibiting flickering artifacts
🏃
44:00Explain the necessity of having separate occluders and world geometry
🗩
44:00Explain the necessity of having separate occluders and world geometry
🗩
44:00Explain the necessity of having separate occluders and world geometry
🗩
45:59Separate lighting_element out into lighting_surface, lighting_point and lighting_intermediate
45:59Separate lighting_element out into lighting_surface, lighting_point and lighting_intermediate
45:59Separate lighting_element out into lighting_surface, lighting_point and lighting_intermediate
52:32Gradually get all necessary functions to use these new structures
52:32Gradually get all necessary functions to use these new structures
52:32Gradually get all necessary functions to use these new structures
1:10:43Duplicate the emanating surface normal in the lighting_point
1:10:43Duplicate the emanating surface normal in the lighting_point
1:10:43Duplicate the emanating surface normal in the lighting_point
1:16:00Choosing where in the surface to record the light
🖌
1:16:00Choosing where in the surface to record the light
🖌
1:16:00Choosing where in the surface to record the light
🖌
1:17:12Make ComputeLightPropagation() accumulate the light of all lighting points
1:17:12Make ComputeLightPropagation() accumulate the light of all lighting points
1:17:12Make ComputeLightPropagation() accumulate the light of all lighting points
1:20:03Continue to propagate the new lighting structures to all necessary functions, including removing GatherFinalLighting()
1:20:03Continue to propagate the new lighting structures to all necessary functions, including removing GatherFinalLighting()
1:20:03Continue to propagate the new lighting structures to all necessary functions, including removing GatherFinalLighting()
1:27:12Run the game to see no lighting, and step through it to debug why
🏃
1:27:12Run the game to see no lighting, and step through it to debug why
🏃
1:27:12Run the game to see no lighting, and step through it to debug why
🏃
1:28:46Make ExtractReflectorsFromQuads() correctly set the PointCount
1:28:46Make ExtractReflectorsFromQuads() correctly set the PointCount
1:28:46Make ExtractReflectorsFromQuads() correctly set the PointCount
1:29:03Run the game to see our working and sped-up, although still flickering, lighting solution
🏃
1:29:03Run the game to see our working and sped-up, although still flickering, lighting solution
🏃
1:29:03Run the game to see our working and sped-up, although still flickering, lighting solution
🏃
1:31:33Consider merging lighting_point into lighting_intermediate
🗩
1:31:33Consider merging lighting_point into lighting_intermediate
🗩
1:31:33Consider merging lighting_point into lighting_intermediate
🗩
1:33:44Merge lighting_intermediate into lighting_solution and propagate that change to the necessary functions
1:33:44Merge lighting_intermediate into lighting_solution and propagate that change to the necessary functions
1:33:44Merge lighting_intermediate into lighting_solution and propagate that change to the necessary functions
1:46:08Step through ExtractReflectorsFromQuads() and inspect the values
🏃
1:46:08Step through ExtractReflectorsFromQuads() and inspect the values
🏃
1:46:08Step through ExtractReflectorsFromQuads() and inspect the values
🏃
1:48:18Remove EmitC from lighting_point and make ComputeLightPropagation() set the correct EmitC
1:48:18Remove EmitC from lighting_point and make ComputeLightPropagation() set the correct EmitC
1:48:18Remove EmitC from lighting_point and make ComputeLightPropagation() set the correct EmitC
1:49:22Run the game as we were before
🏃
1:49:22Run the game as we were before
🏃
1:49:22Run the game as we were before
🏃
1:49:57Introduce the notion of SamplePower in ComputeLightPropagation()
1:49:57Introduce the notion of SamplePower in ComputeLightPropagation()
1:49:57Introduce the notion of SamplePower in ComputeLightPropagation()
1:50:59Run the game to see that this doesn't quite provide what we want
🏃
1:50:59Run the game to see that this doesn't quite provide what we want
🏃
1:50:59Run the game to see that this doesn't quite provide what we want
🏃
1:52:28Make ComputeLightPropagation() call AccumulateSample() only once, outside the surface point loop if it gets a ClosestPointIndex
1:52:28Make ComputeLightPropagation() call AccumulateSample() only once, outside the surface point loop if it gets a ClosestPointIndex
1:52:28Make ComputeLightPropagation() call AccumulateSample() only once, outside the surface point loop if it gets a ClosestPointIndex
1:56:19Run the game to see the light still not really doing what we want
🏃
1:56:19Run the game to see the light still not really doing what we want
🏃
1:56:19Run the game to see the light still not really doing what we want
🏃
1:56:46Read through CompileZBiasProgram() and ExtractReflectorsFromQuads() for any blunders
1:56:46Read through CompileZBiasProgram() and ExtractReflectorsFromQuads() for any blunders
1:56:46Read through CompileZBiasProgram() and ExtractReflectorsFromQuads() for any blunders
1:57:52Run the game and wonder why we are still getting uniform lighting
🏃
1:57:52Run the game and wonder why we are still getting uniform lighting
🏃
1:57:52Run the game and wonder why we are still getting uniform lighting
🏃
1:58:31Read through the code, wondering why we rarely get gradients
1:58:31Read through the code, wondering why we rarely get gradients
1:58:31Read through the code, wondering why we rarely get gradients
2:00:41Run the game and take another look at the lighting
🏃
2:00:41Run the game and take another look at the lighting
🏃
2:00:41Run the game and take another look at the lighting
🏃
2:01:17Q&A
🗩
2:01:17Q&A
🗩
2:01:17Q&A
🗩
2:01:57Kknewkles Q: Hi Casey! Wanted to pick your brain about metaprogramming a bit. 0 - Short of a manual comparison, how do you obtain an enum field's name by supplying a corresponding numeric value? E.g. 1 -> Sunday? Or metaprogramming is overkill for this? 1 - If you have a gigantic struct printf which you want to "automate", in the way of not having to manually enlist all its fields, metaprogramming is the way to go here, right? Probably take the definition of the struct from the (Vulkan) spec, store it in a file, for example, and match it with the struct going by the sizes and offsets of the fields?
🗪
2:01:57Kknewkles Q: Hi Casey! Wanted to pick your brain about metaprogramming a bit. 0 - Short of a manual comparison, how do you obtain an enum field's name by supplying a corresponding numeric value? E.g. 1 -> Sunday? Or metaprogramming is overkill for this? 1 - If you have a gigantic struct printf which you want to "automate", in the way of not having to manually enlist all its fields, metaprogramming is the way to go here, right? Probably take the definition of the struct from the (Vulkan) spec, store it in a file, for example, and match it with the struct going by the sizes and offsets of the fields?
🗪
2:01:57Kknewkles Q: Hi Casey! Wanted to pick your brain about metaprogramming a bit. 0 - Short of a manual comparison, how do you obtain an enum field's name by supplying a corresponding numeric value? E.g. 1 -> Sunday? Or metaprogramming is overkill for this? 1 - If you have a gigantic struct printf which you want to "automate", in the way of not having to manually enlist all its fields, metaprogramming is the way to go here, right? Probably take the definition of the struct from the (Vulkan) spec, store it in a file, for example, and match it with the struct going by the sizes and offsets of the fields?
🗪
2:03:10yoshimoto555 Q: Would doing the ray tracing on the GPU with OpenCL or CUDA be viable?
🗪
2:03:10yoshimoto555 Q: Would doing the ray tracing on the GPU with OpenCL or CUDA be viable?
🗪
2:03:10yoshimoto555 Q: Would doing the ray tracing on the GPU with OpenCL or CUDA be viable?
🗪
2:03:28dragoonx6 Q: Do you have any issues with the (ms) CRT on windows? Do you think memory management could be improved?
🗪
2:03:28dragoonx6 Q: Do you have any issues with the (ms) CRT on windows? Do you think memory management could be improved?
🗪
2:03:28dragoonx6 Q: Do you have any issues with the (ms) CRT on windows? Do you think memory management could be improved?
🗪
2:04:36longboolean Q: Concerning the flickering, when does mixing between frames give appropriate results, when not?
🗪
2:04:36longboolean Q: Concerning the flickering, when does mixing between frames give appropriate results, when not?
🗪
2:04:36longboolean Q: Concerning the flickering, when does mixing between frames give appropriate results, when not?
🗪
2:05:20garryjohanson Q: So, mentioning this is probably a bit premature because I haven't looked into it very thoroughly, but there's a CPU implementation of OpenGL and DirectX called "swiftshader". Could be useful for debugging purposes
🗪
2:05:20garryjohanson Q: So, mentioning this is probably a bit premature because I haven't looked into it very thoroughly, but there's a CPU implementation of OpenGL and DirectX called "swiftshader". Could be useful for debugging purposes
🗪
2:05:20garryjohanson Q: So, mentioning this is probably a bit premature because I haven't looked into it very thoroughly, but there's a CPU implementation of OpenGL and DirectX called "swiftshader". Could be useful for debugging purposes
🗪
2:06:52Close things down
🗩
2:06:52Close things down
🗩
2:06:52Close things down
🗩