From 23fe472502238402283b8a3ae0286940441b9624 Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Mon, 8 Jun 2020 23:28:54 +0100 Subject: [PATCH] Index hero/code608 --- cmuratori/hero/code/code608.hmml | 113 +++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 cmuratori/hero/code/code608.hmml diff --git a/cmuratori/hero/code/code608.hmml b/cmuratori/hero/code/code608.hmml new file mode 100644 index 0000000..6f4386a --- /dev/null +++ b/cmuratori/hero/code/code608.hmml @@ -0,0 +1,113 @@ +[video output=day608 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Visualizing Lighting Values" vod_platform=youtube id=rVJw10RkR9c annotator=Miblo] +[0:01][Note Twitch's latest twitchiness[ref + site="Handmade Hero" + page=Watch + url=https://handmadehero.org/watch]][:speech] +[1:26][Determine to do a :lighting quality pass][:speech] +[4:50][Debugging the :lighting: 1) Trial-and-error eyeballing][:speech] +[5:28][Debugging the :lighting: 2) Create and validate against our own definition of correct lighting behaviour][:speech] +[7:48][Regret not having gained much experience with :lighting][:speech] +[8:27][Demo our ability to debug the raycaster][:"debug visualisation" :lighting :run] +[10:19][ComputeLightPropagationWork cycle use: 82%][:lighting :performance :run] +[11:23][Approaching :lighting transfer][:run] +[13:52][Approaching :lighting transfer: Draw lines through the centre of each grid cube, derived from the octahedral map, with brighter directions drawn longer][:"debug visualisation" :run] +[15:59][Try increasing the W modification from ×0.75 to ×0.1 in BuildDiffuseLightMaps()][:lighting] +[16:23][Demo the slow, but feeding back, :lighting transfer, with the determination to step the lighting frame-by-frame][:run] +[17:49][Determine to draw those octahedral lines in a smaller secondary debug bounds][:"debug visualisation" :lighting :run] +[19:34][Introduce DebugDrawOctahedralValues() for UpdateLighting() to call][:"debug visualisation" :lighting] +[21:05][Note that the diffuse blur is probably providing too much power to the system][:lighting :speech] +[22:23][Make DebugDrawOctahedralValues() draw out our desired debug bounds][:"debug visualisation" :lighting] +[29:44][Introduce a version of * that takes a v3s and s32, and fix compile errors][:"debug visualisation" :lighting :mathematics] +[31:00][Check out our debug boxes][:"debug visualisation" :lighting :run] +[31:37][Make DebugDrawOctahedralValues() draw our octahedral lines][:"debug visualisation" :lighting] +[39:13][Check out our octahedral lines][:"debug visualisation" :lighting :run] +[40:00][Make PushLightingRenderValues() Clamp01() the Color][:lighting] +[42:46][The octahedral lines do not remain white][:"debug visualisation" :lighting :run] +[43:10][Fix PushLightingRenderValues() to Clamp01() the Line->Color and pass the resulting Color to PushLineSegment()][:"debug visualisation" :lighting] +[43:24][Our octahedral lines still do not remain white][:"debug visualisation" :lighting :run] +[43:49][Fix PushLightingRenderValues() to pass the clamped Color to PushLineSegment() for both ends][:"debug visualisation" :lighting] +[44:01][Our octahedral lines now remain white][:"debug visualisation" :lighting :run] +[44:20][Determine to support stepping the lighting frame-by-frame][:run] +[44:58][Prevent UpdateAndRenderWorld() from calling UpdateLighting()][:lighting] +[46:08][We get no :lighting][:run] +[46:19][Make UpdateAndRenderWorld() call UpdateLighting() when we press F9][:"input handling" :lighting] +[47:58][Step the :lighting frame-by-frame with F9][:"input handling" :lighting :run] +[49:25][Delete moonlight variables from GridRayCast()][:lighting] +[50:41][Our system contains no moonlight, yet our octahedral maps are seeing more light from above][:"debug visualisation" :lighting :run] +[52:11][Make PushLight() draw the light][:"debug visualisation" :lighting] +[53:55][Check out our lights, and see that our octahedral maps are not really responding to them][:"debug visualisation" :lighting :run] +[55:38][Move the DebugGridIndex and DebugRayIndex DEBUG_VALUE() initialisers from UpdateLighting() to PushLightingRenderValues()][:"debug system" :lighting] +[56:43][Edit our DebugGridIndex and DebugRayIndex to 17912 and 100][:"debug system" :"debug visualisation" :lighting :run] +[58:30][Make UpdateLighting() set DebugGridIndex and DebugRayIndex to 17912 + (SpatialGrid.CellCount.x × SpatialGrid.CellCount.y) and 100][:"debug system" :lighting] +[58:55][Edit our DebugGridIndex and DebugRayIndex to 17912 and 99][:"debug system" :"debug visualisation" :lighting :run] +[1:02:10][Make UpdateLighting() set DebugGridIndex to 17912][:"debug system" :lighting] +[1:02:31][Edit our DebugRayIndex to 156, and wonder if we are writing back into the wrong parts of the octahedral map][:"debug system" :"debug visualisation" :lighting :run] +[1:04:21][Make UpdateLighting() set DebugRayIndex to 156][:"debug system" :lighting] +[1:04:30][Edit our DebugRayIndex to 155][:"debug system" :"debug visualisation" :lighting :run] +[1:05:35][Make UpdateLighting() set DebugRayIndex to 155][:"debug system" :lighting] +[1:05:42][Try making FullCast() pass an Ignored buffer to GridRayCast(), to rule out the :"debug system" interfering with the SpecAtlas][:lighting] +[1:08:57][Our problem remains][:"debug visualisation" :lighting :run] +[1:09:38][Make FullCast() draw the ExpectedDirection that our rays point into their octahedral map][:lighting] +[1:15:38][Our rays and octahedral directions are closely aligned][:"debug visualisation" :lighting :run] +[1:16:52][Try increasing the W modification from ×0.1 to ×0.75 in BuildDiffuseLightMaps()][:lighting] +[1:17:16][Step through the :lighting][:"debug visualisation" :run] +[1:17:43][Make DebugDrawOctahedralValues() increase the length of our octahedral lines][:"debug visualisation" :lighting] +[1:18:34][Step through the :lighting][:"debug visualisation" :run] +[1:19:07][Make DebugDrawOctahedralValues() draw the diffuse atlas lines, introducing DebugDrawColorDir()][:"debug visualisation" :lighting] +[1:22:03][Step through the :lighting, to see that the diffuse atlas grows quickly][:"debug visualisation" :run] +[1:23:06][Temporarily prevent DebugDrawOctahedralValues() from drawing the diffuse atlas lines][:"debug visualisation" :lighting] +[1:23:19][Step through the :lighting, and note the upwards bias][:"debug visualisation" :run] +[1:23:54][Prevent GridRayCast() from transferring the light for non-hits][:lighting] +[1:27:16][Our SpecAtlas is getting light from the wrong directions][:"debug visualisation" :lighting :run] +[1:28:14][Prevent GridRayCast() from transferring the light for hits][:lighting] +[1:28:32][We correctly see no light][:"debug visualisation" :lighting :run] +[1:29:00][Our bug possibilities: 1) False hit reports; 2) Incorrectly writing the direction; 3) Incorrect debug drawing][:lighting :speech] +[1:30:41][Scrutinise FullCast() for write-back errors][:lighting :research] +[1:33:38][Check out our apparent ray hit][:"debug visualisation" :lighting :run] +[1:33:56][Prevent GridRayCast() from transferring the light for non-hits][:lighting] +[1:34:21][Our target ray is correctly not drawn][:"debug visualisation" :lighting :run] +[1:34:55][Move the debug line drawing branch in GridRayCast() outside of the SomethingHit condition][:"debug visualisation" :lighting] +[1:35:25][Check out our misinformed octahedral lines][:"debug visualisation" :lighting :run] +[1:37:00][Edit our DebugGridIndex to 17788][:"debug system" :"debug visualisation" :lighting :run] +[1:38:08][Make UpdateLighting() set DebugGridIndex to 17788][:"debug system" :lighting] +[1:38:29][Edit our DebugRayIndex, hopefully towards a light][:"debug system" :"debug visualisation" :lighting :run] +[1:42:01][Try decreasing the W modification from ×0.75 to ×0.1 in BuildDiffuseLightMaps()][:lighting] +[1:42:51][Edit our DebugRayIndex to 325, directly towards a light][:"debug system" :"debug visualisation" :lighting :run] +[1:43:31][Make UpdateLighting() set DebugRayIndex to 325][:"debug system" :lighting] +[1:44:16][Check out our direct hit][:"debug visualisation" :lighting :run] +[1:45:16][Rename ControlMask to FPControlMask in SetDefaultFPBehavior()[ref + site=GitHub + page="HandmadeHero / cpp / ControlMask in SetDefaultFPBehaviour" + url=https://github.com/HandmadeHero/cpp/issues/118]][:"platform layer"] +[1:46:40][@uplinkcoder][Q: Maybe just have one light source?][:lighting] +[1:47:07][Temporarily prevent GenerateRoom() from adding lamps][:lighting :"procedural generation"] +[1:47:26][Check out our one light][:lighting :run] +[1:47:53][Try increasing the W modification from ×0.1 to ×0.75 in BuildDiffuseLightMaps()][:lighting] +[1:48:00][Our octahedral maps are still seeing light from the wrong directions][:"debug visualisation" :lighting :run] +[1:48:38][A few words on languages with non-helpful "error-catching" features][:language :run] +[1:50:56][Consider our problem to be an indexing one][:"debug visualisation" :lighting :run] +[1:53:12][Q&A][:speech] +[1:53:29][@uplinkcoder][Q: Try moving the light][:lighting] +[1:53:42][Step through the :lighting][:"debug visualisation" :run] +[1:53:57][Make UpdateAndRenderWorld() offset the debug light in X][:lighting] +[1:54:23][See how that affects our octahedral lines][:"debug visualisation" :lighting :run] +[1:55:01][Make UpdateAndRenderWorld() offset the debug light the opposite direction in X][:lighting] +[1:55:17][See how that affects our octahedral lines][:"debug visualisation" :lighting :run] +[1:56:32][Prevent UpdateAndRenderWorld() from offsetting the debug light][:lighting] +[1:57:02][@miltondts][Q: Why are there two lit areas in the map with only one light source?][:lighting] +[1:57:14][The :lighting gets tiled around the world][:run] +[1:58:37][Disable LIGHTING_USE_GRID][:lighting] +[1:58:53][Our :"debug visualisation" is wrong][:lighting :run] +[1:59:27][Let UpdateAndRenderWorld() call UpdateLighting() every frame][:lighting] +[1:59:40][Our :"debug visualisation" is wrong][:lighting :run] +[2:00:01][Scrutinise DebugDrawOctahedralValues() and related functions for bugs][:"debug visualisation" :lighting :research] +[2:06:11][Check out our octahedral lines while moving the light][:"debug visualisation" :lighting :run] +[2:07:41][Let LIGHT_ATLAS_ASSERT() actually Assert()][:language] +[2:09:51][Happily fail to hit any LIGHT_ATLAS_ASSERT()][:"debug visualisation" :lighting :run] +[2:11:03][@uplinkcoder][Q: PushDebugLine() parameter order maybe?][:"debug visualisation" :lighting] +[2:12:05][@uplinkcoder][Q: Direction inverted?][:"debug visualisation" :lighting] +[2:12:11][Eyeball the octahedral lines, not seeing inversion][:"debug visualisation" :lighting :run] +[2:13:35][Briefly scrutinise DirectionFromTxTy() for bugs][:lighting :research] +[2:14:29][@vaualbus][Q: Does this not pass through the thing we did for having the 3D texture? Maybe we are tilting the line in the shader][:"debug visualisation" :lighting] +[2:15:17][Thank you, everyone][:speech] +[/video]