Raycasting from Light Probe Locations
?
?

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:02Recap and set the stage for the day
🗩
0:02Recap and set the stage for the day
🗩
0:02Recap and set the stage for the day
🗩
0:44Demo the current state of our test ray casting from voxel centres, with the determination to cast rays from light probe locations
🏃
0:44Demo the current state of our test ray casting from voxel centres, with the determination to cast rays from light probe locations
🏃
0:44Demo the current state of our test ray casting from voxel centres, with the determination to cast rays from light probe locations
🏃
4:28Prepare to switch over to raycasting from light probe locations
📖
4:28Prepare to switch over to raycasting from light probe locations
📖
4:28Prepare to switch over to raycasting from light probe locations
📖
7:32Introduce Frumbledygok() to contain the voxel-centre casting code from EndLightingComputation()
7:32Introduce Frumbledygok() to contain the voxel-centre casting code from EndLightingComputation()
7:32Introduce Frumbledygok() to contain the voxel-centre casting code from EndLightingComputation()
8:47Begin to develop the light probe-based ray casting
8:47Begin to develop the light probe-based ray casting
8:47Begin to develop the light probe-based ray casting
11:33A few words on programmable light falloff vs real life inverse-square falloff
🗩
11:33A few words on programmable light falloff vs real life inverse-square falloff
🗩
11:33A few words on programmable light falloff vs real life inverse-square falloff
🗩
14:07Continue to develop the light probe-based ray casting, introducing TestCastFromProbes()
14:07Continue to develop the light probe-based ray casting, introducing TestCastFromProbes()
14:07Continue to develop the light probe-based ray casting, introducing TestCastFromProbes()
20:58Introduce GetVoxelIndex() to find which voxel a point in world space corresponds to
20:58Introduce GetVoxelIndex() to find which voxel a point in world space corresponds to
20:58Introduce GetVoxelIndex() to find which voxel a point in world space corresponds to
25:38Introduce GetVoxelCenterP()
25:38Introduce GetVoxelCenterP()
25:38Introduce GetVoxelCenterP()
27:34Make TestCastFromProbes() call our new GetVoxelIndex() and GetVoxelCenterP()
27:34Make TestCastFromProbes() call our new GetVoxelIndex() and GetVoxelCenterP()
27:34Make TestCastFromProbes() call our new GetVoxelIndex() and GetVoxelCenterP()
29:28Check out our initial light probe-based ray cast lighting
🏃
29:28Check out our initial light probe-based ray cast lighting
🏃
29:28Check out our initial light probe-based ray cast lighting
🏃
30:46Toggle on IsTestCast in TestCastFromProbes()
30:46Toggle on IsTestCast in TestCastFromProbes()
30:46Toggle on IsTestCast in TestCastFromProbes()
31:37See unexpected rays
🏃
31:37See unexpected rays
🏃
31:37See unexpected rays
🏃
32:16Disable lighting in CompileZBiasProgram()
32:16Disable lighting in CompileZBiasProgram()
32:16Disable lighting in CompileZBiasProgram()
32:28Check out our rays in a shadowless world
🏃
32:28Check out our rays in a shadowless world
🏃
32:28Check out our rays in a shadowless world
🏃
33:00Fix the HitP computation in TestCastFromProbes()
33:00Fix the HitP computation in TestCastFromProbes()
33:00Fix the HitP computation in TestCastFromProbes()
33:36Check out our correct rays in a shadowless world
🏃
33:36Check out our correct rays in a shadowless world
🏃
33:36Check out our correct rays in a shadowless world
🏃
34:44Consider working on our voxel fill
📖
34:44Consider working on our voxel fill
📖
34:44Consider working on our voxel fill
📖
36:50Introduce PushDebugBox() for RayCast() to call
36:50Introduce PushDebugBox() for RayCast() to call
36:50Introduce PushDebugBox() for RayCast() to call
39:00Make TestCastFromProbes() draw the voxels hit by the rays
39:00Make TestCastFromProbes() draw the voxels hit by the rays
39:00Make TestCastFromProbes() draw the voxels hit by the rays
41:38Check out our hit voxels, finding that we seem to overflow our DebugLines in lighting_solution
🏃
🖮
41:38Check out our hit voxels, finding that we seem to overflow our DebugLines in lighting_solution
🏃
🖮
41:38Check out our hit voxels, finding that we seem to overflow our DebugLines in lighting_solution
🏃
🖮
43:19The puss arrives
🗩
43:19The puss arrives
🗩
43:19The puss arrives
🗩
43:59Hit our assertion in PushDebugLine() and investigate why
🏃
43:59Hit our assertion in PushDebugLine() and investigate why
🏃
43:59Hit our assertion in PushDebugLine() and investigate why
🏃
45:39Increase the DebugLines array in lighting_solution from 4096 to 65536
45:39Increase the DebugLines array in lighting_solution from 4096 to 65536
45:39Increase the DebugLines array in lighting_solution from 4096 to 65536
46:04Check out our supposed 4096 lines
🏃
46:04Check out our supposed 4096 lines
🏃
46:04Check out our supposed 4096 lines
🏃
47:14Step through TestCastFromProbes() to see multiple light probes set identically
🏃
47:14Step through TestCastFromProbes() to see multiple light probes set identically
🏃
47:14Step through TestCastFromProbes() to see multiple light probes set identically
🏃
48:45Replace the SetLightProbePosition() call in UpdateAndRenderEntities() with a newly introduced PushLightProbe(), to prevent multiple light probes in the same location
48:45Replace the SetLightProbePosition() call in UpdateAndRenderEntities() with a newly introduced PushLightProbe(), to prevent multiple light probes in the same location
48:45Replace the SetLightProbePosition() call in UpdateAndRenderEntities() with a newly introduced PushLightProbe(), to prevent multiple light probes in the same location
51:06Check out our hit voxels
🏃
51:06Check out our hit voxels
🏃
51:06Check out our hit voxels
🏃
52:26Shrink the voxel debug visualisation in TestCastFromProbes()
52:26Shrink the voxel debug visualisation in TestCastFromProbes()
52:26Shrink the voxel debug visualisation in TestCastFromProbes()
53:01Check out our hit voxels, and determine to fill a swathe of nine voxels
🏃
53:01Check out our hit voxels, and determine to fill a swathe of nine voxels
🏃
53:01Check out our hit voxels, and determine to fill a swathe of nine voxels
🏃
54:35Molly Meow
🗪
54:35Molly Meow
🗪
54:35Molly Meow
🗪
56:41Introduce SpamVoxel() to flood our light computation into blocks of nine voxels, and a utility InLargeVoxel()
56:41Introduce SpamVoxel() to flood our light computation into blocks of nine voxels, and a utility InLargeVoxel()
56:41Introduce SpamVoxel() to flood our light computation into blocks of nine voxels, and a utility InLargeVoxel()
1:03:17Check out our flood filled voxels
🏃
1:03:17Check out our flood filled voxels
🏃
1:03:17Check out our flood filled voxels
🏃
1:03:37Prevent CompileZBiasProgram() from disabling the lighting
1:03:37Prevent CompileZBiasProgram() from disabling the lighting
1:03:37Prevent CompileZBiasProgram() from disabling the lighting
1:04:05Check out our beautiful lighting
🏃
1:04:05Check out our beautiful lighting
🏃
1:04:05Check out our beautiful lighting
🏃
1:04:52Make UpdateAndRenderEntities() position our light source nearer the ground
1:04:52Make UpdateAndRenderEntities() position our light source nearer the ground
1:04:52Make UpdateAndRenderEntities() position our light source nearer the ground
1:05:20Find that our light source still lights the area beyond a wall
🏃
1:05:20Find that our light source still lights the area beyond a wall
🏃
1:05:20Find that our light source still lights the area beyond a wall
🏃
1:05:55Disable lighting in CompileZBiasProgram()
1:05:55Disable lighting in CompileZBiasProgram()
1:05:55Disable lighting in CompileZBiasProgram()
1:06:11Note that our flood filling does not propagate through the wall at the starting location
🏃
1:06:11Note that our flood filling does not propagate through the wall at the starting location
🏃
1:06:11Note that our flood filling does not propagate through the wall at the starting location
🏃
1:06:49Prevent CompileZBiasProgram() from disabling the lighting
1:06:49Prevent CompileZBiasProgram() from disabling the lighting
1:06:49Prevent CompileZBiasProgram() from disabling the lighting
1:07:14Increase the radius of our test casting debug visualisation in TestCastFromProbes()
1:07:14Increase the radius of our test casting debug visualisation in TestCastFromProbes()
1:07:14Increase the radius of our test casting debug visualisation in TestCastFromProbes()
1:08:02See our flood filling propagate through that wall at the starting location
🏃
1:08:02See our flood filling propagate through that wall at the starting location
🏃
1:08:02See our flood filling propagate through that wall at the starting location
🏃
1:08:14Only make TestCastFromProbes() perform the flood fill if our ray did not hit
1:08:14Only make TestCastFromProbes() perform the flood fill if our ray did not hit
1:08:14Only make TestCastFromProbes() perform the flood fill if our ray did not hit
1:08:36Find that we light slightly erroneously, because we aren't clearing voxels
🏃
1:08:36Find that we light slightly erroneously, because we aren't clearing voxels
🏃
1:08:36Find that we light slightly erroneously, because we aren't clearing voxels
🏃
1:09:24Decrease the radius of our test casting debug visualisation in TestCastFromProbes()
1:09:24Decrease the radius of our test casting debug visualisation in TestCastFromProbes()
1:09:24Decrease the radius of our test casting debug visualisation in TestCastFromProbes()
1:09:45Make TestCastFromProbes() clear the voxels each frame
1:09:45Make TestCastFromProbes() clear the voxels each frame
1:09:45Make TestCastFromProbes() clear the voxels each frame
1:11:02Check out our lighting
🏃
1:11:02Check out our lighting
🏃
1:11:02Check out our lighting
🏃
1:11:45Make UpdateAndRenderEntities() position our light source still nearer the ground
1:11:45Make UpdateAndRenderEntities() position our light source still nearer the ground
1:11:45Make UpdateAndRenderEntities() position our light source still nearer the ground
1:12:33Admire our fog-of-war lighting
🏃
1:12:33Admire our fog-of-war lighting
🏃
1:12:33Admire our fog-of-war lighting
🏃
1:12:49Decrease the light falloff time (thus increasing our light radius) in SpamVoxel()
1:12:49Decrease the light falloff time (thus increasing our light radius) in SpamVoxel()
1:12:49Decrease the light falloff time (thus increasing our light radius) in SpamVoxel()
1:13:12Admire our more farsighted fog-of-war lighting
🏃
1:13:12Admire our more farsighted fog-of-war lighting
🏃
1:13:12Admire our more farsighted fog-of-war lighting
🏃
1:13:41Disable IsTestCast in TestCastFromProbes()
1:13:41Disable IsTestCast in TestCastFromProbes()
1:13:41Disable IsTestCast in TestCastFromProbes()
1:14:05Admire our fog-of-war lighting without voxel debug visualisation
🏃
1:14:05Admire our fog-of-war lighting without voxel debug visualisation
🏃
1:14:05Admire our fog-of-war lighting without voxel debug visualisation
🏃
1:15:04Make UpdateAndRenderWorld() position the light source relative to GroundP
1:15:04Make UpdateAndRenderWorld() position the light source relative to GroundP
1:15:04Make UpdateAndRenderWorld() position the light source relative to GroundP
1:15:34Admire our more stable light, with the determination to handle blending and convection
🏃
1:15:34Admire our more stable light, with the determination to handle blending and convection
🏃
1:15:34Admire our more stable light, with the determination to handle blending and convection
🏃
1:18:15Q&A
🗩
1:18:15Q&A
🗩
1:18:15Q&A
🗩
1:19:22sahfortv Q: Isn't there an hour left?
🗪
1:19:22sahfortv Q: Isn't there an hour left?
🗪
1:19:22sahfortv Q: Isn't there an hour left?
🗪
1:19:53sneakybob_wot Q: would the particle system you had (heads popping out) be affected by the shadows at the moment?
🗪
1:19:53sneakybob_wot Q: would the particle system you had (heads popping out) be affected by the shadows at the moment?
🗪
1:19:53sneakybob_wot Q: would the particle system you had (heads popping out) be affected by the shadows at the moment?
🗪
1:20:09Check out the lighting on the particles
🏃
1:20:09Check out the lighting on the particles
🏃
1:20:09Check out the lighting on the particles
🏃
1:22:17Disable Global_Lighting_ShowProbes
1:22:17Disable Global_Lighting_ShowProbes
1:22:17Disable Global_Lighting_ShowProbes
1:22:25Check out our cleanly lit world
🏃
1:22:25Check out our cleanly lit world
🏃
1:22:25Check out our cleanly lit world
🏃
1:23:44vaualbus Q: Can we enable light for the debug interface so we see the impact of the code?
🗪
1:23:44vaualbus Q: Can we enable light for the debug interface so we see the impact of the code?
🗪
1:23:44vaualbus Q: Can we enable light for the debug interface so we see the impact of the code?
🗪
1:24:10tootac Q: Are you procrastinating on doing gameplay code and inventing problems to solve? Last time I checked (~3 months ago) you were saying you are about to start gameplay code in a couple of streams
🗪
1:24:10tootac Q: Are you procrastinating on doing gameplay code and inventing problems to solve? Last time I checked (~3 months ago) you were saying you are about to start gameplay code in a couple of streams
🗪
1:24:10tootac Q: Are you procrastinating on doing gameplay code and inventing problems to solve? Last time I checked (~3 months ago) you were saying you are about to start gameplay code in a couple of streams
🗪
1:24:56Admire our lighting
🏃
1:24:56Admire our lighting
🏃
1:24:56Admire our lighting
🏃
1:25:39polijn Just give the game code as an assignment to Jon. Last I heard he had time to spare
🗪
1:25:39polijn Just give the game code as an assignment to Jon. Last I heard he had time to spare
🗪
1:25:39polijn Just give the game code as an assignment to Jon. Last I heard he had time to spare
🗪
1:25:54ankut Q: Why are the debug lines a fixed sized buffer? Just 'cause it's throwaway code?
🗪
1:25:54ankut Q: Why are the debug lines a fixed sized buffer? Just 'cause it's throwaway code?
🗪
1:25:54ankut Q: Why are the debug lines a fixed sized buffer? Just 'cause it's throwaway code?
🗪
1:26:43dithinas Q: Do you have any thoughts on the trade-offs of making your data structures directly serializable versus having intermediate serialize / deserialize steps, i.e. data structures containing pointers being converted to offsets or indices
🗪
1:26:43dithinas Q: Do you have any thoughts on the trade-offs of making your data structures directly serializable versus having intermediate serialize / deserialize steps, i.e. data structures containing pointers being converted to offsets or indices
🗪
1:26:43dithinas Q: Do you have any thoughts on the trade-offs of making your data structures directly serializable versus having intermediate serialize / deserialize steps, i.e. data structures containing pointers being converted to offsets or indices
🗪
1:28:170lpbm Q: Are the bounces going to be computed also with the raytracer?
🗪
1:28:170lpbm Q: Are the bounces going to be computed also with the raytracer?
🗪
1:28:170lpbm Q: Are the bounces going to be computed also with the raytracer?
🗪
1:29:19Increase tCloseEnough in RayCast()
1:29:19Increase tCloseEnough in RayCast()
1:29:19Increase tCloseEnough in RayCast()
1:29:42Determine the tCloseEnough filtering to be garbage
🏃
1:29:42Determine the tCloseEnough filtering to be garbage
🏃
1:29:42Determine the tCloseEnough filtering to be garbage
🏃
1:30:33vaualbus Q: Can we add for a test a second bounce or it require more work?
🗪
1:30:33vaualbus Q: Can we add for a test a second bounce or it require more work?
🗪
1:30:33vaualbus Q: Can we add for a test a second bounce or it require more work?
🗪
1:31:18Temporarily make TestCastFromProbes() bounce our rays once
1:31:18Temporarily make TestCastFromProbes() bounce our rays once
1:31:18Temporarily make TestCastFromProbes() bounce our rays once
1:34:50Check out our hacked secondary bouncing of the ray cast lighting
🏃
1:34:50Check out our hacked secondary bouncing of the ray cast lighting
🏃
1:34:50Check out our hacked secondary bouncing of the ray cast lighting
🏃
1:36:16Delete the secondary bounce code from TestCastFromProbes()
1:36:16Delete the secondary bounce code from TestCastFromProbes()
1:36:16Delete the secondary bounce code from TestCastFromProbes()
1:36:43Check we didn't screw anything up there
🏃
1:36:43Check we didn't screw anything up there
🏃
1:36:43Check we didn't screw anything up there
🏃
1:37:04stevenlr Q: Do you plan on adding details on how sprites are lit? Right now they are full dark when the light is behind it. Maybe normal maps or some subsurface transport? Although I guess bounces will help with that anyway
🗪
1:37:04stevenlr Q: Do you plan on adding details on how sprites are lit? Right now they are full dark when the light is behind it. Maybe normal maps or some subsurface transport? Although I guess bounces will help with that anyway
🗪
1:37:04stevenlr Q: Do you plan on adding details on how sprites are lit? Right now they are full dark when the light is behind it. Maybe normal maps or some subsurface transport? Although I guess bounces will help with that anyway
🗪
1:37:45qiaoster Q: It's my second year programming and it feels like there's endless stuff to catch up before I can be a competent games programmer. What might I do to help with that?
🗪
1:37:45qiaoster Q: It's my second year programming and it feels like there's endless stuff to catch up before I can be a competent games programmer. What might I do to help with that?
🗪
1:37:45qiaoster Q: It's my second year programming and it feels like there's endless stuff to catch up before I can be a competent games programmer. What might I do to help with that?
🗪
1:39:12vaualbus Q: It should be SecCast not Cast?
🗪
1:39:12vaualbus Q: It should be SecCast not Cast?
🗪
1:39:12vaualbus Q: It should be SecCast not Cast?
🗪
1:39:21Reintroduce and fix the secondary bounce code in TestCastFromProbes()
1:39:21Reintroduce and fix the secondary bounce code in TestCastFromProbes()
1:39:21Reintroduce and fix the secondary bounce code in TestCastFromProbes()
1:39:45Check out our hacked secondary bouncing of the ray cast lighting
🏃
1:39:45Check out our hacked secondary bouncing of the ray cast lighting
🏃
1:39:45Check out our hacked secondary bouncing of the ray cast lighting
🏃
1:41:01Make SpamVoxel() take the LightP and LightC for secondary bounces to compute specially, dimming the light
1:41:01Make SpamVoxel() take the LightP and LightC for secondary bounces to compute specially, dimming the light
1:41:01Make SpamVoxel() take the LightP and LightC for secondary bounces to compute specially, dimming the light
1:43:42Check out our dimmed secondary bouncing of the ray cast lighting
🏃
1:43:42Check out our dimmed secondary bouncing of the ray cast lighting
🏃
1:43:42Check out our dimmed secondary bouncing of the ray cast lighting
🏃
1:44:41nickito97 Q: How are you going to handle bouncing off of different materials?
🗪
1:44:41nickito97 Q: How are you going to handle bouncing off of different materials?
🗪
1:44:41nickito97 Q: How are you going to handle bouncing off of different materials?
🗪
1:45:29timetravel1 Q: Which type of engine programming do you think the industry needs the most? Does it need more graphics programmers, or physics, or sound programmers for example?
🗪
1:45:29timetravel1 Q: Which type of engine programming do you think the industry needs the most? Does it need more graphics programmers, or physics, or sound programmers for example?
🗪
1:45:29timetravel1 Q: Which type of engine programming do you think the industry needs the most? Does it need more graphics programmers, or physics, or sound programmers for example?
🗪
1:47:43timetravel1 So the answer is "everything everywhere yes"
🗪
1:47:43timetravel1 So the answer is "everything everywhere yes"
🗪
1:47:43timetravel1 So the answer is "everything everywhere yes"
🗪
1:48:22iof_bastion Q: Are engine programmers really as in-demand as you say? I see that most AAA games are releasing with hundreds of employees but only like 4–6 engine programmers
🗪
1:48:22iof_bastion Q: Are engine programmers really as in-demand as you say? I see that most AAA games are releasing with hundreds of employees but only like 4–6 engine programmers
🗪
1:48:22iof_bastion Q: Are engine programmers really as in-demand as you say? I see that most AAA games are releasing with hundreds of employees but only like 4–6 engine programmers
🗪
1:49:58qiaoster Q: How much do game studios hire interns? Trying to find something for next year
🗪
1:49:58qiaoster Q: How much do game studios hire interns? Trying to find something for next year
🗪
1:49:58qiaoster Q: How much do game studios hire interns? Trying to find something for next year
🗪
1:50:44binarytoshokan Q: Following with the theme, what would you define as the minimum requirements to be a good engine programmer?
🗪
1:50:44binarytoshokan Q: Following with the theme, what would you define as the minimum requirements to be a good engine programmer?
🗪
1:50:44binarytoshokan Q: Following with the theme, what would you define as the minimum requirements to be a good engine programmer?
🗪
1:53:57an0nymal Q: Why aren't most studios willing to compensate appropriately in spite of the seemingly short supply of graphics programmers?
🗪
1:53:57an0nymal Q: Why aren't most studios willing to compensate appropriately in spite of the seemingly short supply of graphics programmers?
🗪
1:53:57an0nymal Q: Why aren't most studios willing to compensate appropriately in spite of the seemingly short supply of graphics programmers?
🗪
1:54:57centhusiast Q: Have you heard about Valve's ACO Mesa shader compiler for AMD GPU? Apparently it is replacing LLVM and it is a great thing for Linux gaming
🗪
1:54:57centhusiast Q: Have you heard about Valve's ACO Mesa shader compiler for AMD GPU? Apparently it is replacing LLVM and it is a great thing for Linux gaming
🗪
1:54:57centhusiast Q: Have you heard about Valve's ACO Mesa shader compiler for AMD GPU? Apparently it is replacing LLVM and it is a great thing for Linux gaming
🗪
1:55:24an0nymal Q: Relative to other positions on the team that may not require as extensive knowledge
🗪
1:55:24an0nymal Q: Relative to other positions on the team that may not require as extensive knowledge
🗪
1:55:24an0nymal Q: Relative to other positions on the team that may not require as extensive knowledge
🗪
1:57:23centhusiast Q: Have you heard about Valve's ACO Mesa shader compiler for AMD GPU? Apparently it is replacing LLVM and it is a great thing for Linux gaming
🗪
1:57:23centhusiast Q: Have you heard about Valve's ACO Mesa shader compiler for AMD GPU? Apparently it is replacing LLVM and it is a great thing for Linux gaming
🗪
1:57:23centhusiast Q: Have you heard about Valve's ACO Mesa shader compiler for AMD GPU? Apparently it is replacing LLVM and it is a great thing for Linux gaming
🗪
1:58:17an0nymal Q: Well, as a specific example, take Bethesda: They pay gameplay programmers 80–110k, but the graphics / engine programmer is 90–130k. Obviously, those numbers are from pay scale, glass door, etc, but most likely represent a decent sample size
🗪
1:58:17an0nymal Q: Well, as a specific example, take Bethesda: They pay gameplay programmers 80–110k, but the graphics / engine programmer is 90–130k. Obviously, those numbers are from pay scale, glass door, etc, but most likely represent a decent sample size
🗪
1:58:17an0nymal Q: Well, as a specific example, take Bethesda: They pay gameplay programmers 80–110k, but the graphics / engine programmer is 90–130k. Obviously, those numbers are from pay scale, glass door, etc, but most likely represent a decent sample size
🗪
2:01:28Wrap it up
🗩
2:01:28Wrap it up
🗩
2:01:28Wrap it up
🗩