Handmade Hero»Episode Guide
Querying Irradiance Directly from Voxels
?
?

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:01We are working on lighting
🗩
0:01We are working on lighting
🗩
0:01We are working on lighting
🗩
0:41Plug Molly Rocket's Discord channel1 and the Watch Page2 with best wishes to our friends in Japan near Typhoon Hagibis
🗩
0:41Plug Molly Rocket's Discord channel1 and the Watch Page2 with best wishes to our friends in Japan near Typhoon Hagibis
🗩
0:41Plug Molly Rocket's Discord channel1 and the Watch Page2 with best wishes to our friends in Japan near Typhoon Hagibis
🗩
2:39Plug the upcoming Jon3 & Casey4 gaming stream
🗩
2:39Plug the upcoming Jon3 & Casey4 gaming stream
🗩
2:39Plug the upcoming Jon3 & Casey4 gaming stream
🗩
3:55Experimentally getting the lighting into the fragment shader, with thoughts on specialist vs generalist programming for GPUs
🗩
3:55Experimentally getting the lighting into the fragment shader, with thoughts on specialist vs generalist programming for GPUs
🗩
3:55Experimentally getting the lighting into the fragment shader, with thoughts on specialist vs generalist programming for GPUs
🗩
9:11Reconstituting the inbound lighting from our light probes, to light pixels
🗩
9:11Reconstituting the inbound lighting from our light probes, to light pixels
🗩
9:11Reconstituting the inbound lighting from our light probes, to light pixels
🗩
12:10Contributing the light from only the three front faces
🗩
12:10Contributing the light from only the three front faces
🗩
12:10Contributing the light from only the three front faces
🗩
14:05On the need to trilinear blend multiple light probes
🗩
14:05On the need to trilinear blend multiple light probes
🗩
14:05On the need to trilinear blend multiple light probes
🗩
16:56Using a 3D texture voxel representation of the lighting, to simplify things for the GPU
🗩
16:56Using a 3D texture voxel representation of the lighting, to simplify things for the GPU
🗩
16:56Using a 3D texture voxel representation of the lighting, to simplify things for the GPU
🗩
19:57Switch CompileZBiasProgram() over to represent the light probes as a 3D texture5
19:57Switch CompileZBiasProgram() over to represent the light probes as a 3D texture5
19:57Switch CompileZBiasProgram() over to represent the light probes as a 3D texture5
32:32Hit an OpenGL shader error
🏃
32:32Hit an OpenGL shader error
🏃
32:32Hit an OpenGL shader error
🏃
33:09Fix typo in CompileZBiasProgram()
33:09Fix typo in CompileZBiasProgram()
33:09Fix typo in CompileZBiasProgram()
34:05See that everything is black
🏃
34:05See that everything is black
🏃
34:05See that everything is black
🏃
34:57Temporarily make CompileZBiasProgram() set the LightData to the WorldN
34:57Temporarily make CompileZBiasProgram() set the LightData to the WorldN
34:57Temporarily make CompileZBiasProgram() set the LightData to the WorldN
35:14See our colourful world
🏃
35:14See our colourful world
🏃
35:14See our colourful world
🏃
36:03Temporarily make CompileZBiasProgram() shift the light into the visible colour range
36:03Temporarily make CompileZBiasProgram() shift the light into the visible colour range
36:03Temporarily make CompileZBiasProgram() shift the light into the visible colour range
37:14See our fully colourful world
🏃
37:14See our fully colourful world
🏃
37:14See our fully colourful world
🏃
38:15Set up first to output voxels directly to the GPU, then send just the list of light probes
🗩
38:15Set up first to output voxels directly to the GPU, then send just the list of light probes
🗩
38:15Set up first to output voxels directly to the GPU, then send just the list of light probes
🗩
40:02GPU Voxelization6
📖
40:02GPU Voxelization6
📖
40:02GPU Voxelization6
📖
43:32Dear NVIDIA, Why does GPU Voxelization require us to use an unordered access view?
43:32Dear NVIDIA, Why does GPU Voxelization require us to use an unordered access view?
43:32Dear NVIDIA, Why does GPU Voxelization require us to use an unordered access view?
45:42Set up to send our entire voxel grid at 2,800 MB / sec
🗩
45:42Set up to send our entire voxel grid at 2,800 MB / sec
🗩
45:42Set up to send our entire voxel grid at 2,800 MB / sec
🗩
47:23Make CompileZBiasProgram() submit our six-faced light probes as 3D textures7,8
47:23Make CompileZBiasProgram() submit our six-faced light probes as 3D textures7,8
47:23Make CompileZBiasProgram() submit our six-faced light probes as 3D textures7,8
1:05:46See a black screen with little seams
🏃
1:05:46See a black screen with little seams
🏃
1:05:46See a black screen with little seams
🏃
1:06:11Make EndLightingComputation() stuff red into the West face of our light probe voxels
1:06:11Make EndLightingComputation() stuff red into the West face of our light probe voxels
1:06:11Make EndLightingComputation() stuff red into the West face of our light probe voxels
1:10:58See our red world
🏃
1:10:58See our red world
🏃
1:10:58See our red world
🏃
1:11:26Test our spatial querying, by making EndLightingComputation() colour the voxels alternately red / blue
1:11:26Test our spatial querying, by making EndLightingComputation() colour the voxels alternately red / blue
1:11:26Test our spatial querying, by making EndLightingComputation() colour the voxels alternately red / blue
1:12:04See a fully blue world
🏃
1:12:04See a fully blue world
🏃
1:12:04See a fully blue world
🏃
1:12:39Augment zbias_program and render_setup with VoxelMinCorner and VoxelInvTotalDim for CompileZBiasProgram() to use
1:12:39Augment zbias_program and render_setup with VoxelMinCorner and VoxelInvTotalDim for CompileZBiasProgram() to use
1:12:39Augment zbias_program and render_setup with VoxelMinCorner and VoxelInvTotalDim for CompileZBiasProgram() to use
1:19:04Still see a fully blue world
🏃
1:19:04Still see a fully blue world
🏃
1:19:04Still see a fully blue world
🏃
1:19:24Introduce SetLightBounds() for UpdateAndRenderWorld() to call
1:19:24Introduce SetLightBounds() for UpdateAndRenderWorld() to call
1:19:24Introduce SetLightBounds() for UpdateAndRenderWorld() to call
1:24:36See our alternately red / blue world
🏃
1:24:36See our alternately red / blue world
🏃
1:24:36See our alternately red / blue world
🏃
1:25:11Make EndLightingComputation() stripe our lighting in all three dimensions
1:25:11Make EndLightingComputation() stripe our lighting in all three dimensions
1:25:11Make EndLightingComputation() stripe our lighting in all three dimensions
1:26:52Check out our tartan world
🏃
1:26:52Check out our tartan world
🏃
1:26:52Check out our tartan world
🏃
1:27:19Flip our stripes in EndLightingComputation() from RGBA to BGRA
1:27:19Flip our stripes in EndLightingComputation() from RGBA to BGRA
1:27:19Flip our stripes in EndLightingComputation() from RGBA to BGRA
1:27:35Check out our tartan world
🏃
1:27:35Check out our tartan world
🏃
1:27:35Check out our tartan world
🏃
1:29:36Check out our tartan world in release mode
🏃
1:29:36Check out our tartan world in release mode
🏃
1:29:36Check out our tartan world in release mode
🏃
1:30:47Nsight rendering time: 22ms / frame
🏃
1:30:47Nsight rendering time: 22ms / frame
🏃
1:30:47Nsight rendering time: 22ms / frame
🏃
1:31:29Capture a frame to see that we may be CPU-bound
🏃
1:31:29Capture a frame to see that we may be CPU-bound
🏃
1:31:29Capture a frame to see that we may be CPU-bound
🏃
1:32:45Prevent EndLightingComputation() from striping the world
1:32:45Prevent EndLightingComputation() from striping the world
1:32:45Prevent EndLightingComputation() from striping the world
1:33:00Nsight rendering time: 22ms / frame
🏃
1:33:00Nsight rendering time: 22ms / frame
🏃
1:33:00Nsight rendering time: 22ms / frame
🏃
1:33:43Q&A
🗩
1:33:43Q&A
🗩
1:33:43Q&A
🗩
1:35:31dithinas Q: In the pre-stream when you were talking about creating command buffers in your theoretical graphics API, would this be like a buffer you would dynamically assemble GPU machine code into, or is this something that the driver would need to translate for you to the GPU machine code?
🗪
1:35:31dithinas Q: In the pre-stream when you were talking about creating command buffers in your theoretical graphics API, would this be like a buffer you would dynamically assemble GPU machine code into, or is this something that the driver would need to translate for you to the GPU machine code?
🗪
1:35:31dithinas Q: In the pre-stream when you were talking about creating command buffers in your theoretical graphics API, would this be like a buffer you would dynamically assemble GPU machine code into, or is this something that the driver would need to translate for you to the GPU machine code?
🗪
1:37:29derpzerker Q: Isn't SPIR-V the thing you are talking about?
🗪
1:37:29derpzerker Q: Isn't SPIR-V the thing you are talking about?
🗪
1:37:29derpzerker Q: Isn't SPIR-V the thing you are talking about?
🗪
1:39:16fableprotector Unrelated Q: How would a highlight shader work, e.g. if you want to select a sprite you'd want to color the edges of a sprite in some color? Is this done via the stencil buffer?
🗪
1:39:16fableprotector Unrelated Q: How would a highlight shader work, e.g. if you want to select a sprite you'd want to color the edges of a sprite in some color? Is this done via the stencil buffer?
🗪
1:39:16fableprotector Unrelated Q: How would a highlight shader work, e.g. if you want to select a sprite you'd want to color the edges of a sprite in some color? Is this done via the stencil buffer?
🗪
1:41:54Brian Q: What happened with the profiler? Just before you ended the stream, you mentioned you want to re-enable the profiler (I assume it's the Handmade Hero one). Was it disabled, or just not tracking for this part of the code?
🗪
1:41:54Brian Q: What happened with the profiler? Just before you ended the stream, you mentioned you want to re-enable the profiler (I assume it's the Handmade Hero one). Was it disabled, or just not tracking for this part of the code?
🗪
1:41:54Brian Q: What happened with the profiler? Just before you ended the stream, you mentioned you want to re-enable the profiler (I assume it's the Handmade Hero one). Was it disabled, or just not tracking for this part of the code?
🗪
1:43:13Brian Q: Have fun gaming with Jon
🗪
1:43:13Brian Q: Have fun gaming with Jon
🗪
1:43:13Brian Q: Have fun gaming with Jon
🗪
1:43:18Thank you everyone, with a plug of the Jon9 & Casey10 gaming stream
🗩
1:43:18Thank you everyone, with a plug of the Jon9 & Casey10 gaming stream
🗩
1:43:18Thank you everyone, with a plug of the Jon9 & Casey10 gaming stream
🗩