Reducing Light Contributions from Inaccessible Voxels
?
?

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:01Welcome to the stream, having dreamt up the source of our current bug1
🗩
0:01Welcome to the stream, having dreamt up the source of our current bug1
🗩
0:01Welcome to the stream, having dreamt up the source of our current bug1
🗩
1:58Demo our nonsensical light direction bug, even in the old AABB raytracer
🏃
1:58Demo our nonsensical light direction bug, even in the old AABB raytracer
🏃
1:58Demo our nonsensical light direction bug, even in the old AABB raytracer
🏃
3:47Walk through DebugDrawOctahedralValues()
📖
3:47Walk through DebugDrawOctahedralValues()
📖
3:47Walk through DebugDrawOctahedralValues()
📖
5:12Fix DebugDrawOctahedralValues() to correctly index in to the SpecAtlas
5:12Fix DebugDrawOctahedralValues() to correctly index in to the SpecAtlas
5:12Fix DebugDrawOctahedralValues() to correctly index in to the SpecAtlas
5:43Our octahedral maps all now point at our light source
🏃
5:43Our octahedral maps all now point at our light source
🏃
5:43Our octahedral maps all now point at our light source
🏃
6:14Decrease the line length scaling factor in DebugDrawColorDir() from 1 to 0.15
6:14Decrease the line length scaling factor in DebugDrawColorDir() from 1 to 0.15
6:14Decrease the line length scaling factor in DebugDrawColorDir() from 1 to 0.15
6:40Admire our octahedral map lighting directions
🏃
6:40Admire our octahedral map lighting directions
🏃
6:40Admire our octahedral map lighting directions
🏃
7:19Let GenerateRoom() add lamps again
7:19Let GenerateRoom() add lamps again
7:19Let GenerateRoom() add lamps again
7:38Check out our octahedral map lighting directions
🏃
7:38Check out our octahedral map lighting directions
🏃
7:38Check out our octahedral map lighting directions
🏃
9:18Make GenerateRoom() increase the lamps' light intensity
9:18Make GenerateRoom() increase the lamps' light intensity
9:18Make GenerateRoom() increase the lamps' light intensity
10:46Check out our octahedral map lighting directions, and consider increasing the casting density of our rays
🏃
10:46Check out our octahedral map lighting directions, and consider increasing the casting density of our rays
🏃
10:46Check out our octahedral map lighting directions, and consider increasing the casting density of our rays
🏃
14:01Enable LIGHTING_USE_GRID
14:01Enable LIGHTING_USE_GRID
14:01Enable LIGHTING_USE_GRID
14:26Our octahedral map lighting directions exhibit a positive feedback loop
🏃
14:26Our octahedral map lighting directions exhibit a positive feedback loop
🏃
14:26Our octahedral map lighting directions exhibit a positive feedback loop
🏃
15:00Determine to debug the grid ray caster from the perspective of a lighting quality pass
🗩
15:00Determine to debug the grid ray caster from the perspective of a lighting quality pass
🗩
15:00Determine to debug the grid ray caster from the perspective of a lighting quality pass
🗩
17:16Make UpdateAndRenderWorld() call UpdateLighting() when we press F9
17:16Make UpdateAndRenderWorld() call UpdateLighting() when we press F9
17:16Make UpdateAndRenderWorld() call UpdateLighting() when we press F9
17:38Step the lighting frame-by-frame with F9
🏃
17:38Step the lighting frame-by-frame with F9
🏃
17:38Step the lighting frame-by-frame with F9
🏃
19:04Temporarily prevent GenerateRoom() from adding lamps
19:04Temporarily prevent GenerateRoom() from adding lamps
19:04Temporarily prevent GenerateRoom() from adding lamps
19:22Step the lighting and see the light leaking through the wall
🏃
19:22Step the lighting and see the light leaking through the wall
🏃
19:22Step the lighting and see the light leaking through the wall
🏃
21:25Temporarily prevent UpdateAndRenderEntities() from drawing occluders
21:25Temporarily prevent UpdateAndRenderEntities() from drawing occluders
21:25Temporarily prevent UpdateAndRenderEntities() from drawing occluders
22:21Octahedral maps embedded in geometry see lots of light
🏃
22:21Octahedral maps embedded in geometry see lots of light
🏃
22:21Octahedral maps embedded in geometry see lots of light
🏃
24:09Disable LIGHTING_USE_GRID
24:09Disable LIGHTING_USE_GRID
24:09Disable LIGHTING_USE_GRID
24:20Octahedral maps embedded in geometry do not see lots of light
🏃
24:20Octahedral maps embedded in geometry do not see lots of light
🏃
24:20Octahedral maps embedded in geometry do not see lots of light
🏃
26:09Temporarily make UpdateAndRenderEntities() draw occluders as outlines
26:09Temporarily make UpdateAndRenderEntities() draw occluders as outlines
26:09Temporarily make UpdateAndRenderEntities() draw occluders as outlines
27:05Check out our occluder outlines
🏃
27:05Check out our occluder outlines
🏃
27:05Check out our occluder outlines
🏃
27:13Reduce the thickness of our occluder outlines
27:13Reduce the thickness of our occluder outlines
27:13Reduce the thickness of our occluder outlines
27:28Check out our occluder outlines, step the lighting and consider how to treat rays embedded in geometry
🏃
27:28Check out our occluder outlines, step the lighting and consider how to treat rays embedded in geometry
🏃
27:28Check out our occluder outlines, step the lighting and consider how to treat rays embedded in geometry
🏃
30:08Determine to try zeroing out rays embedded in geometry
🏃
30:08Determine to try zeroing out rays embedded in geometry
🏃
30:08Determine to try zeroing out rays embedded in geometry
🏃
30:52Let UpdateAndRenderWorld() call UpdateLighting() every frame, and enable LIGHTING_USE_GRID
30:52Let UpdateAndRenderWorld() call UpdateLighting() every frame, and enable LIGHTING_USE_GRID
30:52Let UpdateAndRenderWorld() call UpdateLighting() every frame, and enable LIGHTING_USE_GRID
31:36Watch our lighting feed back
🏃
31:36Watch our lighting feed back
🏃
31:36Watch our lighting feed back
🏃
32:05Enable FullCast() to detect and handle rays embedded in geometry
32:05Enable FullCast() to detect and handle rays embedded in geometry
32:05Enable FullCast() to detect and handle rays embedded in geometry
41:12Our lighting feeds back more slowly
🏃
41:12Our lighting feeds back more slowly
🏃
41:12Our lighting feeds back more slowly
🏃
41:48Make UpdateAndRenderWorld() call UpdateLighting() when we press F9
41:48Make UpdateAndRenderWorld() call UpdateLighting() when we press F9
41:48Make UpdateAndRenderWorld() call UpdateLighting() when we press F9
42:05Step the lighting to see embedded rays remain in the dark
🏃
42:05Step the lighting to see embedded rays remain in the dark
🏃
42:05Step the lighting to see embedded rays remain in the dark
🏃
43:03Try to disable LIGHTING_USE_GRID, before leaving it enabled
43:03Try to disable LIGHTING_USE_GRID, before leaving it enabled
43:03Try to disable LIGHTING_USE_GRID, before leaving it enabled
43:40Determine to focus on light directional propagation
🏃
43:40Determine to focus on light directional propagation
🏃
43:40Determine to focus on light directional propagation
🏃
43:56Let UpdateAndRenderEntities() draw occluders like normal
43:56Let UpdateAndRenderEntities() draw occluders like normal
43:56Let UpdateAndRenderEntities() draw occluders like normal
44:35Step the lighting to an attractive state
🏃
44:35Step the lighting to an attractive state
🏃
44:35Step the lighting to an attractive state
🏃
45:11Determine to address the light emanating from the underside of our floor
🏃
45:11Determine to address the light emanating from the underside of our floor
🏃
45:11Determine to address the light emanating from the underside of our floor
🏃
47:00Make DebugDrawOctahedralValues() draw the DiffuseAtlas
47:00Make DebugDrawOctahedralValues() draw the DiffuseAtlas
47:00Make DebugDrawOctahedralValues() draw the DiffuseAtlas
48:24Check out our octahedral map lighting directions into the DiffuseAtlas
🏃
48:24Check out our octahedral map lighting directions into the DiffuseAtlas
🏃
48:24Check out our octahedral map lighting directions into the DiffuseAtlas
🏃
51:40Determine not to sample from obstructed light probes
🏃
51:40Determine not to sample from obstructed light probes
🏃
51:40Determine not to sample from obstructed light probes
🏃
53:23abnercoimbre That's impressive!
🗪
53:23abnercoimbre That's impressive!
🗪
53:23abnercoimbre That's impressive!
🗪
53:52Use the clear lighting leakage to guide our debugging
🏃
53:52Use the clear lighting leakage to guide our debugging
🏃
53:52Use the clear lighting leakage to guide our debugging
🏃
55:20Determine to enable ComputeVoxelIrradianceAt() to mask out obstructed light probes
📖
55:20Determine to enable ComputeVoxelIrradianceAt() to mask out obstructed light probes
📖
55:20Determine to enable ComputeVoxelIrradianceAt() to mask out obstructed light probes
📖
56:27Weighted Blend
🖌
56:27Weighted Blend
🖌
56:27Weighted Blend
🖌
1:01:01Flattening our recursive weighted blend equation
🖌
1:01:01Flattening our recursive weighted blend equation
🖌
1:01:01Flattening our recursive weighted blend equation
🖌
1:04:29How flattening the weighted blend equation helps us
📖
1:04:29How flattening the weighted blend equation helps us
📖
1:04:29How flattening the weighted blend equation helps us
📖
1:08:00Disable LIGHTING_USE_GRID and fix the resulting compile errors
1:08:00Disable LIGHTING_USE_GRID and fix the resulting compile errors
1:08:00Disable LIGHTING_USE_GRID and fix the resulting compile errors
1:08:31See the AABB raycasted lighting
🏃
1:08:31See the AABB raycasted lighting
🏃
1:08:31See the AABB raycasted lighting
🏃
1:08:41Let UpdateAndRenderWorld() call UpdateLighting() every frame, and enable LIGHTING_USE_GRID
1:08:41Let UpdateAndRenderWorld() call UpdateLighting() every frame, and enable LIGHTING_USE_GRID
1:08:41Let UpdateAndRenderWorld() call UpdateLighting() every frame, and enable LIGHTING_USE_GRID
1:08:55Check the AABB raycasted lighting
🏃
1:08:55Check the AABB raycasted lighting
🏃
1:08:55Check the AABB raycasted lighting
🏃
1:09:18Change the 2D Tiles array in ComputeVoxelIrradianceAt() to be 1D
1:09:18Change the 2D Tiles array in ComputeVoxelIrradianceAt() to be 1D
1:09:18Change the 2D Tiles array in ComputeVoxelIrradianceAt() to be 1D
1:11:21The lighting results look the same
🏃
1:11:21The lighting results look the same
🏃
1:11:21The lighting results look the same
🏃
1:11:44Transform ComputeVoxelIrradianceAt() to blend the light using a weighted blend
1:11:44Transform ComputeVoxelIrradianceAt() to blend the light using a weighted blend
1:11:44Transform ComputeVoxelIrradianceAt() to blend the light using a weighted blend
1:16:39The lighting results look the same
🏃
1:16:39The lighting results look the same
🏃
1:16:39The lighting results look the same
🏃
1:17:09Make ComputeVoxelIrradianceAt() take a set of Coefficients to omit tiles from the blend
1:17:09Make ComputeVoxelIrradianceAt() take a set of Coefficients to omit tiles from the blend
1:17:09Make ComputeVoxelIrradianceAt() take a set of Coefficients to omit tiles from the blend
1:24:31The lighting results look the same
🏃
1:24:31The lighting results look the same
🏃
1:24:31The lighting results look the same
🏃
1:25:31Try making UpdateAndRenderEntities() omit the Green and Blue components of the occluders
1:25:31Try making UpdateAndRenderEntities() omit the Green and Blue components of the occluders
1:25:31Try making UpdateAndRenderEntities() omit the Green and Blue components of the occluders
1:26:39Check out the bounce lighting
🏃
1:26:39Check out the bounce lighting
🏃
1:26:39Check out the bounce lighting
🏃
1:27:07Disable the moonlight in AABBRayCast()
1:27:07Disable the moonlight in AABBRayCast()
1:27:07Disable the moonlight in AABBRayCast()
1:27:28Our single-source bounce lighting looks reasonable
🏃
1:27:28Our single-source bounce lighting looks reasonable
🏃
1:27:28Our single-source bounce lighting looks reasonable
🏃
1:28:35Try making AABBRayCast() omit all the left-side tiles from the GatherC
1:28:35Try making AABBRayCast() omit all the left-side tiles from the GatherC
1:28:35Try making AABBRayCast() omit all the left-side tiles from the GatherC
1:29:10That screwed up our lighting
🏃
1:29:10That screwed up our lighting
🏃
1:29:10That screwed up our lighting
🏃
1:29:31Briefly eyeball the weights in ComputeVoxelIrradianceAt()
📖
1:29:31Briefly eyeball the weights in ComputeVoxelIrradianceAt()
📖
1:29:31Briefly eyeball the weights in ComputeVoxelIrradianceAt()
📖
1:30:40Build in -Od
1:30:40Build in -Od
1:30:40Build in -Od
1:30:56Step in to ComputeVoxelIrradianceAt() and inspect the W
🏃
1:30:56Step in to ComputeVoxelIrradianceAt() and inspect the W
🏃
1:30:56Step in to ComputeVoxelIrradianceAt() and inspect the W
🏃
1:32:43Prevent a divide-by-0 error in ComputeVoxelIrradianceAt()
1:32:43Prevent a divide-by-0 error in ComputeVoxelIrradianceAt()
1:32:43Prevent a divide-by-0 error in ComputeVoxelIrradianceAt()
1:33:37Our lighting is no longer screwed up
🏃
1:33:37Our lighting is no longer screwed up
🏃
1:33:37Our lighting is no longer screwed up
🏃
1:34:48Let AABBRayCast() instruct ComputeVoxelIrradianceAt() to gather light from all tiles
1:34:48Let AABBRayCast() instruct ComputeVoxelIrradianceAt() to gather light from all tiles
1:34:48Let AABBRayCast() instruct ComputeVoxelIrradianceAt() to gather light from all tiles
1:34:58See red fringing on the right side of the fall-off area
🏃
1:34:58See red fringing on the right side of the fall-off area
🏃
1:34:58See red fringing on the right side of the fall-off area
🏃
1:36:18Enable LIGHTING_USE_GRID and fix the resulting compile errors
1:36:18Enable LIGHTING_USE_GRID and fix the resulting compile errors
1:36:18Enable LIGHTING_USE_GRID and fix the resulting compile errors
1:36:48Our whole world is tinted red, indicating that the propagation occurs in secondary bounces
🏃
1:36:48Our whole world is tinted red, indicating that the propagation occurs in secondary bounces
🏃
1:36:48Our whole world is tinted red, indicating that the propagation occurs in secondary bounces
🏃
1:37:03Set up to prevent ComputeVoxelIrradianceAt() from sampling obstructed light probes
1:37:03Set up to prevent ComputeVoxelIrradianceAt() from sampling obstructed light probes
1:37:03Set up to prevent ComputeVoxelIrradianceAt() from sampling obstructed light probes
1:38:53Preventing light propagation from obstructed light probes
🖌
1:38:53Preventing light propagation from obstructed light probes
🖌
1:38:53Preventing light propagation from obstructed light probes
🖌
1:41:41Look into preventing ComputeVoxelIrradianceAt() from sampling obstructed light probes
📖
1:41:41Look into preventing ComputeVoxelIrradianceAt() from sampling obstructed light probes
📖
1:41:41Look into preventing ComputeVoxelIrradianceAt() from sampling obstructed light probes
📖
1:42:55Our eventual light propagation
🖌
1:42:55Our eventual light propagation
🖌
1:42:55Our eventual light propagation
🖌
1:44:25Determine to classify surface obstruction based on the normal
📖
1:44:25Determine to classify surface obstruction based on the normal
📖
1:44:25Determine to classify surface obstruction based on the normal
📖
1:45:33Deriving the surface normal from the SampleP
🖌
1:45:33Deriving the surface normal from the SampleP
🖌
1:45:33Deriving the surface normal from the SampleP
🖌
1:48:32Make ComputeVoxelIrradianceAt() classify surface obstruction based on the normal
1:48:32Make ComputeVoxelIrradianceAt() classify surface obstruction based on the normal
1:48:32Make ComputeVoxelIrradianceAt() classify surface obstruction based on the normal
1:51:08Our obstructed octahedral lighting directions are now zeroed out
🏃
1:51:08Our obstructed octahedral lighting directions are now zeroed out
🏃
1:51:08Our obstructed octahedral lighting directions are now zeroed out
🏃
1:52:45A few words on visualisation versus unit testing
🏃
1:52:45A few words on visualisation versus unit testing
🏃
1:52:45A few words on visualisation versus unit testing
🏃
1:56:27Q&A
🗩
1:56:27Q&A
🗩
1:56:27Q&A
🗩
1:56:40mattiamanzati Q: Is this the cube raycasting or the old AABB raycast?
🗪
1:56:40mattiamanzati Q: Is this the cube raycasting or the old AABB raycast?
🗪
1:56:40mattiamanzati Q: Is this the cube raycasting or the old AABB raycast?
🗪
1:57:12x1bzzr Q: Do you have any suggestions regarding how to study and better retain information? I remember you said you learned math only because you realized you needed to in order to program things. So particularly in relation to math, do you have any advice on how to learn in ways that are more efficient?
🗪
1:57:12x1bzzr Q: Do you have any suggestions regarding how to study and better retain information? I remember you said you learned math only because you realized you needed to in order to program things. So particularly in relation to math, do you have any advice on how to learn in ways that are more efficient?
🗪
1:57:12x1bzzr Q: Do you have any suggestions regarding how to study and better retain information? I remember you said you learned math only because you realized you needed to in order to program things. So particularly in relation to math, do you have any advice on how to learn in ways that are more efficient?
🗪
2:03:28krrsplat Q: When you were building the weight table, why were the negative values 1-UVW.x instead of 0-UVW.x? Sorry if you already answered this, I tuned in late
🗪
2:03:28krrsplat Q: When you were building the weight table, why were the negative values 1-UVW.x instead of 0-UVW.x? Sorry if you already answered this, I tuned in late
🗪
2:03:28krrsplat Q: When you were building the weight table, why were the negative values 1-UVW.x instead of 0-UVW.x? Sorry if you already answered this, I tuned in late
🗪
2:04:30pragmascrypt Q: The Nvidia paper you were using in the beginning was using depth info on the light probes to avoid light leaking. Is this something you also want to try?
🗪
2:04:30pragmascrypt Q: The Nvidia paper you were using in the beginning was using depth info on the light probes to avoid light leaking. Is this something you also want to try?
🗪
2:04:30pragmascrypt Q: The Nvidia paper you were using in the beginning was using depth info on the light probes to avoid light leaking. Is this something you also want to try?
🗪
2:06:06billdstrong Q: Abner said all the info was on the site. He had to go
🗪
2:06:06billdstrong Q: Abner said all the info was on the site. He had to go
🗪
2:06:06billdstrong Q: Abner said all the info was on the site. He had to go
🗪
2:06:38Plug Handmade Seattle 20202
📖
2:06:38Plug Handmade Seattle 20202
📖
2:06:38Plug Handmade Seattle 20202
📖
2:10:06erdomina Q: Any thoughts on the Nanite Unreal engine demo?
🗪
2:10:06erdomina Q: Any thoughts on the Nanite Unreal engine demo?
🗪
2:10:06erdomina Q: Any thoughts on the Nanite Unreal engine demo?
🗪
2:11:08marchin7 Q: My common way to see math and programming is to see the sub-concepts of the concept I'm trying to learn. And do like a tree until I get to the "leafs" which are concepts I already know or axioms. Then I go upwards from there and try to specially understand the how and why of the concepts' connections. Works well for both programming and math
🗪
2:11:08marchin7 Q: My common way to see math and programming is to see the sub-concepts of the concept I'm trying to learn. And do like a tree until I get to the "leafs" which are concepts I already know or axioms. Then I go upwards from there and try to specially understand the how and why of the concepts' connections. Works well for both programming and math
🗪
2:11:08marchin7 Q: My common way to see math and programming is to see the sub-concepts of the concept I'm trying to learn. And do like a tree until I get to the "leafs" which are concepts I already know or axioms. Then I go upwards from there and try to specially understand the how and why of the concepts' connections. Works well for both programming and math
🗪
2:11:34billdstrong Q: Could we just create a distance limit to stop bouncing light?
🗪
2:11:34billdstrong Q: Could we just create a distance limit to stop bouncing light?
🗪
2:11:34billdstrong Q: Could we just create a distance limit to stop bouncing light?
🗪
2:12:11read_my_code Q: In what way does a custom engine affect the feel of a game? Is it always a question of having better performance allowing for more flexibility? I've always thought there's nothing you can't do in Unity or Unreal. It's just going to be slower
🗪
2:12:11read_my_code Q: In what way does a custom engine affect the feel of a game? Is it always a question of having better performance allowing for more flexibility? I've always thought there's nothing you can't do in Unity or Unreal. It's just going to be slower
🗪
2:12:11read_my_code Q: In what way does a custom engine affect the feel of a game? Is it always a question of having better performance allowing for more flexibility? I've always thought there's nothing you can't do in Unity or Unreal. It's just going to be slower
🗪
2:15:41The various feels of ColecoVision games3
📖
2:15:41The various feels of ColecoVision games3
📖
2:15:41The various feels of ColecoVision games3
📖
2:19:44malfuri I would argue it's not the fault of the engines, but rather lazy devs. You can roll a lot of things on your own in pre-made engines. You could even go some custom / pre-made hybrid
🗪
2:19:44malfuri I would argue it's not the fault of the engines, but rather lazy devs. You can roll a lot of things on your own in pre-made engines. You could even go some custom / pre-made hybrid
🗪
2:19:44malfuri I would argue it's not the fault of the engines, but rather lazy devs. You can roll a lot of things on your own in pre-made engines. You could even go some custom / pre-made hybrid
🗪
2:22:47bommes My opinion is that this issue of uncreative games arises mostly due to people wanting to earn money with the work they put in. The same happens in music, movies, writing
🗪
2:22:47bommes My opinion is that this issue of uncreative games arises mostly due to people wanting to earn money with the work they put in. The same happens in music, movies, writing
🗪
2:22:47bommes My opinion is that this issue of uncreative games arises mostly due to people wanting to earn money with the work they put in. The same happens in music, movies, writing
🗪
2:27:01philliptrudeau Superhot did that
🗪
2:27:01philliptrudeau Superhot did that
🗪
2:27:01philliptrudeau Superhot did that
🗪
2:27:36miltondts So to make a creative game, look at the constraints of Unity and Unreal, and specifically break them?
🗪
2:27:36miltondts So to make a creative game, look at the constraints of Unity and Unreal, and specifically break them?
🗪
2:27:36miltondts So to make a creative game, look at the constraints of Unity and Unreal, and specifically break them?
🗪
2:29:01long_march handmade_hero have you ever worked with HRTF based audio, and do you have an opinion on it?
🗪
2:29:01long_march handmade_hero have you ever worked with HRTF based audio, and do you have an opinion on it?
🗪
2:29:01long_march handmade_hero have you ever worked with HRTF based audio, and do you have an opinion on it?
🗪
2:30:21teitv Do you live under rock? What about Cyberpunk 2077, handmade_hero?
🗪
2:30:21teitv Do you live under rock? What about Cyberpunk 2077, handmade_hero?
🗪
2:30:21teitv Do you live under rock? What about Cyberpunk 2077, handmade_hero?
🗪
2:33:28Thank you, everyone
🗩
2:33:28Thank you, everyone
🗩
2:33:28Thank you, everyone
🗩