diff --git a/cmuratori/hero/code/code605.hmml b/cmuratori/hero/code/code605.hmml new file mode 100644 index 0000000..07e39cf --- /dev/null +++ b/cmuratori/hero/code/code605.hmml @@ -0,0 +1,78 @@ +[video output=day605 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Cleaning Up the Lighting Code" vod_platform=youtube id=KcUfAVOC13k annotator=Miblo] +[0:00][Recap and set the stage for the day][:speech] +[0:40][Copy into handmade_lighting.h the function signatures of our :lighting system functions] +[1:21][Describe the two-stage :lighting system structure, noting our desire to have only one function, UpdateLighting()][:research] +[3:57][Look into relieving PushLightingRenderValues() of the need to call SetLightBounds()][:lighting :research] +[5:50][Consider storing our light voxel in game_render_commands][:lighting :research] +[8:29][Move the VoxelMinCorner and VoxelInvTotalDim from render_setup to game_render_commands as LightingVoxelMinCorner and LightingVoxelInvTotalDim, and propagate this change][:"data structure" :lighting] +[11:53][Toggle on LIGHTING_USE_FOUR_RAYS][:lighting] +[12:30][Break in ComputeWalkTable()][:lighting :run] +[13:05][Fix the infinite loop in ComputeWalkTable()][:lighting] +[13:17][See a blank screen][:lighting :run] +[13:52][Make the new BuildSpatialPartitionForLighting() only operate if LIGHTING_USE_FOUR_RAYS is disabled][:lighting] +[14:37][See the old :lighting, albeit broken][:run] +[14:56][Build in -O2][:lighting] +[15:11][Check out our broken old :lighting][:run] +[15:28][Collapse SetUpLightingRegion() into UpdateLighting()][:lighting] +[22:05][See a blank screen][:lighting :run] +[22:10][Make UpdateAndRenderWorld() call EnableLighting()][:lighting] +[24:43][Check out our broken, yet streamlined, old :lighting][:run] +[25:22][Clean up and document UpdateLighting()][:lighting] +[33:17][Demo the incorrect :lighting computations and the flash when the :camera moves][:run] +[33:47][Fix UpdateAndRenderWorld() to pass the incoming Camera.SimulationCenter to UpdateLighting()][:camera :lighting] +[35:10][The flash when moving the :camera is fixed][:lighting :run] +[35:31][Finish documenting UpdateLighting()][:lighting] +[36:48][Determine to debug wrong :lighting results and remove the lighting_box storage from lighting_solution][:"data structure" :lighting :research] +[37:41][Prepare to debug wrong :lighting results, removing SplitKd() and trimming out old test cases from RayCast()] +[40:48][The game looks the same][:lighting :run] +[40:53][Remove more stale :lighting code] +[44:26][Demo the wrong :lighting results][:run] +[45:24][Scrutinise RayCast() for errors][:lighting :research] +[49:13][Scrutinise ComputeVoxelIrradianceAt() and related functions for errors][:lighting :research] +[51:16][Scrutinise the :lighting setup code for errors][:research] +[55:08][Fix FullCast() to pass the RayD from the Solution->SamplingSpheres to RayCast()][:lighting] +[57:59][Admire our more correct, old :lighting][:run] +[58:07][Build in -O2][:lighting] +[58:18][Admire our more reasonable, old :lighting][:run] +[58:55][Provide an easy means of toggling between the new grid-based and the old AABB ray caster, renaming RayCast() to AABBRayCast()][:lighting] +[1:08:11][Check out our old AABB ray cast :lighting][:run] +[1:08:35][Split BuildSpatialPartitionForLighting() into GridBuildSpatialPartition() and AABBBuildSpatialPartition()][:lighting] +[1:10:51][Check out our old AABB ray cast :lighting][:run] +[1:11:03][Toggle on LIGHTING_USE_GRID and fix compile errors][:lighting] +[1:11:37][Hit our assertion in FlatIndexFrom()][:lighting :run] +[1:13:40][Make GridBuildSpatialPartition() clip the SpatialGrid down by a CellDim][:lighting] +[1:16:12][Hit our assertion in FlatIndexFrom()][:lighting :run] +[1:17:35][Fix GridBuildSpatialPartition() to pass the BoxBounds to GetIndexForP()][:lighting] +[1:18:10][Admire our moonlight][:lighting :run] +[1:18:36][Build in -O2][:lighting] +[1:18:43][Admire our moonlight][:lighting :run] +[1:19:31][Toggle off LIGHTING_USE_GRID][:lighting] +[1:19:55][Determine to remove the lighting_box storage from lighting_solution][:lighting :run] +[1:20:07][Rename Boxes to AABBBoxes in lighting_solution, remove RootLightBoxIndex, and flow InputBoxes separately through the pipeline][:"data structure" :lighting] +[1:30:01][Hit a write access violation on the ParentBox in SplitBox()][:lighting :run] +[1:30:14][Make AABBBuildSpatialPartition() initialise the AABBBoxCount to 1][:lighting] +[1:30:58][:Run successfully][:lighting] +[1:31:06][Add a toggle between the AABB and grid ray caster data in lighting_solution][:"data structure" :lighting] +[1:33:19][:Run successfully][:lighting] +[1:33:41][Build in -O2][:lighting] +[1:33:48][:Run successfully][:lighting] +[1:34:08][Change the DebugLines in lighting_solution to be allocated][:"debug system" :lighting :memory] +[1:37:41][:Run successfully][:lighting] +[1:38:00][Consider further areas for cleanup][:lighting :research] +[1:42:22][Introduce lighting_update_params][:"data structure" :lighting] +[1:45:35][Plan to split the lighting_solution into pieces][:"data structure" :lighting] +[1:48:44][Q&A][:speech] +[1:49:18][@somebody_took_my_name][Q: Is the MaxNodeIndex supposed to be in bounds or one past the bound?][:lighting] +[1:50:10][@guybru5h_vi][Q: Does the :lighting solution support direct lighting like the sun / moon?] +[1:51:15][@bulmanator][Q: Are you doing this on the CPU purely for educational reasons or is there something else?] +[1:53:26][@billdstrong][Q: We can put mirrors in every level like Labyrinth][:lighting] +[1:54:33][@mindmark42][Q: Can you at some point go over the AVX scatter gather intrinsics?[ref + site=Intel + page="Intel Intrinsics Guide" + url=https://software.intel.com/sites/landingpage/IntrinsicsGuide/]][:isa] +[1:59:38][@poikonomo][Q: Do you have an idea of how the gameplay will look like or will you wait to finish the engine before getting to it?] +[2:00:08][@stuntcoder][Q: (Off-topic) On earlier streams you have trouble with RSI. After decades of typing, I too have RSI. Any tips?][:health] +[2:01:24][@dolseth][Q: Probably covered in some other day, but what's the best update-rate to choose for a game? [@naysayer88 Jon] says it's good to have it high so it looks good on high-update screens, but 120 FPS isn't a multiple of 144 FPS. So what do you recommend?] +[2:04:20][@cleffing][Q: Why not take a stab at game design when it's done? Just not interested?] +[2:05:08][Thank you, everybody][:speech] +[/video]