Handmade Hero»Episode Guide
Experimenting with Fragment Light Sampling
?
?

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:00Plug Molly Rocket's Discord channel1 and note that the twitch player on the Watch Page2 is broken
🗩
0:00Plug Molly Rocket's Discord channel1 and note that the twitch player on the Watch Page2 is broken
🗩
0:00Plug Molly Rocket's Discord channel1 and note that the twitch player on the Watch Page2 is broken
🗩
1:19Recap and set the stage for the day, initially fixing a bug in assigning light probe indices
🗩
1:19Recap and set the stage for the day, initially fixing a bug in assigning light probe indices
🗩
1:19Recap and set the stage for the day, initially fixing a bug in assigning light probe indices
🗩
5:07Hit our assertion in AssignIndices()
🏃
5:07Hit our assertion in AssignIndices()
🏃
5:07Hit our assertion in AssignIndices()
🏃
9:45Add a "conditional break point" in AssignIndices() and RemoveIndices() when the LightProbeIndex is 101
9:45Add a "conditional break point" in AssignIndices() and RemoveIndices() when the LightProbeIndex is 101
9:45Add a "conditional break point" in AssignIndices() and RemoveIndices() when the LightProbeIndex is 101
11:59Break in to AssignIndices() and RemoveIndices() for LightProbeIndex 101
🏃
11:59Break in to AssignIndices() and RemoveIndices() for LightProbeIndex 101
🏃
11:59Break in to AssignIndices() and RemoveIndices() for LightProbeIndex 101
🏃
15:58Scrutinise EnsureRegionIsUnpacked()
📖
15:58Scrutinise EnsureRegionIsUnpacked()
📖
15:58Scrutinise EnsureRegionIsUnpacked()
📖
16:59Add an assertion in EnsureRegionIsUnpacked() that LightProbeIndex is 0
16:59Add an assertion in EnsureRegionIsUnpacked() that LightProbeIndex is 0
16:59Add an assertion in EnsureRegionIsUnpacked() that LightProbeIndex is 0
17:13Break in to AssignIndices() for LightProbeIndex 101, and fail to hit our new assertion in EnsureRegionIsUnpacked()
🏃
17:13Break in to AssignIndices() for LightProbeIndex 101, and fail to hit our new assertion in EnsureRegionIsUnpacked()
🏃
17:13Break in to AssignIndices() for LightProbeIndex 101, and fail to hit our new assertion in EnsureRegionIsUnpacked()
🏃
18:34Add an assertion in AcquireUnpackedEntitySlot() that LightProbeIndex is 0
18:34Add an assertion in AcquireUnpackedEntitySlot() that LightProbeIndex is 0
18:34Add an assertion in AcquireUnpackedEntitySlot() that LightProbeIndex is 0
19:26Break in to AssignIndices() for LightProbeIndex 101, and successfully hit our new assertion in AcquireUnpackedEntitySlot()
🏃
19:26Break in to AssignIndices() for LightProbeIndex 101, and successfully hit our new assertion in AcquireUnpackedEntitySlot()
🏃
19:26Break in to AssignIndices() for LightProbeIndex 101, and successfully hit our new assertion in AcquireUnpackedEntitySlot()
🏃
20:39Realise that we never clear the Entity data when removing from unpacked
📖
20:39Realise that we never clear the Entity data when removing from unpacked
📖
20:39Realise that we never clear the Entity data when removing from unpacked
📖
21:54Fix EnsureRegionIsUnpacked() to clear stale data when unpacking entities
21:54Fix EnsureRegionIsUnpacked() to clear stale data when unpacking entities
21:54Fix EnsureRegionIsUnpacked() to clear stale data when unpacking entities
22:52Hit our assertion in AcquireUnpackedEntitySlot()
🏃
22:52Hit our assertion in AcquireUnpackedEntitySlot()
🏃
22:52Hit our assertion in AcquireUnpackedEntitySlot()
🏃
23:12Remove our assertion from AcquireUnpackedEntitySlot()
23:12Remove our assertion from AcquireUnpackedEntitySlot()
23:12Remove our assertion from AcquireUnpackedEntitySlot()
23:29We have solved that light probe index assigning bug
🏃
23:29We have solved that light probe index assigning bug
🏃
23:29We have solved that light probe index assigning bug
🏃
23:49Make UpdateAndRenderEntities() colour the light probes by their index
23:49Make UpdateAndRenderEntities() colour the light probes by their index
23:49Make UpdateAndRenderEntities() colour the light probes by their index
24:29Our light probes remain stably indexed
🏃
24:29Our light probes remain stably indexed
🏃
24:29Our light probes remain stably indexed
🏃
26:01Storing light probe positions
📖
26:01Storing light probe positions
📖
26:01Storing light probe positions
📖
28:04Augment game_render_commands with a LightProbePosition buffer, introducing SetLightProbePosition() for UpdateAndRenderEntities() to call
28:04Augment game_render_commands with a LightProbePosition buffer, introducing SetLightProbePosition() for UpdateAndRenderEntities() to call
28:04Augment game_render_commands with a LightProbePosition buffer, introducing SetLightProbePosition() for UpdateAndRenderEntities() to call
32:30Implement SetLightProbePosition()
32:30Implement SetLightProbePosition()
32:30Implement SetLightProbePosition()
38:00Wonder if we should treat light probes as points and directions, rather than cubes
🗩
38:00Wonder if we should treat light probes as points and directions, rather than cubes
🗩
38:00Wonder if we should treat light probes as points and directions, rather than cubes
🗩
38:38Introduce light_probe_irradiance for game_render_commands and open_gl to contain
38:38Introduce light_probe_irradiance for game_render_commands and open_gl to contain
38:38Introduce light_probe_irradiance for game_render_commands and open_gl to contain
40:11Consider converting the light_probe_spatial_index to use our voxel
📖
40:11Consider converting the light_probe_spatial_index to use our voxel
📖
40:11Consider converting the light_probe_spatial_index to use our voxel
📖
41:13Crash in SetLightProbePosition()
🏃
41:13Crash in SetLightProbePosition()
🏃
41:13Crash in SetLightProbePosition()
🏃
41:30Augment open_gl with a LightProbePosition array for OpenGLBeginFrame() to populate
41:30Augment open_gl with a LightProbePosition array for OpenGLBeginFrame() to populate
41:30Augment open_gl with a LightProbePosition array for OpenGLBeginFrame() to populate
42:38Our SetLightProbePosition() crash is fixed
🏃
42:38Our SetLightProbePosition() crash is fixed
🏃
42:38Our SetLightProbePosition() crash is fixed
🏃
43:30Sampling light probes
📖
43:30Sampling light probes
📖
43:30Sampling light probes
📖
51:46Enable lighting in CompileZBiasProgram()
51:46Enable lighting in CompileZBiasProgram()
51:46Enable lighting in CompileZBiasProgram()
53:20Calculate our light probe bandwidth requirements (22 GB/sec)3
📖
53:20Calculate our light probe bandwidth requirements (22 GB/sec)3
📖
53:20Calculate our light probe bandwidth requirements (22 GB/sec)3
📖
58:45Note that we only need to sample one face of a light probe, requiring 3 GB/sec
📖
58:45Note that we only need to sample one face of a light probe, requiring 3 GB/sec
📖
58:45Note that we only need to sample one face of a light probe, requiring 3 GB/sec
📖
1:02:37Consider sampling our light probes as a 2D texture: light probe count × direction
📖
1:02:37Consider sampling our light probes as a 2D texture: light probe count × direction
📖
1:02:37Consider sampling our light probes as a 2D texture: light probe count × direction
📖
1:03:53Consider sampling our light probes as a cube map4,5,6
📖
1:03:53Consider sampling our light probes as a cube map4,5,6
📖
1:03:53Consider sampling our light probes as a cube map4,5,6
📖
1:07:47Make CompileZBiasProgram() sample the light probes as a 2D texture7
1:07:47Make CompileZBiasProgram() sample the light probes as a 2D texture7
1:07:47Make CompileZBiasProgram() sample the light probes as a 2D texture7
1:37:07Consider instead sampling our light probes as a cube map8,9
📖
1:37:07Consider instead sampling our light probes as a cube map8,9
📖
1:37:07Consider instead sampling our light probes as a cube map8,9
📖
1:42:23Begin to prepare CompileZBiasProgram() to sample our light probes as a cube map
1:42:23Begin to prepare CompileZBiasProgram() to sample our light probes as a cube map
1:42:23Begin to prepare CompileZBiasProgram() to sample our light probes as a cube map
1:43:21Continue to consider sampling our light probes as a cube map10,11,12
📖
1:43:21Continue to consider sampling our light probes as a cube map10,11,12
📖
1:43:21Continue to consider sampling our light probes as a cube map10,11,12
📖
1:48:25Lighting Atlas
🖌
1:48:25Lighting Atlas
🖌
1:48:25Lighting Atlas
🖌
1:52:29Blending the eight octants of a cube
🖌
1:52:29Blending the eight octants of a cube
🖌
1:52:29Blending the eight octants of a cube
🖌
1:57:15Disable lighting in CompileZBiasProgram()
1:57:15Disable lighting in CompileZBiasProgram()
1:57:15Disable lighting in CompileZBiasProgram()
1:57:32One last view of the game
🏃
1:57:32One last view of the game
🏃
1:57:32One last view of the game
🏃
1:57:41Q&A
🗩
1:57:41Q&A
🗩
1:57:41Q&A
🗩
1:58:13Longboolean cmuratori Would you want to do a debug Milton stream?
🗪
1:58:13Longboolean cmuratori Would you want to do a debug Milton stream?
🗪
1:58:13Longboolean cmuratori Would you want to do a debug Milton stream?
🗪
1:59:30derpzerker Q: Does this still work on XP?
🗪
1:59:30derpzerker Q: Does this still work on XP?
🗪
1:59:30derpzerker Q: Does this still work on XP?
🗪
2:01:01Nick12 Q: If you had to draw text in Arabic, Chinese, Korean, etc in a game, how would you do text shaping?
🗪
2:01:01Nick12 Q: If you had to draw text in Arabic, Chinese, Korean, etc in a game, how would you do text shaping?
🗪
2:01:01Nick12 Q: If you had to draw text in Arabic, Chinese, Korean, etc in a game, how would you do text shaping?
🗪
2:02:12xxthebigfoxx Q: Would it make sense to store the whole cube of voxels as six 3D textures, one for each direction, and then use hardware trilinear filtering?
🗪
2:02:12xxthebigfoxx Q: Would it make sense to store the whole cube of voxels as six 3D textures, one for each direction, and then use hardware trilinear filtering?
🗪
2:02:12xxthebigfoxx Q: Would it make sense to store the whole cube of voxels as six 3D textures, one for each direction, and then use hardware trilinear filtering?
🗪
2:04:324bitlightning Q: Would you overestimate side F on the cube map?
🗪
2:04:324bitlightning Q: Would you overestimate side F on the cube map?
🗪
2:04:324bitlightning Q: Would you overestimate side F on the cube map?
🗪
2:05:28Wind it down
🗩
2:05:28Wind it down
🗩
2:05:28Wind it down
🗩