From 81a4b200702081a19026abe7928521673bf20093 Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Wed, 18 Mar 2020 01:06:07 +0000 Subject: [PATCH] Index hero/code586 --- cmuratori/hero/code/code586.hmml | 128 +++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 cmuratori/hero/code/code586.hmml diff --git a/cmuratori/hero/code/code586.hmml b/cmuratori/hero/code/code586.hmml new file mode 100644 index 0000000..6e34798 --- /dev/null +++ b/cmuratori/hero/code/code586.hmml @@ -0,0 +1,128 @@ +[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Finishing Indirect Diffuse Sampling" vod_platform=youtube id=BoWkXfSgJdE annotator=Miblo] +[0:02][Mention the 'Handmade Collectives Worldwide" thread in the handmade.network forums[ref + author="Casey Muratori" + publisher=Twitter + title="It looks like @handmade_net folks are starting a list of low-level programmers by geography…" + url=https://twitter.com/cmuratori/status/1238588103280832512][ref + site="handmade.network Forums" + page="Handmade Collectives around the world" + url=https://handmade.network/forums/t/7212-handmade_collectives_around_the_world][ref + site="Google Sheets" + page="Handmade Collectives Worldwide" + url=https://docs.google.com/spreadsheets/d/1FzUm4A3ZB5XDtegEy4PocR7_nU1XLMOVfGWYZvhocnw/edit#gid=0]][:research] +[3:44][Fix typo in CompileZBiasProgram()][:hardware :lighting] +[5:17][Show our current specular indirect-bounce :lighting][:run] +[6:14][Embark on the switch to looking up into the diffuse light atlas, guided by the removal of light_voxel_cell from lighting_solution][:"data structure" :lighting] +[6:56][Consider relieving the :lighting system of keeping stale data around][:lighting :research] +[8:36][Respecify light_voxel_cell as light_atlas_tile][:"data structure" :lighting] +[9:57][Update LookUpVoxelClamped() to use the light_atlas_tile, rename it to GetTileClamped(), and introduce GetTileRowStride()][:lighting] +[14:01][Augment light_atlas with a TileRowStride for MakeLightAtlas() to set and LIGHT_ATLAS_OFFSET() to use][:"data structure" :lighting] +[17:44][Remove Stride from light_atlas_tile, rename its Base to Texel and update ComputeVoxelIrradianceAt() to sample from the DiffuseAtlas as a light_atlas_tile][:"data structure" :lighting] +[24:13][Set up ComputeVoxelIrradianceAt() to sample based on the surface reflection direction][:lighting] +[26:04][Update UpdateVoxel() to use our light_atlas_tile, respecifying the latter as light_atlas_texel containing a Value, introducing OffsetFromTexel()][:"data structure" :lighting] +[30:28][Update TestCast(), TestSphere(), FullCast() and ComputeLightPropagationWork() to use our light_atlas_texel][:lighting] +[34:08][Update ComputeLightPropagationWork() to blur from the SpecAtlas to the DiffuseAtlas, introducing a version of OffsetFromTexel() that takes a Tx and Ty][:lighting] +[39:23][Respecify BlockCopyVoxel() as BlockCopyAtlas()][:lighting] +[44:41][Introduce CopyTile(), a light_atlas_texel version of AdvanceRow(), and ZeroTile()][:lighting] +[49:56][Update BeginLightingComputation() to use BlockCopyAtlas() on both atlases][:lighting] +[50:40][Consider adding assertions in our new code to aid testing][:lighting :research] +[51:23][Hit a read access violation in FillLightAtlasBorder()][:lighting :run] +[52:05][:Run in debug mode without crashing][:lighting] +[52:49][Hit a read access violation in FillLightAtlasBorder() in release mode][:lighting :run] +[53:27][Introduce GetTileUnclamped() to CopyTile() and ZeroTile() to use, asserting that we are looking up within the bounds of the atlas][:lighting] +[56:04][@somebody_took_my_name][It's all just moving :memory around] +[56:26][Fix compile error][:lighting] +[56:31][Hit a read access violation in ComputeLightPropagationWork(), and determine to hunt for classes of bugs][:lighting :run] +[57:32][Assert in GetTileUnclamped() that Tx and Ty are in bounds, and there and also in OffsetFromTexel() and AdvanceRow() that the resulting pointer is in bounds, introducing PointerIsInBounds()][:lighting] +[1:01:42][Hit our PointerIsInBounds() assertion in GetTileUnclamped()][:lighting :run] +[1:02:24][Remove the LIGHT_LARGE_VOXEL_DIM definitions from lighting_solution, and propagate this change][:"data structure" :lighting] +[1:05:05][Embark on updating BeginLightingComputation() to place our hot voxel, removing LIGHT_CHUNK_COUNT, augmenting lighting_solution with LightingEnabled and turning off the :lighting for now] +[1:08:28][See no :lighting][:run] +[1:08:58][Disable the :lighting in CompileZBiasProgram()][:hardware] +[1:09:08][See the orphanage with no :lighting, hop to the neighbouring room and hit our PointerIsInBounds() assertion in GetTileUnclamped()][:run] +[1:10:17][:Run in debug mode to investigate our PointerIsInBounds() assertion hit in GetTileUnclamped()][:lighting] +[1:11:13][Fix PointerIsInBounds() to find the atlas extents using GetLightAtlasSize()][:lighting] +[1:11:36][Hit our PointerIsInBounds() assertion in AdvanceRow(), called by ZeroTile()][:lighting :run] +[1:12:59][Remove the PointerIsInBounds() assertion from AdvanceRow(), instead asserting the same within CopyTile() and ZeroTile()][:lighting] +[1:14:04][Hit no assertions in the light_atlas_tile code][:lighting :run] +[1:14:25][Make BeginLightingComputation() draw the voxels][:"debug visualisation" :lighting] +[1:15:13][Hit an assertion in GetTileUnclamped(), called by BlockCopyAtlas() within BeginLightingComputation()][:lighting :run] +[1:22:05][Fix BlockCopyAtlas() to correctly operate within bounds][:lighting] +[1:25:12][:Run without hitting any assertions in GetTileUnclamped(), with a few words on paranoid bounds checking][:lighting] +[1:26:42][Check out the unexpectedly large and correctly centred :lighting voxel][:"debug visualisation" :run] +[1:27:30][Re-enable the :lighting in BeginLightingComputation()] +[1:27:38][Double-check the :lighting distribution code in EndLightingComputation()][:research] +[1:27:56][:Run in debug mode without hitting any assertions][:lighting] +[1:28:23][:Run in release mode and hit a read access violation in ComputeLightPropagationWork()][:lighting] +[1:29:58][Toggle off the specular–diffuse atlas blurring code in ComputeLightPropagationWork()][:lighting] +[1:30:14][:Run successfully in release mode][:lighting] +[1:30:54][Toggle on the specular–diffuse atlas blurring code in ComputeLightPropagationWork()][:lighting] +[1:31:08][Consider removing LIGHT_ATLAS_OFFSET()][:lighting :research] +[1:32:03][Scour for bugs the specular–diffuse atlas blurring code in ComputeLightPropagationWork()][:lighting :research] +[1:34:51][Toggle off the store calls in ComputeLightPropagationWork()][:lighting] +[1:35:11][Break on the final Transpose() call in ComputeLightPropagationWork() and check the :asm to ensure the blurring loop has not been optimised out][:lighting :run] +[1:35:50][Continue to :run without storing, but also without crashing][:lighting] +[1:36:05][Fix ComputeLightPropagationWork() to use the DiffuseTexel.Value pointer itself, rather than its address][:language :lighting] +[1:36:38][:Run successfully with the specular–diffuse blurring and bouncing][:lighting] +[1:37:01][Re-enable the :lighting in CompileZBiasProgram()][:hardware] +[1:37:20][Admire our diffuse :lighting][:run] +[1:38:33][Try hard-setting the SampleRefColor to 70% in FullCast()][:lighting] +[1:39:41][See the light brighten and brighten][:lighting :run] +[1:40:04][Try decreasing the SampleRefColor from 70% to 25% in FullCast()][:lighting] +[1:40:15][See the light's brightness remain stable][:lighting :run] +[1:40:30][Try increasing the SampleRefColor from 25% to 50% in FullCast()][:lighting] +[1:40:35][Hit a write access violation in the debug arena][:"debug system" :lighting :run] +[1:40:51][Admire our diffuse :lighting][:run] +[1:41:06][Remove the commented out reflectance code from ComputeVoxelIrradianceAt(), and the SampleRefColor hard-setting from FullCast()][:lighting] +[1:42:19][Try modifying the W by ×0.25 in BuildDiffuseLightMaps()][:lighting] +[1:43:09][See our :lighting bounce less][:run] +[1:43:17][Try increasing the W modification from ×0.25 to ×0.5 in BuildDiffuseLightMaps()][:lighting] +[1:43:19][Hit a write access violation in DEBUGGetArena()][:"debug system" :run] +[1:43:42][Check out our ×0.5 bounced :lighting][:run] +[1:44:01][Try increasing the W modification from ×0.5 to ×0.75 in BuildDiffuseLightMaps()][:lighting] +[1:44:03][Check out our more correct ×0.75 bounced :lighting][:run] +[1:45:29][Try increasing the W modification from ×0.75 to ×0.85 in BuildDiffuseLightMaps()][:lighting] +[1:45:38][Check out our ×0.85 bounced :lighting, with the determination to tighten our lighting equation][:run] +[1:46:54][Try increasing the W modification from ×0.85 to ×0.9 in BuildDiffuseLightMaps()][:lighting] +[1:46:56][Check out our ×0.9 bounced :lighting][:run] +[1:47:39][Try increasing the W modification from ×0.9 to ×0.95 in BuildDiffuseLightMaps()][:lighting] +[1:47:43][Check out our still stable ×0.95 bounced :lighting][:run] +[1:48:58][Remove the W modification from BuldDiffuseLightMaps()][:lighting] +[1:49:07][Check out our (slowly destabilising) bounced :lighting][:run] +[1:49:54][Q&A][:speech] +[1:50:30][@picklebobdogflog][Q: What is the cause of the flickering in the :lighting? Will you do some de-noising or cast more rays in the future to try to fix it?] +[1:50:54][Try modifying the W by ×0.975 in BuildDiffuseLightMaps()][:lighting] +[1:52:17][@somebody_took_my_name][Q: I think you might have flipped the tx / /ty in TestSphere() while rewriting the code][:lighting] +[1:52:33][@xxthebigfoxx][Q: Could it be useful to have it print a value like the average texel color of the diffuse and / or specular maps on the screen?][:"debug visualisation" :lighting] +[1:53:05][@vaualbus][Q: Are you using different level on assert also for release build? Or you only use asserts on debug builds?] +[1:53:10][Disable HANDMADE_INTERNAL and HANDMADE_SLOW in build.bat][:language] +[1:53:24][Hit a read access violation in OpenGLEndFrame(), and identifier not found compile errors][:"debug system" :hardware :rendering] +[1:53:46][Make HANDMADE_INTERNAL define the macros that HANDMADE_SLOW – within HANDMADE_INTERNAL – would have been able to define][:"debug system" :language] +[1:55:24][:Run with both HANDMADE_INTERNAL and HANDMADE_SLOW disabled, but asserts enabled][:lighting] +[1:56:53][@yesyesyourmother][Can't find anything with DuckDuckGo[ref + site=DuckDuckGo + url=https://duckduckgo.com/]] +[1:57:27][@sahfortv][Q: How slow are we? Is there any significant change in speed from the changes today?][:lighting :performance] +[1:57:30][Check out the :performance of our :lighting][:run] +[2:01:06][@sahfortv][Q: And was the goal is to get to 30FPS in debug mode?][:performance] +[2:01:16][@vaualbus][Q: So we are faster than the previous solution? I don't remember the :performance of the old system][:lighting] +[2:01:48][Consider removing all mentions of LIGHT_LOOKUP_VOXEL_DIM][:lighting :research] +[2:02:49][Temporarily reduce LIGHT_LOOKUP_VOXEL_DIM_POW_2 from 5 to 4][:lighting] +[2:02:59][Admire our much faster :lighting][:performance] +[2:03:42][Revert our LIGHT_LOOKUP_VOXEL_DIM_POW_2 to 5][:lighting] +[2:04:09][@mattiamanzati][Q: Can you still parameterise the voxel size? I'm curious if decreasing voxel size will remove some cubeness][:lighting] +[2:04:42][@pragmascrypt][Q: For what are you still using voxels?][:lighting] +[2:05:40][@data_pi][Q: Off-topic: Do you see Rust replacing C / C++ in the game industry in the next 5–10 years?][:language] +[2:11:05][@ravarix][Interesting that you think Rust doesn't help with swizzling. There are many libs for it just like C. It's not really a :language problem] +[2:12:03][@s0imn][Q: Are there any :language features in C++ (that is not borrowed from C) that you like, and are there other language features than :metaprogramming, that you want in a new language?] +[2:13:39][@ravarix][Have you looked at the macro power of Rust? You can manipulate the AST as desired][:language] +[2:14:02][@etheraxx][Functional languages like Haskell allow developing embedded DSLs and you can write compiler extensions to do symbol replacement][:language] +[2:16:22][@fierydrake][Procedural Macros?[ref + site="The Rust Reference" + page="Procedural Macros" + url=https://doc.rust-lang.org/reference/procedural-macros.html]][:language] +[2:17:46][@ravarix][@handmade_hero Oh sorry, I wasn't asking for specific detail. I was just curious if you had looked at it at all][:language] +[2:18:49][@maliusarth][Q: Where can I find Moustache?] +[2:19:01][@maliusarth][Q: What do you think of clang tooling to create such AST manipulation tools as part of the build pipeline?][:language] +[2:19:29][Wrap this up][:speech] +[/video]