Handmade Hero»Episode Guide
Multiresolution 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:00Recap and set the stage for the day working on the lighting
🗩
0:00Recap and set the stage for the day working on the lighting
🗩
0:00Recap and set the stage for the day working on the lighting
🗩
1:37Run the game to show our current lighting situation whose stability is dependent on the rays
🏃
1:37Run the game to show our current lighting situation whose stability is dependent on the rays
🏃
1:37Run the game to show our current lighting situation whose stability is dependent on the rays
🏃
4:14Wax lyrical on serge_rgb's wonderful work on milton
🖌
🗩
4:14Wax lyrical on serge_rgb's wonderful work on milton
🖌
🗩
4:14Wax lyrical on serge_rgb's wonderful work on milton
🖌
🗩
5:49Lighting mods
🖌
5:49Lighting mods
🖌
5:49Lighting mods
🖌
7:101. Stratified Sampling, including white noise
🖌
7:101. Stratified Sampling, including white noise
🖌
7:101. Stratified Sampling, including white noise
🖌
13:52White vs Blue noise1
🖌
13:52White vs Blue noise1
🖌
13:52White vs Blue noise1
🖌
17:33Light perception
🖌
17:33Light perception
🖌
17:33Light perception
🖌
19:27Blue noise, with a mention of the Witness Wednesday glass-planting system2
🖌
19:27Blue noise, with a mention of the Witness Wednesday glass-planting system2
🖌
19:27Blue noise, with a mention of the Witness Wednesday glass-planting system2
🖌
21:47Performing stratified sampling
🖌
21:47Performing stratified sampling
🖌
21:47Performing stratified sampling
🖌
25:182. "Multires sampling"
🖌
25:182. "Multires sampling"
🖌
25:182. "Multires sampling"
🖌
28:463. "Bidirectional sampling"
🖌
28:463. "Bidirectional sampling"
🖌
28:463. "Bidirectional sampling"
🖌
31:52Make PlayWorld() generate 16 screens
31:52Make PlayWorld() generate 16 screens
31:52Make PlayWorld() generate 16 screens
32:23Run the game and inspect the profiler, with the determination to get multiresolution sampling working
🏃
32:23Run the game and inspect the profiler, with the determination to get multiresolution sampling working
🏃
32:23Run the game and inspect the profiler, with the determination to get multiresolution sampling working
🏃
34:11Read through the current lighting code with a view to implementing multiresolution sampling, with synthetic light indices for neighbouring spatial partitions to use
📖
34:11Read through the current lighting code with a view to implementing multiresolution sampling, with synthetic light indices for neighbouring spatial partitions to use
📖
34:11Read through the current lighting code with a view to implementing multiresolution sampling, with synthetic light indices for neighbouring spatial partitions to use
📖
38:46Introduce the notion of an ExtendedPointCount in lighting_solution, to store synthetic lighting data
38:46Introduce the notion of an ExtendedPointCount in lighting_solution, to store synthetic lighting data
38:46Introduce the notion of an ExtendedPointCount in lighting_solution, to store synthetic lighting data
45:27Producing the data for the synthetic lighting elementsα
🖌
45:27Producing the data for the synthetic lighting elementsα
🖌
45:27Producing the data for the synthetic lighting elementsα
🖌
49:48Make SplitBox() produce the extended lighting points from the average of all points in their box
49:48Make SplitBox() produce the extended lighting points from the average of all points in their box
49:48Make SplitBox() produce the extended lighting points from the average of all points in their box
1:02:15Run the game to see the total lighting solution, and determine to produce some debug visualisation of the spatial hierarchy
🏃
1:02:15Run the game to see the total lighting solution, and determine to produce some debug visualisation of the spatial hierarchy
🏃
1:02:15Run the game to see the total lighting solution, and determine to produce some debug visualisation of the spatial hierarchy
🏃
1:04:20Introduce OutputLightingPointsRecurse() to produce debug visualisation for the lighting system's entire spatial hierarchy
1:04:20Introduce OutputLightingPointsRecurse() to produce debug visualisation for the lighting system's entire spatial hierarchy
1:04:20Introduce OutputLightingPointsRecurse() to produce debug visualisation for the lighting system's entire spatial hierarchy
1:10:47Step in to OutputLightingPoints() to realise that we are indirected
🏃
1:10:47Step in to OutputLightingPoints() to realise that we are indirected
🏃
1:10:47Step in to OutputLightingPoints() to realise that we are indirected
🏃
1:13:33Make OutputLightingPoints() and SplitBox() use GetBox()
1:13:33Make OutputLightingPoints() and SplitBox() use GetBox()
1:13:33Make OutputLightingPoints() and SplitBox() use GetBox()
1:15:11Run the game to see our lighting debug visualisation
🏃
1:15:11Run the game to see our lighting debug visualisation
🏃
1:15:11Run the game to see our lighting debug visualisation
🏃
1:16:06Make OutputLightingPointsRecurse() size the debug visualisation lighting boxes proportionally to their depth in the hierarchy
1:16:06Make OutputLightingPointsRecurse() size the debug visualisation lighting boxes proportionally to their depth in the hierarchy
1:16:06Make OutputLightingPointsRecurse() size the debug visualisation lighting boxes proportionally to their depth in the hierarchy
1:20:06Run the game to see our proportionally-sized lighting debug visualisation
🏃
1:20:06Run the game to see our proportionally-sized lighting debug visualisation
🏃
1:20:06Run the game to see our proportionally-sized lighting debug visualisation
🏃
1:21:01Provide the ability in UpdateAndRenderWorld() to adjust the depth hierarchy
1:21:01Provide the ability in UpdateAndRenderWorld() to adjust the depth hierarchy
1:21:01Provide the ability in UpdateAndRenderWorld() to adjust the depth hierarchy
1:22:15Run the game and inspect our entire lighting hierarchy
🏃
1:22:15Run the game and inspect our entire lighting hierarchy
🏃
1:22:15Run the game and inspect our entire lighting hierarchy
🏃
1:24:03Make SplitBox() set the AccumulatedPPS to the InitialPPS
1:24:03Make SplitBox() set the AccumulatedPPS to the InitialPPS
1:24:03Make SplitBox() set the AccumulatedPPS to the InitialPPS
1:25:31Run the game and inspect our entire lighting hierarchy
🏃
1:25:31Run the game and inspect our entire lighting hierarchy
🏃
1:25:31Run the game and inspect our entire lighting hierarchy
🏃
1:27:06Prevent OutputLightingPointsRecurse() from including the emission of a childless light source
1:27:06Prevent OutputLightingPointsRecurse() from including the emission of a childless light source
1:27:06Prevent OutputLightingPointsRecurse() from including the emission of a childless light source
1:27:37Run the game to see that that doesn't fix our problem
🏃
1:27:37Run the game to see that that doesn't fix our problem
🏃
1:27:37Run the game to see that that doesn't fix our problem
🏃
1:32:14Enable RayCastRecurse() to recurse to a given depth
1:32:14Enable RayCastRecurse() to recurse to a given depth
1:32:14Enable RayCastRecurse() to recurse to a given depth
1:33:35Run the game and watch the RayCastBoxCount while adjusting the depth in RayCastRecurse()
🏃
1:33:35Run the game and watch the RayCastBoxCount while adjusting the depth in RayCastRecurse()
🏃
1:33:35Run the game and watch the RayCastBoxCount while adjusting the depth in RayCastRecurse()
🏃
1:35:01Make PlayWorld() create larger rooms
1:35:01Make PlayWorld() create larger rooms
1:35:01Make PlayWorld() create larger rooms
1:35:33Run the game and again watch the RayCastBoxCount while adjusting the depth in RayCastRecurse()
🏃
1:35:33Run the game and again watch the RayCastBoxCount while adjusting the depth in RayCastRecurse()
🏃
1:35:33Run the game and again watch the RayCastBoxCount while adjusting the depth in RayCastRecurse()
🏃
1:38:29Step in to LightingTest() to inspect the PointCount
🏃
1:38:29Step in to LightingTest() to inspect the PointCount
🏃
1:38:29Step in to LightingTest() to inspect the PointCount
🏃
1:40:08Make LightingTest() use a temporary variable for the PointCount before giving it to the DEBUG_VALUE
1:40:08Make LightingTest() use a temporary variable for the PointCount before giving it to the DEBUG_VALUE
1:40:08Make LightingTest() use a temporary variable for the PointCount before giving it to the DEBUG_VALUE
1:40:31Run the game to determine that we have a bug in how we output u16s
🏃
1:40:31Run the game to determine that we have a bug in how we output u16s
🏃
1:40:31Run the game to determine that we have a bug in how we output u16s
🏃
1:40:37Add padding in lighting_solution after PointCount
1:40:37Add padding in lighting_solution after PointCount
1:40:37Add padding in lighting_solution after PointCount
1:41:46Run the game to see that that fixes it
🏃
1:41:46Run the game to see that that fixes it
🏃
1:41:46Run the game to see that that fixes it
🏃
1:42:37Add a u16 handler in DEBUGValueSetEventData
1:42:37Add a u16 handler in DEBUGValueSetEventData
1:42:37Add a u16 handler in DEBUGValueSetEventData
1:45:48Run the game to see that our PointCount is displayed correctly, but that our RayCastBoxCount seems to be too high
🏃
1:45:48Run the game to see that our PointCount is displayed correctly, but that our RayCastBoxCount seems to be too high
🏃
1:45:48Run the game to see that our PointCount is displayed correctly, but that our RayCastBoxCount seems to be too high
🏃
1:49:42Augment lighting_solution with some more meaningful counters
1:49:42Augment lighting_solution with some more meaningful counters
1:49:42Augment lighting_solution with some more meaningful counters
1:56:44Run the game and inspect lighting data in the profiler
🏃
1:56:44Run the game and inspect lighting data in the profiler
🏃
1:56:44Run the game and inspect lighting data in the profiler
🏃
1:58:13Force RayCastRecurse() never to recurse
1:58:13Force RayCastRecurse() never to recurse
1:58:13Force RayCastRecurse() never to recurse
1:58:30Run the game to see that TotalPartitionsTested did not go down much
🏃
1:58:30Run the game to see that TotalPartitionsTested did not go down much
🏃
1:58:30Run the game to see that TotalPartitionsTested did not go down much
🏃
2:00:24Read carefully through RayCastRecurse()
📖
2:00:24Read carefully through RayCastRecurse()
📖
2:00:24Read carefully through RayCastRecurse()
📖
2:01:36Run the game and watch the TotalLeavesTested when recursing or not
🏃
2:01:36Run the game and watch the TotalLeavesTested when recursing or not
🏃
2:01:36Run the game and watch the TotalLeavesTested when recursing or not
🏃
2:02:52Try making PlayWorld() create more layers
2:02:52Try making PlayWorld() create more layers
2:02:52Try making PlayWorld() create more layers
2:04:46Run the game and now watch TotalLeavesTested() when recursing or not, to see that, when it doesn't recurse, it goes down much more now that there is a layer of geometry above use
🏃
2:04:46Run the game and now watch TotalLeavesTested() when recursing or not, to see that, when it doesn't recurse, it goes down much more now that there is a layer of geometry above use
🏃
2:04:46Run the game and now watch TotalLeavesTested() when recursing or not, to see that, when it doesn't recurse, it goes down much more now that there is a layer of geometry above use
🏃
2:07:28Q&A
🗩
2:07:28Q&A
🗩
2:07:28Q&A
🗩
2:09:03jamoflaw Q: Can you explain why was the debug output behaving odd with u16s?
🗪
2:09:03jamoflaw Q: Can you explain why was the debug output behaving odd with u16s?
🗪
2:09:03jamoflaw Q: Can you explain why was the debug output behaving odd with u16s?
🗪
2:12:47mathdaemon Q: How likely is a lighting system GPU port still?
🗪
2:12:47mathdaemon Q: How likely is a lighting system GPU port still?
🗪
2:12:47mathdaemon Q: How likely is a lighting system GPU port still?
🗪
2:13:19graemephi Q: (Off-topic) Did you ever find out if it's necessary for CPUs to have named registers?
🗪
2:13:19graemephi Q: (Off-topic) Did you ever find out if it's necessary for CPUs to have named registers?
🗪
2:13:19graemephi Q: (Off-topic) Did you ever find out if it's necessary for CPUs to have named registers?
🗪
2:15:38ataradov Look at Mill CPU. It has no registers, but it is also a vaporware as far as physical implementations go
🗪
2:15:38ataradov Look at Mill CPU. It has no registers, but it is also a vaporware as far as physical implementations go
🗪
2:15:38ataradov Look at Mill CPU. It has no registers, but it is also a vaporware as far as physical implementations go
🗪
2:17:21longboolean Q: Do you think arranging pixels on LCD monitors in a blue noise pattern would be an improvement visually, I assume the costs to manufacture would sky rocket, or are we just better off making the pixels smaller?
🗪
2:17:21longboolean Q: Do you think arranging pixels on LCD monitors in a blue noise pattern would be an improvement visually, I assume the costs to manufacture would sky rocket, or are we just better off making the pixels smaller?
🗪
2:17:21longboolean Q: Do you think arranging pixels on LCD monitors in a blue noise pattern would be an improvement visually, I assume the costs to manufacture would sky rocket, or are we just better off making the pixels smaller?
🗪
2:18:20ataradov Q: Memory is slow
🗪
2:18:20ataradov Q: Memory is slow
🗪
2:18:20ataradov Q: Memory is slow
🗪
2:18:35Close down
🗩
2:18:35Close down
🗩
2:18:35Close down
🗩