[, < / ], >Jump to previous / next episode W, K, P / S, J, NJump to previous / next timestamp t / TToggle theatre / SUPERtheatre mode VRevert filter to original stateYSelect link (requires manual Ctrl-c)
Menu toggling
qQuotesrReferencesfFilteryLinkcCredits
In-Menu and Index Controls
a
w s
d
hjkl
←
↑ ↓
→
EscClose menu / unfocus timestamp
Quotes and References Menus and Index
EnterJump to timestamp
Quotes, References and Credits Menus
oOpen URL (in new tab)
Filter Menu
x, SpaceToggle category and focus next X, ShiftSpaceToggle category and focus previous vInvert topics / media as per focus
0:01Recap and set the stage for the day with a few words on indirect lighting
🗩
0:01Recap and set the stage for the day with a few words on indirect lighting
🗩
0:01Recap and set the stage for the day with a few words on indirect lighting
🗩
2:05Demo the old AABB ray cast lighting
🏃
2:05Demo the old AABB ray cast lighting
🏃
2:05Demo the old AABB ray cast lighting
🏃
2:56Toggle on LIGHTING_USE_GRID and fix compile errors
2:56Toggle on LIGHTING_USE_GRID and fix compile errors
2:56Toggle on LIGHTING_USE_GRID and fix compile errors
3:27Demo the new, unfinished grid ray cast lighting
🏃
3:27Demo the new, unfinished grid ray cast lighting
🏃
3:27Demo the new, unfinished grid ray cast lighting
🏃
4:56Grid ray casting: 1) Spatial partitioning
🏃
4:56Grid ray casting: 1) Spatial partitioning
🏃
4:56Grid ray casting: 1) Spatial partitioning
🏃
5:35Grid ray casting: 2) Walk table, which tells you which grid squares to sample
🏃
5:35Grid ray casting: 2) Walk table, which tells you which grid squares to sample
🏃
5:35Grid ray casting: 2) Walk table, which tells you which grid squares to sample
🏃
5:58Grid ray casting: 3) The ray cast routine itself
🏃
5:58Grid ray casting: 3) The ray cast routine itself
🏃
5:58Grid ray casting: 3) The ray cast routine itself
🏃
6:25Grid ray casting: 1a) SIMD packing of the AABB units
🏃
6:25Grid ray casting: 1a) SIMD packing of the AABB units
🏃
6:25Grid ray casting: 1a) SIMD packing of the AABB units
🏃
7:23Determine to debug the spatial partitioning using visualisation, with a few words on unit testing
🗩
7:23Determine to debug the spatial partitioning using visualisation, with a few words on unit testing
🗩
7:23Determine to debug the spatial partitioning using visualisation, with a few words on unit testing
🗩
14:08Make GridRayCast() draw the rays from one grid location, introducing DimIndexFrom()
14:08Make GridRayCast() draw the rays from one grid location, introducing DimIndexFrom()
14:08Make GridRayCast() draw the rays from one grid location, introducing DimIndexFrom()
22:29Introduce a version of PushDebugBox() that takes a rectangle3
22:29Introduce a version of PushDebugBox() that takes a rectangle3
22:29Introduce a version of PushDebugBox() that takes a rectangle3
23:03Hunt the scene for the debug box
🏃
23:03Hunt the scene for the debug box
🏃
23:03Hunt the scene for the debug box
🏃
23:16Change GridRayCast() to draw the rays from grid location 200
23:16Change GridRayCast() to draw the rays from grid location 200
23:16Change GridRayCast() to draw the rays from grid location 200
23:55Hunt the scene for the newly located debug box
🏃
23:55Hunt the scene for the newly located debug box
🏃
23:55Hunt the scene for the newly located debug box
🏃
24:25Try unsuccessfully to break on our PushDebugBox() call in GridRayCast(), and find an InitialGridIndex of 4677
🏃
24:25Try unsuccessfully to break on our PushDebugBox() call in GridRayCast(), and find an InitialGridIndex of 4677
🏃
24:25Try unsuccessfully to break on our PushDebugBox() call in GridRayCast(), and find an InitialGridIndex of 4677
🏃
25:25Change GridRayCast() to draw the rays from grid location 4677
25:25Change GridRayCast() to draw the rays from grid location 4677
25:25Change GridRayCast() to draw the rays from grid location 4677
25:39Break on our PushDebugBox() call in GridRayCast()
🏃
25:39Break on our PushDebugBox() call in GridRayCast()
🏃
25:39Break on our PushDebugBox() call in GridRayCast()
🏃
26:06Note that PushDebugLine() is not thread-safe, which is fine for the grid ray caster
📖
26:06Note that PushDebugLine() is not thread-safe, which is fine for the grid ray caster
📖
26:06Note that PushDebugLine() is not thread-safe, which is fine for the grid ray caster
📖
27:08Check out the debug box
🏃
27:08Check out the debug box
🏃
27:08Check out the debug box
🏃
27:55Make GridRayCast() draw the ray origin, hit and synthetic destination locations
27:55Make GridRayCast() draw the ray origin, hit and synthetic destination locations
27:55Make GridRayCast() draw the ray origin, hit and synthetic destination locations
31:47Check out the rays cast from our 4677 grid location, to see that we are not casting spherically
🏃
31:47Check out the rays cast from our 4677 grid location, to see that we are not casting spherically
🏃
31:47Check out the rays cast from our 4677 grid location, to see that we are not casting spherically
🏃
33:27Scour OutputSphereINL() for bugs
📖
33:27Scour OutputSphereINL() for bugs
📖
33:27Scour OutputSphereINL() for bugs
📖
36:21Note the area untouched by the ray cast
🏃
36:21Note the area untouched by the ray cast
🏃
36:21Note the area untouched by the ray cast
🏃
36:41Consider there to be something wrong other than the SampleDirectionTable values
📖
36:41Consider there to be something wrong other than the SampleDirectionTable values
📖
36:41Consider there to be something wrong other than the SampleDirectionTable values
📖
37:08Note the black colouration of the rays, themselves lit by the lighting system
🏃
37:08Note the black colouration of the rays, themselves lit by the lighting system
🏃
37:08Note the black colouration of the rays, themselves lit by the lighting system
🏃
38:46Scour FullCast() for sampling bugs
📖
38:46Scour FullCast() for sampling bugs
📖
38:46Scour FullCast() for sampling bugs
📖
40:26Fix FullCast() to stride through the SampleDirectionTable in fours
40:26Fix FullCast() to stride through the SampleDirectionTable in fours
40:26Fix FullCast() to stride through the SampleDirectionTable in fours
40:37Admire our more spherical ray distribution
🏃
40:37Admire our more spherical ray distribution
🏃
40:37Admire our more spherical ray distribution
🏃
41:28Note that our rays never hit anything
🏃
41:28Note that our rays never hit anything
🏃
41:28Note that our rays never hit anything
🏃
42:05May GridRayCast() limit the drawing of rays to those pointing upwards
42:05May GridRayCast() limit the drawing of rays to those pointing upwards
42:05May GridRayCast() limit the drawing of rays to those pointing upwards
43:50Admire our upward pointing rays
🏃
43:50Admire our upward pointing rays
🏃
43:50Admire our upward pointing rays
🏃
44:22Make GridRayCast() draw the boxes visited by our rays
44:22Make GridRayCast() draw the boxes visited by our rays
44:22Make GridRayCast() draw the boxes visited by our rays
45:03See no boxes visited by our rays
🏃
45:03See no boxes visited by our rays
🏃
45:03See no boxes visited by our rays
🏃
46:03Make GridRayCast() shrink the ray origin box
46:03Make GridRayCast() shrink the ray origin box
46:03Make GridRayCast() shrink the ray origin box
46:34See both the origin box and the initial walk box
🏃
46:34See both the origin box and the initial walk box
🏃
46:34See both the origin box and the initial walk box
🏃
47:05Note that GridRayCast() terminates prematurely
📖
47:05Note that GridRayCast() terminates prematurely
📖
47:05Note that GridRayCast() terminates prematurely
📖
47:55Step in to GridRayCast()
🏃
47:55Step in to GridRayCast()
🏃
47:55Step in to GridRayCast()
🏃
48:21Disable multithreading of the lighting
48:21Disable multithreading of the lighting
48:21Disable multithreading of the lighting
49:00Wonder why a second thread apparently hit the RayDebugging branch
🏃
49:00Wonder why a second thread apparently hit the RayDebugging branch
🏃
49:00Wonder why a second thread apparently hit the RayDebugging branch
🏃
50:09Step through GridRayCast()
🏃
50:09Step through GridRayCast()
🏃
50:09Step through GridRayCast()
🏃
50:44Fix the CostMetric test in GridRayCast() to let it actually proceed through the walk
50:44Fix the CostMetric test in GridRayCast() to let it actually proceed through the walk
50:44Fix the CostMetric test in GridRayCast() to let it actually proceed through the walk
51:09Step through GridRayCast()
🏃
51:09Step through GridRayCast()
🏃
51:09Step through GridRayCast()
🏃
51:26Switch to -O2 and re-enable multithreading of the lighting
51:26Switch to -O2 and re-enable multithreading of the lighting
51:26Switch to -O2 and re-enable multithreading of the lighting
51:49See that the ray cast is walking through the grid in the wrong direction
🏃
51:49See that the ray cast is walking through the grid in the wrong direction
🏃
51:49See that the ray cast is walking through the grid in the wrong direction
🏃
52:48Scour ComputeWalkTable() for a sign bug
📖
52:48Scour ComputeWalkTable() for a sign bug
📖
52:48Scour ComputeWalkTable() for a sign bug
📖
56:02Fix ComputeWalkTable() to recentre the test At location within the cell as it proceeds
56:02Fix ComputeWalkTable() to recentre the test At location within the cell as it proceeds
56:02Fix ComputeWalkTable() to recentre the test At location within the cell as it proceeds
57:29See that the ray cast continues to walk in the wrong direction
🏃
57:29See that the ray cast continues to walk in the wrong direction
🏃
57:29See that the ray cast continues to walk in the wrong direction
🏃
57:53Continue to scour ComputeWalkTable() for a sign bug
📖
57:53Continue to scour ComputeWalkTable() for a sign bug
📖
57:53Continue to scour ComputeWalkTable() for a sign bug
📖
59:20Follow the WalkTable through GridRayCast()
📖
59:20Follow the WalkTable through GridRayCast()
📖
59:20Follow the WalkTable through GridRayCast()
📖
1:01:00Switch to -Od and disable multithreading of the lighting
1:01:00Switch to -Od and disable multithreading of the lighting
1:01:00Switch to -Od and disable multithreading of the lighting
1:01:58Step in to GridRayCast() to find a WalkTableOffset of 0 for everybody
🏃
1:01:58Step in to GridRayCast() to find a WalkTableOffset of 0 for everybody
🏃
1:01:58Step in to GridRayCast() to find a WalkTableOffset of 0 for everybody
🏃
1:03:22Fix ComputeWalkTable() to increment the DestIndex
1:03:22Fix ComputeWalkTable() to increment the DestIndex
1:03:22Fix ComputeWalkTable() to increment the DestIndex
1:03:40Run (or walk?) a single-threaded -Od build of the game
🏃
1:03:40Run (or walk?) a single-threaded -Od build of the game
🏃
1:03:40Run (or walk?) a single-threaded -Od build of the game
🏃
1:03:54Switch to -O2 and re-enable multithreading of the lighting
1:03:54Switch to -O2 and re-enable multithreading of the lighting
1:03:54Switch to -O2 and re-enable multithreading of the lighting
1:04:29Compiler feature request: Swappable optimised and debug versions of routines
🗹
1:04:29Compiler feature request: Swappable optimised and debug versions of routines
🗹
1:04:29Compiler feature request: Swappable optimised and debug versions of routines
🗹
1:05:30See that the ray cast now walks in the correct general direction, but never diverges from the vertical
🏃
1:05:30See that the ray cast now walks in the correct general direction, but never diverges from the vertical
🏃
1:05:30See that the ray cast now walks in the correct general direction, but never diverges from the vertical
🏃
1:05:49Fix GridRayCast() to increment the WalkTable
1:05:49Fix GridRayCast() to increment the WalkTable
1:05:49Fix GridRayCast() to increment the WalkTable
1:06:31Admire our nice walk table stepping
🏃
1:06:31Admire our nice walk table stepping
🏃
1:06:31Admire our nice walk table stepping
🏃
1:07:56Try to limit GridRayCast() to draw only one ray
1:07:56Try to limit GridRayCast() to draw only one ray
1:07:56Try to limit GridRayCast() to draw only one ray
1:09:09See our single ray
🏃
1:09:09See our single ray
🏃
1:09:09See our single ray
🏃
1:09:31Make FullCast() pass a designated debug ray to GridRayCast()
1:09:31Make FullCast() pass a designated debug ray to GridRayCast()
1:09:31Make FullCast() pass a designated debug ray to GridRayCast()
1:13:23See our single ray, which sadly does not hit
🏃
1:13:23See our single ray, which sadly does not hit
🏃
1:13:23See our single ray, which sadly does not hit
🏃
1:13:35Make FullCast() pass different rays to GridRayCast() using trial and error
🏃
🖮
1:13:35Make FullCast() pass different rays to GridRayCast() using trial and error
🏃
🖮
1:13:35Make FullCast() pass different rays to GridRayCast() using trial and error
🏃
🖮
1:16:16Reacquaint ourselves with GenerateOctahedralLightingPattern() from hhsphere
📖
1:16:16Reacquaint ourselves with GenerateOctahedralLightingPattern() from hhsphere
📖
1:16:16Reacquaint ourselves with GenerateOctahedralLightingPattern() from hhsphere
📖
1:17:40Make FullCast() pass ray 36, the central one in the map, to GridRayCast()
🏃
🖮
1:17:40Make FullCast() pass ray 36, the central one in the map, to GridRayCast()
🏃
🖮
1:17:40Make FullCast() pass ray 36, the central one in the map, to GridRayCast()
🏃
🖮
1:17:49Admire our single ray, which hits
🏃
1:17:49Admire our single ray, which hits
🏃
1:17:49Admire our single ray, which hits
🏃
1:18:31Rerun the game to regenerate the WalkTable, and admire our ray
🏃
1:18:31Rerun the game to regenerate the WalkTable, and admire our ray
🏃
1:18:31Rerun the game to regenerate the WalkTable, and admire our ray
🏃
1:20:01Try and make GridRayCast() colour the boxes differently
1:20:01Try and make GridRayCast() colour the boxes differently
1:20:01Try and make GridRayCast() colour the boxes differently
1:21:04See that the boxes remain the same colour
🏃
1:21:04See that the boxes remain the same colour
🏃
1:21:04See that the boxes remain the same colour
🏃
1:21:12Embark on systemically disabling the lighting for CompileZBiasProgram()
📖
1:21:12Embark on systemically disabling the lighting for CompileZBiasProgram()
📖
1:21:12Embark on systemically disabling the lighting for CompileZBiasProgram()
📖
1:22:15Demo the unlit debug UI
🏃
1:22:15Demo the unlit debug UI
🏃
1:22:15Demo the unlit debug UI
🏃
1:22:28Make CompileZBiasProgram() use a passed in Emission value to apply lighting to the texture, augmenting opengl_program_common with a VertEmission
1:22:28Make CompileZBiasProgram() use a passed in Emission value to apply lighting to the texture, augmenting opengl_program_common with a VertEmission
1:22:28Make CompileZBiasProgram() use a passed in Emission value to apply lighting to the texture, augmenting opengl_program_common with a VertEmission
1:33:06Hit OpenGL error: Index out of range
🏃
1:33:06Hit OpenGL error: Index out of range
🏃
1:33:06Hit OpenGL error: Index out of range
🏃
1:33:47Make OpenGLCreateProgram() set the VertEmission
1:33:47Make OpenGLCreateProgram() set the VertEmission
1:33:47Make OpenGLCreateProgram() set the VertEmission