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