Handmade Hero»Episode Guide
Generating Sampling Spheres into an INL
?
?

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:00Recap and set the stage for the day, with a plug of Daily MOBA Hero1
🗩
0:00Recap and set the stage for the day, with a plug of Daily MOBA Hero1
🗩
0:00Recap and set the stage for the day, with a plug of Daily MOBA Hero1
🗩
2:21Demo the presence of lighting probes in the world, with a view to colouring them
🏃
2:21Demo the presence of lighting probes in the world, with a view to colouring them
🏃
2:21Demo the presence of lighting probes in the world, with a view to colouring them
🏃
6:15Set up to: 1) Plug together the light probes from the entity system and lighting system; 2) Insert the light probes into the spacial index; and 3) Build our directional sampling support structures
🗩
6:15Set up to: 1) Plug together the light probes from the entity system and lighting system; 2) Insert the light probes into the spacial index; and 3) Build our directional sampling support structures
🗩
6:15Set up to: 1) Plug together the light probes from the entity system and lighting system; 2) Insert the light probes into the spacial index; and 3) Build our directional sampling support structures
🗩
8:12Check how light probes are stored in the 'Dynamic Diffuse Global Illumination with Ray-Traced Irradiance Fields' paper2
📖
8:12Check how light probes are stored in the 'Dynamic Diffuse Global Illumination with Ray-Traced Irradiance Fields' paper2
📖
8:12Check how light probes are stored in the 'Dynamic Diffuse Global Illumination with Ray-Traced Irradiance Fields' paper2
📖
12:09Note the problem of sampling the corner of a cube
📖
12:09Note the problem of sampling the corner of a cube
📖
12:09Note the problem of sampling the corner of a cube
📖
14:46Sampling Contribution
🖌
14:46Sampling Contribution
🖌
14:46Sampling Contribution
🖌
19:22Enable ComputeLightPropagation() to perform a blended gather from all six sides of the cube, introducing light_sampling_sphere for lighting_solution to contain
19:22Enable ComputeLightPropagation() to perform a blended gather from all six sides of the cube, introducing light_sampling_sphere for lighting_solution to contain
19:22Enable ComputeLightPropagation() to perform a blended gather from all six sides of the cube, introducing light_sampling_sphere for lighting_solution to contain
28:20Note the problem that our LIGHTING_PATTERN_GENERATOR() generates hemispherical patterns
📖
28:20Note the problem that our LIGHTING_PATTERN_GENERATOR() generates hemispherical patterns
📖
28:20Note the problem that our LIGHTING_PATTERN_GENERATOR() generates hemispherical patterns
📖
30:30Remove LIGHTING_PATTERN_GENERATOR() in favour of the lone GeneratePoissonSamples(), and make the latter generate samples around the entire sphere
30:30Remove LIGHTING_PATTERN_GENERATOR() in favour of the lone GeneratePoissonSamples(), and make the latter generate samples around the entire sphere
30:30Remove LIGHTING_PATTERN_GENERATOR() in favour of the lone GeneratePoissonSamples(), and make the latter generate samples around the entire sphere
38:06Consider how to produce a well-distributed spherical sampling pattern, e.g. using blue noise
🗩
38:06Consider how to produce a well-distributed spherical sampling pattern, e.g. using blue noise
🗩
38:06Consider how to produce a well-distributed spherical sampling pattern, e.g. using blue noise
🗩
39:56Create hhsphere.cpp to generate handmade_sampling_spheres.inl for handmade_lighting.h to include
39:56Create hhsphere.cpp to generate handmade_sampling_spheres.inl for handmade_lighting.h to include
39:56Create hhsphere.cpp to generate handmade_sampling_spheres.inl for handmade_lighting.h to include
44:05Spec out an example handmade_sampling_spheres.inl
44:05Spec out an example handmade_sampling_spheres.inl
44:05Spec out an example handmade_sampling_spheres.inl
50:08See that our light probes exist as usual
🏃
50:08See that our light probes exist as usual
🏃
50:08See that our light probes exist as usual
🏃
50:41Set up LightingTest() to draw our light probe sampling directions
50:41Set up LightingTest() to draw our light probe sampling directions
50:41Set up LightingTest() to draw our light probe sampling directions
57:20See our lone sampling direction
🏃
57:20See our lone sampling direction
🏃
57:20See our lone sampling direction
🏃
57:44Embark on the generation of handmade_sampling_spheres.inl, introducing OutputBlah()
57:44Embark on the generation of handmade_sampling_spheres.inl, introducing OutputBlah()
57:44Embark on the generation of handmade_sampling_spheres.inl, introducing OutputBlah()
1:04:52A few thoughts on spherical harmonics
🗩
1:04:52A few thoughts on spherical harmonics
🗩
1:04:52A few thoughts on spherical harmonics
🗩
1:05:43Finish up our initial handmade_sampling_spheres.inl generator, renaming OutputBlah() to OutputSphereINL()
1:05:43Finish up our initial handmade_sampling_spheres.inl generator, renaming OutputBlah() to OutputSphereINL()
1:05:43Finish up our initial handmade_sampling_spheres.inl generator, renaming OutputBlah() to OutputSphereINL()
1:11:22Invoke hhsphere and check out our handmade_sampling_spheres.inl
🗹
1:11:22Invoke hhsphere and check out our handmade_sampling_spheres.inl
🗹
1:11:22Invoke hhsphere and check out our handmade_sampling_spheres.inl
🗹
1:12:32Make GenerateLightingPattern() call GeneratePoissonSamples()
1:12:32Make GenerateLightingPattern() call GeneratePoissonSamples()
1:12:32Make GenerateLightingPattern() call GeneratePoissonSamples()
1:14:15Consider sampling slices of a blue-noise covered sphere
1:14:15Consider sampling slices of a blue-noise covered sphere
1:14:15Consider sampling slices of a blue-noise covered sphere
1:16:20Make GenerateLightingPattern() generate a white noise set of samples, from which each sphere is sliced randomly, introducing cube_store and sphere_store
1:16:20Make GenerateLightingPattern() generate a white noise set of samples, from which each sphere is sliced randomly, introducing cube_store and sphere_store
1:16:20Make GenerateLightingPattern() generate a white noise set of samples, from which each sphere is sliced randomly, introducing cube_store and sphere_store
1:28:08Enable OutputSphereINL() to output our generated spheres and main() to call GenerateLightingPattern()
1:28:08Enable OutputSphereINL() to output our generated spheres and main() to call GenerateLightingPattern()
1:28:08Enable OutputSphereINL() to output our generated spheres and main() to call GenerateLightingPattern()
1:34:41RemedyBG feature request: Take debugee-arguments on the command line
🗹
1:34:41RemedyBG feature request: Take debugee-arguments on the command line
🗹
1:34:41RemedyBG feature request: Take debugee-arguments on the command line
🗹
1:37:50Step through hhsphere to see what it generates
🏃
1:37:50Step through hhsphere to see what it generates
🏃
1:37:50Step through hhsphere to see what it generates
🏃
1:40:12Check out our generated handmade_sampling_spheres.inl
🗹
1:40:12Check out our generated handmade_sampling_spheres.inl
🗹
1:40:12Check out our generated handmade_sampling_spheres.inl
🗹
1:40:48Make OutputSphereINL() suffix float values with "f"
1:40:48Make OutputSphereINL() suffix float values with "f"
1:40:48Make OutputSphereINL() suffix float values with "f"
1:42:16See nothing new in the game
🏃
1:42:16See nothing new in the game
🏃
1:42:16See nothing new in the game
🏃
1:42:23Regenerate our handmade_sampling_spheres.inl
🗹
1:42:23Regenerate our handmade_sampling_spheres.inl
🗹
1:42:23Regenerate our handmade_sampling_spheres.inl
🗹
1:42:50Investigate the compile error in handmade_sampling_spheres.inl
1:42:50Investigate the compile error in handmade_sampling_spheres.inl
1:42:50Investigate the compile error in handmade_sampling_spheres.inl
1:54:24Make OutputSphereINL() surround the data with extra braces
1:54:24Make OutputSphereINL() surround the data with extra braces
1:54:24Make OutputSphereINL() surround the data with extra braces
1:54:51Regenerate our handmade_sampling_spheres.inl
🗹
1:54:51Regenerate our handmade_sampling_spheres.inl
🗹
1:54:51Regenerate our handmade_sampling_spheres.inl
🗹
1:55:33Investigate the compile error in handmade_sampling_spheres.inl
1:55:33Investigate the compile error in handmade_sampling_spheres.inl
1:55:33Investigate the compile error in handmade_sampling_spheres.inl
1:56:58Make OutputSphereINL() surround the data with extra braces
1:56:58Make OutputSphereINL() surround the data with extra braces
1:56:58Make OutputSphereINL() surround the data with extra braces
1:57:15Regenerate our handmade_sampling_spheres.inl
🗹
1:57:15Regenerate our handmade_sampling_spheres.inl
🗹
1:57:15Regenerate our handmade_sampling_spheres.inl
🗹
1:57:35Hit a "Too many braces" error
🖮
💢
1:57:35Hit a "Too many braces" error
🖮
💢
1:57:35Hit a "Too many braces" error
🖮
💢
1:59:38Change OutputSphereINL() to generate the sampling directions as one huge array of floats
1:59:38Change OutputSphereINL() to generate the sampling directions as one huge array of floats
1:59:38Change OutputSphereINL() to generate the sampling directions as one huge array of floats
2:01:50Find that our flat array compiles okay
🗹
2:01:50Find that our flat array compiles okay
🗹
2:01:50Find that our flat array compiles okay
🗹
2:02:18Make OutputSphereINL() set the LightSamplingSphereFloatTable as global and 16-byte aligned,3 pointed to by our actual light_sampling_sphere data structure
2:02:18Make OutputSphereINL() set the LightSamplingSphereFloatTable as global and 16-byte aligned,3 pointed to by our actual light_sampling_sphere data structure
2:02:18Make OutputSphereINL() set the LightSamplingSphereFloatTable as global and 16-byte aligned,3 pointed to by our actual light_sampling_sphere data structure
2:06:12Regenerate our handmade_sampling_spheres.inl
🗹
2:06:12Regenerate our handmade_sampling_spheres.inl
🗹
2:06:12Regenerate our handmade_sampling_spheres.inl
🗹
2:06:23Check out our single sampling sphere
🏃
2:06:23Check out our single sampling sphere
🏃
2:06:23Check out our single sampling sphere
🏃
2:06:51Enable LightingTest() to use all of our generated spheres
2:06:51Enable LightingTest() to use all of our generated spheres
2:06:51Enable LightingTest() to use all of our generated spheres
2:08:03Check out all our (overlapping) spheres
🏃
2:08:03Check out all our (overlapping) spheres
🏃
2:08:03Check out all our (overlapping) spheres
🏃
2:08:06Make LightingTest() elevate the sphere
2:08:06Make LightingTest() elevate the sphere
2:08:06Make LightingTest() elevate the sphere
2:08:34Check out our sampling sphere
🏃
2:08:34Check out our sampling sphere
🏃
2:08:34Check out our sampling sphere
🏃
2:08:53Make LightingTest() elevate the sphere higher still
2:08:53Make LightingTest() elevate the sphere higher still
2:08:53Make LightingTest() elevate the sphere higher still
2:09:05Check out our floating sampling sphere
🏃
2:09:05Check out our floating sampling sphere
🏃
2:09:05Check out our floating sampling sphere
🏃
2:09:49Q&A
🗩
2:09:49Q&A
🗩
2:09:49Q&A
🗩
2:11:01hetoan2 Q: Have you considered using Julia language to do any sort of game development?
🗪
2:11:01hetoan2 Q: Have you considered using Julia language to do any sort of game development?
🗪
2:11:01hetoan2 Q: Have you considered using Julia language to do any sort of game development?
🗪
2:11:08uplinkcoder Q: I am surprised the cast works as an initializer
🗪
2:11:08uplinkcoder Q: I am surprised the cast works as an initializer
🗪
2:11:08uplinkcoder Q: I am surprised the cast works as an initializer
🗪
2:11:58iwrestledabeer Q: Why does C++ suck so badly?
🗪
2:11:58iwrestledabeer Q: Why does C++ suck so badly?
🗪
2:11:58iwrestledabeer Q: Why does C++ suck so badly?
🗪
2:12:47mmozeiko Q: Can you replace __declspec(align) with C++11 alignas? Because non-Windows people won't have declspec. See example code here4
🗪
2:12:47mmozeiko Q: Can you replace __declspec(align) with C++11 alignas? Because non-Windows people won't have declspec. See example code here4
🗪
2:12:47mmozeiko Q: Can you replace __declspec(align) with C++11 alignas? Because non-Windows people won't have declspec. See example code here4
🗪
2:14:01invertedgold Q: What advice would you give Bjarne Stroustrup?
🗪
2:14:01invertedgold Q: What advice would you give Bjarne Stroustrup?
🗪
2:14:01invertedgold Q: What advice would you give Bjarne Stroustrup?
🗪
2:14:48bulmanator Q: If you were to make this a more full 3D game (models, animations etc.) how would you go about modifying the renderer to support submission of these? Would you keep the single vertex buffer setup etc?
🗪
2:14:48bulmanator Q: If you were to make this a more full 3D game (models, animations etc.) how would you go about modifying the renderer to support submission of these? Would you keep the single vertex buffer setup etc?
🗪
2:14:48bulmanator Q: If you were to make this a more full 3D game (models, animations etc.) how would you go about modifying the renderer to support submission of these? Would you keep the single vertex buffer setup etc?
🗪
2:15:47sawii00 Q: Sorry, I just logged in. What happened for you to turn on C++ so harshly?
🗪
2:15:47sawii00 Q: Sorry, I just logged in. What happened for you to turn on C++ so harshly?
🗪
2:15:47sawii00 Q: Sorry, I just logged in. What happened for you to turn on C++ so harshly?
🗪
2:16:09mmozeiko Q: Yes, you can put it before variable, not on struct
🗪
2:16:09mmozeiko Q: Yes, you can put it before variable, not on struct
🗪
2:16:09mmozeiko Q: Yes, you can put it before variable, not on struct
🗪
2:16:18Make OutputSphereINL() use alignas(16) on the LightSamplingSphereTable
2:16:18Make OutputSphereINL() use alignas(16) on the LightSamplingSphereTable
2:16:18Make OutputSphereINL() use alignas(16) on the LightSamplingSphereTable
2:17:03brimonk Q: Since we're asking off-topic questions, is SPIR-V in the direction of getting programmable ISAs for graphics hardware, or am I incorrect? Thoughts on SPIR-V in general?
🗪
2:17:03brimonk Q: Since we're asking off-topic questions, is SPIR-V in the direction of getting programmable ISAs for graphics hardware, or am I incorrect? Thoughts on SPIR-V in general?
🗪
2:17:03brimonk Q: Since we're asking off-topic questions, is SPIR-V in the direction of getting programmable ISAs for graphics hardware, or am I incorrect? Thoughts on SPIR-V in general?
🗪
2:18:53oliverthebestcat cmuratori I've sure you've been asked, but what do you think about Rust? If anyone in chat knows something for me to look at, a link would be helpful!
🗪
2:18:53oliverthebestcat cmuratori I've sure you've been asked, but what do you think about Rust? If anyone in chat knows something for me to look at, a link would be helpful!
🗪
2:18:53oliverthebestcat cmuratori I've sure you've been asked, but what do you think about Rust? If anyone in chat knows something for me to look at, a link would be helpful!
🗪
2:19:30filter160 Q: What happened to Shawn McGrath?5
🗪
2:19:30filter160 Q: What happened to Shawn McGrath?5
🗪
2:19:30filter160 Q: What happened to Shawn McGrath?5
🗪
2:20:17zenzutsu Q: Can you build an entire game in a data-oriented mindset? Will it be a mess?
🗪
2:20:17zenzutsu Q: Can you build an entire game in a data-oriented mindset? Will it be a mess?
🗪
2:20:17zenzutsu Q: Can you build an entire game in a data-oriented mindset? Will it be a mess?
🗪
2:20:25wubbleduff Q: I'm a CS student and I want to learn about rigid body physics. It seems resources I find on the internet are very basic tutorials or advanced academic papers. Is there a resource I can use with a not as steep learning curve?
🗪
2:20:25wubbleduff Q: I'm a CS student and I want to learn about rigid body physics. It seems resources I find on the internet are very basic tutorials or advanced academic papers. Is there a resource I can use with a not as steep learning curve?
🗪
2:20:25wubbleduff Q: I'm a CS student and I want to learn about rigid body physics. It seems resources I find on the internet are very basic tutorials or advanced academic papers. Is there a resource I can use with a not as steep learning curve?
🗪
2:20:54uplinkcoder Q: light_sampling_sphere has no padding then?
🗪
2:20:54uplinkcoder Q: light_sampling_sphere has no padding then?
🗪
2:20:54uplinkcoder Q: light_sampling_sphere has no padding then?
🗪
2:21:21Make OutputSphereINL() add Padding to light_sampling_sphere
2:21:21Make OutputSphereINL() add Padding to light_sampling_sphere
2:21:21Make OutputSphereINL() add Padding to light_sampling_sphere
2:27:27Regenerate handmade_sampling_spheres.inl and calculate our new light_sampling_sphere alignment
🗹
2:27:27Regenerate handmade_sampling_spheres.inl and calculate our new light_sampling_sphere alignment
🗹
2:27:27Regenerate handmade_sampling_spheres.inl and calculate our new light_sampling_sphere alignment
🗹
2:28:56Fix the Padding computation in OutputSphereINL()
2:28:56Fix the Padding computation in OutputSphereINL()
2:28:56Fix the Padding computation in OutputSphereINL()
2:30:00Regenerate handmade_sampling_spheres.inl to see our new light_sampling_sphere alignment
🗹
2:30:00Regenerate handmade_sampling_spheres.inl to see our new light_sampling_sphere alignment
🗹
2:30:00Regenerate handmade_sampling_spheres.inl to see our new light_sampling_sphere alignment
🗹
2:30:38Prevent OutputSphereINL() from outputting Padding if light_sampling_sphere is already aligned
2:30:38Prevent OutputSphereINL() from outputting Padding if light_sampling_sphere is already aligned
2:30:38Prevent OutputSphereINL() from outputting Padding if light_sampling_sphere is already aligned
2:31:49Regenerate handmade_sampling_spheres.inl to see our unpadded light_sampling_sphere
🗹
2:31:49Regenerate handmade_sampling_spheres.inl to see our unpadded light_sampling_sphere
🗹
2:31:49Regenerate handmade_sampling_spheres.inl to see our unpadded light_sampling_sphere
🗹
2:32:55oliverthebestcat cmuratori The one thing Rust has that makes it better than C++: no header files. That's enough right there
🗪
2:32:55oliverthebestcat cmuratori The one thing Rust has that makes it better than C++: no header files. That's enough right there
🗪
2:32:55oliverthebestcat cmuratori The one thing Rust has that makes it better than C++: no header files. That's enough right there
🗪
2:33:41wubbleduff Q: That learning curve seems to be the case with most complicated programming topics such as graphics. How did you learn these topics when you started out?
🗪
2:33:41wubbleduff Q: That learning curve seems to be the case with most complicated programming topics such as graphics. How did you learn these topics when you started out?
🗪
2:33:41wubbleduff Q: That learning curve seems to be the case with most complicated programming topics such as graphics. How did you learn these topics when you started out?
🗪
2:35:15Thanks for joining us
🗩
2:35:15Thanks for joining us
🗩
2:35:15Thanks for joining us
🗩