Handmade Hero»Episode Guide
Moving to a Voxels-only Lighting Approach
?
?

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:03Recap and set the stage for the day streaming from a new location
🗩
0:03Recap and set the stage for the day streaming from a new location
🗩
0:03Recap and set the stage for the day streaming from a new location
🗩
1:11Demo our new signed distance field-based lighting solution
🏃
1:11Demo our new signed distance field-based lighting solution
🏃
1:11Demo our new signed distance field-based lighting solution
🏃
4:39Determine to work on our light transport, with an eye on outputting it to our signed distance field voxel grid
🏃
4:39Determine to work on our light transport, with an eye on outputting it to our signed distance field voxel grid
🏃
4:39Determine to work on our light transport, with an eye on outputting it to our signed distance field voxel grid
🏃
7:14Light transport: 1) Sampling
🏃
7:14Light transport: 1) Sampling
🏃
7:14Light transport: 1) Sampling
🏃
8:02Light transport: 2) Storage (in light probes) for reconstruction per voxel, e.g. spherical harmonics, k-means clustering
🏃
8:02Light transport: 2) Storage (in light probes) for reconstruction per voxel, e.g. spherical harmonics, k-means clustering
🏃
8:02Light transport: 2) Storage (in light probes) for reconstruction per voxel, e.g. spherical harmonics, k-means clustering
🏃
15:31Determine to start with direct ray casting of one light
🏃
15:31Determine to start with direct ray casting of one light
🏃
15:31Determine to start with direct ray casting of one light
🏃
18:36Turn off all but one of the test lights in EndLightingComputation()
18:36Turn off all but one of the test lights in EndLightingComputation()
18:36Turn off all but one of the test lights in EndLightingComputation()
19:18See our single light source, and plan to: 0) Move to screen-space voxel for light reconstruction; then 1) Compute direct ray casting of one ray
🏃
19:18See our single light source, and plan to: 0) Move to screen-space voxel for light reconstruction; then 1) Compute direct ray casting of one ray
🏃
19:18See our single light source, and plan to: 0) Move to screen-space voxel for light reconstruction; then 1) Compute direct ray casting of one ray
🏃
21:50Update the checkerboard to handle one light source in EndLightingComputation()
21:50Update the checkerboard to handle one light source in EndLightingComputation()
21:50Update the checkerboard to handle one light source in EndLightingComputation()
23:04Our checkerboard still works
🏃
23:04Our checkerboard still works
🏃
23:04Our checkerboard still works
🏃
23:15Begin to update the light probes code in EndLightingComputation()
📖
23:15Begin to update the light probes code in EndLightingComputation()
📖
23:15Begin to update the light probes code in EndLightingComputation()
📖
25:45Consider moving to a voxels-only lighting approach
🗩
25:45Consider moving to a voxels-only lighting approach
🗩
25:45Consider moving to a voxels-only lighting approach
🗩
31:18Mostly replace light probes in lighting_solution with a newly introduced light_voxel_cell
31:18Mostly replace light probes in lighting_solution with a newly introduced light_voxel_cell
31:18Mostly replace light probes in lighting_solution with a newly introduced light_voxel_cell
38:05Switch EndLightComputation() over from light probes to cells
38:05Switch EndLightComputation() over from light probes to cells
38:05Switch EndLightComputation() over from light probes to cells
42:18We got a puss
🗩
42:18We got a puss
🗩
42:18We got a puss
🗩
43:59Make EndLightingComputation() initialise our larger voxel, from where we access our small voxel cell
43:59Make EndLightingComputation() initialise our larger voxel, from where we access our small voxel cell
43:59Make EndLightingComputation() initialise our larger voxel, from where we access our small voxel cell
55:13Fix compile errors, making InitLighting() handle our new light_voxel_cell
55:13Fix compile errors, making InitLighting() handle our new light_voxel_cell
55:13Fix compile errors, making InitLighting() handle our new light_voxel_cell
59:11Determine to get the voxels tracking properly
🗩
59:11Determine to get the voxels tracking properly
🗩
59:11Determine to get the voxels tracking properly
🗩
1:01:58Stably position the lighting voxel grid in absolute world space, making UpdateAndRenderWorld() pass the Camera.P to BeginLightingComputation()
1:01:58Stably position the lighting voxel grid in absolute world space, making UpdateAndRenderWorld() pass the Camera.P to BeginLightingComputation()
1:01:58Stably position the lighting voxel grid in absolute world space, making UpdateAndRenderWorld() pass the Camera.P to BeginLightingComputation()
1:10:03Begin to make BeginLightingComputation() align the lighting voxel grid with our view
1:10:03Begin to make BeginLightingComputation() align the lighting voxel grid with our view
1:10:03Begin to make BeginLightingComputation() align the lighting voxel grid with our view
1:26:12Gather peanuts
🗹
1:26:12Gather peanuts
🗹
1:26:12Gather peanuts
🗹
1:26:47Return to crunch on some peanuts and consider how to align our view to a whole-number multiple of the voxel call dimension
🗩
1:26:47Return to crunch on some peanuts and consider how to align our view to a whole-number multiple of the voxel call dimension
🗩
1:26:47Return to crunch on some peanuts and consider how to align our view to a whole-number multiple of the voxel call dimension
🗩
1:30:01Day 566
🖌
1:30:01Day 566
🖌
1:30:01Day 566
🖌
1:31:52Aligned Voxels
🖌
1:31:52Aligned Voxels
🖌
1:31:52Aligned Voxels
🖌
1:43:21Research modulus distribution1
📖
1:43:21Research modulus distribution1
📖
1:43:21Research modulus distribution1
📖
1:45:42Modular multiplication,2 or using a light cell dimension of a power of 2 to easily align the grid with our view
🖌
1:45:42Modular multiplication,2 or using a light cell dimension of a power of 2 to easily align the grid with our view
🖌
1:45:42Modular multiplication,2 or using a light cell dimension of a power of 2 to easily align the grid with our view
🖌
1:49:18Enable BeginLightingComputation() to align the lighting voxel grid with our view
1:49:18Enable BeginLightingComputation() to align the lighting voxel grid with our view
1:49:18Enable BeginLightingComputation() to align the lighting voxel grid with our view
1:54:20Q&A
🗩
1:54:20Q&A
🗩
1:54:20Q&A
🗩
1:54:35somebody_took_my_name Q: It's day 566
🗪
1:54:35somebody_took_my_name Q: It's day 566
🗪
1:54:35somebody_took_my_name Q: It's day 566
🗪
1:55:02longboolean Q: You talking about non-realism but good looking art got me thinking, do you plan on having game entities that manipulate light in extremely non-real ways? Like light absorption that sucks the light out of an area or perverts it in some way? (Inversion, RGB-swapping, messing with normals etc.) I'm thinking like dark magic kind of effect.
🗪
1:55:02longboolean Q: You talking about non-realism but good looking art got me thinking, do you plan on having game entities that manipulate light in extremely non-real ways? Like light absorption that sucks the light out of an area or perverts it in some way? (Inversion, RGB-swapping, messing with normals etc.) I'm thinking like dark magic kind of effect.
🗪
1:55:02longboolean Q: You talking about non-realism but good looking art got me thinking, do you plan on having game entities that manipulate light in extremely non-real ways? Like light absorption that sucks the light out of an area or perverts it in some way? (Inversion, RGB-swapping, messing with normals etc.) I'm thinking like dark magic kind of effect.
🗪
1:55:55maliusarth Q: Why not use % directly?
🗪
1:55:55maliusarth Q: Why not use % directly?
🗪
1:55:55maliusarth Q: Why not use % directly?
🗪
1:57:41sagian2005 Q: Couldn't you contrive it so that ChunkDim is always an even multiple of LightCellDim?
🗪
1:57:41sagian2005 Q: Couldn't you contrive it so that ChunkDim is always an even multiple of LightCellDim?
🗪
1:57:41sagian2005 Q: Couldn't you contrive it so that ChunkDim is always an even multiple of LightCellDim?
🗪
1:58:41Consider deriving our LightCellDim from the WorldChunkDimInMeters, for easy alignment
1:58:41Consider deriving our LightCellDim from the WorldChunkDimInMeters, for easy alignment
1:58:41Consider deriving our LightCellDim from the WorldChunkDimInMeters, for easy alignment
1:59:42culdevu Q: A thing that I have trouble with is what happened to you a few minutes ago. I found the math.stackexchange pages perfectly readable, and I'd have no idea that anyone wouldn't be able to read it. How do you put yourself in other people's shoes when you teach? If I'm writing things online, should I always try to state things in terms of notation that beginners would understand?
🗪
1:59:42culdevu Q: A thing that I have trouble with is what happened to you a few minutes ago. I found the math.stackexchange pages perfectly readable, and I'd have no idea that anyone wouldn't be able to read it. How do you put yourself in other people's shoes when you teach? If I'm writing things online, should I always try to state things in terms of notation that beginners would understand?
🗪
1:59:42culdevu Q: A thing that I have trouble with is what happened to you a few minutes ago. I found the math.stackexchange pages perfectly readable, and I'd have no idea that anyone wouldn't be able to read it. How do you put yourself in other people's shoes when you teach? If I'm writing things online, should I always try to state things in terms of notation that beginners would understand?
🗪
2:00:01rationalcoder Q: I'm missing something fundamental about spherical harmonics. I get the idea of decomposing areas into spheres, but I don't get how you could use something like that to accumulate some representation of light that you could reconstruct. Would be willing to provide an intro sometime?
🗪
2:00:01rationalcoder Q: I'm missing something fundamental about spherical harmonics. I get the idea of decomposing areas into spheres, but I don't get how you could use something like that to accumulate some representation of light that you could reconstruct. Would be willing to provide an intro sometime?
🗪
2:00:01rationalcoder Q: I'm missing something fundamental about spherical harmonics. I get the idea of decomposing areas into spheres, but I don't get how you could use something like that to accumulate some representation of light that you could reconstruct. Would be willing to provide an intro sometime?
🗪
2:03:58culdevu Q: Yeah, essentially, or maybe anything with lots of jargon that's kinda essential to working with the subject seriously. I find myself on the other side a lot when I'm doing, like, FPGA stuff and I have no idea what people are talking about, but once I learn all of the jargon it becomes second nature to think about things in those terms. If that makes sense3,4
🗪
2:03:58culdevu Q: Yeah, essentially, or maybe anything with lots of jargon that's kinda essential to working with the subject seriously. I find myself on the other side a lot when I'm doing, like, FPGA stuff and I have no idea what people are talking about, but once I learn all of the jargon it becomes second nature to think about things in those terms. If that makes sense3,4
🗪
2:03:58culdevu Q: Yeah, essentially, or maybe anything with lots of jargon that's kinda essential to working with the subject seriously. I find myself on the other side a lot when I'm doing, like, FPGA stuff and I have no idea what people are talking about, but once I learn all of the jargon it becomes second nature to think about things in those terms. If that makes sense3,4
🗪
2:16:27rationalcoder Q: Thanks. I guess I put too much emphasis on accumulation and reconstruction. I can reason about what you just said about orthogonality and addition. My misunderstanding is more fundamental. I understand how you can use ray tracing to get light intensities and colors at probe points, which can be passed to your fragment shader, but I don't get how you can get some spherical representation of light at probe points, and what the heck your fragment shader would do with it
🗪
2:16:27rationalcoder Q: Thanks. I guess I put too much emphasis on accumulation and reconstruction. I can reason about what you just said about orthogonality and addition. My misunderstanding is more fundamental. I understand how you can use ray tracing to get light intensities and colors at probe points, which can be passed to your fragment shader, but I don't get how you can get some spherical representation of light at probe points, and what the heck your fragment shader would do with it
🗪
2:16:27rationalcoder Q: Thanks. I guess I put too much emphasis on accumulation and reconstruction. I can reason about what you just said about orthogonality and addition. My misunderstanding is more fundamental. I understand how you can use ray tracing to get light intensities and colors at probe points, which can be passed to your fragment shader, but I don't get how you can get some spherical representation of light at probe points, and what the heck your fragment shader would do with it
🗪
2:20:17That's the end of the Qs
🗩
2:20:17That's the end of the Qs
🗩
2:20:17That's the end of the Qs
🗩
2:20:43We are looking for generally applicable novice questions5
🗩
2:20:43We are looking for generally applicable novice questions5
🗩
2:20:43We are looking for generally applicable novice questions5
🗩
2:23:36That's it for today
🗩
2:23:36That's it for today
🗩
2:23:36That's it for today
🗩