[0:01][Recap and set the stage for the day building light tables][:lighting :speech]
[1:16][Demo our :lighting colour bleed][:run]
[2:07][Our SampleDirectionTable in handmade_sampling_spheres.inl samples direction \[0, 0, 1\] multiple times][:lighting :research]
[3:35][Plan to rebuild our light table in an evenly distributed blue noise pattern][:lighting :research :sampling]
[5:59][Consider :sampling the light at 16 samples per texel][:lighting :research]
[7:25][@bashtardis][You also need it to be blue-noise temporally as well as spatially for best result][:lighting :sampling]
[7:53][Consider using a pseudo-blue noise :sampling pattern, or tuning the distance parameter manually][:lighting :research]
[9:13][Toggle on the sphere drawing in PushLightingRenderValues()][:"debug visualisation" :lighting]
[9:46][Check out our :sampling sphere][:lighting :run]
[10:22][Plan to rebuild the table then view our drawing][:lighting :research :sampling]
[10:46][Reacquaint ourselves with hhsphere.cpp][:lighting :research :sampling]
[14:08][Remove SamplingSpheres from lighting_solution, the LightSamplingSphereFloatTable from handmade_sampling_spheres.inl with its generator in OutputSphereINL(), InterleaveDirections(), cube_store and sphere_store][:"data structure" :lighting :metaprogramming :sampling]
[18:17][Plan to make OutputSphereINL() output the SampleDirectionTable with all the octahedral rays for a given texel, then all those for the next texel, etc.][:lighting :metaprogramming :research :sampling]
[20:20][Make OutputSphereINL() output the SampleDirectionTable with all the octahedral rays for a given texel, then all those for the next texel, etc.][:lighting :metaprogramming :sampling]
[24:40][Reacquaint ourselves with the light sample sieving in GeneratePoissonDistribution()][:lighting :metaprogramming :research :sampling]
[26:41][Propose to draw the sampling sphere coloured by texel, then fix hhsphere.cpp][:"debug visualisation" :lighting :research :sampling]
[27:32][Make PushLightingRenderValues() draw the sampling sphere coloured by texel][:"debug visualisation" :lighting :sampling]
[33:18][Rework GenerateOctahedralLightingPattern() to structure the sampling directions with all the octahedral rays for a given texel, then all those for the next texel, etc.][:lighting :metaprogramming :sampling]
[35:58][The bug: Our call to GeneratePoissonDistribution(), with its randomness, using TotalDirectionCount, may yield fewer samples on a texel than we need][:lighting :research :sampling]
[37:38][Consider asking GeneratePoissonDistribution() for more sampling points][:lighting :research :sampling]
[38:40][Introduce direction_gen for GeneratePoissonDistribution() to return, and remove GeneratePoissonSamples(), TestFunc() and GeneratePoissonLightingPattern()][:"data structure" :lighting :metaprogramming :sampling]
[42:48][Hunt for a v2u + operator overload][:language :research]
[44:08][Introduce a v2u + operator overload][:language]
[44:37][Update GenerateOctahedralLightingPattern() to use our direction_gen, and ask GeneratePoissonDistribution() for 20% more samples than we'll use, introducing AllocDirArray()][:lighting :metaprogramming :sampling]
[51:34][Make GenerateOctahedralLightingPattern() print an error on "Direction count underflow for texel"][:lighting :metaprogramming :sampling]
[52:47][Finish up the usage code of hhsphere.cpp][:lighting :metaprogramming :sampling]
[57:38][Run hhsphere, and hit a number of "Direction count underflow for texel" errors][:admin :lighting :sampling]
[59:21][Inspect handmade_sampling_spheres.inl, try to compile with it and hit a syntax error][:language :lighting :research :sampling]
[1:00:25][Manually append a ")" to TOTAL_LIGHT_SAMPLE_DIRECTION_COUNT in handmade_sampling_spheres.inl][:language]
[1:01:29][Remove stale #if 0 from GridRayCast()][:language]
[1:01:42][Append the missing ")" to TOTAL_LIGHT_SAMPLE_DIRECTION_COUNT OutputSphereINL()][:lighting :metaprogramming :sampling]
[1:01:52][Update GridRayCast() to use our newly structured SampleDirectionTable][:lighting :sampling]
[1:18:09][Hit a read access violation in GridRayCast()][:lighting :run :sampling]
[1:18:43][Investigate our read access violation in GridRayCast()][:lighting :run :sampling]
[1:21:02][Reacquaint ourselves with tTerminate in ComputeWalkTable()][:lighting :research :sampling]
[1:25:24][Make ComputeWalkTable() set tTerminate to 0 if greater than or equal to 1000000]
[1:27:20][Plan to update ~remedybg from 0.3.5.0 to 0.3.6.3][:admin]
[1:28:05][Again hit a read access violation in GridRayCast()][:lighting :run :sampling]
[1:29:39][Let ComputeWalkTable() use tTerminate as is, and instead make GenerateOctahedralLightingPattern() output a valid \[0, 0, 1\] ray direction on underflow][:lighting :metaprogramming :sampling]
[1:30:58][Run hhsphere, and hit a number of "Direction count underflow for texel" errors][:admin :lighting :sampling]
[1:31:49][Inspect handmade_sampling_spheres.inl and compile just fine][:lighting :research :sampling]
[1:32:29][:Run the game without crashing, but with the sampling sphere possibly being drawn wrong][:lighting :sampling]
[1:33:12][Check RenderDiagrams() for participation in :lighting][:"debug visualisation" :research]
[1:34:31][Our sampling sphere is lit, and contains gaps][:lighting :run :sampling]
[1:35:55][Fix GridRayCast() to set TransferPPS\[Tx\] to the already accumulated TransferPPSAccum][:lighting :sampling]
[1:37:11][Our lighting is no longer overblown, but still bleeds, and dims while moving][:lighting :run :sampling]
[1:39:19][Try making GenerateOctahedralLightingPattern() ask GeneratePoissonDistribution() for 100% more samples than we'll use, and tighten the convergence criteria from 0.025 to 0.0125][:lighting :metaprogramming :sampling]
[1:41:39][Run hhsphere without completing][:admin :lighting :sampling]
[1:42:41][Revert the convergence criteria to 0.025 in GenerateOctahedralLightingPattern()][:lighting :metaprogramming :sampling]
[1:43:13][Run hhsphere, and still hit a number of "Direction count underflow for texel" errors][:admin :lighting :sampling]
[1:43:46][Investigate why GenerateOctahedralLightingPattern() is not receiving enough sample directions][:lighting :research :sampling]
[1:47:03][Our lighting sphere looks the same][:"debug visualisation" :lighting :run :sampling]
[1:52:12][Consider abandoning vs debugging the sampling point picking scheme][:lighting :research :sampling]
[1:56:40][@tomisqi][What snacks?]
[1:57:21][Need more chicharrones][:food :speech]
[1:57:48][Consider evenly distributing sampling points in texel space][:lighting :research :sampling]
[1:59:01][Propose seeding 16 rays per texel, using a white noise distribution, repulsed to increase evenness, and prevented from leaving their containing texel][:lighting :research :sampling]
[2:01:02][@spacenaming][Won't you get clamping on the edges?][:lighting :sampling]
[2:01:37][Consider starting with the 16 rays per texel white noise distribution, without repulsion][:lighting :research :sampling]
[2:02:09][Make GeneratePoissonDistribution() seed the requested rays per texel in a white noise distribution, and remove GenerateOctahedralLightingPattern()][:lighting :metaprogramming :sampling]
[2:09:23][Run hhsphere, and find a more coherent SampleDirectionTable][:admin :lighting :sampling]
[2:09:55][Our lighting sphere is only half filled in][:"debug visualisation" :lighting :run :sampling]
[2:10:32][Fix GeneratePoissonDistribution() to produce a -1 to 1 distribution][:lighting :metaprogramming :sampling]
[2:45:44][Consider deferring until next time the investigation of our out-of-bounds lighting values][:lighting :research]
[2:49:13][Introduce VoxelIndexIsInDim() for GridRayCast() to assert that the sample fetch is in bounds][:lighting]
[2:55:54][Hit our IsInBounds assertion in GridRayCast()][:lighting :run]
[2:58:36][Get it][:lighting :research]
[3:00:34][Toggle off the ray drawing in PushLightingRenderValues(), and toggle on DebugDrawSpatialGrid() in UpdateLighting()][:"debug visualisation" :lighting]