[0:01][Recap and set the stage for the day making the ray caster produce a stable set of inputs to pass to the light field interpolater, with thoughts on multiple light fields][:lighting :speech]
[5:25][Show the current state of the :lighting][:run]
[7:11][Show the current state of the :lighting, without filling in negative light values][:run]
[7:35][Consult our :lighting TODOs][:research]
[8:03][Show the absence of light flickering, thanks to our switch to floats][:lighting :run]
[9:02][Reorganise and consult our :lighting TODOs]
[9:28][Demo our need to flood fill the voxel so that unsampled portions get filled in from nearby samples][:filtering :lighting :run]
[12:03][Consider where is most appropriate to perform the flood filled interpolation][:filtering :lighting :speech]
[13:04][Consider whether or not the reconstructed edge :lighting values should persist across frames][:filtering :lighting :run]
[15:22][Consider our options for flood filling the :lighting voxel: 1) Persistently in lighting_solution; 2) In EndLightingComputation() when: a) pushing the cells to the graphics card each frame; b) accumulating light contribution over time][:filtering :research]
[19:13][Determine to make EndLightingComputation() flood fill the :lighting voxel when pushing the cells to the graphics card][:filtering :research]
[30:44][Propose constraining our flood fill filter to cells predetermined to require :filtering][:filtering :lighting :memory :research]
[32:35][Abortively augment game_render_commands with a FloodIndices array][:filtering :lighting]
[35:54][Begin to make EndLightingComputation() flood fill the :lighting voxel with purple when pushing the cells to the graphics card, asserting that we're well inside the hot region][:filtering :lighting]
[38:17][Try unsuccessfully to trigger our hot region assertions][:filtering :lighting :run]
[39:02][Make EndLightingComputation() flood fill out to neighbour cells, introducing HasLight() and FloodLight()][:filtering :lighting]
[1:04:28][Fix FloodLight() to correctly fill in positive and negative directions, before welding its code in to EndLightingComputation()][:filtering :lighting]
[1:08:22][Check out our partially working flood filling][:filtering :lighting :run]
[1:08:52][Make EndLightingComputation() flood fill with purple][:"debug visualisation" :filtering :lighting]
[1:09:23][Check out our purple flood filling, and spot some erroneously unlit / interpolated areas][:filtering :lighting :run]
[1:10:28][Make CompileZBiasProgram() clamp the light to 0, introducing Clamp0Inf()[ref
site="OpenGL Registry"
page="The OpenGL Shading Language 1.50 Quick Reference Card"
[1:55:01][Make CompileZBiasProgram() visualise just the normal, without the textures][:"debug visualisation" :filtering :lighting]
[1:55:25][Check out our normals, with no – or at least less – discontinuity][:"debug visualisation" :filtering :lighting :run]
[1:57:30][Let CompileZBiasProgram() use the textures and not visualise the normals][:"debug visualisation" :filtering :lighting]
[1:57:39][Check out our discontinuity][:filtering :lighting :run]
[1:58:03][Temporarily make CompileZBiasProgram() hard set the LightDC to 0.5][:filtering :lighting]
[1:58:22][Find that our discontinuity has gone][:filtering :lighting :run]
[1:59:25][Let CompileZBiasProgram() gather in some light from perpendicular sources][:filtering :lighting]
[1:59:52][Find that our discontinuity has really gone][:filtering :lighting :run]
[2:01:10][Re-enable the flood filling code in EndLightingComputation()][:filtering :lighting]
[2:01:29][See that our flood filling brightens the light][:filtering :lighting :run]
[2:01:48][Prevent EndLightingComputation() from hard setting the normal to 0, 0, 1][:filtering :lighting]
[2:02:30][See that our flood filling fills in some areas][:filtering :lighting :run]
[2:03:23][Take a close look at our flood filling][:filtering :lighting :run]
[2:04:29][Respecify HasLight() as a smoothly varying GetLightAmount() for EndLightingComputation() to use as a multiplier][:filtering :lighting]
[2:07:58][Find that our flood fill's popping artifacts have been fixed][:filtering :lighting :run]
[2:08:47][Make SpamVoxel() spam out to all voxel slices][:filtering :lighting]
[2:09:27][Check out the spamming (with flood filling)][:filtering :lighting :run]
[2:09:58][Toggle off the flood filling in EndLightingComputation()][:filtering :lighting]
[2:10:08][Check out the spamming (without flood filling)][:filtering :lighting :run]
[2:11:17][Find that the spamming does not capture negative light properly in the outdoor area][:filtering :lighting :run]
[2:11:38][Prevent SpamVoxelSlice() from clamping the light's distance falloff to 0 to 1][:filtering :lighting]
[2:11:57][See that we're still not getting negative light interpolation][:filtering :lighting :run]
[2:12:50][Prevent EndLightingComputation() from clamping the light values][:filtering :lighting]
[2:13:53][See that we're still not getting negative light interpolation][:filtering :lighting :run]
[2:14:24][Scan the code for any more 0-clamping][:filtering :lighting :research]
[2:15:40][Make CompileZBiasProgram() draw negative values in red][:"debug visualisation" :filtering :lighting]
[2:16:22][See no negative values][:filtering :lighting :run]
[2:16:44][Scan the code for any more 0-clamping][:filtering :lighting :research]
[2:18:06][Add an assertion in SpamVoxelSlice that LightDF >= 0.0f][:filtering :lighting]
[2:18:37][Fail to hit that assertion][:filtering :lighting :run]
[2:18:43][Scrutinise the LightDF calculation in SpamVoxelSlice()][:filtering :lighting :research]
[2:20:50][:Run the game afresh and successfully hit our assertion in SpamVoxelSlice()][:filtering :lighting :run]
[2:20:53][Comment out the assertion in SpamVoxelSlice()][:filtering :lighting]
[2:21:07][Take another look at our non-interpolation of negative light][:filtering :lighting :run]
[2:21:44][Make TestCastFromProbes() fall-off the light more steeply][:filtering :lighting]
[2:21:57][Admire our steeper light falloff, and wonder where our stair-step pattern is coming from][:filtering :lighting :run]
[2:23:03][Prevent CompileZBiasProgram() from drawing negative values in red][:"debug visualisation" :filtering :lighting]
[2:23:12][Consider our entire falloff to not be that smooth][:filtering :lighting :run]
[2:23:35][Try making SpamVoxelSlice() set the light's alpha to the LightDF squared][:filtering :lighting]
[2:24:33][Admire our ring of light falloff][:filtering :lighting :run]
[2:24:51][Make SpamVoxelSlice() preserve the sign of the LightDF][:filtering :lighting]
[2:25:03][Check out our hard light falloff][:filtering :lighting :run]
[2:25:18][Try making SpamVoxelSlice() set the light's alpha to the LightDF square-root][:filtering :lighting]
[2:25:32][Check out our hard light falloff][:filtering :lighting :run]
[2:25:38][Revert SpamVoxelSlice() to setting the light's alpha to the LightDF][:filtering :lighting]
[2:25:51][Check out our hard light falloff][:filtering :lighting :run]
[2:26:04][Determine that we are doing ShaderSimTexWriteSRGB][:filtering :lighting :research]
[2:27:45][Temporarily prevent CompileZBiasProgram() from square-rooting the SurfaceReflect][:filtering :lighting]
[2:28:12][See that our light falloff is much smoother][:filtering :lighting :run]
[2:28:29][Revert CompileZBiasProgram() to square-rooting the SurfaceReflect, and try making SpamVoxelSlice() set the LightDist to LightN squared][:filtering :lighting]
[2:29:32][See a bizarrely octagonal light falloff][:filtering :lighting :run]
[2:29:41][Our problem: The falloff interpolation is being interpreted linearly][:filtering :lighting :research]
[2:31:13][Revert SpamVoxelSlice() to not square the LightN, and instead make GetIrradiance() in CompileZBiasProgram() square the LightV when setting the LightColor, introducing Square()][:filtering :lighting]
[2:32:53][Make SpamVoxelSlice() square the LightN when setting the LightDist, and GetIrradiance() in CompileZBiasProgram() preserve the sign[ref
site="OpenGL Registry"
page="The OpenGL Shading Language 1.50 Quick Reference Card"