Sampling Light Voxels with a Reflection Vector
?
?

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:01Recap and set the stage for the day
🗩
0:01Recap and set the stage for the day
🗩
0:01Recap and set the stage for the day
🗩
0:34Demo our tartan world with a view to sampling all of our voxels
🏃
0:34Demo our tartan world with a view to sampling all of our voxels
🏃
0:34Demo our tartan world with a view to sampling all of our voxels
🏃
2:19Consider optimising CompileZBiasProgram() to only sample from three voxels
📖
2:19Consider optimising CompileZBiasProgram() to only sample from three voxels
📖
2:19Consider optimising CompileZBiasProgram() to only sample from three voxels
📖
3:36Toggle off BuildSpatialPartitionForLighting() and ComputeLightPropagation() in EndLightingComputation()
3:36Toggle off BuildSpatialPartitionForLighting() and ComputeLightPropagation() in EndLightingComputation()
3:36Toggle off BuildSpatialPartitionForLighting() and ComputeLightPropagation() in EndLightingComputation()
4:08Nsight rendering time: 22ms / frame
🏃
4:08Nsight rendering time: 22ms / frame
🏃
4:08Nsight rendering time: 22ms / frame
🏃
5:00Capture a frame to see that the glTexSubImage3D() call takes most of our frame time, at 15.13ms
🏃
5:00Capture a frame to see that the glTexSubImage3D() call takes most of our frame time, at 15.13ms
🏃
5:00Capture a frame to see that the glTexSubImage3D() call takes most of our frame time, at 15.13ms
🏃
8:43Make OpenGLInit() rather than OpenGLEndFrame() set the texture parameters for each voxel
8:43Make OpenGLInit() rather than OpenGLEndFrame() set the texture parameters for each voxel
8:43Make OpenGLInit() rather than OpenGLEndFrame() set the texture parameters for each voxel
9:39Ensure that that has done nothing adverse
🏃
9:39Ensure that that has done nothing adverse
🏃
9:39Ensure that that has done nothing adverse
🏃
9:58Temporarily make OpenGLEndFrame() only submit the light probe textures ten times
9:58Temporarily make OpenGLEndFrame() only submit the light probe textures ten times
9:58Temporarily make OpenGLEndFrame() only submit the light probe textures ten times
10:57Nsight rendering time: 8ms / frame
🏃
10:57Nsight rendering time: 8ms / frame
🏃
10:57Nsight rendering time: 8ms / frame
🏃
12:04A few words on structured art, credited to Mike Biddlecombe
🗩
12:04A few words on structured art, credited to Mike Biddlecombe
🗩
12:04A few words on structured art, credited to Mike Biddlecombe
🗩
13:32Make EndLightingComputation() stuff structured art into all faces of our light probe voxels, with Green in the East
13:32Make EndLightingComputation() stuff structured art into all faces of our light probe voxels, with Green in the East
13:32Make EndLightingComputation() stuff structured art into all faces of our light probe voxels, with Green in the East
15:56See our red-striped world
🏃
15:56See our red-striped world
🏃
15:56See our red-striped world
🏃
16:38Enable CompileZBiasProgram() apply the colour of our East faces
16:38Enable CompileZBiasProgram() apply the colour of our East faces
16:38Enable CompileZBiasProgram() apply the colour of our East faces
18:01Demo RemedyBG's new .str feature
🏃
18:01Demo RemedyBG's new .str feature
🏃
18:01Demo RemedyBG's new .str feature
🏃
19:47Fix our typo in CompileZBiasProgram()
19:47Fix our typo in CompileZBiasProgram()
19:47Fix our typo in CompileZBiasProgram()
19:58See our red- and green-striped world
🏃
19:58See our red- and green-striped world
🏃
19:58See our red- and green-striped world
🏃
20:13Make EndLightingComputation() stuff structured art into the South, North, Down and Up faces of our light probe voxels
20:13Make EndLightingComputation() stuff structured art into the South, North, Down and Up faces of our light probe voxels
20:13Make EndLightingComputation() stuff structured art into the South, North, Down and Up faces of our light probe voxels
22:17See that our green striping is not as expected
🏃
22:17See that our green striping is not as expected
🏃
22:17See that our green striping is not as expected
🏃
22:39Make EndLightingComputation() increase the spacing of our stripes
22:39Make EndLightingComputation() increase the spacing of our stripes
22:39Make EndLightingComputation() increase the spacing of our stripes
24:27See our distantly-spaced stripes
🏃
24:27See our distantly-spaced stripes
🏃
24:27See our distantly-spaced stripes
🏃
24:41Enable our closer-spaced stripes in EndLightingComputation()
24:41Enable our closer-spaced stripes in EndLightingComputation()
24:41Enable our closer-spaced stripes in EndLightingComputation()
24:48See our closer-spaced stripes
🏃
24:48See our closer-spaced stripes
🏃
24:48See our closer-spaced stripes
🏃
25:08Nsight rendering time: 18ms / frame
🏃
25:08Nsight rendering time: 18ms / frame
🏃
25:08Nsight rendering time: 18ms / frame
🏃
25:29Capture a frame to determine that we must be CPU-bound
🏃
25:29Capture a frame to determine that we must be CPU-bound
🏃
25:29Capture a frame to determine that we must be CPU-bound
🏃
26:10Toggle off the structured art code in EndLightingComputation()
26:10Toggle off the structured art code in EndLightingComputation()
26:10Toggle off the structured art code in EndLightingComputation()
26:21Nsight rendering time: 6 to 14ms / frame
🏃
26:21Nsight rendering time: 6 to 14ms / frame
🏃
26:21Nsight rendering time: 6 to 14ms / frame
🏃
27:22Check our GPU model: NVIDIA GeForce GTX 1080
🗹
27:22Check our GPU model: NVIDIA GeForce GTX 1080
🗹
27:22Check our GPU model: NVIDIA GeForce GTX 1080
🗹
27:51Consider how best to fill our pixels, not using GPU Voxelisation because of its unordered access view
🗩
27:51Consider how best to fill our pixels, not using GPU Voxelisation because of its unordered access view
🗩
27:51Consider how best to fill our pixels, not using GPU Voxelisation because of its unordered access view
🗩
35:24Disable voxel blending in OpenGLInit(), so we can see their boundaries
35:24Disable voxel blending in OpenGLInit(), so we can see their boundaries
35:24Disable voxel blending in OpenGLInit(), so we can see their boundaries
36:15Gauge the width of our voxels
🏃
36:15Gauge the width of our voxels
🏃
36:15Gauge the width of our voxels
🏃
37:00Make UpdateAndRenderWorld() set the WorldCameraRect based on the ExpectedFocus
37:00Make UpdateAndRenderWorld() set the WorldCameraRect based on the ExpectedFocus
37:00Make UpdateAndRenderWorld() set the WorldCameraRect based on the ExpectedFocus
39:59See that our entire viewable region is fully lit
🏃
39:59See that our entire viewable region is fully lit
🏃
39:59See that our entire viewable region is fully lit
🏃
41:07Consider our voxel grid to be too detailed
🏃
41:07Consider our voxel grid to be too detailed
🏃
41:07Consider our voxel grid to be too detailed
🏃
41:35Reduce our LIGHT_LOOKUP_VOXEL_DIM from 128 to 64
41:35Reduce our LIGHT_LOOKUP_VOXEL_DIM from 128 to 64
41:35Reduce our LIGHT_LOOKUP_VOXEL_DIM from 128 to 64
41:59Consider our voxel grid to be more reasonably detailed
🏃
41:59Consider our voxel grid to be more reasonably detailed
🏃
41:59Consider our voxel grid to be more reasonably detailed
🏃
42:16Reduce our LIGHT_LOOKUP_VOXEL_DIM from 64 to 32
42:16Reduce our LIGHT_LOOKUP_VOXEL_DIM from 64 to 32
42:16Reduce our LIGHT_LOOKUP_VOXEL_DIM from 64 to 32
42:28Consider our voxel grid to be roughly the right size, but the Y-band to be too thick
🏃
42:28Consider our voxel grid to be roughly the right size, but the Y-band to be too thick
🏃
42:28Consider our voxel grid to be roughly the right size, but the Y-band to be too thick
🏃
44:07Scan through CompileZBiasProgram() and EndLightingComputation() for possible bugs
📖
44:07Scan through CompileZBiasProgram() and EndLightingComputation() for possible bugs
📖
44:07Scan through CompileZBiasProgram() and EndLightingComputation() for possible bugs
📖
46:48See eight narrow stripes along the X axis
🏃
46:48See eight narrow stripes along the X axis
🏃
46:48See eight narrow stripes along the X axis
🏃
47:06Understanding modulo operation
📖
47:06Understanding modulo operation
📖
47:06Understanding modulo operation
📖
47:43Toggle off the extraneous stripes EndLightingComputation()
47:43Toggle off the extraneous stripes EndLightingComputation()
47:43Toggle off the extraneous stripes EndLightingComputation()
47:56See four red stripes along X
🏃
47:56See four red stripes along X
🏃
47:56See four red stripes along X
🏃
48:47Try to apply Green to the LightWest in EndLightingComputation()
48:47Try to apply Green to the LightWest in EndLightingComputation()
48:47Try to apply Green to the LightWest in EndLightingComputation()
49:26See no difference, to determine that our problem is in the filling / sampling of all faces of the voxels
🏃
49:26See no difference, to determine that our problem is in the filling / sampling of all faces of the voxels
🏃
49:26See no difference, to determine that our problem is in the filling / sampling of all faces of the voxels
🏃
49:47Disable the LightBounds resizing and positioning code in UpdateAndRenderWorld()
49:47Disable the LightBounds resizing and positioning code in UpdateAndRenderWorld()
49:47Disable the LightBounds resizing and positioning code in UpdateAndRenderWorld()
51:46Traverse the world with the determination to work on our spatial query
🏃
51:46Traverse the world with the determination to work on our spatial query
🏃
51:46Traverse the world with the determination to work on our spatial query
🏃
52:37Scan the code for any problems in our voxel specifications
📖
52:37Scan the code for any problems in our voxel specifications
📖
52:37Scan the code for any problems in our voxel specifications
📖
53:53See no green stripes in Y, step in to UpdateAndRenderWorld() and inspect our InvLightDim
🏃
53:53See no green stripes in Y, step in to UpdateAndRenderWorld() and inspect our InvLightDim
🏃
53:53See no green stripes in Y, step in to UpdateAndRenderWorld() and inspect our InvLightDim
🏃
56:11Break in to a voxel submission in OpenGLEndFrame() and inspect the LightData
🏃
56:11Break in to a voxel submission in OpenGLEndFrame() and inspect the LightData
🏃
56:11Break in to a voxel submission in OpenGLEndFrame() and inspect the LightData
🏃
59:41Scrutinise our test striping code in EndLightingComputation(), and the voxel initialisation code in OpenGLBeginFrame()
📖
59:41Scrutinise our test striping code in EndLightingComputation(), and the voxel initialisation code in OpenGLBeginFrame()
📖
59:41Scrutinise our test striping code in EndLightingComputation(), and the voxel initialisation code in OpenGLBeginFrame()
📖
1:02:46Excise stale OpenGL light values, and size the LightData in open_gl by the LIGHT_LOOKUP_VOXEL_DIM
1:02:46Excise stale OpenGL light values, and size the LightData in open_gl by the LIGHT_LOOKUP_VOXEL_DIM
1:02:46Excise stale OpenGL light values, and size the LightData in open_gl by the LIGHT_LOOKUP_VOXEL_DIM
1:05:13See our expected green stripes in Y
🏃
1:05:13See our expected green stripes in Y
🏃
1:05:13See our expected green stripes in Y
🏃
1:05:32Make EndLightingComputation() colour our lighting bounds
1:05:32Make EndLightingComputation() colour our lighting bounds
1:05:32Make EndLightingComputation() colour our lighting bounds
1:06:30See our four stripes in X and Y
🏃
1:06:30See our four stripes in X and Y
🏃
1:06:30See our four stripes in X and Y
🏃
1:07:21Consider using non-uniform voxel bounds, e.g. 64 × 64 × 32
🏃
1:07:21Consider using non-uniform voxel bounds, e.g. 64 × 64 × 32
🏃
1:07:21Consider using non-uniform voxel bounds, e.g. 64 × 64 × 32
🏃
1:09:05Make UpdateAndRenderWorld() form a square LightBounds
1:09:05Make UpdateAndRenderWorld() form a square LightBounds
1:09:05Make UpdateAndRenderWorld() form a square LightBounds
1:10:18See our square light bounds
🏃
1:10:18See our square light bounds
🏃
1:10:18See our square light bounds
🏃
1:11:06Make EndLightingComputation() stripe every other voxel
1:11:06Make EndLightingComputation() stripe every other voxel
1:11:06Make EndLightingComputation() stripe every other voxel
1:11:32See that our light probes tend to span two voxels
🏃
1:11:32See that our light probes tend to span two voxels
🏃
1:11:32See that our light probes tend to span two voxels
🏃
1:12:43Decrease the LIGHT_LOOKUP_VOXEL_DIM from 32 to 16
1:12:43Decrease the LIGHT_LOOKUP_VOXEL_DIM from 32 to 16
1:12:43Decrease the LIGHT_LOOKUP_VOXEL_DIM from 32 to 16
1:12:55See that we have roughly one voxel per light probe
🏃
1:12:55See that we have roughly one voxel per light probe
🏃
1:12:55See that we have roughly one voxel per light probe
🏃
1:14:18Increase the LIGHT_LOOKUP_VOXEL_DIM from 16 to 32
1:14:18Increase the LIGHT_LOOKUP_VOXEL_DIM from 16 to 32
1:14:18Increase the LIGHT_LOOKUP_VOXEL_DIM from 16 to 32
1:14:36Determine to light our world
🏃
1:14:36Determine to light our world
🏃
1:14:36Determine to light our world
🏃
1:14:45Nuke our striped lighting, and stuff the West face of all voxels with white
1:14:45Nuke our striped lighting, and stuff the West face of all voxels with white
1:14:45Nuke our striped lighting, and stuff the West face of all voxels with white
1:15:42See our uniformly lit world
🏃
1:15:42See our uniformly lit world
🏃
1:15:42See our uniformly lit world
🏃
1:16:05Consider our lighting equation
📖
1:16:05Consider our lighting equation
📖
1:16:05Consider our lighting equation
📖
1:20:57Simple Fragment Lighting
🖌
1:20:57Simple Fragment Lighting
🖌
1:20:57Simple Fragment Lighting
🖌
1:25:59Reflection Vector
🖌
1:25:59Reflection Vector
🖌
1:25:59Reflection Vector
🖌
1:28:52HOWTO search "reflection" in the episode guide1
📖
1:28:52HOWTO search "reflection" in the episode guide1
📖
1:28:52HOWTO search "reflection" in the episode guide1
📖
1:29:19Compute our reflection vector in CompileZBiasProgram()2
1:29:19Compute our reflection vector in CompileZBiasProgram()2
1:29:19Compute our reflection vector in CompileZBiasProgram()2
1:32:36Run successfully
🏃
1:32:36Run successfully
🏃
1:32:36Run successfully
🏃
1:32:38Make CompileZBiasProgram() sample the lighting specularly from the direction of the reflection vector, introducing GetIrradiance()
1:32:38Make CompileZBiasProgram() sample the lighting specularly from the direction of the reflection vector, introducing GetIrradiance()
1:32:38Make CompileZBiasProgram() sample the lighting specularly from the direction of the reflection vector, introducing GetIrradiance()
1:37:31See our west-lit world
🏃
1:37:31See our west-lit world
🏃
1:37:31See our west-lit world
🏃
1:37:46Check our lighting equation in CompileZBiasProgram()
📖
1:37:46Check our lighting equation in CompileZBiasProgram()
📖
1:37:46Check our lighting equation in CompileZBiasProgram()
📖
1:39:30Consider our lighting to be exactly right, except for the falloff
🏃
1:39:30Consider our lighting to be exactly right, except for the falloff
🏃
1:39:30Consider our lighting to be exactly right, except for the falloff
🏃
1:40:58Try making EndLightingComputation() light from the East
1:40:58Try making EndLightingComputation() light from the East
1:40:58Try making EndLightingComputation() light from the East
1:41:22See our east-lit world
🏃
1:41:22See our east-lit world
🏃
1:41:22See our east-lit world
🏃
1:41:44Note that we're computing the lighting based on the debug camera
🏃
1:41:44Note that we're computing the lighting based on the debug camera
🏃
1:41:44Note that we're computing the lighting based on the debug camera
🏃
1:42:29Try making EndLightingComputation() light from the South
1:42:29Try making EndLightingComputation() light from the South
1:42:29Try making EndLightingComputation() light from the South
1:42:49See our south-lit world, and wonder if the reflection is wrong
🏃
1:42:49See our south-lit world, and wonder if the reflection is wrong
🏃
1:42:49See our south-lit world, and wonder if the reflection is wrong
🏃
1:44:07Scrutinise our lighting normals in CompileZBiasProgram()
📖
1:44:07Scrutinise our lighting normals in CompileZBiasProgram()
📖
1:44:07Scrutinise our lighting normals in CompileZBiasProgram()
📖
1:46:06Note that our sprite normals are probably wrong
🏃
1:46:06Note that our sprite normals are probably wrong
🏃
1:46:06Note that our sprite normals are probably wrong
🏃
1:47:14Try making EndLightingComputation() light from the North
1:47:14Try making EndLightingComputation() light from the North
1:47:14Try making EndLightingComputation() light from the North
1:47:32See our north-lit world
🏃
1:47:32See our north-lit world
🏃
1:47:32See our north-lit world
🏃
1:47:40Try making EndLightingComputation() light from Below
1:47:40Try making EndLightingComputation() light from Below
1:47:40Try making EndLightingComputation() light from Below
1:47:55See our below-lit world
🏃
1:47:55See our below-lit world
🏃
1:47:55See our below-lit world
🏃
1:48:04Try making EndLightingComputation() light from Above
1:48:04Try making EndLightingComputation() light from Above
1:48:04Try making EndLightingComputation() light from Above
1:48:14See our above-lit world
🏃
1:48:14See our above-lit world
🏃
1:48:14See our above-lit world
🏃
1:48:27Make EndLightingComputation() light purple from above and yellow from below
1:48:27Make EndLightingComputation() light purple from above and yellow from below
1:48:27Make EndLightingComputation() light purple from above and yellow from below
1:49:05See our colourfully-lit world
🏃
1:49:05See our colourfully-lit world
🏃
1:49:05See our colourfully-lit world
🏃
1:50:13Q&A
🗩
1:50:13Q&A
🗩
1:50:13Q&A
🗩
1:50:47somebody_took_my_name Q: Shouldn't it be R = I + 2*…, adding instead of subtracting the vectors?
🗪
1:50:47somebody_took_my_name Q: Shouldn't it be R = I + 2*…, adding instead of subtracting the vectors?
🗪
1:50:47somebody_took_my_name Q: Shouldn't it be R = I + 2*…, adding instead of subtracting the vectors?
🗪
1:51:42Flip the reflection vector computation in CompileZBiasProgram()
1:51:42Flip the reflection vector computation in CompileZBiasProgram()
1:51:42Flip the reflection vector computation in CompileZBiasProgram()
1:52:10See our (in)correctly lit world
🏃
1:52:10See our (in)correctly lit world
🏃
1:52:10See our (in)correctly lit world
🏃
1:53:52xxthebigfoxx Q: I think subtraction is right, actually, isn't it?
🗪
1:53:52xxthebigfoxx Q: I think subtraction is right, actually, isn't it?
🗪
1:53:52xxthebigfoxx Q: I think subtraction is right, actually, isn't it?
🗪
1:54:01Reflection Vector Direction
🖌
1:54:01Reflection Vector Direction
🖌
1:54:01Reflection Vector Direction
🖌
1:56:27Flip back the reflection vector computation in CompileZBiasProgram()
1:56:27Flip back the reflection vector computation in CompileZBiasProgram()
1:56:27Flip back the reflection vector computation in CompileZBiasProgram()
1:56:42Reflection Vector Direction, continued
🖌
1:56:42Reflection Vector Direction, continued
🖌
1:56:42Reflection Vector Direction, continued
🖌
1:58:09See our purple sky reflection
🏃
1:58:09See our purple sky reflection
🏃
1:58:09See our purple sky reflection
🏃
1:58:37vaualbus Q: So where would you put material information for the lighting? In the ray tracing part of the algorithm, that we still have not plugged in, or in the shader?
🗪
1:58:37vaualbus Q: So where would you put material information for the lighting? In the ray tracing part of the algorithm, that we still have not plugged in, or in the shader?
🗪
1:58:37vaualbus Q: So where would you put material information for the lighting? In the ray tracing part of the algorithm, that we still have not plugged in, or in the shader?
🗪
2:03:30xxthebigfoxx Q: Are the AVX load instructions actually fast? Have you tested them?
🗪
2:03:30xxthebigfoxx Q: Are the AVX load instructions actually fast? Have you tested them?
🗪
2:03:30xxthebigfoxx Q: Are the AVX load instructions actually fast? Have you tested them?
🗪
2:04:31vaualbus Q: Like this photo?3
🗪
2:04:31vaualbus Q: Like this photo?3
🗪
2:04:31vaualbus Q: Like this photo?3
🗪
2:06:16vaualbus Q: Were the PS3's SPUs good at texture sampling?
🗪
2:06:16vaualbus Q: Were the PS3's SPUs good at texture sampling?
🗪
2:06:16vaualbus Q: Were the PS3's SPUs good at texture sampling?
🗪
2:09:41Wrap it up
🗩
2:09:41Wrap it up
🗩
2:09:41Wrap it up
🗩