Per-primitive Lighting Samples
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
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 and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

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:08Recap and set the stage for the day
🗩
0:08Recap and set the stage for the day
🗩
0:08Recap and set the stage for the day
🗩
3:42Decrease the voxel resolution
3:42Decrease the voxel resolution
3:42Decrease the voxel resolution
4:29Run the game to see our lighting solution
🏃
4:29Run the game to see our lighting solution
🏃
4:29Run the game to see our lighting solution
🏃
5:38Increase the voxel resolution
5:38Increase the voxel resolution
5:38Increase the voxel resolution
6:15Run the game to see our ruined lighting
🏃
6:15Run the game to see our ruined lighting
🏃
6:15Run the game to see our ruined lighting
🏃
7:17Further increase the voxel resolution
7:17Further increase the voxel resolution
7:17Further increase the voxel resolution
8:45Run the game to see that the lighting is way too sparse
🏃
8:45Run the game to see that the lighting is way too sparse
🏃
8:45Run the game to see that the lighting is way too sparse
🏃
10:04Voxel Interpolation of Lighting
🖌
10:04Voxel Interpolation of Lighting
🖌
10:04Voxel Interpolation of Lighting
🖌
13:29Using a spatial query to reconstruct the lighting sample locations
🖌
13:29Using a spatial query to reconstruct the lighting sample locations
🖌
13:29Using a spatial query to reconstruct the lighting sample locations
🖌
17:27Reflect on the efficacy of this approach
🖌
17:27Reflect on the efficacy of this approach
🖌
17:27Reflect on the efficacy of this approach
🖌
20:43Boundary problem
🖌
20:43Boundary problem
🖌
20:43Boundary problem
🖌
24:22Specifying our ideal lighting solution
🖌
24:22Specifying our ideal lighting solution
🖌
24:22Specifying our ideal lighting solution
🖌
27:03Consider using lighting samples directly
🖌
27:03Consider using lighting samples directly
🖌
27:03Consider using lighting samples directly
🖌
30:36Run the game to show how the reconstruction problem may go away
🏃
30:36Run the game to show how the reconstruction problem may go away
🏃
30:36Run the game to show how the reconstruction problem may go away
🏃
31:41Specifying lighting sample locations per primitive
🖌
31:41Specifying lighting sample locations per primitive
🖌
31:41Specifying lighting sample locations per primitive
🖌
35:42Begin to switch to specifying lighting sample locations per primitive
35:42Begin to switch to specifying lighting sample locations per primitive
35:42Begin to switch to specifying lighting sample locations per primitive
40:26Add LightOffset and LightCount to textured_vertex and enable CompileZBiasProgram() to use these values, passing them right through using GLSL's "flat" interpolation qualifier1
40:26Add LightOffset and LightCount to textured_vertex and enable CompileZBiasProgram() to use these values, passing them right through using GLSL's "flat" interpolation qualifier1
40:26Add LightOffset and LightCount to textured_vertex and enable CompileZBiasProgram() to use these values, passing them right through using GLSL's "flat" interpolation qualifier1
50:22Introduce SumLight() based on SumVoxelLight()
50:22Introduce SumLight() based on SumVoxelLight()
50:22Introduce SumLight() based on SumVoxelLight()
54:35Run the game and note that we're still fine
🏃
54:35Run the game and note that we're still fine
🏃
54:35Run the game and note that we're still fine
🏃
54:50Describe structured art, as introduced to Casey by Mike Biddlecombe
🗩
54:50Describe structured art, as introduced to Casey by Mike Biddlecombe
🗩
54:50Describe structured art, as introduced to Casey by Mike Biddlecombe
🗩
57:03Set up the rendering pipeline to enable CompileZBiasProgram() to display Red, Green, Blue and White on the corners of each quad
57:03Set up the rendering pipeline to enable CompileZBiasProgram() to display Red, Green, Blue and White on the corners of each quad
57:03Set up the rendering pipeline to enable CompileZBiasProgram() to display Red, Green, Blue and White on the corners of each quad
1:06:48Run the game and note that we may have a bug
🏃
1:06:48Run the game and note that we may have a bug
🏃
1:06:48Run the game and note that we may have a bug
🏃
1:08:25Make CompileZBiasProgram() set the FragLightIndex and FragLightCount
1:08:25Make CompileZBiasProgram() set the FragLightIndex and FragLightCount
1:08:25Make CompileZBiasProgram() set the FragLightIndex and FragLightCount
1:08:52Run the game and get slower and slower
🏃
1:08:52Run the game and get slower and slower
🏃
1:08:52Run the game and get slower and slower
🏃
1:09:21Investigate this slowdown
1:09:21Investigate this slowdown
1:09:21Investigate this slowdown
1:13:16Prevent CompileZBiasProgram() from setting any of the light
1:13:16Prevent CompileZBiasProgram() from setting any of the light
1:13:16Prevent CompileZBiasProgram() from setting any of the light
1:13:36Run the game to determine that this loop was the problem
🏃
1:13:36Run the game to determine that this loop was the problem
🏃
1:13:36Run the game to determine that this loop was the problem
🏃
1:13:53Prevent CompileZBiasProgram() from fetching the next light index
1:13:53Prevent CompileZBiasProgram() from fetching the next light index
1:13:53Prevent CompileZBiasProgram() from fetching the next light index
1:14:23Run the game to see that we're still wrong
🏃
1:14:23Run the game to see that we're still wrong
🏃
1:14:23Run the game to see that we're still wrong
🏃
1:14:47Try to hardcode LightCount to 4 in CompileZBiasProgram()
1:14:47Try to hardcode LightCount to 4 in CompileZBiasProgram()
1:14:47Try to hardcode LightCount to 4 in CompileZBiasProgram()
1:14:58Run the game to determine that LightCount is not properly getting set to 4 always
🏃
1:14:58Run the game to determine that LightCount is not properly getting set to 4 always
🏃
1:14:58Run the game to determine that LightCount is not properly getting set to 4 always
🏃
1:15:39Read through the code looking for the potential culprit
1:15:39Read through the code looking for the potential culprit
1:15:39Read through the code looking for the potential culprit
1:17:48Determine to do some graphics debugging
🏃
1:17:48Determine to do some graphics debugging
🏃
1:17:48Determine to do some graphics debugging
🏃
1:19:05Make CompileZBiasProgram() clamp the LightCount to 4
1:19:05Make CompileZBiasProgram() clamp the LightCount to 4
1:19:05Make CompileZBiasProgram() clamp the LightCount to 4
1:19:32Capture a frame and find that we are still binding only one GL_UNSIGNED_SHORT array
🏃
1:19:32Capture a frame and find that we are still binding only one GL_UNSIGNED_SHORT array
🏃
1:19:32Capture a frame and find that we are still binding only one GL_UNSIGNED_SHORT array
🏃
1:20:12Fix CompileZBiasProgram() to correctly set the FragLightCount
1:20:12Fix CompileZBiasProgram() to correctly set the FragLightCount
1:20:12Fix CompileZBiasProgram() to correctly set the FragLightCount
1:20:56Run the game and still see no data
🏃
1:20:56Run the game and still see no data
🏃
1:20:56Run the game and still see no data
🏃
1:21:12Trim down OutputLightingTextures() in preparation to excise voxels, augment lighting_element to contain PackIndex, and enable ExtractReflectorsFromQuads() to use that PackIndex
1:21:12Trim down OutputLightingTextures() in preparation to excise voxels, augment lighting_element to contain PackIndex, and enable ExtractReflectorsFromQuads() to use that PackIndex
1:21:12Trim down OutputLightingTextures() in preparation to excise voxels, augment lighting_element to contain PackIndex, and enable ExtractReflectorsFromQuads() to use that PackIndex
1:28:16Run the game to see that this indeed doesn't work
🏃
1:28:16Run the game to see that this indeed doesn't work
🏃
1:28:16Run the game to see that this indeed doesn't work
🏃
1:29:03Temporarily make SumLight() in CompileZBiasProgram() output red
1:29:03Temporarily make SumLight() in CompileZBiasProgram() output red
1:29:03Temporarily make SumLight() in CompileZBiasProgram() output red
1:30:12Run the game to see red
🏃
1:30:12Run the game to see red
🏃
1:30:12Run the game to see red
🏃
1:31:19Note that shader debugging isn't supported on newer Nvidia GPUs, as explained by JamesWidman
🗩
1:31:19Note that shader debugging isn't supported on newer Nvidia GPUs, as explained by JamesWidman
🗩
1:31:19Note that shader debugging isn't supported on newer Nvidia GPUs, as explained by JamesWidman
🗩
1:32:26Capture a frame to inspect our lighting arrays, and note that ExtractLightingQuads() cannot do the remap
🏃
1:32:26Capture a frame to inspect our lighting arrays, and note that ExtractLightingQuads() cannot do the remap
🏃
1:32:26Capture a frame to inspect our lighting arrays, and note that ExtractLightingQuads() cannot do the remap
🏃
1:39:23Make ExtractLightingQuads() set the PackIndex from Vert0
1:39:23Make ExtractLightingQuads() set the PackIndex from Vert0
1:39:23Make ExtractLightingQuads() set the PackIndex from Vert0
1:40:50Run the game
🏃
1:40:50Run the game
🏃
1:40:50Run the game
🏃
1:41:03Capture a frame and inspect the buffers from which the fragment shader is sampling
🏃
1:41:03Capture a frame and inspect the buffers from which the fragment shader is sampling
🏃
1:41:03Capture a frame and inspect the buffers from which the fragment shader is sampling
🏃
1:44:44Change FragLightIndex and FragLightCount from unsigned short to unsigned int
1:44:44Change FragLightIndex and FragLightCount from unsigned short to unsigned int
1:44:44Change FragLightIndex and FragLightCount from unsigned short to unsigned int
1:45:27Run and freeze
🏃
1:45:27Run and freeze
🏃
1:45:27Run and freeze
🏃
1:46:59Make SumLight() clamp LightCount to 4
1:46:59Make SumLight() clamp LightCount to 4
1:46:59Make SumLight() clamp LightCount to 4
1:48:46Q&A
🗩
1:48:46Q&A
🗩
1:48:46Q&A
🗩
1:49:25artemidoras Q: What texture file type will you use?
🗪
1:49:25artemidoras Q: What texture file type will you use?
🗪
1:49:25artemidoras Q: What texture file type will you use?
🗪
1:50:18AsafGartner Q: Can you increase the font size in the calculator?
🗹
🗪
1:50:18AsafGartner Q: Can you increase the font size in the calculator?
🗹
🗪
1:50:18AsafGartner Q: Can you increase the font size in the calculator?
🗹
🗪
1:52:27artemidoras Q: In what structure do you organize world objects?
🗪
1:52:27artemidoras Q: In what structure do you organize world objects?
🗪
1:52:27artemidoras Q: In what structure do you organize world objects?
🗪
1:53:180lpbm Q: I think you missed an equals sign in one of the shaders when defining Inv<something> {1, 1, 1}
🗪
1:53:180lpbm Q: I think you missed an equals sign in one of the shaders when defining Inv<something> {1, 1, 1}
🗪
1:53:180lpbm Q: I think you missed an equals sign in one of the shaders when defining Inv<something> {1, 1, 1}
🗪
1:53:35Make OutputLightingTextures() correctly set InvCelDim
1:53:35Make OutputLightingTextures() correctly set InvCelDim
1:53:35Make OutputLightingTextures() correctly set InvCelDim
1:53:53desuused Q: Any comments on using SQLite as a file format for a game?
🗪
1:53:53desuused Q: Any comments on using SQLite as a file format for a game?
🗪
1:53:53desuused Q: Any comments on using SQLite as a file format for a game?
🗪
1:54:36Zilarrezko Q: Man, isn't it weird how OpenGL is with how you have to interface with it to do things, like you send it a string and then you put two shaders together to make a program. It's like esoteric and stuff
🗪
1:54:36Zilarrezko Q: Man, isn't it weird how OpenGL is with how you have to interface with it to do things, like you send it a string and then you put two shaders together to make a program. It's like esoteric and stuff
🗪
1:54:36Zilarrezko Q: Man, isn't it weird how OpenGL is with how you have to interface with it to do things, like you send it a string and then you put two shaders together to make a program. It's like esoteric and stuff
🗪
1:56:21merkelbe Q: What percentage of the way through the game do you think you are?
🗪
1:56:21merkelbe Q: What percentage of the way through the game do you think you are?
🗪
1:56:21merkelbe Q: What percentage of the way through the game do you think you are?
🗪
1:56:35blind_br Q: Curious question: Why f32 has a lower case F while F32Max has a upper case F?
🗪
1:56:35blind_br Q: Curious question: Why f32 has a lower case F while F32Max has a upper case F?
🗪
1:56:35blind_br Q: Curious question: Why f32 has a lower case F while F32Max has a upper case F?
🗪
1:56:46hholst80 Q: In what video index did you start with the discussion about using a 3-dimensional voxel for lighting?
🗪
1:56:46hholst80 Q: In what video index did you start with the discussion about using a 3-dimensional voxel for lighting?
🗪
1:56:46hholst80 Q: In what video index did you start with the discussion about using a 3-dimensional voxel for lighting?
🗪
1:57:17vaualbus Q: Could we just normalize the light count / index to 1 and use them to build a color? Maybe this allows us to see what value we see
🗪
1:57:17vaualbus Q: Could we just normalize the light count / index to 1 and use them to build a color? Maybe this allows us to see what value we see
🗪
1:57:17vaualbus Q: Could we just normalize the light count / index to 1 and use them to build a color? Maybe this allows us to see what value we see
🗪
1:57:39Make CompileZBiasProgram() normalize the FragLightCount and FragLightIndex to 1
1:57:39Make CompileZBiasProgram() normalize the FragLightCount and FragLightIndex to 1
1:57:39Make CompileZBiasProgram() normalize the FragLightCount and FragLightIndex to 1
1:59:57Run the game and see all yellow
🏃
1:59:57Run the game and see all yellow
🏃
1:59:57Run the game and see all yellow
🏃
2:00:19Change FragLightCount and FragLightIndex back to shorts
2:00:19Change FragLightCount and FragLightIndex back to shorts
2:00:19Change FragLightCount and FragLightIndex back to shorts
2:00:43Run the game and still see bogus lighting results
🏃
2:00:43Run the game and still see bogus lighting results
🏃
2:00:43Run the game and still see bogus lighting results
🏃
2:02:11macielda Q: Have you considered Cascaded Voxels (as in Cascaded Voxel Cone Tracing) as a data structure for Handmade Hero lighting samples?
🗪
2:02:11macielda Q: Have you considered Cascaded Voxels (as in Cascaded Voxel Cone Tracing) as a data structure for Handmade Hero lighting samples?
🗪
2:02:11macielda Q: Have you considered Cascaded Voxels (as in Cascaded Voxel Cone Tracing) as a data structure for Handmade Hero lighting samples?
🗪
2:02:32davechat Q: Have you ever seen the source code of a GPU driver?
🗪
2:02:32davechat Q: Have you ever seen the source code of a GPU driver?
🗪
2:02:32davechat Q: Have you ever seen the source code of a GPU driver?
🗪
2:03:13vaualbus Q: You have not run the light calculation
🗪
2:03:13vaualbus Q: You have not run the light calculation
🗪
2:03:13vaualbus Q: You have not run the light calculation
🗪
2:04:21alexkelbo Q: What kind of work did you do on the Intel driver?
🗪
2:04:21alexkelbo Q: What kind of work did you do on the Intel driver?
🗪
2:04:21alexkelbo Q: What kind of work did you do on the Intel driver?
🗪
2:05:28blackpawnsc Q: What kinds of things do you most enjoy coding and what things the least?
🗪
2:05:28blackpawnsc Q: What kinds of things do you most enjoy coding and what things the least?
🗪
2:05:28blackpawnsc Q: What kinds of things do you most enjoy coding and what things the least?
🗪
2:07:04vaualbus Q: If you were coding for a console would you be able to debug the graphics part of it? Do they give GPU hardware info down to implementation details?
🗪
2:07:04vaualbus Q: If you were coding for a console would you be able to debug the graphics part of it? Do they give GPU hardware info down to implementation details?
🗪
2:07:04vaualbus Q: If you were coding for a console would you be able to debug the graphics part of it? Do they give GPU hardware info down to implementation details?
🗪
2:08:12groggeh Q: Do you normally comment more than you do for this stream? Your code is clean to look at, but it feels like at big companies they would eat you up for not documenting a lot more
🗪
2:08:12groggeh Q: Do you normally comment more than you do for this stream? Your code is clean to look at, but it feels like at big companies they would eat you up for not documenting a lot more
🗪
2:08:12groggeh Q: Do you normally comment more than you do for this stream? Your code is clean to look at, but it feels like at big companies they would eat you up for not documenting a lot more
🗪
2:12:03wofiel Q: I work for a large company, but in a very research-y area. Honestly I feel like I have the best of both worlds
🗪
2:12:03wofiel Q: I work for a large company, but in a very research-y area. Honestly I feel like I have the best of both worlds
🗪
2:12:03wofiel Q: I work for a large company, but in a very research-y area. Honestly I feel like I have the best of both worlds
🗪
2:12:58hholst80 Q: I worked at Frostbite and I think you would fit right in
🗪
2:12:58hholst80 Q: I worked at Frostbite and I think you would fit right in
🗪
2:12:58hholst80 Q: I worked at Frostbite and I think you would fit right in
🗪
2:17:42everybitcounts Q: Having worked in a few large companies, I've found the need for commenting code arises from disproportionate skill levels among the developers. Less skilled or less interested engineers tend to complain about uncommented code...
🗪
2:17:42everybitcounts Q: Having worked in a few large companies, I've found the need for commenting code arises from disproportionate skill levels among the developers. Less skilled or less interested engineers tend to complain about uncommented code...
🗪
2:17:42everybitcounts Q: Having worked in a few large companies, I've found the need for commenting code arises from disproportionate skill levels among the developers. Less skilled or less interested engineers tend to complain about uncommented code...
🗪
2:20:59Wind it down
🗩
2:20:59Wind it down
🗩
2:20:59Wind it down
🗩