Removing Z from Lighting
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:00Welcome to the stream, with admiration of our lighting
🏃
0:00Welcome to the stream, with admiration of our lighting
🏃
0:00Welcome to the stream, with admiration of our lighting
🏃
0:52Consider lighting improvements, e.g. speeding up our long-term average blend
🏃
0:52Consider lighting improvements, e.g. speeding up our long-term average blend
🏃
0:52Consider lighting improvements, e.g. speeding up our long-term average blend
🏃
1:3870% frame time on ComputeLightPropagationWork
🏃
1:3870% frame time on ComputeLightPropagationWork
🏃
1:3870% frame time on ComputeLightPropagationWork
🏃
2:50Moving to 2D lighting
🏃
2:50Moving to 2D lighting
🏃
2:50Moving to 2D lighting
🏃
3:01Moving to 2D lighting: 1) Eliminating Z-stacking
🏃
3:01Moving to 2D lighting: 1) Eliminating Z-stacking
🏃
3:01Moving to 2D lighting: 1) Eliminating Z-stacking
🏃
3:17Reducing the lighting voxel memory footprint
📖
3:17Reducing the lighting voxel memory footprint
📖
3:17Reducing the lighting voxel memory footprint
📖
7:00Decrease LIGHT_LOOKUP_VOXEL_DIM_Z from 16 to 1
7:00Decrease LIGHT_LOOKUP_VOXEL_DIM_Z from 16 to 1
7:00Decrease LIGHT_LOOKUP_VOXEL_DIM_Z from 16 to 1
7:21Check the ramifications of removing Z from the lighting
📖
7:21Check the ramifications of removing Z from the lighting
📖
7:21Check the ramifications of removing Z from the lighting
📖
14:51Toggle on lighting voxel drawing in PushLightingRenderValues()
14:51Toggle on lighting voxel drawing in PushLightingRenderValues()
14:51Toggle on lighting voxel drawing in PushLightingRenderValues()
16:01Our world is completely black
🏃
16:01Our world is completely black
🏃
16:01Our world is completely black
🏃
16:29Increase LIGHT_LOOKUP_VOXEL_DIM_Z from 1 to 8
16:29Increase LIGHT_LOOKUP_VOXEL_DIM_Z from 1 to 8
16:29Increase LIGHT_LOOKUP_VOXEL_DIM_Z from 1 to 8
16:34Our world is lit
🏃
16:34Our world is lit
🏃
16:34Our world is lit
🏃
16:46Decrease LIGHT_LOOKUP_VOXEL_DIM_Z from 8 to 4
16:46Decrease LIGHT_LOOKUP_VOXEL_DIM_Z from 8 to 4
16:46Decrease LIGHT_LOOKUP_VOXEL_DIM_Z from 8 to 4
16:54Our world remains lit
🏃
16:54Our world remains lit
🏃
16:54Our world remains lit
🏃
16:57Decrease LIGHT_LOOKUP_VOXEL_DIM_Z from 4 to 2
16:57Decrease LIGHT_LOOKUP_VOXEL_DIM_Z from 4 to 2
16:57Decrease LIGHT_LOOKUP_VOXEL_DIM_Z from 4 to 2
17:09Our world remains lit
🏃
17:09Our world remains lit
🏃
17:09Our world remains lit
🏃
17:14Decrease LIGHT_LOOKUP_VOXEL_DIM_Z from 2 to 1
17:14Decrease LIGHT_LOOKUP_VOXEL_DIM_Z from 2 to 1
17:14Decrease LIGHT_LOOKUP_VOXEL_DIM_Z from 2 to 1
17:22Is the voxel too thin to pick up light sources?
🏃
17:22Is the voxel too thin to pick up light sources?
🏃
17:22Is the voxel too thin to pick up light sources?
🏃
17:43Increase LIGHT_LOOKUP_VOXEL_DIM_Z from 1 to 2
17:43Increase LIGHT_LOOKUP_VOXEL_DIM_Z from 1 to 2
17:43Increase LIGHT_LOOKUP_VOXEL_DIM_Z from 1 to 2
17:52Consider keeping the lighting voxel 2-high, with vertical movement sampling fixed
🏃
17:52Consider keeping the lighting voxel 2-high, with vertical movement sampling fixed
🏃
17:52Consider keeping the lighting voxel 2-high, with vertical movement sampling fixed
🏃
19:14Plan our Z-elimination strategy
📖
19:14Plan our Z-elimination strategy
📖
19:14Plan our Z-elimination strategy
📖
21:49Try making UpdateLighting() zero out all the incoming Z-values
21:49Try making UpdateLighting() zero out all the incoming Z-values
21:49Try making UpdateLighting() zero out all the incoming Z-values
22:36Our lighting bounds are relatively too low, but tall enough
🏃
22:36Our lighting bounds are relatively too low, but tall enough
🏃
22:36Our lighting bounds are relatively too low, but tall enough
🏃
24:03Check the call stack of UpdateLighting() for sources of Z
📖
24:03Check the call stack of UpdateLighting() for sources of Z
📖
24:03Check the call stack of UpdateLighting() for sources of Z
📖
25:19Prevent UpdateLighting() from zeroing out all the incoming Z-values
25:19Prevent UpdateLighting() from zeroing out all the incoming Z-values
25:19Prevent UpdateLighting() from zeroing out all the incoming Z-values
25:26Check where to clamp Z
📖
25:26Check where to clamp Z
📖
25:26Check where to clamp Z
📖
27:50Toggle on WorldCameraRect drawing in UpdateAndRenderWorld()
27:50Toggle on WorldCameraRect drawing in UpdateAndRenderWorld()
27:50Toggle on WorldCameraRect drawing in UpdateAndRenderWorld()
28:06Check out our camera and lighting volumes
🏃
28:06Check out our camera and lighting volumes
🏃
28:06Check out our camera and lighting volumes
🏃
29:19Make UpdateAndRenderWorld() draw a -1 to 1 origin cube
29:19Make UpdateAndRenderWorld() draw a -1 to 1 origin cube
29:19Make UpdateAndRenderWorld() draw a -1 to 1 origin cube
30:05Check out our -1 to 1 origin cube
🏃
30:05Check out our -1 to 1 origin cube
🏃
30:05Check out our -1 to 1 origin cube
🏃
31:15Determine to lock the simulation center Z
📖
31:15Determine to lock the simulation center Z
📖
31:15Determine to lock the simulation center Z
📖
33:05Try making UpdateCameraForEntityMovement() set SimulationCenter.Z to 0
33:05Try making UpdateCameraForEntityMovement() set SimulationCenter.Z to 0
33:05Try making UpdateCameraForEntityMovement() set SimulationCenter.Z to 0
33:29The game looks good
🏃
33:29The game looks good
🏃
33:29The game looks good
🏃
33:40Consider drawing the simulation region
📖
33:40Consider drawing the simulation region
📖
33:40Consider drawing the simulation region
📖
34:09The simulation region does not follow us downstairs
🏃
34:09The simulation region does not follow us downstairs
🏃
34:09The simulation region does not follow us downstairs
🏃
35:03Make UpdateAndRenderWorld() zero out the LightingCenter.ChunkZ and LightingCenter.Offset_.z
35:03Make UpdateAndRenderWorld() zero out the LightingCenter.ChunkZ and LightingCenter.Offset_.z
35:03Make UpdateAndRenderWorld() zero out the LightingCenter.ChunkZ and LightingCenter.Offset_.z
36:15The camera bounds wobble
🏃
36:15The camera bounds wobble
🏃
36:15The camera bounds wobble
🏃
37:44Assert in UpdateLighting() that Z is 0
37:44Assert in UpdateLighting() that Z is 0
37:44Assert in UpdateLighting() that Z is 0
38:54Never hit our assertions in UpdateLighting()
🏃
38:54Never hit our assertions in UpdateLighting()
🏃
38:54Never hit our assertions in UpdateLighting()
🏃
39:27Consider making Z == 0 the lowest point in the world
🏃
39:27Consider making Z == 0 the lowest point in the world
🏃
39:27Consider making Z == 0 the lowest point in the world
🏃
40:49Consider Z simplifications
📖
40:49Consider Z simplifications
📖
40:49Consider Z simplifications
📖
42:30Reacquaint ourselves with the alignment code in UpdateLighting
📖
42:30Reacquaint ourselves with the alignment code in UpdateLighting
📖
42:30Reacquaint ourselves with the alignment code in UpdateLighting
📖
43:45Determine to keep Z == 0 at the center point
📖
43:45Determine to keep Z == 0 at the center point
📖
43:45Determine to keep Z == 0 at the center point
📖
45:57Make GetTotalVolume() offset the MinP negatively by half a tile
45:57Make GetTotalVolume() offset the MinP negatively by half a tile
45:57Make GetTotalVolume() offset the MinP negatively by half a tile
48:18Our world is lit again
🏃
48:18Our world is lit again
🏃
48:18Our world is lit again
🏃
50:16Make GetTotalVolume() zero out the MinP.Z
50:16Make GetTotalVolume() zero out the MinP.Z
50:16Make GetTotalVolume() zero out the MinP.Z
51:12Our world looks fine, but the lighting and camera are offset
🏃
51:12Our world looks fine, but the lighting and camera are offset
🏃
51:12Our world looks fine, but the lighting and camera are offset
🏃
51:39Investigate why the camera is incorrectly positioned
📖
51:39Investigate why the camera is incorrectly positioned
📖
51:39Investigate why the camera is incorrectly positioned
📖
54:27Make UpdateAndRenderWorld() set FocusZ to 0
54:27Make UpdateAndRenderWorld() set FocusZ to 0
54:27Make UpdateAndRenderWorld() set FocusZ to 0
54:46Our camera remains incorrectly positioned
🏃
54:46Our camera remains incorrectly positioned
🏃
54:46Our camera remains incorrectly positioned
🏃
55:05Reacquaint ourselves with FocusZ relativity
📖
55:05Reacquaint ourselves with FocusZ relativity
📖
55:05Reacquaint ourselves with FocusZ relativity
📖
56:37Simplify the FocusZ values in game_camera down to ExpectedFocusZ
56:37Simplify the FocusZ values in game_camera down to ExpectedFocusZ
56:37Simplify the FocusZ values in game_camera down to ExpectedFocusZ
1:01:50Make UpdateAndRenderWorld() compute ExpectedFocusZ
1:01:50Make UpdateAndRenderWorld() compute ExpectedFocusZ
1:01:50Make UpdateAndRenderWorld() compute ExpectedFocusZ
1:09:18Our camera remains incorrectly positioned
🏃
1:09:18Our camera remains incorrectly positioned
🏃
1:09:18Our camera remains incorrectly positioned
🏃
1:09:37Reacquaint ourselves with GetCameraRectangleAtDistance()
📖
1:09:37Reacquaint ourselves with GetCameraRectangleAtDistance()
📖
1:09:37Reacquaint ourselves with GetCameraRectangleAtDistance()
📖
1:10:47Break in to UpdateAndRenderWorld() in -Od, and inspect CameraZ and DeltaFromSim
🏃
1:10:47Break in to UpdateAndRenderWorld() in -Od, and inspect CameraZ and DeltaFromSim
🏃
1:10:47Break in to UpdateAndRenderWorld() in -Od, and inspect CameraZ and DeltaFromSim
🏃
1:13:10Reacquaint ourselves with UpdateCameraForEntityMovement()
📖
1:13:10Reacquaint ourselves with UpdateCameraForEntityMovement()
📖
1:13:10Reacquaint ourselves with UpdateCameraForEntityMovement()
📖
1:15:30Break in to UpdateCameraForEntityMovement(), and never enter the InRoom branch
🏃
1:15:30Break in to UpdateCameraForEntityMovement(), and never enter the InRoom branch
🏃
1:15:30Break in to UpdateCameraForEntityMovement(), and never enter the InRoom branch
🏃
1:16:04Reacquaint ourselves with the procedural generation code in terms of Z
📖
1:16:04Reacquaint ourselves with the procedural generation code in terms of Z
📖
1:16:04Reacquaint ourselves with the procedural generation code in terms of Z
📖
1:19:55Make BeginGridEdit() enlarge rooms by 5 units in Z
1:19:55Make BeginGridEdit() enlarge rooms by 5 units in Z
1:19:55Make BeginGridEdit() enlarge rooms by 5 units in Z
1:20:52Enter the InRoom branch in UpdateCameraForEntityMovement()
🏃
1:20:52Enter the InRoom branch in UpdateCameraForEntityMovement()
🏃
1:20:52Enter the InRoom branch in UpdateCameraForEntityMovement()
🏃
1:21:03Our camera is now correctly positioned, and our frame rate is far higher
🏃
1:21:03Our camera is now correctly positioned, and our frame rate is far higher
🏃
1:21:03Our camera is now correctly positioned, and our frame rate is far higher
🏃
1:21:40~30% frame time on ComputeLightPropagationWork, but our fogging is incorrect
🏃
1:21:40~30% frame time on ComputeLightPropagationWork, but our fogging is incorrect
🏃
1:21:40~30% frame time on ComputeLightPropagationWork, but our fogging is incorrect
🏃
1:23:05Make UpdateAndRenderWorld() set the camera's fogging FocusMinZ and FocusMaxZ based on the ExpectedFocusZ
1:23:05Make UpdateAndRenderWorld() set the camera's fogging FocusMinZ and FocusMaxZ based on the ExpectedFocusZ
1:23:05Make UpdateAndRenderWorld() set the camera's fogging FocusMinZ and FocusMaxZ based on the ExpectedFocusZ
1:24:55Our focused level is no longer fogged out
🏃
1:24:55Our focused level is no longer fogged out
🏃
1:24:55Our focused level is no longer fogged out
🏃
1:25:28Determine to position light probes relative to the floor and ceiling
🏃
1:25:28Determine to position light probes relative to the floor and ceiling
🏃
1:25:28Determine to position light probes relative to the floor and ceiling
🏃
1:27:16Make UpdateLighting() call DebugDrawOctahedralValues()
1:27:16Make UpdateLighting() call DebugDrawOctahedralValues()
1:27:16Make UpdateLighting() call DebugDrawOctahedralValues()
1:29:14Hit a read access violation on DebugDrawColorDir()
🏃
1:29:14Hit a read access violation on DebugDrawColorDir()
🏃
1:29:14Hit a read access violation on DebugDrawColorDir()
🏃
1:29:53Hit a read access violation on Texel.Value in DebugDrawColorDir() in -Od
🏃
1:29:53Hit a read access violation on Texel.Value in DebugDrawColorDir() in -Od
🏃
1:29:53Hit a read access violation on Texel.Value in DebugDrawColorDir() in -Od
🏃
1:30:36Fix DebugDrawOctahedralValues() to account for our "Z-less" world
1:30:36Fix DebugDrawOctahedralValues() to account for our "Z-less" world
1:30:36Fix DebugDrawOctahedralValues() to account for our "Z-less" world
1:31:23Run correctly
🏃
1:31:23Run correctly
🏃
1:31:23Run correctly
🏃
1:31:41Check out our light probes in -O2
🏃
1:31:41Check out our light probes in -O2
🏃
1:31:41Check out our light probes in -O2
🏃
1:32:26Try letting DebugDrawOctahedralValues() draw all the light probes
1:32:26Try letting DebugDrawOctahedralValues() draw all the light probes
1:32:26Try letting DebugDrawOctahedralValues() draw all the light probes
1:32:41Hit our "overflow" assertion in PushQuad()
🏃
1:32:41Hit our "overflow" assertion in PushQuad()
🏃
1:32:41Hit our "overflow" assertion in PushQuad()
🏃
1:32:44Try making DebugDrawOctahedralValues() draw half the light probes
1:32:44Try making DebugDrawOctahedralValues() draw half the light probes
1:32:44Try making DebugDrawOctahedralValues() draw half the light probes
1:32:54Check out our light probes, with potential bugs
🏃
1:32:54Check out our light probes, with potential bugs
🏃
1:32:54Check out our light probes, with potential bugs
🏃
1:34:08Make UpdateAndRenderEntities() draw the colliders
1:34:08Make UpdateAndRenderEntities() draw the colliders
1:34:08Make UpdateAndRenderEntities() draw the colliders
1:34:44Based on the colliders, our light probes look buggy
🏃
1:34:44Based on the colliders, our light probes look buggy
🏃
1:34:44Based on the colliders, our light probes look buggy
🏃
1:37:43Reflect on our lighting simplifications, and consider next steps
🗩
1:37:43Reflect on our lighting simplifications, and consider next steps
🗩
1:37:43Reflect on our lighting simplifications, and consider next steps
🗩
1:40:00Consider removing spatial partitioning of our 2D lighting grid, raycasting directly on it
🏃
1:40:00Consider removing spatial partitioning of our 2D lighting grid, raycasting directly on it
🏃
1:40:00Consider removing spatial partitioning of our 2D lighting grid, raycasting directly on it
🏃
1:43:25Determine to investigate our buggy light probes
🏃
1:43:25Determine to investigate our buggy light probes
🏃
1:43:25Determine to investigate our buggy light probes
🏃
1:45:24Force all light probes through the not-inside branch in FullCast()
1:45:24Force all light probes through the not-inside branch in FullCast()
1:45:24Force all light probes through the not-inside branch in FullCast()
1:45:53Those buggy light probes now pick up light
🏃
1:45:53Those buggy light probes now pick up light
🏃
1:45:53Those buggy light probes now pick up light
🏃
1:46:12Let light probes enter the inside branch in FullCast()
1:46:12Let light probes enter the inside branch in FullCast()
1:46:12Let light probes enter the inside branch in FullCast()
1:46:32Consider debugging versus simplifying the spatial partition for raycasting
📖
1:46:32Consider debugging versus simplifying the spatial partition for raycasting
📖
1:46:32Consider debugging versus simplifying the spatial partition for raycasting
📖
1:50:00Simplifying raycasting spatial partition: 1) Removing Z
📖
1:50:00Simplifying raycasting spatial partition: 1) Removing Z
📖
1:50:00Simplifying raycasting spatial partition: 1) Removing Z
📖
1:50:12Simplifying raycasting spatial partition: 2) Turning it into a grid
📖
1:50:12Simplifying raycasting spatial partition: 2) Turning it into a grid
📖
1:50:12Simplifying raycasting spatial partition: 2) Turning it into a grid
📖
1:50:28Plan to remove Z from GridBuildSpatialPartition()
📖
1:50:28Plan to remove Z from GridBuildSpatialPartition()
📖
1:50:28Plan to remove Z from GridBuildSpatialPartition()
📖
1:54:36Step in to UpdateLighting() and inspect the VoxCellDim and SpatialCellCount
🏃
1:54:36Step in to UpdateLighting() and inspect the VoxCellDim and SpatialCellCount
🏃
1:54:36Step in to UpdateLighting() and inspect the VoxCellDim and SpatialCellCount
🏃
1:57:52Make UpdateLighting() set the AtlasToSpatialGridIndexOffset.Z to 0
1:57:52Make UpdateLighting() set the AtlasToSpatialGridIndexOffset.Z to 0
1:57:52Make UpdateLighting() set the AtlasToSpatialGridIndexOffset.Z to 0
1:58:47Make PushLightingRenderValues() draw the spatial grid
1:58:47Make PushLightingRenderValues() draw the spatial grid
1:58:47Make PushLightingRenderValues() draw the spatial grid
1:59:07Our spatial grid is too low
🏃
1:59:07Our spatial grid is too low
🏃
1:59:07Our spatial grid is too low
🏃
1:59:39Make UpdateLighting() give the spatial grid three layers of height
1:59:39Make UpdateLighting() give the spatial grid three layers of height
1:59:39Make UpdateLighting() give the spatial grid three layers of height
2:00:38Our spatial grid remains too low
🏃
2:00:38Our spatial grid remains too low
🏃
2:00:38Our spatial grid remains too low
🏃
2:00:53Reacquaint ourselves with the spatial grid alignment code
📖
2:00:53Reacquaint ourselves with the spatial grid alignment code
📖
2:00:53Reacquaint ourselves with the spatial grid alignment code
📖
2:01:53Make UpdateLighting() offset the spatial grid in Z by a third of the usual amount
2:01:53Make UpdateLighting() offset the spatial grid in Z by a third of the usual amount
2:01:53Make UpdateLighting() offset the spatial grid in Z by a third of the usual amount
2:02:12Our spatial grid is now correctly aligned
🏃
2:02:12Our spatial grid is now correctly aligned
🏃
2:02:12Our spatial grid is now correctly aligned
🏃
2:02:45Remove the Z loop from ComputeWalkTable(), respecifying GetOctantFor() as GetQuadrantFor()
2:02:45Remove the Z loop from ComputeWalkTable(), respecifying GetOctantFor() as GetQuadrantFor()
2:02:45Remove the Z loop from ComputeWalkTable(), respecifying GetOctantFor() as GetQuadrantFor()
2:10:18Hit our assertion in GetQuadrantFor()
🏃
2:10:18Hit our assertion in GetQuadrantFor()
🏃
2:10:18Hit our assertion in GetQuadrantFor()
🏃
2:11:16Make FullCast() zero out the Remainder.z
2:11:16Make FullCast() zero out the Remainder.z
2:11:16Make FullCast() zero out the Remainder.z
2:11:47Our quadrant table should be being computed correctly
🏃
2:11:47Our quadrant table should be being computed correctly
🏃
2:11:47Our quadrant table should be being computed correctly
🏃
2:13:57Step through FullCast() watching that HalfAtlasIndex.z remains 0
🏃
2:13:57Step through FullCast() watching that HalfAtlasIndex.z remains 0
🏃
2:13:57Step through FullCast() watching that HalfAtlasIndex.z remains 0
🏃
2:16:01Determine to inspect the spatial partition
📖
2:16:01Determine to inspect the spatial partition
📖
2:16:01Determine to inspect the spatial partition
📖
2:17:04Disable light probe direction drawing in DebugDrawOctahedralValues()
2:17:04Disable light probe direction drawing in DebugDrawOctahedralValues()
2:17:04Disable light probe direction drawing in DebugDrawOctahedralValues()
2:17:33Check out our light probe boxes
🏃
2:17:33Check out our light probe boxes
🏃
2:17:33Check out our light probe boxes
🏃
2:17:44Try making DebugDrawOctahedralValues() draw all the light probes
2:17:44Try making DebugDrawOctahedralValues() draw all the light probes
2:17:44Try making DebugDrawOctahedralValues() draw all the light probes
2:17:58Check out our complete set of light probes
🏃
2:17:58Check out our complete set of light probes
🏃
2:17:58Check out our complete set of light probes
🏃
2:18:06Relieve UpdateAndRenderEntities() of drawing the colliders
2:18:06Relieve UpdateAndRenderEntities() of drawing the colliders
2:18:06Relieve UpdateAndRenderEntities() of drawing the colliders
2:18:15Check our set of debug visualisation
🏃
2:18:15Check our set of debug visualisation
🏃
2:18:15Check our set of debug visualisation
🏃
2:18:31Introduce DebugDrawSpatialGrid() for UpdateLighting() to call
2:18:31Introduce DebugDrawSpatialGrid() for UpdateLighting() to call
2:18:31Introduce DebugDrawSpatialGrid() for UpdateLighting() to call
2:21:34Check out our spatial grid, with eight probes per cell
🏃
2:21:34Check out our spatial grid, with eight probes per cell
🏃
2:21:34Check out our spatial grid, with eight probes per cell
🏃
2:23:02Make DebugDrawSpatialGrid() checkerboard the spatial grid colouring
2:23:02Make DebugDrawSpatialGrid() checkerboard the spatial grid colouring
2:23:02Make DebugDrawSpatialGrid() checkerboard the spatial grid colouring
2:24:27Check out our checkerboard spatial grid
🏃
2:24:27Check out our checkerboard spatial grid
🏃
2:24:27Check out our checkerboard spatial grid
🏃
2:24:38Make DebugDrawSpatialGrid() enlarge the cells slightly
2:24:38Make DebugDrawSpatialGrid() enlarge the cells slightly
2:24:38Make DebugDrawSpatialGrid() enlarge the cells slightly
2:25:43Check out our enlarged checkerboard spatial grid
🏃
2:25:43Check out our enlarged checkerboard spatial grid
🏃
2:25:43Check out our enlarged checkerboard spatial grid
🏃
2:26:10Fix DebugDrawSpatialGrid() to shrink the cells
2:26:10Fix DebugDrawSpatialGrid() to shrink the cells
2:26:10Fix DebugDrawSpatialGrid() to shrink the cells
2:26:22Check out our shrunken checkerboard spatial grid
🏃
2:26:22Check out our shrunken checkerboard spatial grid
🏃
2:26:22Check out our shrunken checkerboard spatial grid
🏃
2:26:47Make DebugDrawSpatialGrid() draw the leaves
2:26:47Make DebugDrawSpatialGrid() draw the leaves
2:26:47Make DebugDrawSpatialGrid() draw the leaves
2:32:36Try to view our spatial grid leaves
🏃
2:32:36Try to view our spatial grid leaves
🏃
2:32:36Try to view our spatial grid leaves
🏃
2:32:46Prevent DebugDrawSpatialGrid() from drawing the cell boundaries
2:32:46Prevent DebugDrawSpatialGrid() from drawing the cell boundaries
2:32:46Prevent DebugDrawSpatialGrid() from drawing the cell boundaries
2:33:13Our spatial grid contains no leaves
🏃
2:33:13Our spatial grid contains no leaves
🏃
2:33:13Our spatial grid contains no leaves
🏃
2:33:19Scour GridBuildSpatialPartition() for bugs
📖
2:33:19Scour GridBuildSpatialPartition() for bugs
📖
2:33:19Scour GridBuildSpatialPartition() for bugs
📖
2:34:26Fix GridBuildSpatialPartition() to retain Z in the ClippingRegion
2:34:26Fix GridBuildSpatialPartition() to retain Z in the ClippingRegion
2:34:26Fix GridBuildSpatialPartition() to retain Z in the ClippingRegion
2:34:59Our spatial grid still contains no leaves
🏃
2:34:59Our spatial grid still contains no leaves
🏃
2:34:59Our spatial grid still contains no leaves
🏃
2:35:20Scour GridBuildSpatialPartition() for bugs (cont.)
📖
2:35:20Scour GridBuildSpatialPartition() for bugs (cont.)
📖
2:35:20Scour GridBuildSpatialPartition() for bugs (cont.)
📖
2:36:14Assert(Z == 0) in GridBuildSpatialPartition()
2:36:14Assert(Z == 0) in GridBuildSpatialPartition()
2:36:14Assert(Z == 0) in GridBuildSpatialPartition()
2:36:31Scour GridBuildSpatialPartition() for bugs (cont.)
📖
2:36:31Scour GridBuildSpatialPartition() for bugs (cont.)
📖
2:36:31Scour GridBuildSpatialPartition() for bugs (cont.)
📖
2:37:04Fix GridBuildSpatialPartition() to not consider Z as part of the apron
2:37:04Fix GridBuildSpatialPartition() to not consider Z as part of the apron
2:37:04Fix GridBuildSpatialPartition() to not consider Z as part of the apron
2:37:33Hit our "overflow" assertion in PushQuad()
🏃
2:37:33Hit our "overflow" assertion in PushQuad()
🏃
2:37:33Hit our "overflow" assertion in PushQuad()
🏃
2:37:45Toggle off DebugDrawOctahedralValues() in UpdateLighting()
2:37:45Toggle off DebugDrawOctahedralValues() in UpdateLighting()
2:37:45Toggle off DebugDrawOctahedralValues() in UpdateLighting()
2:38:12Check out the spatial partition leaves of our lit world
🏃
2:38:12Check out the spatial partition leaves of our lit world
🏃
2:38:12Check out the spatial partition leaves of our lit world
🏃
2:41:53Check GridRayCast() for the source of light emission
📖
2:41:53Check GridRayCast() for the source of light emission
📖
2:41:53Check GridRayCast() for the source of light emission
📖
2:43:20Leave a TODO to handle light probes inside a light source
2:43:20Leave a TODO to handle light probes inside a light source
2:43:20Leave a TODO to handle light probes inside a light source
2:44:26Try to make sense of the tangled mess of spatial partition leaves
🏃
2:44:26Try to make sense of the tangled mess of spatial partition leaves
🏃
2:44:26Try to make sense of the tangled mess of spatial partition leaves
🏃
2:45:41Toggle off DebugDrawSpatialGrid() in UpdateLighting()
2:45:41Toggle off DebugDrawSpatialGrid() in UpdateLighting()
2:45:41Toggle off DebugDrawSpatialGrid() in UpdateLighting()
2:46:00Check out the world's lighting, at 16ms per frame
🏃
2:46:00Check out the world's lighting, at 16ms per frame
🏃
2:46:00Check out the world's lighting, at 16ms per frame
🏃
2:47:18Increase tUpdateBlend from 1/60 to 30/60 in UpdateLighting()
2:47:18Increase tUpdateBlend from 1/60 to 30/60 in UpdateLighting()
2:47:18Increase tUpdateBlend from 1/60 to 30/60 in UpdateLighting()
2:47:30Our lighting flickers
🏃
2:47:30Our lighting flickers
🏃
2:47:30Our lighting flickers
🏃
2:48:15Decrease tUpdateBlend from 30/60 to 15/60 in UpdateLighting()
2:48:15Decrease tUpdateBlend from 30/60 to 15/60 in UpdateLighting()
2:48:15Decrease tUpdateBlend from 30/60 to 15/60 in UpdateLighting()
2:48:27Our lighting still flickers
🏃
2:48:27Our lighting still flickers
🏃
2:48:27Our lighting still flickers
🏃
2:48:41Decrease tUpdateBlend from 15/60 to 5/60 in UpdateLighting()
2:48:41Decrease tUpdateBlend from 15/60 to 5/60 in UpdateLighting()
2:48:41Decrease tUpdateBlend from 15/60 to 5/60 in UpdateLighting()
2:49:03Our lighting flicker may be eliminated by casting four times as many rays
🏃
2:49:03Our lighting flicker may be eliminated by casting four times as many rays
🏃
2:49:03Our lighting flicker may be eliminated by casting four times as many rays
🏃
2:50:09Increase tUpdateBlend from 5/60 to 20/60 in UpdateLighting()
2:50:09Increase tUpdateBlend from 5/60 to 20/60 in UpdateLighting()
2:50:09Increase tUpdateBlend from 5/60 to 20/60 in UpdateLighting()
2:50:36Our shading rate is pretty responsive
🏃
2:50:36Our shading rate is pretty responsive
🏃
2:50:36Our shading rate is pretty responsive
🏃
2:51:32Reacquaint ourselves with GridRayCast()
📖
2:51:32Reacquaint ourselves with GridRayCast()
📖
2:51:32Reacquaint ourselves with GridRayCast()
📖
2:56:14Reacquaint ourselves with the entropy-based light sampling
📖
2:56:14Reacquaint ourselves with the entropy-based light sampling
📖
2:56:14Reacquaint ourselves with the entropy-based light sampling
📖
2:56:50Remove EntropyFrameCount and LightPointEntropy
2:56:50Remove EntropyFrameCount and LightPointEntropy
2:56:50Remove EntropyFrameCount and LightPointEntropy
2:57:51Reacquaint ourselves with the entropy-based light sampling (cont.)
📖
2:57:51Reacquaint ourselves with the entropy-based light sampling (cont.)
📖
2:57:51Reacquaint ourselves with the entropy-based light sampling (cont.)
📖
2:58:53Try making ComputeLightPropagationWork() increment the EntropyIndex by 1 (rather than 234987)
2:58:53Try making ComputeLightPropagationWork() increment the EntropyIndex by 1 (rather than 234987)
2:58:53Try making ComputeLightPropagationWork() increment the EntropyIndex by 1 (rather than 234987)
2:59:04Our lighting looks broadly similar
🏃
2:59:04Our lighting looks broadly similar
🏃
2:59:04Our lighting looks broadly similar
🏃
2:59:18Make FullCast() take EntopyIndex as a pointer so that it may increment it
2:59:18Make FullCast() take EntopyIndex as a pointer so that it may increment it
2:59:18Make FullCast() take EntopyIndex as a pointer so that it may increment it
3:00:32Our lighting looks the same
🏃
3:00:32Our lighting looks the same
🏃
3:00:32Our lighting looks the same
🏃
3:00:38Add a SampleBatch loop to FullCast() to perform the GridRayCast() code eight times
3:00:38Add a SampleBatch loop to FullCast() to perform the GridRayCast() code eight times
3:00:38Add a SampleBatch loop to FullCast() to perform the GridRayCast() code eight times
3:01:15Our lighting works, but is not as smooth as hoped
🏃
3:01:15Our lighting works, but is not as smooth as hoped
🏃
3:01:15Our lighting works, but is not as smooth as hoped
🏃
3:01:43Increase the SampleBatch loop from 8 to 16 in FullCast()
3:01:43Increase the SampleBatch loop from 8 to 16 in FullCast()
3:01:43Increase the SampleBatch loop from 8 to 16 in FullCast()
3:01:56Our lighting remains flickery
🏃
3:01:56Our lighting remains flickery
🏃
3:01:56Our lighting remains flickery
🏃
3:02:27Rethink how casting more rays may affect the smoothing
📖
3:02:27Rethink how casting more rays may affect the smoothing
📖
3:02:27Rethink how casting more rays may affect the smoothing
📖
3:03:14Check out our lighting flicker
🏃
3:03:14Check out our lighting flicker
🏃
3:03:14Check out our lighting flicker
🏃
3:04:20Remove the SampleBatch loop from FullCast()
3:04:20Remove the SampleBatch loop from FullCast()
3:04:20Remove the SampleBatch loop from FullCast()
3:04:34Add a SampleBatch loop to ComputeLightPropagationWork() to perform the FullCast() code sixteen times
3:04:34Add a SampleBatch loop to ComputeLightPropagationWork() to perform the FullCast() code sixteen times
3:04:34Add a SampleBatch loop to ComputeLightPropagationWork() to perform the FullCast() code sixteen times
3:05:17Our lighting remains flickery
🏃
3:05:17Our lighting remains flickery
🏃
3:05:17Our lighting remains flickery
🏃
3:05:23Increase the SampleBatch loop from 16 to 32 in ComputeLightPropagationWork()
3:05:23Increase the SampleBatch loop from 16 to 32 in ComputeLightPropagationWork()
3:05:23Increase the SampleBatch loop from 16 to 32 in ComputeLightPropagationWork()
3:05:41Our lighting remains flickery
🏃
3:05:41Our lighting remains flickery
🏃
3:05:41Our lighting remains flickery
🏃
3:05:50Decrease tUpdateBlend from 20/60 to 1/60 in UpdateLighting()
3:05:50Decrease tUpdateBlend from 20/60 to 1/60 in UpdateLighting()
3:05:50Decrease tUpdateBlend from 20/60 to 1/60 in UpdateLighting()
3:06:05We see other lighting issues
🏃
3:06:05We see other lighting issues
🏃
3:06:05We see other lighting issues
🏃
3:06:25Move the SampleBatch loop from ComputeLightPropagationWork() in to FullCast()
3:06:25Move the SampleBatch loop from ComputeLightPropagationWork() in to FullCast()
3:06:25Move the SampleBatch loop from ComputeLightPropagationWork() in to FullCast()
3:06:58Our performance is great, just with other lighting bugs to fix
🏃
3:06:58Our performance is great, just with other lighting bugs to fix
🏃
3:06:58Our performance is great, just with other lighting bugs to fix
🏃
3:07:43Plan to meticulously remove Z from the lighting
📖
3:07:43Plan to meticulously remove Z from the lighting
📖
3:07:43Plan to meticulously remove Z from the lighting
📖
3:10:17Consider lighting to be good enough, once debugged
🏃
3:10:17Consider lighting to be good enough, once debugged
🏃
3:10:17Consider lighting to be good enough, once debugged
🏃
3:10:56Decrease the SampleBatch loop from 32 to 16 in FullCast()
3:10:56Decrease the SampleBatch loop from 32 to 16 in FullCast()
3:10:56Decrease the SampleBatch loop from 32 to 16 in FullCast()
3:11:12~20ms per frame, and ~84% frame time on ComputeLightPropagationWork
🏃
3:11:12~20ms per frame, and ~84% frame time on ComputeLightPropagationWork
🏃
3:11:12~20ms per frame, and ~84% frame time on ComputeLightPropagationWork
🏃
3:11:42That's good enough for today, planning next time to clean up the spatial partition and intersect rays properly
🗩
3:11:42That's good enough for today, planning next time to clean up the spatial partition and intersect rays properly
🗩
3:11:42That's good enough for today, planning next time to clean up the spatial partition and intersect rays properly
🗩
3:13:01technicbeam Soon = before next Sunday?
🗪
3:13:01technicbeam Soon = before next Sunday?
🗪
3:13:01technicbeam Soon = before next Sunday?
🗪
3:13:07Thanks, everybody
🗩
3:13:07Thanks, everybody
🗩
3:13:07Thanks, everybody
🗩