From efcc7bbbe30f160d23a4ac6b67187a88cf0b6b8a Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Tue, 18 Feb 2020 22:04:56 +0000 Subject: [PATCH] Index hero/code579 --- cmuratori/hero/code/code579.hmml | 127 +++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 cmuratori/hero/code/code579.hmml diff --git a/cmuratori/hero/code/code579.hmml b/cmuratori/hero/code/code579.hmml new file mode 100644 index 0000000..b9b5bcd --- /dev/null +++ b/cmuratori/hero/code/code579.hmml @@ -0,0 +1,127 @@ +[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Debugging Octahedral Shading" vod_platform=youtube id=CcK-Yshqg1w annotator=Miblo] +[0:03][Recap and set the stage for the day][:speech] +[0:31][Demo our octahedral light map][:"debug visualisation" :lighting :run] +[3:23][Understanding the Octahedron[ref + title="Survey of Efficient Representations for Independent Unit Vectors" + author="Zina H. Cigolle, Sam Donow, Daniel Evangelakos, Michael Mara, Morgan McGuire, Quirin Meyer" + url=http://jcgt.org/published/0003/02/01/]][:lighting :research] +[4:55][Orienting the octahedral wrapping by importance][:"debug visualisation" :lighting :run] +[6:06][Determine to fill in the cracks and sample the octahedron in the shaders][:lighting :speech] +[7:36][Make SampleLighting() in CompileZBiasProgram() light the pixels by their position within voxels][:"debug visualisation" :lighting] +[9:32][Check out our lit voxels][:"debug visualisation" :lighting :run] +[10:43][Determine to sample from our octahedral map][:lighting :research :run :sampling] +[12:28][Set up SampleLighting() to sample from the octahedral light map][:lighting :sampling] +[15:54][Make SampleLighting() compute the location from where to sample the octahedral light map][:lighting :sampling] +[27:33][Set up CompileZBiasProgram() to pass the values required by SampleLighting() to lookup into the octahedral light map][:lighting :sampling] +[28:43][Consider not using different resolutions for the light and depth maps[ref + title="Dynamic Diffuse Global Illumination with Ray-Traced Irradiance Fields" + author="Jean-Philippe Guertin, Derek Nowrouzezahrai, Morgan McGuire" + url=http://jcgt.org/published/0008/02/01/]][:lighting :research] +[34:04][Set up CompileZBiasProgram() to pass the LIGHT_LOOKUP_SQUARE_DIM to SampleLighting()][:lighting :sampling] +[34:50][Voxel Atlas UVs][:blackboard :mathematics] +[40:40][Make SampleLighting() compute the dimensions required to lookup into the octahedral light map][:lighting :sampling] +[48:19][Hit shader errors][:lighting :run :sampling] +[49:18][Fix the Result assignments in SampleLighting()][:lighting :sampling] +[49:51][See our darkly and incorrectly lit world][:lighting :run :sampling] +[50:49][Change SampleLighting() to orient our lookup around the octahedron centres][:lighting :sampling] +[55:22][Hit shader errors][:lighting :run :sampling] +[55:30][Fix naming in SampleLighting()][:lighting :sampling] +[55:42][See our discontinuously lit world][:lighting :run :sampling] +[58:13][Try making SampleLighting() lookup into a shrunken area of the octahedral light map][:lighting :sampling] +[58:48][See no improvement][:lighting :run :sampling] +[59:41][Introduce VOXEL_OFFSET_C() and VOXEL_OFFSET_D() for EndLightingComputation() to call][:lighting] +[1:03:57][Verify that our new macros work][:lighting :run] +[1:04:09][Set up to copy the values at the seams around the octahedron[ref + title="Survey of Efficient Representations for Independent Unit Vectors" + author="Zina H. Cigolle, Sam Donow, Daniel Evangelakos, Michael Mara, Morgan McGuire, Quirin Meyer" + url=http://jcgt.org/published/0003/02/01/]][:lighting :research] +[1:06:40][Make EndLightingComputation() copy the values at the seams around the octahedron[ref + title="Survey of Efficient Representations for Independent Unit Vectors" + author="Zina H. Cigolle, Sam Donow, Daniel Evangelakos, Michael Mara, Morgan McGuire, Quirin Meyer" + url=http://jcgt.org/published/0003/02/01/]][:lighting] +[1:09:12][Check out the light map][:lighting :run] +[1:09:39][Toggle on the coloured octahedron in EndLightingComputation(), and make OpenGLChangeToSettings() zoom in to it][:"debug visualisation" :lighting] +[1:10:31][Check out the light map to see no copying][:lighting :run] +[1:10:47][Make EndLightingComputation() copy in to the bottom row of the octahedron][:lighting] +[1:11:39][See copying in the light map][:lighting :run] +[1:11:58][Make EndLightingComputation() copy in to the top row of the octahedron][:lighting] +[1:12:38][See copying in the light map][:lighting :run] +[1:12:52][Temporarily make EndLightingComputation() copy in coloured values][:lighting] +[1:13:05][See our correctly flipped copying in the light map][:lighting :run] +[1:13:19][Make EndLightingComputation() copy in to the left and right columns of the octahedron][:lighting] +[1:16:56][See copying in the light map, only missing the corners][:lighting :run] +[1:17:10][Check our left–right vertical copies with the paper[ref + title="Survey of Efficient Representations for Independent Unit Vectors" + author="Zina H. Cigolle, Sam Donow, Daniel Evangelakos, Michael Mara, Morgan McGuire, Quirin Meyer" + url=http://jcgt.org/published/0003/02/01/]][:lighting :research] +[1:17:46][Make EndLightingComputation() copy in to the corners of our octahedron][:lighting] +[1:19:30][See our fully filled light map][:lighting :run] +[1:19:41][Let EndLightingComputation() populate the light map with real values][:lighting] +[1:19:49][See our full light map, with no improvement to our discontinuity][:lighting :run] +[1:21:05][Scour CompileZBiasProgram() for octahedral mapping bugs][:lighting :research :sampling] +[1:24:11][Explicitly write out the OctMapCenterUV and OctExteriorUVDim initialisations in SampleLighting(), and continue to scour this function for bugs][:lighting :programming :research :sampling] +[1:28:21][Fix OctMapInteriorUVDimC.y in SampleLighting()][:lighting :sampling] +[1:29:43][Hit shader error][:lighting :run :sampling] +[1:29:59][Fix typo in SampleLighting()][:lighting :sampling] +[1:30:20][See different :lighting discontinuities][:run :sampling] +[1:30:40][Continue to scour SampleLighting() for bugs][:lighting :research :sampling] +[1:31:58][Take a close look at our :lighting discontinuities, and wonder if we have a blending error][:run] +[1:33:58][Centred, Padded Lookup][:blackboard :mathematics] +[1:34:51][Consider SampleLighting() to be doing a correct lookup][:lighting :research :sampling] +[1:35:52][Toggle on the coloured octahedron in EndLightingComputation()][:"debug visualisation" :lighting] +[1:36:25][Observe the :lighting discontinuities along with the light map][:"debug visualisation" :run] +[1:37:41][Make CompileZBiasProgram() colour the world directly with light][:"debug visualisation" :lighting] +[1:37:58][Observe the :lighting discontinuities with the world coloured with light][:"debug visualisation" :run] +[1:39:31][Let EndLightingComputation() populate the light map with real values][:lighting] +[1:39:37][Note that the :lighting discontinuities are not at copy points][:"debug visualisation" :run] +[1:39:54][Toggle on the coloured octahedron in EndLightingComputation()][:"debug visualisation" :lighting] +[1:39:58][Realise why we're not smoothly interpolating between adjacent, non-copied octants][:"debug visualisation" :lighting :run] +[1:40:55][Toggle on linear blending in OpenGLChangeToSettings()][:lighting] +[1:41:22][Admire our continuous :lighting][:"debug visualisation" :run] +[1:41:28][Let EndLightingComputation() populate the light map with real values][:lighting] +[1:41:54][Admire our continuous, yet popping :lighting][:"debug visualisation" :run] +[1:42:24][Shoulder the :Owl of Shame] +[1:42:50][Admire our :lighting][:owl :run] +[1:43:07][Revert CompileZBiasProgram() to modulate the world's real colours with light][:lighting :owl] +[1:43:21][Admire our :lighting, noting its directionality][:owl :run] +[1:44:54][Make CompileZBiasProgram() colour the world directly with light][:"debug visualisation" :lighting :owl :programming] +[1:44:59][Check out our :lighting seam][:"debug visualisation" :owl :run] +[1:45:21][Toggle on the coloured octahedron in EndLightingComputation()][:"debug visualisation" :lighting :owl :programming] +[1:45:30][Consider the seam to be along the wrapping border][:"debug visualisation" :lighting :owl :run] +[1:45:39][Let EndLightingComputation() populate the light map with real values][:lighting :owl :programming] +[1:45:50][Consider the seam not to be along the wrapping border][:"debug visualisation" :lighting :owl :run] +[1:45:59][Toggle on the coloured octahedron in EndLightingComputation()][:"debug visualisation" :lighting :owl :programming] +[1:46:00][Consider the seam to be straight down the middle of the pink][:"debug visualisation" :lighting :owl :run] +[1:46:39][Let EndLightingComputation() populate the light map with real values][:lighting :owl :programming] +[1:46:49][See the seam run in a different orientation][:"debug visualisation" :lighting :owl :run] +[1:46:59][Toggle on the coloured octahedron in EndLightingComputation()][:"debug visualisation" :lighting :owl :programming] +[1:47:06][Inspect our seam][:"debug visualisation" :lighting :owl :run] +[1:47:58][Let EndLightingComputation() populate the light map with real values][:lighting :owl :programming] +[1:48:13][Note the brightening as the character hops up][:"debug visualisation" :lighting :owl :run] +[1:49:42][Try making SumLight() sample the :lighting from the direction you're pointing, ignoring the actual reflection vector][:owl :programming :sampling] +[1:49:57][See no :lighting discontinuities][:"debug visualisation" :lighting :owl :run] +[1:51:21][Revert SumLight() to use the reflection vector][:owl :programming :sampling] +[1:52:02][Wonder if EndLightingComputation() is populating the octahedron incorrectly][:lighting :owl :research] +[1:53:16][:Sampling Within Pixels][:blackboard] +[1:55:08][Fix EndLightingComputation() to offset the light population by half a pixel][:lighting :owl :programming] +[1:56:29][Still see the seam][:"debug visualisation" :lighting :owl :run] +[1:56:49][Toggle EndLightingComputation() between offsetting the light population and not, to see difference but no improvement][:lighting :owl :programming :run] +[1:58:29][Q&A][:speech] +[1:59:01][@somebody_took_my_name][Q: Can you vary the light height to see its impact?][:lighting] +[1:59:29][@somebody_took_my_name][Either way][:lighting] +[1:59:30][@uplinkcoder][Q: Can you draw in the light probe positions?][:lighting] +[2:00:15][Make EndLightingComputation() draw the light probes, introducing IsInDebugVoxDim()][:"debug visualisation" :lighting] +[2:07:18][See our misplaced light probes][:"debug visualisation" :lighting :run] +[2:07:39][Fix the position of the light probe drawing in EndLightingComputation()][:"debug visualisation" :lighting] +[2:09:52][See our light probes, and consider the brightening to be due to a Z-discontinuity][:"debug visualisation" :lighting :run] +[2:11:36][@snubbykins][Q: Should you gutter copy from the opposite / flipped sides of the octal mapping so the bilinear blend will blend correctly?[ref + title="Survey of Efficient Representations for Independent Unit Vectors" + author="Zina H. Cigolle, Sam Donow, Daniel Evangelakos, Michael Mara, Morgan McGuire, Quirin Meyer" + url=http://jcgt.org/published/0003/02/01/]][:lighting] +[2:12:50][Make UpdateAndRenderWorld() vary the height of the light][:lighting] +[2:14:35][See no light popping][:lighting :run] +[2:14:48][Increase the height variance of the light in UpdateAndRenderWorld()][:lighting] +[2:15:02][See light popping as the light passes through probes][:lighting :run] +[2:18:48][Remove the light height varying code][:lighting] +[2:18:58][Call it for today][:speech] +[/video]