Handmade Hero»Episode Guide
Half-resolution Spatial Grid
?
?

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:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:27Briefly show the current lighting
🏃
0:27Briefly show the current lighting
🏃
0:27Briefly show the current lighting
🏃
0:37Describe the new inline lighting grid traversal
📖
0:37Describe the new inline lighting grid traversal
📖
0:37Describe the new inline lighting grid traversal
📖
2:45Table-driven Raycast
🖌
2:45Table-driven Raycast
🖌
2:45Table-driven Raycast
🖌
5:21Correspondence Between the Lighting and Spatial Grids
🖌
5:21Correspondence Between the Lighting and Spatial Grids
🖌
5:21Correspondence Between the Lighting and Spatial Grids
🖌
8:28Storage costs and compressibility of grid correspondence
🖌
8:28Storage costs and compressibility of grid correspondence
🖌
8:28Storage costs and compressibility of grid correspondence
🖌
11:53High-resolution lighting grid marching, before stepping down to the low-resolution spatial grid
🖌
11:53High-resolution lighting grid marching, before stepping down to the low-resolution spatial grid
🖌
11:53High-resolution lighting grid marching, before stepping down to the low-resolution spatial grid
🖌
15:08Prepare to define a lower resolution spatial occupancy grid
📖
15:08Prepare to define a lower resolution spatial occupancy grid
📖
15:08Prepare to define a lower resolution spatial occupancy grid
📖
15:57Toggle off the inline lighting grid traversal in GridRayCast()
15:57Toggle off the inline lighting grid traversal in GridRayCast()
15:57Toggle off the inline lighting grid traversal in GridRayCast()
16:18hhlightprof total seconds elapsed: 4.453437
🏃
16:18hhlightprof total seconds elapsed: 4.453437
🏃
16:18hhlightprof total seconds elapsed: 4.453437
🏃
17:50Consider how to reduce the spatial grid resolution
📖
17:50Consider how to reduce the spatial grid resolution
📖
17:50Consider how to reduce the spatial grid resolution
📖
19:28Halve the SpatialGrid resolution in ProfileRun(), updating ComputeLightPropagation() to account for this
19:28Halve the SpatialGrid resolution in ProfileRun(), updating ComputeLightPropagation() to account for this
19:28Halve the SpatialGrid resolution in ProfileRun(), updating ComputeLightPropagation() to account for this
26:14hhlightprof BoxCount[0]: 1400
🏃
26:14hhlightprof BoxCount[0]: 1400
🏃
26:14hhlightprof BoxCount[0]: 1400
🏃
26:41Fix the SpatialGrid apron size in ProfileRun()
26:41Fix the SpatialGrid apron size in ProfileRun()
26:41Fix the SpatialGrid apron size in ProfileRun()
27:21hhlightprof BoxCount[0]: 1400
🏃
27:21hhlightprof BoxCount[0]: 1400
🏃
27:21hhlightprof BoxCount[0]: 1400
🏃
27:37Build in -Od
27:37Build in -Od
27:37Build in -Od
28:00Step through ProfileRun() and inspect the SpatialGrid
🏃
28:00Step through ProfileRun() and inspect the SpatialGrid
🏃
28:00Step through ProfileRun() and inspect the SpatialGrid
🏃
29:12Make ProfileRun() position the SpatialGrid using SetMinCorner()
29:12Make ProfileRun() position the SpatialGrid using SetMinCorner()
29:12Make ProfileRun() position the SpatialGrid using SetMinCorner()
31:20hhlightprof BoxCount[0]: 1400
🏃
31:20hhlightprof BoxCount[0]: 1400
🏃
31:20hhlightprof BoxCount[0]: 1400
🏃
31:37Step through ProfileRun() and inspect the SpatialGrid
🏃
31:37Step through ProfileRun() and inspect the SpatialGrid
🏃
31:37Step through ProfileRun() and inspect the SpatialGrid
🏃
31:46Make ProfileRun() account for the lower resolution when setting SpatialMinCorner
31:46Make ProfileRun() account for the lower resolution when setting SpatialMinCorner
31:46Make ProfileRun() account for the lower resolution when setting SpatialMinCorner
33:41hhlightprof box distribution: More desirable
🏃
33:41hhlightprof box distribution: More desirable
🏃
33:41hhlightprof box distribution: More desirable
🏃
35:00cachurai Statistically speaking, how much of Twitch chat do you think understands the principles the streamer is transmitting?
🗪
35:00cachurai Statistically speaking, how much of Twitch chat do you think understands the principles the streamer is transmitting?
🗪
35:00cachurai Statistically speaking, how much of Twitch chat do you think understands the principles the streamer is transmitting?
🗪
35:27Assess our box distribution
🏃
35:27Assess our box distribution
🏃
35:27Assess our box distribution
🏃
36:38Build in -O2
36:38Build in -O2
36:38Build in -O2
37:01hhlightprof total seconds elapsed: 4.673890
🏃
37:01hhlightprof total seconds elapsed: 4.673890
🏃
37:01hhlightprof total seconds elapsed: 4.673890
🏃
38:14Toggle off the SpatialGrid downscaling in ProfileRun()
38:14Toggle off the SpatialGrid downscaling in ProfileRun()
38:14Toggle off the SpatialGrid downscaling in ProfileRun()
38:37Introduce voxel_sparse_index and SparseIndexFrom()
38:37Introduce voxel_sparse_index and SparseIndexFrom()
38:37Introduce voxel_sparse_index and SparseIndexFrom()
45:49Revert voxel_sparse_index and SparseIndexFrom()
45:49Revert voxel_sparse_index and SparseIndexFrom()
45:49Revert voxel_sparse_index and SparseIndexFrom()
45:56Why safely build the additional tables
📖
45:56Why safely build the additional tables
📖
45:56Why safely build the additional tables
📖
46:44Expand the LightSamplingWalkTable in lighting_solution and introduce GetOctantFor() to correctly index into it
46:44Expand the LightSamplingWalkTable in lighting_solution and introduce GetOctantFor() to correctly index into it
46:44Expand the LightSamplingWalkTable in lighting_solution and introduce GetOctantFor() to correctly index into it
56:09Decrease MaxCostPerRay from 16 to 8 in UpdateLighting() and ProfileRun()
56:09Decrease MaxCostPerRay from 16 to 8 in UpdateLighting() and ProfileRun()
56:09Decrease MaxCostPerRay from 16 to 8 in UpdateLighting() and ProfileRun()
58:06Make ComputeWalkTable() build all eight octants of the LightSamplingWalkTable
58:06Make ComputeWalkTable() build all eight octants of the LightSamplingWalkTable
58:06Make ComputeWalkTable() build all eight octants of the LightSamplingWalkTable
1:02:45On indexing mismatch bugs
🗩
1:02:45On indexing mismatch bugs
🗩
1:02:45On indexing mismatch bugs
🗩
1:04:36Toggle on the grid positioning code in ProfileRun()
1:04:36Toggle on the grid positioning code in ProfileRun()
1:04:36Toggle on the grid positioning code in ProfileRun()
1:05:15Crash hhlightprof
🏃
1:05:15Crash hhlightprof
🏃
1:05:15Crash hhlightprof
🏃
1:05:34Change LightSamplingWalkTable to be an array of 8 in lighting_solution
1:05:34Change LightSamplingWalkTable to be an array of 8 in lighting_solution
1:05:34Change LightSamplingWalkTable to be an array of 8 in lighting_solution
1:05:46Run hhlightprof successfully
🏃
1:05:46Run hhlightprof successfully
🏃
1:05:46Run hhlightprof successfully
🏃
1:06:01Build in -O2
1:06:01Build in -O2
1:06:01Build in -O2
1:06:16hhlightprof total seconds elapsed: 4.226165
🏃
1:06:16hhlightprof total seconds elapsed: 4.226165
🏃
1:06:16hhlightprof total seconds elapsed: 4.226165
🏃
1:06:40Our world is unlit
🏃
1:06:40Our world is unlit
🏃
1:06:40Our world is unlit
🏃
1:07:12Remove stale code from the lighting system
1:07:12Remove stale code from the lighting system
1:07:12Remove stale code from the lighting system
1:10:25Build in -Od
1:10:25Build in -Od
1:10:25Build in -Od
1:11:00Step in to GridRayCast() and inspect the LightSamplingWalkTable and indices
🏃
1:11:00Step in to GridRayCast() and inspect the LightSamplingWalkTable and indices
🏃
1:11:00Step in to GridRayCast() and inspect the LightSamplingWalkTable and indices
🏃
1:14:54Remove further stale code from GridRayCast()
1:14:54Remove further stale code from GridRayCast()
1:14:54Remove further stale code from GridRayCast()
1:16:31Step through GridRayCast() watching the Node indices
🏃
1:16:31Step through GridRayCast() watching the Node indices
🏃
1:16:31Step through GridRayCast() watching the Node indices
🏃
1:17:22Make UpdateLighting() halve the SpatialGrid resolution and reposition it
1:17:22Make UpdateLighting() halve the SpatialGrid resolution and reposition it
1:17:22Make UpdateLighting() halve the SpatialGrid resolution and reposition it
1:19:55Our world is lit
🏃
1:19:55Our world is lit
🏃
1:19:55Our world is lit
🏃
1:20:06Build in -O2
1:20:06Build in -O2
1:20:06Build in -O2
1:20:14Admire our lighting
🏃
1:20:14Admire our lighting
🏃
1:20:14Admire our lighting
🏃
1:20:42hhlightprof total seconds elapsed: 4.256591
🏃
1:20:42hhlightprof total seconds elapsed: 4.256591
🏃
1:20:42hhlightprof total seconds elapsed: 4.256591
🏃
1:21:54Note down our hhlightprof lighting timing
1:21:54Note down our hhlightprof lighting timing
1:21:54Note down our hhlightprof lighting timing
1:22:38Toggle off FullCast() in ComputeLightPropagationWork()
1:22:38Toggle off FullCast() in ComputeLightPropagationWork()
1:22:38Toggle off FullCast() in ComputeLightPropagationWork()
1:23:23hhlightprof total seconds elapsed: 1.028882
🏃
1:23:23hhlightprof total seconds elapsed: 1.028882
🏃
1:23:23hhlightprof total seconds elapsed: 1.028882
🏃
1:24:39Gauge our lighting performance improvement
🗹
1:24:39Gauge our lighting performance improvement
🗹
1:24:39Gauge our lighting performance improvement
🗹
1:25:11Toggle off GridBuildSpatialPartition() in InternalLightingCore()
1:25:11Toggle off GridBuildSpatialPartition() in InternalLightingCore()
1:25:11Toggle off GridBuildSpatialPartition() in InternalLightingCore()
1:25:35Crash hhlightprof
🏃
1:25:35Crash hhlightprof
🏃
1:25:35Crash hhlightprof
🏃
1:25:48Toggle off the SpatialGrid accessing in FullCast()
1:25:48Toggle off the SpatialGrid accessing in FullCast()
1:25:48Toggle off the SpatialGrid accessing in FullCast()
1:26:06Crash hhlightprof
🏃
1:26:06Crash hhlightprof
🏃
1:26:06Crash hhlightprof
🏃
1:26:14Revert our SpatialGrid toggles, and instead toggle off the main loops in GridBuildSpatialPartition() itself
1:26:14Revert our SpatialGrid toggles, and instead toggle off the main loops in GridBuildSpatialPartition() itself
1:26:14Revert our SpatialGrid toggles, and instead toggle off the main loops in GridBuildSpatialPartition() itself
1:27:02hhlightprof total seconds elapsed: 1.035324
🏃
1:27:02hhlightprof total seconds elapsed: 1.035324
🏃
1:27:02hhlightprof total seconds elapsed: 1.035324
🏃
1:27:16Revert our GridBuildSpatialPartition() toggless
1:27:16Revert our GridBuildSpatialPartition() toggless
1:27:16Revert our GridBuildSpatialPartition() toggless
1:27:37hhlightprof total seconds elapsed: 4.230452
🏃
1:27:37hhlightprof total seconds elapsed: 4.230452
🏃
1:27:37hhlightprof total seconds elapsed: 4.230452
🏃
1:27:48Q&A
🗩
1:27:48Q&A
🗩
1:27:48Q&A
🗩
1:28:34insobot Q: Takeover the world, yet anything thing?
🗪
1:28:34insobot Q: Takeover the world, yet anything thing?
🗪
1:28:34insobot Q: Takeover the world, yet anything thing?
🗪
1:28:57frostyninja Q: Missed a fair few weeks. Can you run through how the lighting looks now?
🗪
1:28:57frostyninja Q: Missed a fair few weeks. Can you run through how the lighting looks now?
🗪
1:28:57frostyninja Q: Missed a fair few weeks. Can you run through how the lighting looks now?
🗪
1:31:05mougatron Q: Do you plan to implement any de-noising on the light?
🗪
1:31:05mougatron Q: Do you plan to implement any de-noising on the light?
🗪
1:31:05mougatron Q: Do you plan to implement any de-noising on the light?
🗪
1:31:27nickito97 Q: Is neon any better?
🗪
1:31:27nickito97 Q: Is neon any better?
🗪
1:31:27nickito97 Q: Is neon any better?
🗪
1:32:04miltondts Q: Given that AVX2 is seven years old, would it help to use it instead of SSE?1
🗪
1:32:04miltondts Q: Given that AVX2 is seven years old, would it help to use it instead of SSE?1
🗪
1:32:04miltondts Q: Given that AVX2 is seven years old, would it help to use it instead of SSE?1
🗪
1:33:26mougatron Q: Skylake-X also supports AVX-512
🗪
1:33:26mougatron Q: Skylake-X also supports AVX-512
🗪
1:33:26mougatron Q: Skylake-X also supports AVX-512
🗪
1:34:12mougatron Q: Skylake-X is not server. But it is true that nobody has them2
🗪
1:34:12mougatron Q: Skylake-X is not server. But it is true that nobody has them2
🗪
1:34:12mougatron Q: Skylake-X is not server. But it is true that nobody has them2
🗪
1:35:33billdstrong Q: Couldn't we do two paths, one with and one without AVX2?
🗪
1:35:33billdstrong Q: Couldn't we do two paths, one with and one without AVX2?
🗪
1:35:33billdstrong Q: Couldn't we do two paths, one with and one without AVX2?
🗪
1:36:35maliusarth Why is AVX-512 so uncommon?
🗪
1:36:35maliusarth Why is AVX-512 so uncommon?
🗪
1:36:35maliusarth Why is AVX-512 so uncommon?
🗪
1:37:39koschei_ There are a few laptops out with Ice Lake that has AVX-512
🗪
1:37:39koschei_ There are a few laptops out with Ice Lake that has AVX-512
🗪
1:37:39koschei_ There are a few laptops out with Ice Lake that has AVX-512
🗪
1:38:01Wrap it up
🗩
1:38:01Wrap it up
🗩
1:38:01Wrap it up
🗩