Debugging Light Sampling Locations
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
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 and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

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:02Recap and set the stage for the day debugging our light contamination bug
🏃
0:02Recap and set the stage for the day debugging our light contamination bug
🏃
0:02Recap and set the stage for the day debugging our light contamination bug
🏃
2:16Describe ValidateTexelComponent()
📖
2:16Describe ValidateTexelComponent()
📖
2:16Describe ValidateTexelComponent()
📖
3:12Make ValidateTexelComponent() consider a component greater than or equal to 0 to be valid, enabling LIGHT_ATLAS_ASSERT
3:12Make ValidateTexelComponent() consider a component greater than or equal to 0 to be valid, enabling LIGHT_ATLAS_ASSERT
3:12Make ValidateTexelComponent() consider a component greater than or equal to 0 to be valid, enabling LIGHT_ATLAS_ASSERT
3:28Run without producing an invalid texel component
🏃
3:28Run without producing an invalid texel component
🏃
3:28Run without producing an invalid texel component
🏃
4:06Make ValidateTexelComponent() consider a component of between 0 and 100 to be valid
4:06Make ValidateTexelComponent() consider a component of between 0 and 100 to be valid
4:06Make ValidateTexelComponent() consider a component of between 0 and 100 to be valid
4:21Run without producing an invalid texel component
🏃
4:21Run without producing an invalid texel component
🏃
4:21Run without producing an invalid texel component
🏃
4:58Force ValidateTexelComponent() to consider all components to be invalid
4:58Force ValidateTexelComponent() to consider all components to be invalid
4:58Force ValidateTexelComponent() to consider all components to be invalid
5:05Trap on SetLightAtlasTexels(), proving that ValidateTexelComponent() is being called
🏃
5:05Trap on SetLightAtlasTexels(), proving that ValidateTexelComponent() is being called
🏃
5:05Trap on SetLightAtlasTexels(), proving that ValidateTexelComponent() is being called
🏃
5:17Revert ValidateTexelComponent() to validate normally
5:17Revert ValidateTexelComponent() to validate normally
5:17Revert ValidateTexelComponent() to validate normally
5:22Traverse the orphanage and never produce an invalid texel component
🏃
5:22Traverse the orphanage and never produce an invalid texel component
🏃
5:22Traverse the orphanage and never produce an invalid texel component
🏃
6:04Restrict ValidateTexelComponent() to consider a component of between 0 and 10 to be valid
6:04Restrict ValidateTexelComponent() to consider a component of between 0 and 10 to be valid
6:04Restrict ValidateTexelComponent() to consider a component of between 0 and 10 to be valid
6:15Run without producing an invalid texel component
🏃
6:15Run without producing an invalid texel component
🏃
6:15Run without producing an invalid texel component
🏃
6:24Restrict ValidateTexelComponent() to consider a component of between 0 and 1 to be valid
6:24Restrict ValidateTexelComponent() to consider a component of between 0 and 1 to be valid
6:24Restrict ValidateTexelComponent() to consider a component of between 0 and 1 to be valid
6:42Trap on PushLight() in an -O2 build
🏃
6:42Trap on PushLight() in an -O2 build
🏃
6:42Trap on PushLight() in an -O2 build
🏃
6:53Trap on VALIDATE_TEXEL() within PushLight() in an -Od build
🏃
6:53Trap on VALIDATE_TEXEL() within PushLight() in an -Od build
🏃
6:53Trap on VALIDATE_TEXEL() within PushLight() in an -Od build
🏃
7:25Expand ValidateTexelComponent() to consider a component of between 0 and 5 to be valid
7:25Expand ValidateTexelComponent() to consider a component of between 0 and 5 to be valid
7:25Expand ValidateTexelComponent() to consider a component of between 0 and 5 to be valid
7:43Trap on VALIDATE_TEXEL() within PushLight(), and inspect the Emission
🏃
7:43Trap on VALIDATE_TEXEL() within PushLight(), and inspect the Emission
🏃
7:43Trap on VALIDATE_TEXEL() within PushLight(), and inspect the Emission
🏃
8:12Reacquaint ourselves with StandardLightingPattern() and AddPieceLight()
📖
8:12Reacquaint ourselves with StandardLightingPattern() and AddPieceLight()
📖
8:12Reacquaint ourselves with StandardLightingPattern() and AddPieceLight()
📖
10:11Restrict ValidateTexelComponent() to consider a component of between 0 and 1.1 to be valid
10:11Restrict ValidateTexelComponent() to consider a component of between 0 and 1.1 to be valid
10:11Restrict ValidateTexelComponent() to consider a component of between 0 and 1.1 to be valid
10:25Trap on VALIDATE_TEXEL() within PushLight()
🏃
10:25Trap on VALIDATE_TEXEL() within PushLight()
🏃
10:25Trap on VALIDATE_TEXEL() within PushLight()
🏃
10:34Make StandardLightingPattern() reduce the Emission value passed to AddPieceLight() from 10 to 1
10:34Make StandardLightingPattern() reduce the Emission value passed to AddPieceLight() from 10 to 1
10:34Make StandardLightingPattern() reduce the Emission value passed to AddPieceLight() from 10 to 1
10:45Run without trapping
🏃
10:45Run without trapping
🏃
10:45Run without trapping
🏃
10:57Run an -O2 build without trapping for a while, before trapping on PushLight() in UpdateAndRenderEntities()
🏃
10:57Run an -O2 build without trapping for a while, before trapping on PushLight() in UpdateAndRenderEntities()
🏃
10:57Run an -O2 build without trapping for a while, before trapping on PushLight() in UpdateAndRenderEntities()
🏃
12:26Revert StandardLightingPattern() to pass an Emission value of 10 to AddPieceLight()
12:26Revert StandardLightingPattern() to pass an Emission value of 10 to AddPieceLight()
12:26Revert StandardLightingPattern() to pass an Emission value of 10 to AddPieceLight()
12:38Trap on VALIDATE_TEXEL() within PushLight()
🏃
12:38Trap on VALIDATE_TEXEL() within PushLight()
🏃
12:38Trap on VALIDATE_TEXEL() within PushLight()
🏃
12:48Expand ValidateTexelComponent() to consider a component of between 0 and 10 to be valid
12:48Expand ValidateTexelComponent() to consider a component of between 0 and 10 to be valid
12:48Expand ValidateTexelComponent() to consider a component of between 0 and 10 to be valid
12:54Consider the possibility of this being an artifact of the way our system convects light
🏃
12:54Consider the possibility of this being an artifact of the way our system convects light
🏃
12:54Consider the possibility of this being an artifact of the way our system convects light
🏃
13:44Questions of our lighting system: 1. Why do our lights have falloff? It's the inverse-square law, as an artifact of sampling
🏃
13:44Questions of our lighting system: 1. Why do our lights have falloff? It's the inverse-square law, as an artifact of sampling
🏃
13:44Questions of our lighting system: 1. Why do our lights have falloff? It's the inverse-square law, as an artifact of sampling
🏃
15:19Questions of our lighting system: 2. Why do we have over-brighting?
🏃
15:19Questions of our lighting system: 2. Why do we have over-brighting?
🏃
15:19Questions of our lighting system: 2. Why do we have over-brighting?
🏃
16:04Let GridRayCast() walk the grid all the way to the SPATIAL_GRID_NODE_TERMINATOR
16:04Let GridRayCast() walk the grid all the way to the SPATIAL_GRID_NODE_TERMINATOR
16:04Let GridRayCast() walk the grid all the way to the SPATIAL_GRID_NODE_TERMINATOR
17:10We still get over-brighting
🏃
17:10We still get over-brighting
🏃
17:10We still get over-brighting
🏃
17:38Make GridRayCast() walk the grid only eight steps, and zero out the HitRefColor if it gets that far
17:38Make GridRayCast() walk the grid only eight steps, and zero out the HitRefColor if it gets that far
17:38Make GridRayCast() walk the grid only eight steps, and zero out the HitRefColor if it gets that far
18:24We no longer get over-brighting indoors, but we do in some exteriors
🏃
18:24We no longer get over-brighting indoors, but we do in some exteriors
🏃
18:24We no longer get over-brighting indoors, but we do in some exteriors
🏃
20:24Make DebugDrawSpatialGrid() draw the occluders, and toggle on the call to it in UpdateLighting()
20:24Make DebugDrawSpatialGrid() draw the occluders, and toggle on the call to it in UpdateLighting()
20:24Make DebugDrawSpatialGrid() draw the occluders, and toggle on the call to it in UpdateLighting()
20:56Over-brighting outdoors is affected by the player's position
🏃
20:56Over-brighting outdoors is affected by the player's position
🏃
20:56Over-brighting outdoors is affected by the player's position
🏃
27:25Toggle on DebugDrawOctahedralValues() and off DebugDrawSpatialGrid() in UpdateLighting()
27:25Toggle on DebugDrawOctahedralValues() and off DebugDrawSpatialGrid() in UpdateLighting()
27:25Toggle on DebugDrawOctahedralValues() and off DebugDrawSpatialGrid() in UpdateLighting()
28:04The interior lighting gets tinted green when the lighting bounds do not encompass the exterior wall
🏃
28:04The interior lighting gets tinted green when the lighting bounds do not encompass the exterior wall
🏃
28:04The interior lighting gets tinted green when the lighting bounds do not encompass the exterior wall
🏃
29:59Make StandardLightingPattern() colour the lights a non-random pure grey
29:59Make StandardLightingPattern() colour the lights a non-random pure grey
29:59Make StandardLightingPattern() colour the lights a non-random pure grey
30:23The interior lighting no longer gets tinted green
🏃
30:23The interior lighting no longer gets tinted green
🏃
30:23The interior lighting no longer gets tinted green
🏃
31:13We no longer get over-brighting outdoors
🏃
31:13We no longer get over-brighting outdoors
🏃
31:13We no longer get over-brighting outdoors
🏃
32:15Make StandardLightingPattern() colour the lights a more powerful grey
32:15Make StandardLightingPattern() colour the lights a more powerful grey
32:15Make StandardLightingPattern() colour the lights a more powerful grey
32:29We do get our over-brighting bug again
🏃
32:29We do get our over-brighting bug again
🏃
32:29We do get our over-brighting bug again
🏃
33:11Remove cruft from GridRayCast()
33:11Remove cruft from GridRayCast()
33:11Remove cruft from GridRayCast()
34:55Investigate why the light only leaks on the quarters
📖
34:55Investigate why the light only leaks on the quarters
📖
34:55Investigate why the light only leaks on the quarters
📖
36:47Begin to illustrate our leaking case
🏃
36:47Begin to illustrate our leaking case
🏃
36:47Begin to illustrate our leaking case
🏃
37:20Plug the Qualcomm Keynote from CES 20131
📖
37:20Plug the Qualcomm Keynote from CES 20131
📖
37:20Plug the Qualcomm Keynote from CES 20131
📖
42:23Light leaking clues: 1. Exterior light probes beyond the wall unexpectedly pick up light
🏃
42:23Light leaking clues: 1. Exterior light probes beyond the wall unexpectedly pick up light
🏃
42:23Light leaking clues: 1. Exterior light probes beyond the wall unexpectedly pick up light
🏃
45:18Light leaking clues: 2. Enclosed light probes can suddenly pick up light
🏃
45:18Light leaking clues: 2. Enclosed light probes can suddenly pick up light
🏃
45:18Light leaking clues: 2. Enclosed light probes can suddenly pick up light
🏃
46:20Plan our light leak investigations
🏃
46:20Plan our light leak investigations
🏃
46:20Plan our light leak investigations
🏃
51:21felkcraft I don't know how that code works, but I see an x value be used for y variable called somethingY
🗪
51:21felkcraft I don't know how that code works, but I see an x value be used for y variable called somethingY
🗪
51:21felkcraft I don't know how that code works, but I see an x value be used for y variable called somethingY
🗪
53:06Reorient SteppingDeltaX as a negative offset in GridRayCast()
53:06Reorient SteppingDeltaX as a negative offset in GridRayCast()
53:06Reorient SteppingDeltaX as a negative offset in GridRayCast()
54:49justslavic Shouldn't there be a minus sign somewhere then?
🗪
54:49justslavic Shouldn't there be a minus sign somewhere then?
🗪
54:49justslavic Shouldn't there be a minus sign somewhere then?
🗪
55:16Take a close look at our enclosed light probes suddenly picking up light
🏃
55:16Take a close look at our enclosed light probes suddenly picking up light
🏃
55:16Take a close look at our enclosed light probes suddenly picking up light
🏃
58:31Find the Owl
🗹
58:31Find the Owl
🗹
58:31Find the Owl
🗹
59:12Owl of Shame Parade
🦉
59:12Owl of Shame Parade
🦉
59:12Owl of Shame Parade
🦉
1:01:04Light leaks below the world
🏃
1:01:04Light leaks below the world
🏃
1:01:04Light leaks below the world
🏃
1:03:29Reacquaint ourselves with GenerateApron()
📖
1:03:29Reacquaint ourselves with GenerateApron()
📖
1:03:29Reacquaint ourselves with GenerateApron()
📖
1:05:35tk_dev Somewhere else Microsoft is receiving packages full of owls, but they don't know what they're for
🗪
1:05:35tk_dev Somewhere else Microsoft is receiving packages full of owls, but they don't know what they're for
🗪
1:05:35tk_dev Somewhere else Microsoft is receiving packages full of owls, but they don't know what they're for
🗪
1:05:43Recommend Microsoft to build a giant Owl of Shame on their new campus2
📖
1:05:43Recommend Microsoft to build a giant Owl of Shame on their new campus2
📖
1:05:43Recommend Microsoft to build a giant Owl of Shame on their new campus2
📖
1:06:32dedknd They have the same bug
🗪
1:06:32dedknd They have the same bug
🗪
1:06:32dedknd They have the same bug
🗪
1:06:44Recommend Microsoft to put the Owl of Shame on a rotating base3
📖
1:06:44Recommend Microsoft to put the Owl of Shame on a rotating base3
📖
1:06:44Recommend Microsoft to put the Owl of Shame on a rotating base3
📖
1:07:45Consider whether to enclose the world with floors or clamp the light ray cast's movement in Z
📖
1:07:45Consider whether to enclose the world with floors or clamp the light ray cast's movement in Z
📖
1:07:45Consider whether to enclose the world with floors or clamp the light ray cast's movement in Z
📖
1:11:27Why not clamp the light ray cast's movement in Z
🏃
1:11:27Why not clamp the light ray cast's movement in Z
🏃
1:11:27Why not clamp the light ray cast's movement in Z
🏃
1:12:48Start to make GenerateApron() always generate ground cover
1:12:48Start to make GenerateApron() always generate ground cover
1:12:48Start to make GenerateApron() always generate ground cover
1:15:20Note the uneven ground outside generated rooms
🏃
1:15:20Note the uneven ground outside generated rooms
🏃
1:15:20Note the uneven ground outside generated rooms
🏃
1:15:45Make GenerateApron() reduce the vertical placement of overlapping entities by 1
1:15:45Make GenerateApron() reduce the vertical placement of overlapping entities by 1
1:15:45Make GenerateApron() reduce the vertical placement of overlapping entities by 1
1:16:21Light no longer leaks below the world
🏃
1:16:21Light no longer leaks below the world
🏃
1:16:21Light no longer leaks below the world
🏃
1:17:26Make GenerateApron() also reduce the vertical placement of overlapping entities besides trees
1:17:26Make GenerateApron() also reduce the vertical placement of overlapping entities besides trees
1:17:26Make GenerateApron() also reduce the vertical placement of overlapping entities besides trees
1:17:50The ground cover's vertical placement appears to be low
🏃
1:17:50The ground cover's vertical placement appears to be low
🏃
1:17:50The ground cover's vertical placement appears to be low
🏃
1:17:58Make GenerateApron() further decrease the vertical placement from 1 to 5
1:17:58Make GenerateApron() further decrease the vertical placement from 1 to 5
1:17:58Make GenerateApron() further decrease the vertical placement from 1 to 5
1:18:09The apron seems the same
🏃
1:18:09The apron seems the same
🏃
1:18:09The apron seems the same
🏃
1:18:19Make GenerateApron() further decrease the vertical placement from 5 to 10
1:18:19Make GenerateApron() further decrease the vertical placement from 5 to 10
1:18:19Make GenerateApron() further decrease the vertical placement from 5 to 10
1:18:55Nothing sticks out the bottom
🏃
1:18:55Nothing sticks out the bottom
🏃
1:18:55Nothing sticks out the bottom
🏃
1:19:22Put the P.z offsetting on its own line in GenerateApron() and build in -Od
1:19:22Put the P.z offsetting on its own line in GenerateApron() and build in -Od
1:19:22Put the P.z offsetting on its own line in GenerateApron() and build in -Od
1:19:39Break in to GenerateApron() and inspect its values
🏃
1:19:39Break in to GenerateApron() and inspect its values
🏃
1:19:39Break in to GenerateApron() and inspect its values
🏃
1:23:03Move the P.z offsetting below the Vol initialisation line in GenerateApron()
1:23:03Move the P.z offsetting below the Vol initialisation line in GenerateApron()
1:23:03Move the P.z offsetting below the Vol initialisation line in GenerateApron()
1:23:31Build in -O2
1:23:31Build in -O2
1:23:31Build in -O2
1:23:49fayyden Is everything overlapped?
🗪
1:23:49fayyden Is everything overlapped?
🗪
1:23:49fayyden Is everything overlapped?
🗪
1:23:57Overlapped entities now below the spatial partition
🏃
1:23:57Overlapped entities now below the spatial partition
🏃
1:23:57Overlapped entities now below the spatial partition
🏃
1:24:13Make GenerateApron() decrease the vertical placement less from 10 to 2
1:24:13Make GenerateApron() decrease the vertical placement less from 10 to 2
1:24:13Make GenerateApron() decrease the vertical placement less from 10 to 2
1:24:24Overlapped entities are back
🏃
1:24:24Overlapped entities are back
🏃
1:24:24Overlapped entities are back
🏃
1:24:46Overflow our entity count in EnsureRegionIsUnpacked()
🏃
1:24:46Overflow our entity count in EnsureRegionIsUnpacked()
🏃
1:24:46Overflow our entity count in EnsureRegionIsUnpacked()
🏃
1:25:13Temporarily increase MAX_SIM_REGION_ENTITY_COUNT from 2*8192 to 4*8192
1:25:13Temporarily increase MAX_SIM_REGION_ENTITY_COUNT from 2*8192 to 4*8192
1:25:13Temporarily increase MAX_SIM_REGION_ENTITY_COUNT from 2*8192 to 4*8192
1:26:29We report non-overlapped entities as overlapped
🏃
1:26:29We report non-overlapped entities as overlapped
🏃
1:26:29We report non-overlapped entities as overlapped
🏃
1:27:04Revert MAX_SIM_REGION_ENTITY_COUNT to 2*8192, and remove the overlapped entity offsetting in GenerateApron()
1:27:04Revert MAX_SIM_REGION_ENTITY_COUNT to 2*8192, and remove the overlapped entity offsetting in GenerateApron()
1:27:04Revert MAX_SIM_REGION_ENTITY_COUNT to 2*8192, and remove the overlapped entity offsetting in GenerateApron()
1:27:23Scour OverlappingEntitiesExist() and GenerateApron() for bugs
📖
1:27:23Scour OverlappingEntitiesExist() and GenerateApron() for bugs
📖
1:27:23Scour OverlappingEntitiesExist() and GenerateApron() for bugs
📖
1:29:07Toggle on collision volume drawing in UpdateAndRenderEntities()
1:29:07Toggle on collision volume drawing in UpdateAndRenderEntities()
1:29:07Toggle on collision volume drawing in UpdateAndRenderEntities()
1:29:40Our room boundaries are wrong
🏃
1:29:40Our room boundaries are wrong
🏃
1:29:40Our room boundaries are wrong
🏃
1:30:24Make GenRoomVolume() offset the dimensions down by half
1:30:24Make GenRoomVolume() offset the dimensions down by half
1:30:24Make GenRoomVolume() offset the dimensions down by half
1:31:58Our room boundaries remain wrong
🏃
1:31:58Our room boundaries remain wrong
🏃
1:31:58Our room boundaries remain wrong
🏃
1:32:39Fix GenRoomVolume() to offset the dimensions down by half a TileDim
1:32:39Fix GenRoomVolume() to offset the dimensions down by half a TileDim
1:32:39Fix GenRoomVolume() to offset the dimensions down by half a TileDim
1:33:33Our rooms are now correctly aligned
🏃
1:33:33Our rooms are now correctly aligned
🏃
1:33:33Our rooms are now correctly aligned
🏃
1:33:56Our light still leaks
🏃
1:33:56Our light still leaks
🏃
1:33:56Our light still leaks
🏃
1:35:12Reacquaint ourselves with the occluder generation code
📖
1:35:12Reacquaint ourselves with the occluder generation code
📖
1:35:12Reacquaint ourselves with the occluder generation code
📖
1:39:56Provoke the position-dependent interior light leak bug
🏃
1:39:56Provoke the position-dependent interior light leak bug
🏃
1:39:56Provoke the position-dependent interior light leak bug
🏃
1:40:20Make GenerateApron() call AddPieceOccluder() to generate a ceiling for each tile
1:40:20Make GenerateApron() call AddPieceOccluder() to generate a ceiling for each tile
1:40:20Make GenerateApron() call AddPieceOccluder() to generate a ceiling for each tile
1:44:46Traverse the orphanage
🏃
1:44:46Traverse the orphanage
🏃
1:44:46Traverse the orphanage
🏃
1:45:04Toggle off collision volume drawing in UpdateAndRenderEntities()
1:45:04Toggle off collision volume drawing in UpdateAndRenderEntities()
1:45:04Toggle off collision volume drawing in UpdateAndRenderEntities()
1:45:17Successfully provoke the position-dependent interior light leak bug
🏃
1:45:17Successfully provoke the position-dependent interior light leak bug
🏃
1:45:17Successfully provoke the position-dependent interior light leak bug
🏃
1:45:37Toggle on DebugDrawSpatialGrid() and off DebugDrawOctahedralValues() in UpdateLighting()
1:45:37Toggle on DebugDrawSpatialGrid() and off DebugDrawOctahedralValues() in UpdateLighting()
1:45:37Toggle on DebugDrawSpatialGrid() and off DebugDrawOctahedralValues() in UpdateLighting()
1:46:16With floors and ceilings, our enclosed light probes correctly no longer pick up light
🏃
1:46:16With floors and ceilings, our enclosed light probes correctly no longer pick up light
🏃
1:46:16With floors and ceilings, our enclosed light probes correctly no longer pick up light
🏃
1:51:38Make GenerateRoom() generate a ceiling light indoors
1:51:38Make GenerateRoom() generate a ceiling light indoors
1:51:38Make GenerateRoom() generate a ceiling light indoors
1:52:57Provoke the position-dependent interior light leak bug
🏃
1:52:57Provoke the position-dependent interior light leak bug
🏃
1:52:57Provoke the position-dependent interior light leak bug
🏃
1:54:53Disable StandardLightingPattern()
1:54:53Disable StandardLightingPattern()
1:54:53Disable StandardLightingPattern()
1:55:51The exterior area gets light from its ceiling tiles, but the interior does not
🏃
1:55:51The exterior area gets light from its ceiling tiles, but the interior does not
🏃
1:55:51The exterior area gets light from its ceiling tiles, but the interior does not
🏃
1:56:42Fix GenerateRoom() to generate the ceiling light outdoors, and the ceiling occluder indoors
1:56:42Fix GenerateRoom() to generate the ceiling light outdoors, and the ceiling occluder indoors
1:56:42Fix GenerateRoom() to generate the ceiling light outdoors, and the ceiling occluder indoors
1:57:40The interior now gets light
🏃
1:57:40The interior now gets light
🏃
1:57:40The interior now gets light
🏃
1:59:15Re-enable overhead light placement StandardLightingPattern()
1:59:15Re-enable overhead light placement StandardLightingPattern()
1:59:15Re-enable overhead light placement StandardLightingPattern()
1:59:46Briefly run the game
🏃
1:59:46Briefly run the game
🏃
1:59:46Briefly run the game
🏃
1:59:51Toggle off DebugDrawSpatialGrid() in UpdateLighting()
1:59:51Toggle off DebugDrawSpatialGrid() in UpdateLighting()
1:59:51Toggle off DebugDrawSpatialGrid() in UpdateLighting()
2:00:06Admire the lighting where it isn't buggy
🏃
2:00:06Admire the lighting where it isn't buggy
🏃
2:00:06Admire the lighting where it isn't buggy
🏃
2:02:41alphalionmale What graphics engine are you using?
🗪
2:02:41alphalionmale What graphics engine are you using?
🗪
2:02:41alphalionmale What graphics engine are you using?
🗪
2:03:02The apron is not sealed
🏃
2:03:02The apron is not sealed
🏃
2:03:02The apron is not sealed
🏃
2:03:46teamrandb You could blame younger you
🗪
2:03:46teamrandb You could blame younger you
🗪
2:03:46teamrandb You could blame younger you
🗪
2:04:33Wonder if the unsealed apron affects our light bleed bug
🏃
2:04:33Wonder if the unsealed apron affects our light bleed bug
🏃
2:04:33Wonder if the unsealed apron affects our light bleed bug
🏃
2:05:10alphalionmale Are trees 2D?
🗪
2:05:10alphalionmale Are trees 2D?
🗪
2:05:10alphalionmale Are trees 2D?
🗪
2:06:31Ponder our position-dependent light feedback bug
🏃
2:06:31Ponder our position-dependent light feedback bug
🏃
2:06:31Ponder our position-dependent light feedback bug
🏃
2:07:35salaryboi New here, do you plan on making a full game to play or just focusing on the engine?
🗪
2:07:35salaryboi New here, do you plan on making a full game to play or just focusing on the engine?
🗪
2:07:35salaryboi New here, do you plan on making a full game to play or just focusing on the engine?
🗪
2:08:11Plug Jonathan Blow's stream4
2:08:11Plug Jonathan Blow's stream4
2:08:11Plug Jonathan Blow's stream4
2:08:33Provoke our position-dependent light bleed bug outdoors
🏃
2:08:33Provoke our position-dependent light bleed bug outdoors
🏃
2:08:33Provoke our position-dependent light bleed bug outdoors
🏃
2:09:10salaryboi It could be educational to watch someone learn game design
🗪
2:09:10salaryboi It could be educational to watch someone learn game design
🗪
2:09:10salaryboi It could be educational to watch someone learn game design
🗪
2:09:31Z cannot be implicated in the position-dependent light bleed bug indoors
🏃
2:09:31Z cannot be implicated in the position-dependent light bleed bug indoors
🏃
2:09:31Z cannot be implicated in the position-dependent light bleed bug indoors
🏃
2:12:01dieteetasse Can the ray escape through the door into nothingness?
🗪
2:12:01dieteetasse Can the ray escape through the door into nothingness?
🗪
2:12:01dieteetasse Can the ray escape through the door into nothingness?
🗪
2:13:43ablindorphan Is there any way to prevent the wrapping, so it can't sample from the wrapped region?
🗪
2:13:43ablindorphan Is there any way to prevent the wrapping, so it can't sample from the wrapped region?
🗪
2:13:43ablindorphan Is there any way to prevent the wrapping, so it can't sample from the wrapped region?
🗪
2:14:23felkcraft I don't understand how bypassing some light barriers would lead to the kind of positive feedback loop we're seeing in some places
🗪
2:14:23felkcraft I don't understand how bypassing some light barriers would lead to the kind of positive feedback loop we're seeing in some places
🗪
2:14:23felkcraft I don't understand how bypassing some light barriers would lead to the kind of positive feedback loop we're seeing in some places
🗪
2:14:35The enclosed light bug is back
🏃
2:14:35The enclosed light bug is back
🏃
2:14:35The enclosed light bug is back
🏃
2:14:57The inverse-square law applies when hitting a light, but not when sampling indirect light. Is that wrong?
🏃
2:14:57The inverse-square law applies when hitting a light, but not when sampling indirect light. Is that wrong?
🏃
2:14:57The inverse-square law applies when hitting a light, but not when sampling indirect light. Is that wrong?
🏃
2:16:16Make GridRayCast() zero out the HitEmission upon walking the distance
2:16:16Make GridRayCast() zero out the HitEmission upon walking the distance
2:16:16Make GridRayCast() zero out the HitEmission upon walking the distance
2:16:48Walls are oddly lit on every other shift of the lighting voxel
🏃
2:16:48Walls are oddly lit on every other shift of the lighting voxel
🏃
2:16:48Walls are oddly lit on every other shift of the lighting voxel
🏃
2:17:58ablindorphan Does this happen with pure white / pure red lights?
🗪
2:17:58ablindorphan Does this happen with pure white / pure red lights?
🗪
2:17:58ablindorphan Does this happen with pure white / pure red lights?
🗪
2:18:12Make StandardLightingPattern() colour the interior light pure [5, 5, 5] white
2:18:12Make StandardLightingPattern() colour the interior light pure [5, 5, 5] white
2:18:12Make StandardLightingPattern() colour the interior light pure [5, 5, 5] white
2:18:21The position-dependent interior light leak bug is gone
🏃
2:18:21The position-dependent interior light leak bug is gone
🏃
2:18:21The position-dependent interior light leak bug is gone
🏃
2:18:41Make StandardLightingPattern() colour the interior light a brighter [7, 7, 7] white
2:18:41Make StandardLightingPattern() colour the interior light a brighter [7, 7, 7] white
2:18:41Make StandardLightingPattern() colour the interior light a brighter [7, 7, 7] white
2:18:58The position-dependent interior light leak bug is back
🏃
2:18:58The position-dependent interior light leak bug is back
🏃
2:18:58The position-dependent interior light leak bug is back
🏃
2:19:07Make StandardLightingPattern() colour the interior light a dimmer [6, 6, 6] white
2:19:07Make StandardLightingPattern() colour the interior light a dimmer [6, 6, 6] white
2:19:07Make StandardLightingPattern() colour the interior light a dimmer [6, 6, 6] white
2:19:21The position-dependent interior light leak bug remains
🏃
2:19:21The position-dependent interior light leak bug remains
🏃
2:19:21The position-dependent interior light leak bug remains
🏃
2:19:45Make StandardLightingPattern() colour the interior light a dimmer [5, 5, 5] white
2:19:45Make StandardLightingPattern() colour the interior light a dimmer [5, 5, 5] white
2:19:45Make StandardLightingPattern() colour the interior light a dimmer [5, 5, 5] white
2:19:58The position-dependent interior light leak bug is gone
🏃
2:19:58The position-dependent interior light leak bug is gone
🏃
2:19:58The position-dependent interior light leak bug is gone
🏃
2:21:26Consider the value sensitivity of our position-dependent light leak bug
🏃
2:21:26Consider the value sensitivity of our position-dependent light leak bug
🏃
2:21:26Consider the value sensitivity of our position-dependent light leak bug
🏃
2:22:19spotnag Why is the light bottom-left in that room brighter than the others?
🗪
2:22:19spotnag Why is the light bottom-left in that room brighter than the others?
🗪
2:22:19spotnag Why is the light bottom-left in that room brighter than the others?
🗪
2:23:39Inspect the ray casting on the brighter bottom-left tile
🏃
2:23:39Inspect the ray casting on the brighter bottom-left tile
🏃
2:23:39Inspect the ray casting on the brighter bottom-left tile
🏃
2:26:21felkcraft The light source box looks bigger than one tile, like it's 1.0 and not "tile sized"
🗪
2:26:21felkcraft The light source box looks bigger than one tile, like it's 1.0 and not "tile sized"
🗪
2:26:21felkcraft The light source box looks bigger than one tile, like it's 1.0 and not "tile sized"
🗪
2:26:52Toggle on drawing of the lights in UpdateAndRenderEntities()
2:26:52Toggle on drawing of the lights in UpdateAndRenderEntities()
2:26:52Toggle on drawing of the lights in UpdateAndRenderEntities()
2:27:07Check out our lights
🏃
2:27:07Check out our lights
🏃
2:27:07Check out our lights
🏃
2:27:26Make UpdateAndRenderEntities() draw the lights at their correct size
2:27:26Make UpdateAndRenderEntities() draw the lights at their correct size
2:27:26Make UpdateAndRenderEntities() draw the lights at their correct size
2:29:08Check out our lights
🏃
2:29:08Check out our lights
🏃
2:29:08Check out our lights
🏃
2:30:00spacenaming There was a TODO in CalcBasePForOffset that said it still needed to be implemented
🗪
2:30:00spacenaming There was a TODO in CalcBasePForOffset that said it still needed to be implemented
🗪
2:30:00spacenaming There was a TODO in CalcBasePForOffset that said it still needed to be implemented
🗪
2:30:10spotnag The brighter one is closer to other lights that are behind walls. Could it be that the walls are not stopping it picking up light? So it has itself plus the other two next to it the other side of the walls?
🗪
2:30:10spotnag The brighter one is closer to other lights that are behind walls. Could it be that the walls are not stopping it picking up light? So it has itself plus the other two next to it the other side of the walls?
🗪
2:30:10spotnag The brighter one is closer to other lights that are behind walls. Could it be that the walls are not stopping it picking up light? So it has itself plus the other two next to it the other side of the walls?
🗪
2:31:31CalcBasePForOffset() doesn't matter
📖
2:31:31CalcBasePForOffset() doesn't matter
📖
2:31:31CalcBasePForOffset() doesn't matter
📖
2:32:11We have position-dependent brightening in the non-traversable outdoors
🏃
2:32:11We have position-dependent brightening in the non-traversable outdoors
🏃
2:32:11We have position-dependent brightening in the non-traversable outdoors
🏃
2:36:03Scour GridRayCast() for the ramifications of hitting tTerminate and zeroing HitRefColor
📖
2:36:03Scour GridRayCast() for the ramifications of hitting tTerminate and zeroing HitRefColor
📖
2:36:03Scour GridRayCast() for the ramifications of hitting tTerminate and zeroing HitRefColor
📖
2:38:54Check out the rays cast in the brighter non-traversable outdoors
🏃
2:38:54Check out the rays cast in the brighter non-traversable outdoors
🏃
2:38:54Check out the rays cast in the brighter non-traversable outdoors
🏃
2:39:23Toggle on DebugDrawOctahedralValues() in UpdateLighting()
2:39:23Toggle on DebugDrawOctahedralValues() in UpdateLighting()
2:39:23Toggle on DebugDrawOctahedralValues() in UpdateLighting()
2:39:42The light apparently comes through the wall
🏃
2:39:42The light apparently comes through the wall
🏃
2:39:42The light apparently comes through the wall
🏃
2:41:20Scour GridRayCast() for bugs in getting the light atlas
📖
2:41:20Scour GridRayCast() for bugs in getting the light atlas
📖
2:41:20Scour GridRayCast() for bugs in getting the light atlas
📖
2:44:22Reproduce our position-dependent brightening
🏃
2:44:22Reproduce our position-dependent brightening
🏃
2:44:22Reproduce our position-dependent brightening
🏃
2:44:53Rename Grid to AtlasGrid in GridRayCast()5
2:44:53Rename Grid to AtlasGrid in GridRayCast()5
2:44:53Rename Grid to AtlasGrid in GridRayCast()5
2:48:05Check our region alignments
🏃
2:48:05Check our region alignments
🏃
2:48:05Check our region alignments
🏃
2:48:51PushLightingRenderValues() draws the HotVoxelRect in cyan and the SpatialGrid in green
📖
2:48:51PushLightingRenderValues() draws the HotVoxelRect in cyan and the SpatialGrid in green
📖
2:48:51PushLightingRenderValues() draws the HotVoxelRect in cyan and the SpatialGrid in green
📖
2:50:10Our light sampling reads and writes are misaligned
🏃
2:50:10Our light sampling reads and writes are misaligned
🏃
2:50:10Our light sampling reads and writes are misaligned
🏃
2:51:57Vote for a quick break
🗹
2:51:57Vote for a quick break
🗹
2:51:57Vote for a quick break
🗹
2:56:43Return
🗹
2:56:43Return
🗹
2:56:43Return
🗹
2:57:08thesandvichmaker No! Brain-parasite music!
🗪
2:57:08thesandvichmaker No! Brain-parasite music!
🗪
2:57:08thesandvichmaker No! Brain-parasite music!
🗪
2:57:17Fanfare
🗹
2:57:17Fanfare
🗹
2:57:17Fanfare
🗹
2:57:58tk_dev Maybe you should let Cody handle the second part of the stream, then you don't need a break
🗪
2:57:58tk_dev Maybe you should let Cody handle the second part of the stream, then you don't need a break
🗪
2:57:58tk_dev Maybe you should let Cody handle the second part of the stream, then you don't need a break
🗪
2:58:45dedknd niftywifty *Will Smith approaching...*
🗪
2:58:45dedknd niftywifty *Will Smith approaching...*
🗪
2:58:45dedknd niftywifty *Will Smith approaching...*
🗪
3:01:53thesandvichmaker Will the Handmade Hero awards have exciting moments? Maybe you can invite and then slap a Microsoft employee
🗪
3:01:53thesandvichmaker Will the Handmade Hero awards have exciting moments? Maybe you can invite and then slap a Microsoft employee
🗪
3:01:53thesandvichmaker Will the Handmade Hero awards have exciting moments? Maybe you can invite and then slap a Microsoft employee
🗪
3:02:51Investigate our sampling read–write misalignment
📖
3:02:51Investigate our sampling read–write misalignment
📖
3:02:51Investigate our sampling read–write misalignment
📖
3:04:38ryanfleury Keep! My struct's name! Out your fuckin' mouth!!!
🗪
3:04:38ryanfleury Keep! My struct's name! Out your fuckin' mouth!!!
🗪
3:04:38ryanfleury Keep! My struct's name! Out your fuckin' mouth!!!
🗪
3:04:58The GetCellCenterP() call in ComputeLightPropagationWork() is horse poop
📖
3:04:58The GetCellCenterP() call in ComputeLightPropagationWork() is horse poop
📖
3:04:58The GetCellCenterP() call in ComputeLightPropagationWork() is horse poop
📖
3:05:17We're eating Peanut Butter Pretzels from Costco
🗹
3:05:17We're eating Peanut Butter Pretzels from Costco
🗹
3:05:17We're eating Peanut Butter Pretzels from Costco
🗹
3:06:15ablindorphan Would you like me to talk to Mr Costco for you?
🗪
3:06:15ablindorphan Would you like me to talk to Mr Costco for you?
🗪
3:06:15ablindorphan Would you like me to talk to Mr Costco for you?
🗪
3:06:28Change ComputeLightPropagationWork() to set BoxCenterP using GetCellBounds().Min
3:06:28Change ComputeLightPropagationWork() to set BoxCenterP using GetCellBounds().Min
3:06:28Change ComputeLightPropagationWork() to set BoxCenterP using GetCellBounds().Min
3:08:30The octahedral value drawings are now positioned wrong
🏃
3:08:30The octahedral value drawings are now positioned wrong
🏃
3:08:30The octahedral value drawings are now positioned wrong
🏃
3:08:54Rename BoxCenterP to CastFromP in ComputeLightPropagationWork()
3:08:54Rename BoxCenterP to CastFromP in ComputeLightPropagationWork()
3:08:54Rename BoxCenterP to CastFromP in ComputeLightPropagationWork()
3:09:40Fix DebugDrawOctahedralValues() to position the drawings at the Bounds.Min
3:09:40Fix DebugDrawOctahedralValues() to position the drawings at the Bounds.Min
3:09:40Fix DebugDrawOctahedralValues() to position the drawings at the Bounds.Min
3:10:49We have light probes unable to pick up light around the perimeter
🏃
3:10:49We have light probes unable to pick up light around the perimeter
🏃
3:10:49We have light probes unable to pick up light around the perimeter
🏃
3:12:00Our light leaking is now more pronounced
🏃
3:12:00Our light leaking is now more pronounced
🏃
3:12:00Our light leaking is now more pronounced
🏃
3:13:43Reacquaint ourselves with the atlas grid and spatial grid creation code in UpdateLighting() and MakeLightAtlas()
📖
3:13:43Reacquaint ourselves with the atlas grid and spatial grid creation code in UpdateLighting() and MakeLightAtlas()
📖
3:13:43Reacquaint ourselves with the atlas grid and spatial grid creation code in UpdateLighting() and MakeLightAtlas()
📖
3:17:44Make UpdateLighting() shrink the atlas grid by one in all dimensions
3:17:44Make UpdateLighting() shrink the atlas grid by one in all dimensions
3:17:44Make UpdateLighting() shrink the atlas grid by one in all dimensions
3:18:40Our light probes now fill the atlas grid
🏃
3:18:40Our light probes now fill the atlas grid
🏃
3:18:40Our light probes now fill the atlas grid
🏃
3:20:18Make UpdateLighting() position the light atlas at half a VoxCellDim in Z
3:20:18Make UpdateLighting() position the light atlas at half a VoxCellDim in Z
3:20:18Make UpdateLighting() position the light atlas at half a VoxCellDim in Z
3:21:11The light atlas is too high
🏃
3:21:11The light atlas is too high
🏃
3:21:11The light atlas is too high
🏃
3:21:42Stop UpdateLighting() from repositioning the light atlas in Z
3:21:42Stop UpdateLighting() from repositioning the light atlas in Z
3:21:42Stop UpdateLighting() from repositioning the light atlas in Z
3:21:52The light atlas is a little too low
🏃
3:21:52The light atlas is a little too low
🏃
3:21:52The light atlas is a little too low
🏃
3:22:13Make UpdateLighting() offset the light atlas upwards in Z by half a VoxCellDim
3:22:13Make UpdateLighting() offset the light atlas upwards in Z by half a VoxCellDim
3:22:13Make UpdateLighting() offset the light atlas upwards in Z by half a VoxCellDim
3:22:23The light atlas is better positioned and aligned
🏃
3:22:23The light atlas is better positioned and aligned
🏃
3:22:23The light atlas is better positioned and aligned
🏃
3:23:30Reacquaint ourselves with the light sample read–write alignment in PushLightingRenderValues() and SampleLighting()
📖
3:23:30Reacquaint ourselves with the light sample read–write alignment in PushLightingRenderValues() and SampleLighting()
📖
3:23:30Reacquaint ourselves with the light sample read–write alignment in PushLightingRenderValues() and SampleLighting()
📖
3:27:58Prevent SumLight() from offsetting VoxR by -0.5 in all dimensions, and make SampleLighting() clamp our lookups within the lighting voxel
3:27:58Prevent SumLight() from offsetting VoxR by -0.5 in all dimensions, and make SampleLighting() clamp our lookups within the lighting voxel
3:27:58Prevent SumLight() from offsetting VoxR by -0.5 in all dimensions, and make SampleLighting() clamp our lookups within the lighting voxel
3:30:34Our floors are now lit
🏃
3:30:34Our floors are now lit
🏃
3:30:34Our floors are now lit
🏃
3:32:03Scour GridRayCast() for sampling bugs
📖
3:32:03Scour GridRayCast() for sampling bugs
📖
3:32:03Scour GridRayCast() for sampling bugs
📖
3:36:07Our debug ray picking is now broken
🏃
3:36:07Our debug ray picking is now broken
🏃
3:36:07Our debug ray picking is now broken
🏃
3:37:03Fix FullCast() to clamp the ray picker's atlas index to the full cell count
3:37:03Fix FullCast() to clamp the ray picker's atlas index to the full cell count
3:37:03Fix FullCast() to clamp the ray picker's atlas index to the full cell count
3:37:35Our debug ray picking remains broken
🏃
3:37:35Our debug ray picking remains broken
🏃
3:37:35Our debug ray picking remains broken
🏃
3:38:16Temporarily prevent FullCast() from clamping the ray picker's atlas index
3:38:16Temporarily prevent FullCast() from clamping the ray picker's atlas index
3:38:16Temporarily prevent FullCast() from clamping the ray picker's atlas index
3:38:28Our debug ray picking remains broken
🏃
3:38:28Our debug ray picking remains broken
🏃
3:38:28Our debug ray picking remains broken
🏃
3:38:45Let FullCast() clamp the ray picker's atlas index
3:38:45Let FullCast() clamp the ray picker's atlas index
3:38:45Let FullCast() clamp the ray picker's atlas index
3:38:53Investigate our ray picking bug
📖
3:38:53Investigate our ray picking bug
📖
3:38:53Investigate our ray picking bug
📖
3:39:24Make UpdateLighting() compute an offset AtlasGridCellCount to prevent the light map from being reset every frame
3:39:24Make UpdateLighting() compute an offset AtlasGridCellCount to prevent the light map from being reset every frame
3:39:24Make UpdateLighting() compute an offset AtlasGridCellCount to prevent the light map from being reset every frame
3:40:29Our debug ray picking works again
🏃
3:40:29Our debug ray picking works again
🏃
3:40:29Our debug ray picking works again
🏃
3:41:04Inspect our rays to determine that they are offset
🏃
3:41:04Inspect our rays to determine that they are offset
🏃
3:41:04Inspect our rays to determine that they are offset
🏃
3:43:32Scour FullCast() for alignment bugs
📖
3:43:32Scour FullCast() for alignment bugs
📖
3:43:32Scour FullCast() for alignment bugs
📖
3:46:47Make FullCast() map the light probes into the spatial grid, using GetIndexForP()
3:46:47Make FullCast() map the light probes into the spatial grid, using GetIndexForP()
3:46:47Make FullCast() map the light probes into the spatial grid, using GetIndexForP()
3:48:03Briefly run the game
🏃
3:48:03Briefly run the game
🏃
3:48:03Briefly run the game
🏃
3:48:13Remove AtlasToSpatialGridIndexOffset from lighting_solution
3:48:13Remove AtlasToSpatialGridIndexOffset from lighting_solution
3:48:13Remove AtlasToSpatialGridIndexOffset from lighting_solution
3:49:06We still have casting bugs
🏃
3:49:06We still have casting bugs
🏃
3:49:06We still have casting bugs
🏃
3:49:43said6289 Why is there no timer?
🗪
3:49:43said6289 Why is there no timer?
🗪
3:49:43said6289 Why is there no timer?
🗪
3:50:02Start the timer
🗹
3:50:02Start the timer
🗹
3:50:02Start the timer
🗹
3:50:20Glance at UpdateLighting() for bugs
📖
3:50:20Glance at UpdateLighting() for bugs
📖
3:50:20Glance at UpdateLighting() for bugs
📖
3:51:05Consider the lighting bounds placement to be correct
🏃
3:51:05Consider the lighting bounds placement to be correct
🏃
3:51:05Consider the lighting bounds placement to be correct
🏃
3:51:57Scour UpdateLighting() and FullCast() for bugs
📖
3:51:57Scour UpdateLighting() and FullCast() for bugs
📖
3:51:57Scour UpdateLighting() and FullCast() for bugs
📖
3:54:01Rename the VoxCenterP argument to LightProbeP in FullCast()
3:54:01Rename the VoxCenterP argument to LightProbeP in FullCast()
3:54:01Rename the VoxCenterP argument to LightProbeP in FullCast()
3:54:17Scour GridRayCast() for bugs
📖
3:54:17Scour GridRayCast() for bugs
📖
3:54:17Scour GridRayCast() for bugs
📖
3:55:33Delete CellDim4 and related code in GridRayCast()
3:55:33Delete CellDim4 and related code in GridRayCast()
3:55:33Delete CellDim4 and related code in GridRayCast()
3:56:38Scour GridRayCast() for bugs (cont.)
📖
3:56:38Scour GridRayCast() for bugs (cont.)
📖
3:56:38Scour GridRayCast() for bugs (cont.)
📖
3:57:57Toggle off DebugDrawOctahedralValues() in UpdateLighting()
3:57:57Toggle off DebugDrawOctahedralValues() in UpdateLighting()
3:57:57Toggle off DebugDrawOctahedralValues() in UpdateLighting()
3:58:11The spatial partition and lighting voxel are oddly aligned
🏃
3:58:11The spatial partition and lighting voxel are oddly aligned
🏃
3:58:11The spatial partition and lighting voxel are oddly aligned
🏃
3:59:18Make UpdateLighting() offset the spatial grid by half a VoxCellDim in x and y
3:59:18Make UpdateLighting() offset the spatial grid by half a VoxCellDim in x and y
3:59:18Make UpdateLighting() offset the spatial grid by half a VoxCellDim in x and y
4:00:08Inspect our rays to determine that they seem pretty good
🏃
4:00:08Inspect our rays to determine that they seem pretty good
🏃
4:00:08Inspect our rays to determine that they seem pretty good
🏃
4:01:44Our lighting is more stable, but the lighting voxel slides relative to the spatial grid
🏃
4:01:44Our lighting is more stable, but the lighting voxel slides relative to the spatial grid
🏃
4:01:44Our lighting is more stable, but the lighting voxel slides relative to the spatial grid
🏃
4:02:36Investigate our lighting voxel sliding bug
📖
4:02:36Investigate our lighting voxel sliding bug
📖
4:02:36Investigate our lighting voxel sliding bug
📖
4:09:29Make UpdateLighting() set the HotDim to the AtlasGrid's dimensions
4:09:29Make UpdateLighting() set the HotDim to the AtlasGrid's dimensions
4:09:29Make UpdateLighting() set the HotDim to the AtlasGrid's dimensions
4:11:03Our lighting now flickers, and has black spots
🏃
4:11:03Our lighting now flickers, and has black spots
🏃
4:11:03Our lighting now flickers, and has black spots
🏃
4:11:55Revert the HotDim initialisation in UpdateLighting()
4:11:55Revert the HotDim initialisation in UpdateLighting()
4:11:55Revert the HotDim initialisation in UpdateLighting()
4:12:10The flicker and black spots have gone
🏃
4:12:10The flicker and black spots have gone
🏃
4:12:10The flicker and black spots have gone
🏃
4:12:44Toggle on DebugDrawOctahedralValues() in UpdateLighting()
4:12:44Toggle on DebugDrawOctahedralValues() in UpdateLighting()
4:12:44Toggle on DebugDrawOctahedralValues() in UpdateLighting()
4:13:22The octahedrons don't shift, only their values alter
🏃
4:13:22The octahedrons don't shift, only their values alter
🏃
4:13:22The octahedrons don't shift, only their values alter
🏃
4:14:47Toggle on DebugDrawSpatialGrid() and off DebugDrawOctahedralValues() in UpdateLighting()
4:14:47Toggle on DebugDrawSpatialGrid() and off DebugDrawOctahedralValues() in UpdateLighting()
4:14:47Toggle on DebugDrawSpatialGrid() and off DebugDrawOctahedralValues() in UpdateLighting()
4:14:55The spatial grid looks pretty solid6
🏃
4:14:55The spatial grid looks pretty solid6
🏃
4:14:55The spatial grid looks pretty solid6
🏃
4:15:37Toggle on DebugDrawOctahedralValues() and off DebugDrawSpatialGrid() in UpdateLighting()
4:15:37Toggle on DebugDrawOctahedralValues() and off DebugDrawSpatialGrid() in UpdateLighting()
4:15:37Toggle on DebugDrawOctahedralValues() and off DebugDrawSpatialGrid() in UpdateLighting()
4:15:49Eyeball the light probes and realise that our scale is wrong
🏃
4:15:49Eyeball the light probes and realise that our scale is wrong
🏃
4:15:49Eyeball the light probes and realise that our scale is wrong
🏃
4:16:17Reacquaint ourselves with the scaling in PushLightingRenderValues() and SumLight()
📖
4:16:17Reacquaint ourselves with the scaling in PushLightingRenderValues() and SumLight()
📖
4:16:17Reacquaint ourselves with the scaling in PushLightingRenderValues() and SumLight()
📖
4:21:07Make SumLight() contract the LIGHT_LOOKUP_VOXEL_DIM by 1 in all dimensions when setting VoxR
4:21:07Make SumLight() contract the LIGHT_LOOKUP_VOXEL_DIM by 1 in all dimensions when setting VoxR
4:21:07Make SumLight() contract the LIGHT_LOOKUP_VOXEL_DIM by 1 in all dimensions when setting VoxR
4:21:34Our scaling now seems right
🏃
4:21:34Our scaling now seems right
🏃
4:21:34Our scaling now seems right
🏃
4:21:54Toggle off drawing of the lights in UpdateAndRenderEntities() and DebugDrawOctahedralValues() in UpdateLighting()
4:21:54Toggle off drawing of the lights in UpdateAndRenderEntities() and DebugDrawOctahedralValues() in UpdateLighting()
4:21:54Toggle off drawing of the lights in UpdateAndRenderEntities() and DebugDrawOctahedralValues() in UpdateLighting()
4:22:24The light seems pretty stable
🏃
4:22:24The light seems pretty stable
🏃
4:22:24The light seems pretty stable
🏃
4:23:56Consider aligning the lighting region such that the camera remains well within it
📖
4:23:56Consider aligning the lighting region such that the camera remains well within it
📖
4:23:56Consider aligning the lighting region such that the camera remains well within it
📖
4:24:43The lighting region is biased
🏃
4:24:43The lighting region is biased
🏃
4:24:43The lighting region is biased
🏃
4:25:28Increase the LIGHT_LOOKUP_VOXEL_DIM_X from 24 to 28, and LIGHT_LOOKUP_VOXEL_DIM_Y from 16 to 20
4:25:28Increase the LIGHT_LOOKUP_VOXEL_DIM_X from 24 to 28, and LIGHT_LOOKUP_VOXEL_DIM_Y from 16 to 20
4:25:28Increase the LIGHT_LOOKUP_VOXEL_DIM_X from 24 to 28, and LIGHT_LOOKUP_VOXEL_DIM_Y from 16 to 20
4:25:52The lighting region remains biased
🏃
4:25:52The lighting region remains biased
🏃
4:25:52The lighting region remains biased
🏃
4:26:38Toggle off the camera bounds drawing in UpdateAndRenderWorld()
4:26:38Toggle off the camera bounds drawing in UpdateAndRenderWorld()
4:26:38Toggle off the camera bounds drawing in UpdateAndRenderWorld()
4:27:32Traverse the orphanage as if playing the game
🏃
4:27:32Traverse the orphanage as if playing the game
🏃
4:27:32Traverse the orphanage as if playing the game
🏃
4:28:39Decrease tUpdateBlend from 1 to 15/60 in UpdateLighting()
4:28:39Decrease tUpdateBlend from 1 to 15/60 in UpdateLighting()
4:28:39Decrease tUpdateBlend from 1 to 15/60 in UpdateLighting()
4:29:18Traverse the orphanage
🏃
4:29:18Traverse the orphanage
🏃
4:29:18Traverse the orphanage
🏃
4:29:27Move the ray debug drawing out of the way in UpdateLighting()
4:29:27Move the ray debug drawing out of the way in UpdateLighting()
4:29:27Move the ray debug drawing out of the way in UpdateLighting()
4:29:47Traverse the orphanage as if playing the game, and admire the lighting
🏃
4:29:47Traverse the orphanage as if playing the game, and admire the lighting
🏃
4:29:47Traverse the orphanage as if playing the game, and admire the lighting
🏃
4:30:24Toggle off LIGHT_ATLAS_ASSERT and GRID_RAY_CAST_DEBUGGING
4:30:24Toggle off LIGHT_ATLAS_ASSERT and GRID_RAY_CAST_DEBUGGING
4:30:24Toggle off LIGHT_ATLAS_ASSERT and GRID_RAY_CAST_DEBUGGING
4:31:05~41ms per frame
🏃
4:31:05~41ms per frame
🏃
4:31:05~41ms per frame
🏃
4:32:08Toggle off HANDMADE_INTERNAL and HANDMADE_SLOW, and stub out DIAGRAM_SetOrigin() and RenderDiagrams()
4:32:08Toggle off HANDMADE_INTERNAL and HANDMADE_SLOW, and stub out DIAGRAM_SetOrigin() and RenderDiagrams()
4:32:08Toggle off HANDMADE_INTERNAL and HANDMADE_SLOW, and stub out DIAGRAM_SetOrigin() and RenderDiagrams()
4:34:13Feel the performance
🏃
4:34:13Feel the performance
🏃
4:34:13Feel the performance
🏃
4:34:29Delete WalkTableOffset from light_sample_directions
4:34:29Delete WalkTableOffset from light_sample_directions
4:34:29Delete WalkTableOffset from light_sample_directions
4:35:30Run hhsphere with an octahedron texel count and ray per texel of 8
🗹
4:35:30Run hhsphere with an octahedron texel count and ray per texel of 8
🗹
4:35:30Run hhsphere with an octahedron texel count and ray per texel of 8
🗹
4:36:33Feel the performance with 8 rays per texel
🏃
4:36:33Feel the performance with 8 rays per texel
🏃
4:36:33Feel the performance with 8 rays per texel
🏃
4:36:49Toggle on HANDMADE_INTERNAL and stub out world and world_position
4:36:49Toggle on HANDMADE_INTERNAL and stub out world and world_position
4:36:49Toggle on HANDMADE_INTERNAL and stub out world and world_position
4:37:56~23ms per frame
🏃
4:37:56~23ms per frame
🏃
4:37:56~23ms per frame
🏃
4:38:18Toggle on HANDMADE_SLOW
4:38:18Toggle on HANDMADE_SLOW
4:38:18Toggle on HANDMADE_SLOW
4:38:27~26ms per frame
🏃
4:38:27~26ms per frame
🏃
4:38:27~26ms per frame
🏃
4:38:47Determine to toggle off the diffuse blend
📖
4:38:47Determine to toggle off the diffuse blend
📖
4:38:47Determine to toggle off the diffuse blend
📖
4:39:21~29ms per frame
🏃
4:39:21~29ms per frame
🏃
4:39:21~29ms per frame
🏃
4:39:27Toggle off the diffuse blend in ComputeLightPropagationWork()
4:39:27Toggle off the diffuse blend in ComputeLightPropagationWork()
4:39:27Toggle off the diffuse blend in ComputeLightPropagationWork()
4:39:32~29ms per frame
🏃
4:39:32~29ms per frame
🏃
4:39:32~29ms per frame
🏃
4:39:54Toggle on the diffuse blend in ComputeLightPropagationWork()
4:39:54Toggle on the diffuse blend in ComputeLightPropagationWork()
4:39:54Toggle on the diffuse blend in ComputeLightPropagationWork()
4:40:03~29ms per frame
🏃
4:40:03~29ms per frame
🏃
4:40:03~29ms per frame
🏃
4:40:13Toggle off FullCast() in ComputeLightPropagationWork()
4:40:13Toggle off FullCast() in ComputeLightPropagationWork()
4:40:13Toggle off FullCast() in ComputeLightPropagationWork()
4:40:21~16ms per frame
🏃
4:40:21~16ms per frame
🏃
4:40:21~16ms per frame
🏃
4:40:42Toggle on FullCast() in ComputeLightPropagationWork()
4:40:42Toggle on FullCast() in ComputeLightPropagationWork()
4:40:42Toggle on FullCast() in ComputeLightPropagationWork()
4:40:52Admire our excellent interior lighting
🏃
4:40:52Admire our excellent interior lighting
🏃
4:40:52Admire our excellent interior lighting
🏃
4:41:59Consider specially handling light probes embedded in geometry
🏃
4:41:59Consider specially handling light probes embedded in geometry
🏃
4:41:59Consider specially handling light probes embedded in geometry
🏃
4:43:32Toggle on the player's light in UpdateAndRenderWorld()
4:43:32Toggle on the player's light in UpdateAndRenderWorld()
4:43:32Toggle on the player's light in UpdateAndRenderWorld()
4:44:50Lights produce a glow when eclipsing a light probe
🏃
4:44:50Lights produce a glow when eclipsing a light probe
🏃
4:44:50Lights produce a glow when eclipsing a light probe
🏃
4:45:19Toggle on DebugDrawOctahedralValues() in UpdateLighting()
4:45:19Toggle on DebugDrawOctahedralValues() in UpdateLighting()
4:45:19Toggle on DebugDrawOctahedralValues() in UpdateLighting()
4:45:29Our player's light occludes the light probes, removing light from the system
🏃
4:45:29Our player's light occludes the light probes, removing light from the system
🏃
4:45:29Our player's light occludes the light probes, removing light from the system
🏃
4:45:49Darken the player's light from 10 to 5, and increase its size in Z from 0.5 to 1
4:45:49Darken the player's light from 10 to 5, and increase its size in Z from 0.5 to 1
4:45:49Darken the player's light from 10 to 5, and increase its size in Z from 0.5 to 1
4:46:13Check out the player's light
🏃
4:46:13Check out the player's light
🏃
4:46:13Check out the player's light
🏃
4:46:26Revert the player's light size, and elevate it from 2 to 2.5
4:46:26Revert the player's light size, and elevate it from 2 to 2.5
4:46:26Revert the player's light size, and elevate it from 2 to 2.5
4:46:42The player's light still occludes the light probe
🏃
4:46:42The player's light still occludes the light probe
🏃
4:46:42The player's light still occludes the light probe
🏃
4:46:44Elevate the player's light from 2.5 to 3
4:46:44Elevate the player's light from 2.5 to 3
4:46:44Elevate the player's light from 2.5 to 3
4:46:50The player's light no longer occludes the light probe
🏃
4:46:50The player's light no longer occludes the light probe
🏃
4:46:50The player's light no longer occludes the light probe
🏃
4:46:57Toggle off DebugDrawOctahedralValues() in UpdateLighting()
4:46:57Toggle off DebugDrawOctahedralValues() in UpdateLighting()
4:46:57Toggle off DebugDrawOctahedralValues() in UpdateLighting()
4:47:06Traverse the orphanage admiring the light
🏃
4:47:06Traverse the orphanage admiring the light
🏃
4:47:06Traverse the orphanage admiring the light
🏃
4:47:17Brighten the player's light from 5 to 8
4:47:17Brighten the player's light from 5 to 8
4:47:17Brighten the player's light from 5 to 8
4:47:24Traverse the orphanage admiring the light
🏃
4:47:24Traverse the orphanage admiring the light
🏃
4:47:24Traverse the orphanage admiring the light
🏃
4:47:56Toggle off StandardLightingPattern()
4:47:56Toggle off StandardLightingPattern()
4:47:56Toggle off StandardLightingPattern()
4:48:26Illustrate the checkerboard patterning from the sampling sphere
🏃
4:48:26Illustrate the checkerboard patterning from the sampling sphere
🏃
4:48:26Illustrate the checkerboard patterning from the sampling sphere
🏃
4:49:42Prevent GridRayCast() from zeroing out HitRefColor and HitEmission upon walking the distance
4:49:42Prevent GridRayCast() from zeroing out HitRefColor and HitEmission upon walking the distance
4:49:42Prevent GridRayCast() from zeroing out HitRefColor and HitEmission upon walking the distance
4:50:34See no difference in the lighting, but admire it nevertheless
🏃
4:50:34See no difference in the lighting, but admire it nevertheless
🏃
4:50:34See no difference in the lighting, but admire it nevertheless
🏃
4:51:41Switch GridRayCast() from the sample table lookup to sampling in a white noise pattern
4:51:41Switch GridRayCast() from the sample table lookup to sampling in a white noise pattern
4:51:41Switch GridRayCast() from the sample table lookup to sampling in a white noise pattern
4:55:28The light flickers with this white noise sampling
🏃
4:55:28The light flickers with this white noise sampling
🏃
4:55:28The light flickers with this white noise sampling
🏃
4:56:01Make GridRayCast() cast 32 rays
4:56:01Make GridRayCast() cast 32 rays
4:56:01Make GridRayCast() cast 32 rays
4:56:19The light goes over-bright
🏃
4:56:19The light goes over-bright
🏃
4:56:19The light goes over-bright
🏃
4:56:25Make GridRayCast() cast 32 rays correctly weighted
4:56:25Make GridRayCast() cast 32 rays correctly weighted
4:56:25Make GridRayCast() cast 32 rays correctly weighted
4:57:22The light flickers less with 32 rays
🏃
4:57:22The light flickers less with 32 rays
🏃
4:57:22The light flickers less with 32 rays
🏃
4:58:17Decrease the RayCount from 32 to 16 in GridRayCast()
4:58:17Decrease the RayCount from 32 to 16 in GridRayCast()
4:58:17Decrease the RayCount from 32 to 16 in GridRayCast()
4:58:26The light flickers more with 16 rays
🏃
4:58:26The light flickers more with 16 rays
🏃
4:58:26The light flickers more with 16 rays
🏃
4:58:30Increase the RayCount from 16 to 64 in GridRayCast()
4:58:30Increase the RayCount from 16 to 64 in GridRayCast()
4:58:30Increase the RayCount from 16 to 64 in GridRayCast()
4:58:39The light barely flickers with 64 rays
🏃
4:58:39The light barely flickers with 64 rays
🏃
4:58:39The light barely flickers with 64 rays
🏃
4:59:02Decrease the RayCount from 64 to 8 in GridRayCast(), and decrease tUpdateBlend from 15/60 to 6/60 in UpdateLighting()
4:59:02Decrease the RayCount from 64 to 8 in GridRayCast(), and decrease tUpdateBlend from 15/60 to 6/60 in UpdateLighting()
4:59:02Decrease the RayCount from 64 to 8 in GridRayCast(), and decrease tUpdateBlend from 15/60 to 6/60 in UpdateLighting()
4:59:31The light looks pretty good
🏃
4:59:31The light looks pretty good
🏃
4:59:31The light looks pretty good
🏃
5:00:26Toggle on the room lights in StandardLightingPattern()
5:00:26Toggle on the room lights in StandardLightingPattern()
5:00:26Toggle on the room lights in StandardLightingPattern()
5:00:43We barely notice flicker, and can get over-brighting indoors with many lights
🏃
5:00:43We barely notice flicker, and can get over-brighting indoors with many lights
🏃
5:00:43We barely notice flicker, and can get over-brighting indoors with many lights
🏃
5:03:01Toggle off the player's light in UpdateAndRenderWorld()
5:03:01Toggle off the player's light in UpdateAndRenderWorld()
5:03:01Toggle off the player's light in UpdateAndRenderWorld()
5:03:12ponkkiz I think the darker one looked awesome
🗪
5:03:12ponkkiz I think the darker one looked awesome
🗪
5:03:12ponkkiz I think the darker one looked awesome
🗪
5:03:23The interior does not over-brighten without the player light
🏃
5:03:23The interior does not over-brighten without the player light
🏃
5:03:23The interior does not over-brighten without the player light
🏃
5:03:35Toggle off AddPattern() on the MainRoom in CreateOrphanage()
5:03:35Toggle off AddPattern() on the MainRoom in CreateOrphanage()
5:03:35Toggle off AddPattern() on the MainRoom in CreateOrphanage()
5:04:04Traverse the orphanage to the unlit main room
🏃
5:04:04Traverse the orphanage to the unlit main room
🏃
5:04:04Traverse the orphanage to the unlit main room
🏃
5:04:23Make MoveEntity() move the entity and then leave
5:04:23Make MoveEntity() move the entity and then leave
5:04:23Make MoveEntity() move the entity and then leave
5:05:43Hit our DiagramDepth == 0 assertion in RenderDiagrams()
🏃
5:05:43Hit our DiagramDepth == 0 assertion in RenderDiagrams()
🏃
5:05:43Hit our DiagramDepth == 0 assertion in RenderDiagrams()
🏃
5:05:55Make MoveEntity() call DIAGRAM_End() after moving the entity
5:05:55Make MoveEntity() call DIAGRAM_End() after moving the entity
5:05:55Make MoveEntity() call DIAGRAM_End() after moving the entity
5:06:38Make MoveEntity() return after moving the entity entity system
5:06:38Make MoveEntity() return after moving the entity entity system
5:06:38Make MoveEntity() return after moving the entity entity system
5:06:49Our glove now moves with us
🏃
5:06:49Our glove now moves with us
🏃
5:06:49Our glove now moves with us
🏃
5:07:10Make AddPlayer() call AddPieceLight() on the Glove
5:07:10Make AddPlayer() call AddPieceLight() on the Glove
5:07:10Make AddPlayer() call AddPieceLight() on the Glove
5:09:09Our light convects too much
🏃
5:09:09Our light convects too much
🏃
5:09:09Our light convects too much
🏃
5:09:16Make GridRayCast() zero out HitRefColor and HitEmission upon walking the distance
5:09:16Make GridRayCast() zero out HitRefColor and HitEmission upon walking the distance
5:09:16Make GridRayCast() zero out HitRefColor and HitEmission upon walking the distance
5:09:53Our light still convects too much
🏃
5:09:53Our light still convects too much
🏃
5:09:53Our light still convects too much
🏃
5:09:59Prevent GridRayCast() from zeroing out HitRefColor and HitEmission upon walking the distance
5:09:59Prevent GridRayCast() from zeroing out HitRefColor and HitEmission upon walking the distance
5:09:59Prevent GridRayCast() from zeroing out HitRefColor and HitEmission upon walking the distance
5:10:25Darken the glove's light from 5 to 1 in AddPlayer()
5:10:25Darken the glove's light from 5 to 1 in AddPlayer()
5:10:25Darken the glove's light from 5 to 1 in AddPlayer()
5:10:26Take our dim green glove light into the main room
🏃
5:10:26Take our dim green glove light into the main room
🏃
5:10:26Take our dim green glove light into the main room
🏃
5:10:47Brighten the glove's light from 1 to 3 in AddPlayer()
5:10:47Brighten the glove's light from 1 to 3 in AddPlayer()
5:10:47Brighten the glove's light from 1 to 3 in AddPlayer()
5:10:57Our light feeds back when we stand still
🏃
5:10:57Our light feeds back when we stand still
🏃
5:10:57Our light feeds back when we stand still
🏃
5:12:45Prevent FullCast() from blacking out light probes inside geometry
5:12:45Prevent FullCast() from blacking out light probes inside geometry
5:12:45Prevent FullCast() from blacking out light probes inside geometry
5:13:32Our light no longer blacks out when a light probe is inside geometry
🏃
5:13:32Our light no longer blacks out when a light probe is inside geometry
🏃
5:13:32Our light no longer blacks out when a light probe is inside geometry
🏃
5:14:14Consider our over-brighting bug
🏃
5:14:14Consider our over-brighting bug
🏃
5:14:14Consider our over-brighting bug
🏃
5:15:01Let FullCast() cast rays from inside geometry
5:15:01Let FullCast() cast rays from inside geometry
5:15:01Let FullCast() cast rays from inside geometry
5:15:23The light goes over-bright
🏃
5:15:23The light goes over-bright
🏃
5:15:23The light goes over-bright
🏃
5:15:33Consider our over-brighting bug
📖
5:15:33Consider our over-brighting bug
📖
5:15:33Consider our over-brighting bug
📖
5:17:06Make FullCast() blacken rather than cast rays from inside geometry
5:17:06Make FullCast() blacken rather than cast rays from inside geometry
5:17:06Make FullCast() blacken rather than cast rays from inside geometry
5:18:04Determine to add an exposure curve and make all lights between 0 and 1 brightness
📖
5:18:04Determine to add an exposure curve and make all lights between 0 and 1 brightness
📖
5:18:04Determine to add an exposure curve and make all lights between 0 and 1 brightness
📖
5:18:45thesandvichmaker handmade_hero I like this super basic neutral exposure curve as a default7
🗪
5:18:45thesandvichmaker handmade_hero I like this super basic neutral exposure curve as a default7
🗪
5:18:45thesandvichmaker handmade_hero I like this super basic neutral exposure curve as a default7
🗪
5:19:40teamrandb handmade_hero Greetings Casey! May you update SendOwl code download, please? It seems stuck on Day 346 with no updates
🗪
5:19:40teamrandb handmade_hero Greetings Casey! May you update SendOwl code download, please? It seems stuck on Day 346 with no updates
🗪
5:19:40teamrandb handmade_hero Greetings Casey! May you update SendOwl code download, please? It seems stuck on Day 346 with no updates
🗪
5:20:26One last look at our light contamination
🏃
5:20:26One last look at our light contamination
🏃
5:20:26One last look at our light contamination
🏃
5:20:52floorislava handmade_hero_646_source.zip is what I'm showing
🗪
5:20:52floorislava handmade_hero_646_source.zip is what I'm showing
🗪
5:20:52floorislava handmade_hero_646_source.zip is what I'm showing
🗪
5:21:01One last look at our light contamination (cont.)
🏃
5:21:01One last look at our light contamination (cont.)
🏃
5:21:01One last look at our light contamination (cont.)
🏃
5:21:47End it here for today
🗩
5:21:47End it here for today
🗩
5:21:47End it here for today
🗩
5:22:01teamrandb Sorry, I wrote it wrong. 646. But 646 is February 28th
🗪
5:22:01teamrandb Sorry, I wrote it wrong. 646. But 646 is February 28th
🗪
5:22:01teamrandb Sorry, I wrote it wrong. 646. But 646 is February 28th
🗪
5:22:46Call it there
🗩
5:22:46Call it there
🗩
5:22:46Call it there
🗩