Adding a Light Hierarchy
?
?

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:02Recap and set the stage for the day
🗩
0:02Recap and set the stage for the day
🗩
0:02Recap and set the stage for the day
🗩
0:49Acquaint us with the problem of targeting and gathering nearby light sources
📖
0:49Acquaint us with the problem of targeting and gathering nearby light sources
📖
0:49Acquaint us with the problem of targeting and gathering nearby light sources
📖
3:48Consider making a data structure for figuring out which directions to cast our rays
📖
3:48Consider making a data structure for figuring out which directions to cast our rays
📖
3:48Consider making a data structure for figuring out which directions to cast our rays
📖
5:36Closest Light Query
🖌
5:36Closest Light Query
🖌
5:36Closest Light Query
🖌
5:54Light Cuts
🖌
5:54Light Cuts
🖌
5:54Light Cuts
🖌
12:55Introduce light_node
12:55Introduce light_node
12:55Introduce light_node
15:43Modify lighting_solution to remove LightBoxTargetP and add RootLightBoxIndex, and begin to make BuildSpatialPartitionForLighting() build trees of occluders and lights
15:43Modify lighting_solution to remove LightBoxTargetP and add RootLightBoxIndex, and begin to make BuildSpatialPartitionForLighting() build trees of occluders and lights
15:43Modify lighting_solution to remove LightBoxTargetP and add RootLightBoxIndex, and begin to make BuildSpatialPartitionForLighting() build trees of occluders and lights
25:16Walk through SplitBox()
📖
25:16Walk through SplitBox()
📖
25:16Walk through SplitBox()
📖
27:46Fix compile errors in BuildSpatialPartitionForLighting()
27:46Fix compile errors in BuildSpatialPartitionForLighting()
27:46Fix compile errors in BuildSpatialPartitionForLighting()
28:18Consider using the root light box to cast against, and continue to walk through SplitBox()
📖
28:18Consider using the root light box to cast against, and continue to walk through SplitBox()
📖
28:18Consider using the root light box to cast against, and continue to walk through SplitBox()
📖
30:32Make SplitBox() set an accumulated RefC
30:32Make SplitBox() set an accumulated RefC
30:32Make SplitBox() set an accumulated RefC
33:22Consider initialising the root occluder and light boxes' RefC
📖
33:22Consider initialising the root occluder and light boxes' RefC
📖
33:22Consider initialising the root occluder and light boxes' RefC
📖
35:42Introduce CalculateRefC() for BuildSpatialPartitionForLighting() to initialise the root boxes' RefC
35:42Introduce CalculateRefC() for BuildSpatialPartitionForLighting() to initialise the root boxes' RefC
35:42Introduce CalculateRefC() for BuildSpatialPartitionForLighting() to initialise the root boxes' RefC
38:57Rename GetSpatialLeafForP() to GetLightLeafForP() and make it query for the (not guaranteed) closest light source
38:57Rename GetSpatialLeafForP() to GetLightLeafForP() and make it query for the (not guaranteed) closest light source
38:57Rename GetSpatialLeafForP() to GetLightLeafForP() and make it query for the (not guaranteed) closest light source
44:57Introduce GetDistanceToBoxSq() and GetClosestPointInBox()
44:57Introduce GetDistanceToBoxSq() and GetClosestPointInBox()
44:57Introduce GetDistanceToBoxSq() and GetClosestPointInBox()
53:43Make GetLightLeafForP() call GetDistanceToBoxSq() properly
53:43Make GetLightLeafForP() call GetDistanceToBoxSq() properly
53:43Make GetLightLeafForP() call GetDistanceToBoxSq() properly
54:57See that our light is kind of busted
🏃
54:57See that our light is kind of busted
🏃
54:57See that our light is kind of busted
🏃
56:25Step in to TestCastFromProbes() and inspect our Solution
🏃
56:25Step in to TestCastFromProbes() and inspect our Solution
🏃
56:25Step in to TestCastFromProbes() and inspect our Solution
🏃
57:05Step through GetLightLeafForP() and watch what it does
🏃
57:05Step through GetLightLeafForP() and watch what it does
🏃
57:05Step through GetLightLeafForP() and watch what it does
🏃
57:33Fix BuildSpatialPartitionForLighting() to pass ActualLightCount to the lights' SplitBox()
57:33Fix BuildSpatialPartitionForLighting() to pass ActualLightCount to the lights' SplitBox()
57:33Fix BuildSpatialPartitionForLighting() to pass ActualLightCount to the lights' SplitBox()
58:31Step back in to GetLightLeafForP() and still see a ChildCount of 2
🏃
58:31Step back in to GetLightLeafForP() and still see a ChildCount of 2
🏃
58:31Step back in to GetLightLeafForP() and still see a ChildCount of 2
🏃
58:50Step through BuildSpatialPartitionForLighting() with an ActualLightCount of 8, and on through GetLightLeafForP()
🏃
58:50Step through BuildSpatialPartitionForLighting() with an ActualLightCount of 8, and on through GetLightLeafForP()
🏃
58:50Step through BuildSpatialPartitionForLighting() with an ActualLightCount of 8, and on through GetLightLeafForP()
🏃
1:02:54Stop BuildSpatialPartitionForLighting() from setting RootBoxIndex from AddBoxReference(), and +1 to the Source in light boxes' SplitBox() call
1:02:54Stop BuildSpatialPartitionForLighting() from setting RootBoxIndex from AddBoxReference(), and +1 to the Source in light boxes' SplitBox() call
1:02:54Stop BuildSpatialPartitionForLighting() from setting RootBoxIndex from AddBoxReference(), and +1 to the Source in light boxes' SplitBox() call
1:03:35See that we're still busted
🏃
1:03:35See that we're still busted
🏃
1:03:35See that we're still busted
🏃
1:03:50Make GetLightLeafForP() draw its spatial hierarchy walk
1:03:50Make GetLightLeafForP() draw its spatial hierarchy walk
1:03:50Make GetLightLeafForP() draw its spatial hierarchy walk
1:06:42See that our box spatial query is wrong
🏃
1:06:42See that our box spatial query is wrong
🏃
1:06:42See that our box spatial query is wrong
🏃
1:07:01Consider our problem to be in GetClosestPointInBox()
📖
1:07:01Consider our problem to be in GetClosestPointInBox()
📖
1:07:01Consider our problem to be in GetClosestPointInBox()
📖
1:09:07Getting the closest point in a box
🖌
1:09:07Getting the closest point in a box
🖌
1:09:07Getting the closest point in a box
🖌
1:11:19Make GetLightLeafForP() call GetClosestPointInBox() directly, before itself then calling LengthSq()
1:11:19Make GetLightLeafForP() call GetClosestPointInBox() directly, before itself then calling LengthSq()
1:11:19Make GetLightLeafForP() call GetClosestPointInBox() directly, before itself then calling LengthSq()
1:11:55See that our box spatial query remains wrong
🏃
1:11:55See that our box spatial query remains wrong
🏃
1:11:55See that our box spatial query remains wrong
🏃
1:12:09Make GetLightLeafForP() draw the closest positions
1:12:09Make GetLightLeafForP() draw the closest positions
1:12:09Make GetLightLeafForP() draw the closest positions
1:13:15Check out our closest points, to see that it may actually be fine
🏃
1:13:15Check out our closest points, to see that it may actually be fine
🏃
1:13:15Check out our closest points, to see that it may actually be fine
🏃
1:14:20Scrutinise BuildSpatialPartitionForLighting()
📖
1:14:20Scrutinise BuildSpatialPartitionForLighting()
📖
1:14:20Scrutinise BuildSpatialPartitionForLighting()
📖
1:15:51Fix BuildSpatialPartitionForLighting() to loop over the ActualBoxCount
1:15:51Fix BuildSpatialPartitionForLighting() to loop over the ActualBoxCount
1:15:51Fix BuildSpatialPartitionForLighting() to loop over the ActualBoxCount
1:16:46See that our spatial hierarchy remains misplaced
📖
1:16:46See that our spatial hierarchy remains misplaced
📖
1:16:46See that our spatial hierarchy remains misplaced
📖
1:17:08Continue to scrutinise BuildSpatialPartitionForLighting() and SplitBox()
📖
1:17:08Continue to scrutinise BuildSpatialPartitionForLighting() and SplitBox()
📖
1:17:08Continue to scrutinise BuildSpatialPartitionForLighting() and SplitBox()
📖
1:22:05Augment lighting_solution with a ScratchC for BuildSpatialPartitionForLighting() to use
1:22:05Augment lighting_solution with a ScratchC for BuildSpatialPartitionForLighting() to use
1:22:05Augment lighting_solution with a ScratchC for BuildSpatialPartitionForLighting() to use
1:22:53See that our spatial hierarchy is now correctly placed and queried
🏃
1:22:53See that our spatial hierarchy is now correctly placed and queried
🏃
1:22:53See that our spatial hierarchy is now correctly placed and queried
🏃
1:23:37Prevent CompileZBiasProgram() from disabling the lighting
1:23:37Prevent CompileZBiasProgram() from disabling the lighting
1:23:37Prevent CompileZBiasProgram() from disabling the lighting
1:24:00Admire our lighting
🏃
1:24:00Admire our lighting
🏃
1:24:00Admire our lighting
🏃
1:25:21Work on reading our test sphere, removing CubeSideWeight from light_sampling_sphere and Weights from sphere_store, and related code
1:25:21Work on reading our test sphere, removing CubeSideWeight from light_sampling_sphere and Weights from sphere_store, and related code
1:25:21Work on reading our test sphere, removing CubeSideWeight from light_sampling_sphere and Weights from sphere_store, and related code
1:27:45Prepare to invoke hhsphere
📖
1:27:45Prepare to invoke hhsphere
📖
1:27:45Prepare to invoke hhsphere
📖
1:29:06Invoke hhsphere
🗹
1:29:06Invoke hhsphere
🗹
1:29:06Invoke hhsphere
🗹
1:32:45Invoke hhsphere in release mode
🗹
1:32:45Invoke hhsphere in release mode
🗹
1:32:45Invoke hhsphere in release mode
🗹
1:33:06Admire our generated handmade_sampling_sphere.inl
📖
1:33:06Admire our generated handmade_sampling_sphere.inl
📖
1:33:06Admire our generated handmade_sampling_sphere.inl
📖
1:33:37Determine to implement ComputeVoxelIrradianceAt() and make BuildSpatialPartitionForLighting() preserve voxel contents
1:33:37Determine to implement ComputeVoxelIrradianceAt() and make BuildSpatialPartitionForLighting() preserve voxel contents
1:33:37Determine to implement ComputeVoxelIrradianceAt() and make BuildSpatialPartitionForLighting() preserve voxel contents
1:38:06Set up ComputeLightPropagationWork() to read from our light sphere, picking one random point on a light source
1:38:06Set up ComputeLightPropagationWork() to read from our light sphere, picking one random point on a light source
1:38:06Set up ComputeLightPropagationWork() to read from our light sphere, picking one random point on a light source
1:44:08Determine to figure out how to update our voxel field
🗩
1:44:08Determine to figure out how to update our voxel field
🗩
1:44:08Determine to figure out how to update our voxel field
🗩
1:44:56Q&A
🗩
1:44:56Q&A
🗩
1:44:56Q&A
🗩
1:47:02x13pixels Q: What is the go to assembler for 64-bit code on Windows these days? Is MASM still maintained, people moving to NASM, something else?1,2
🗪
1:47:02x13pixels Q: What is the go to assembler for 64-bit code on Windows these days? Is MASM still maintained, people moving to NASM, something else?1,2
🗪
1:47:02x13pixels Q: What is the go to assembler for 64-bit code on Windows these days? Is MASM still maintained, people moving to NASM, something else?1,2
🗪
1:51:07leachleach Q: If I buy RemedyBG now, will I also get access to upcoming versions of it or just the current and past ones?
🗪
1:51:07leachleach Q: If I buy RemedyBG now, will I also get access to upcoming versions of it or just the current and past ones?
🗪
1:51:07leachleach Q: If I buy RemedyBG now, will I also get access to upcoming versions of it or just the current and past ones?
🗪
1:51:16steamymcfly Q: Do you think with all recent processor vulnerabilities being found that future processors will use a fundamentally different optimizing architecture?
🗪
1:51:16steamymcfly Q: Do you think with all recent processor vulnerabilities being found that future processors will use a fundamentally different optimizing architecture?
🗪
1:51:16steamymcfly Q: Do you think with all recent processor vulnerabilities being found that future processors will use a fundamentally different optimizing architecture?
🗪
1:54:24letambourinroyal Q: What's the go to thing for learning assembly
🗪
1:54:24letambourinroyal Q: What's the go to thing for learning assembly
🗪
1:54:24letambourinroyal Q: What's the go to thing for learning assembly
🗪
1:54:53lucid_frost Q: If assemblers were better would you consider programming in x86 / ARM directly (which ever you are trying to target primarily) for everything? Maybe it would auto translate on the backend and you could rewrite critical sections for secondary platforms
🗪
1:54:53lucid_frost Q: If assemblers were better would you consider programming in x86 / ARM directly (which ever you are trying to target primarily) for everything? Maybe it would auto translate on the backend and you could rewrite critical sections for secondary platforms
🗪
1:54:53lucid_frost Q: If assemblers were better would you consider programming in x86 / ARM directly (which ever you are trying to target primarily) for everything? Maybe it would auto translate on the backend and you could rewrite critical sections for secondary platforms
🗪
1:56:59vtlmks cmuratori Do you know of a write-up similar to 'How to avoid C/C++ runtime on Windows' by Mārtiņš Možeiko on the Handmade Hero forum,3 but for Linux?
🗪
1:56:59vtlmks cmuratori Do you know of a write-up similar to 'How to avoid C/C++ runtime on Windows' by Mārtiņš Možeiko on the Handmade Hero forum,3 but for Linux?
🗪
1:56:59vtlmks cmuratori Do you know of a write-up similar to 'How to avoid C/C++ runtime on Windows' by Mārtiņš Možeiko on the Handmade Hero forum,3 but for Linux?
🗪
1:57:32Wrap things up
🗩
1:57:32Wrap things up
🗩
1:57:32Wrap things up
🗩