diff --git a/cmuratori/hero/code/code563.hmml b/cmuratori/hero/code/code563.hmml new file mode 100644 index 0000000..a57654a --- /dev/null +++ b/cmuratori/hero/code/code563.hmml @@ -0,0 +1,84 @@ +[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Using the Light Probe Spatial Index" vod_platform=youtube id=4NnMdLZfpgg annotator=Miblo] +[0:00][Recap and set the stage for the day][:speech] +[0:26][Demo our current :lighting :sampling, with the trilinear blend artifacts][:run] +[3:07][Determine to move on to light transmission][:lighting :run] +[6:01][Reacquaint ourselves with BeginLightingComputation() and EndLightingComputation()][:lighting :research] +[9:02][Admire our :sampling sphere][:lighting :run] +[9:40][Remove the SampleTable from EndLightingComputation() and lighting_solution][:"data structure" :lighting] +[10:33][Walk through the rest of EndLightingComputation()][:lighting :research] +[11:57][Determine to store persistent information in the light probes][:lighting :speech] +[13:20][Determine to specify and track light sources][:lighting :speech] +[14:55]["Bias" in the context of :rendering vs :sampling][:speech] +[16:59][Summarise our determination regarding light probes and tracking of light sources][:lighting :speech] +[17:34][Prepare EndLightingComputation() to implement persistent light probes][:lighting] +[21:00][Reacquaint ourselves with the light probe data in game_render_commands and lighting_solution][:"data structure" :lighting :research] +[23:35][Remove light_probe and the LightProbes buffer from lighting_solution][:"data structure" :lighting] +[23:59][Consider handling variable amounts of light from the six directions, by using a uniform :sampling pattern, pre-multiplied based on the rays-per-face][:"data structure" :lighting :speech] +[26:59][Make EndLightingComputation() accumulate light persistently across frames][:lighting] +[35:26][Probe Accumulation][:blackboard :lighting :mathematics] +[39:58][Make EndLightingComputation() blend the accumulated light using our equation, rather than pre-multiplying in a first pass][:lighting] +[44:28][Prepare to voxelise our light probes][:lighting :research] +[45:39][Consider the :performance of our voxel :sampling and trilinear blending][:lighting :run] +[46:34][Determine to use our voxel spatial indexing for now][:lighting :speech] +[47:39][Make EndLightingComputation() call AddProbeToSpatialIndex() on all light probes, making the latter take the ProbeP and Radius to save it having to look up the light_probe][:lighting] +[54:58][Make EndLightingComputation() accumulate the irradiance of light probes during voxelisation, introducing IrradiancePack()][:lighting] +[1:05:05][Reacquaint ourselves with GetCornerLightIndex() and GetProbeLightingFor(), noting a positional bug][:lighting :research] +[1:08:54][Make EndLightingComputation() call GetCornerLightIndex()][:lighting] +[1:10:19][Make EndLightingComputation() stuff some test irradiance into our light probes][:lighting] +[1:15:11][Make InitLighting() and BeginLightingComputation() set up our light probe voxel grid, and EndLightingComputation() clear the ProbeIndexPtr (while meaning to clear the ProbeIndex)][:lighting] +[1:32:47][Switch ComputeLightPropagation() and friends to our new implementation of light probes, augmenting the lighting_solution with LightProbeP and LightProbeIrradiance pointers][:lighting] +[1:42:59][Make EndLightingComputation() set the solution's light probe data][:lighting] +[1:44:14][Crash in AddProbeToSpatialIndex()][:lighting :run] +[1:44:57][Fix MapIntoGrid() to clamp the light probe voxel cell coordinates][:lighting] +[1:49:29][See something totally wrong][:lighting :run] +[1:50:12][Q&A][:speech] +[1:51:12][@roam00010011][@handmade_hero Why does the [~hero Handmade Hero] channel not have the "game development" and "programming" tags?] +[1:52:35][@Brian][Q: The debug text still not working? I'm guessing yes for I've not seen it, but was curious if I just missed it). I did see earlier that you have begin / end lighting][:"debug system"] +[1:53:04][@mindfulkid][Q: Do you have any examples of good written software (open source) that you would recommend someone to study or that you yourself studied in the past?] +[1:54:38][@eddiesutrecht][Q: Where's puss?] +[1:55:01][@dragoonx6][Q: " @jhucktemp: Does his color scheme have a name? It's very pleasing to the eye"] +[1:55:33][@altoverflow][Q: How can we improve the web?] +[1:58:14][@Brian][Q: Someone had mentioned during the stream perhaps you needed 1.0f - IrrBlendU? (You had 1 - IrrBlendU). Perhaps you have already addressed this][:lighting] +[1:59:09][@npcxx][Q: Is DirectX dependent on the C runtime? Can it be used without it?][:api :library] +[2:01:13][@Brian][Q: I would guess so, because it might cast it to a integer. I had just read the chat][:language] +[2:01:23][Walk through the IrrBlendV initialisation in terms of int-to-float conversion][:language] +[2:04:31][Test int-to-float conversion][:language] +[2:08:52][Compile and see our int-to-float conversion warning][:language] +[2:10:40][Confirm the compiler's reluctance to warn when converting int-to-float in the IrrBlendV initialisation][:language] +[2:12:00][Use 1.0f in the IrrBlendV initialisation][:language :lighting] +[2:12:14][Step to our int-to-float test code and inspect these values][:language :run] +[2:15:05][Representing 5 as an int and a float][:blackboard :language] +[2:17:56][Continue to describe our test int-to-float values][:language :run] +[2:19:44][Floating-point hexadecimal to binary][:blackboard :language] +[2:20:42][Check the IEEE 754 floating-point format[ref + site=Wikipedia + page="IEEE 754" + url=https://en.wikipedia.org/wiki/IEEE_754][ref + site=Wikipedia + page="Single-precision floating-point format" + url=https://en.wikipedia.org/wiki/Single-precision_floating-point_format]][:language :research] +[2:23:00][Inspect TestFloat in memory][:language :run] +[2:24:07][Convert TestFloat from hexadecimal to binary, and understand its floating-point representations[ref + site=Wikipedia + page="Single-precision floating-point format" + url=https://en.wikipedia.org/wiki/Single-precision_floating-point_format]][:blackboard :language] +[2:30:04][Step through our int-to-float conversion of 5][:language :run] +[2:30:57][Increase TestVal from 5 to 1 << 26][:language] +[2:31:18][Step through our int-to-float conversion of 1 << 26][:language :run] +[2:31:27][Why 1 << 26 fits in a float][:blackboard :language] +[2:32:03][Set TestVal to (1 << 26) | 1][:language] +[2:32:46][Step through our int-to-float conversion of (1 << 26) | 1, to see our truncation problem][:language :run] +[2:34:54][@dragoonx6][Q: What debugger is that?[ref + site=itch.io + page=RemedyBG + url=https://remedybg.itch.io/remedybg]] +[2:35:37][Demo the sheer speed of ~remedybg, and praise its installation and the productivity of its writer @x13pixels[ref + site=itch.io + page=RemedyBG + url=https://remedybg.itch.io/remedybg]][:run] +[2:37:12][@ryuukk_][Q: Have you tried CLion?[ref + site="Jet Brains" + page=CLion + url=https://jetbrains.com/clion] Its debugger is awesome] +[2:41:50][Wind it down][:speech] +[/video]