Handmade Hero»Episode Guide
Adding Normal Maps to the Pipeline
?
?

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)
2:17Recap yesterday and plan for today
2:17Recap yesterday and plan for today
2:17Recap yesterday and plan for today
2:55Blackboard: Normal maps
2:55Blackboard: Normal maps
2:55Blackboard: Normal maps
5:28Blackboard: The importance of Normal
5:28Blackboard: The importance of Normal
5:28Blackboard: The importance of Normal
6:54Blackboard: What we need in order to compute lighting based on this Normal
6:54Blackboard: What we need in order to compute lighting based on this Normal
6:54Blackboard: What we need in order to compute lighting based on this Normal
8:27Blackboard: Where the Normal map fits into the equation
8:27Blackboard: Where the Normal map fits into the equation
8:27Blackboard: Where the Normal map fits into the equation
12:11Blackboard: Description of the surface
12:11Blackboard: Description of the surface
12:11Blackboard: Description of the surface
14:32Blackboard: Description of the light
14:32Blackboard: Description of the light
14:32Blackboard: Description of the light
16:58Blackboard: Casey's proposal
16:58Blackboard: Casey's proposal
16:58Blackboard: Casey's proposal
21:52Blackboard: Blurring based on the surface description
21:52Blackboard: Blurring based on the surface description
21:52Blackboard: Blurring based on the surface description
25:28Introduce the concept of a NormalMap
25:28Introduce the concept of a NormalMap
25:28Introduce the concept of a NormalMap
26:54Blackboard: Normals have to be Normal
26:54Blackboard: Normals have to be Normal
26:54Blackboard: Normals have to be Normal
29:21Introduce Unpack4x8 and unpack the Texels
29:21Introduce Unpack4x8 and unpack the Texels
29:21Introduce Unpack4x8 and unpack the Texels
31:20Similarly unpack the Normals
31:20Similarly unpack the Normals
31:20Similarly unpack the Normals
32:16Blackboard: We often bake the description of the surface into the Normal map
32:16Blackboard: We often bake the description of the surface into the Normal map
32:16Blackboard: We often bake the description of the surface into the Normal map
33:11Lerp the Normals
33:11Lerp the Normals
33:11Lerp the Normals
33:55Introduce environment_map
33:55Introduce environment_map
33:55Introduce environment_map
37:22Set tEnvMap from Normal.Z
37:22Set tEnvMap from Normal.Z
37:22Set tEnvMap from Normal.Z
39:02Blackboard: We might want to switch nearer to 0.25
39:02Blackboard: We might want to switch nearer to 0.25
39:02Blackboard: We might want to switch nearer to 0.25
39:45Setup the environment_map lookups
39:45Setup the environment_map lookups
39:45Setup the environment_map lookups
44:16Create ScreenSpaceUV
44:16Create ScreenSpaceUV
44:16Create ScreenSpaceUV
46:10Pass that ScreenSpaceUV to SampleEnvironmentMap
46:10Pass that ScreenSpaceUV to SampleEnvironmentMap
46:10Pass that ScreenSpaceUV to SampleEnvironmentMap
46:50Check if there is a NormalMap
46:50Check if there is a NormalMap
46:50Check if there is a NormalMap
47:13Pre-light the Texel
47:13Pre-light the Texel
47:13Pre-light the Texel
47:53We haven't talked too much about how you compute lighting equations, per se
47:53We haven't talked too much about how you compute lighting equations, per se
47:53We haven't talked too much about how you compute lighting equations, per se
48:32Take SampleEnvironmentMap and return the Normal for now
48:32Take SampleEnvironmentMap and return the Normal for now
48:32Take SampleEnvironmentMap and return the Normal for now
51:19Plumbing
51:19Plumbing
51:19Plumbing
53:34Check it out in-game and generate a NormalMap to play with
53:34Check it out in-game and generate a NormalMap to play with
53:34Check it out in-game and generate a NormalMap to play with
54:48Blackboard: The NormalMap that we're going to create
54:48Blackboard: The NormalMap that we're going to create
54:48Blackboard: The NormalMap that we're going to create
55:21Implement MakeSphereNormalMap
55:21Implement MakeSphereNormalMap
55:21Implement MakeSphereNormalMap
58:18Blackboard: Think this through a little more
58:18Blackboard: Think this through a little more
58:18Blackboard: Think this through a little more
59:24Throw in a Normal.z calculation for now and finish MakeSphereNormalMap
59:24Throw in a Normal.z calculation for now and finish MakeSphereNormalMap
59:24Throw in a Normal.z calculation for now and finish MakeSphereNormalMap
1:02:43Add Normalize to handmade_math.h
1:02:43Add Normalize to handmade_math.h
1:02:43Add Normalize to handmade_math.h
1:03:49Compile and see it in-game
1:03:49Compile and see it in-game
1:03:49Compile and see it in-game
1:04:18Q&A
🗩
1:04:18Q&A
🗩
1:04:18Q&A
🗩
1:05:02dsjimenez Your 2D art already seems to have some shading. Will that just represent ambient lighting when mixed with this dynamic lighting you're trying to do?
🗪
1:05:02dsjimenez Your 2D art already seems to have some shading. Will that just represent ambient lighting when mixed with this dynamic lighting you're trying to do?
🗪
1:05:02dsjimenez Your 2D art already seems to have some shading. Will that just represent ambient lighting when mixed with this dynamic lighting you're trying to do?
🗪
1:05:57miblo In MakeSphereNormalMap, should 'Y < Bitmap->Width;' be 'Y < Bitmap->Height;'?
🗪
1:05:57miblo In MakeSphereNormalMap, should 'Y < Bitmap->Width;' be 'Y < Bitmap->Height;'?
🗪
1:05:57miblo In MakeSphereNormalMap, should 'Y < Bitmap->Width;' be 'Y < Bitmap->Height;'?
🗪
1:06:15tenbroya How far do you think you can increase the capabilities of an engine like this before you start to suffer from performance constraints due to using only the CPU (vs GPU)?
🗪
1:06:15tenbroya How far do you think you can increase the capabilities of an engine like this before you start to suffer from performance constraints due to using only the CPU (vs GPU)?
🗪
1:06:15tenbroya How far do you think you can increase the capabilities of an engine like this before you start to suffer from performance constraints due to using only the CPU (vs GPU)?
🗪
1:07:57stelar7 Don't you need to SRBGToLinear1 the normals or use the normals instead of the texel in the lerp?
🗪
1:07:57stelar7 Don't you need to SRBGToLinear1 the normals or use the normals instead of the texel in the lerp?
🗪
1:07:57stelar7 Don't you need to SRBGToLinear1 the normals or use the normals instead of the texel in the lerp?
🗪
1:09:44pseudonym73 Normal.z = Sqrt(1.0f - Normal.x*Normal.x - Normal.y*Normal.y);
🗪
1:09:44pseudonym73 Normal.z = Sqrt(1.0f - Normal.x*Normal.x - Normal.y*Normal.y);
🗪
1:09:44pseudonym73 Normal.z = Sqrt(1.0f - Normal.x*Normal.x - Normal.y*Normal.y);
🗪
1:12:05timbertoes Is your lighting lookup a similar technique to MatCaps used in other software?
🗪
1:12:05timbertoes Is your lighting lookup a similar technique to MatCaps used in other software?
🗪
1:12:05timbertoes Is your lighting lookup a similar technique to MatCaps used in other software?
🗪
1:12:20lukeultra What benefits do you see from using the extra time it takes to create your own engine from scratch? Is it worth it in your opinion?
🗪
1:12:20lukeultra What benefits do you see from using the extra time it takes to create your own engine from scratch? Is it worth it in your opinion?
🗪
1:12:20lukeultra What benefits do you see from using the extra time it takes to create your own engine from scratch? Is it worth it in your opinion?
🗪
1:12:35pseudonym73 The catch is that it's going to take the Sqrt of a negative number if you're outside the sphere
🗪
1:12:35pseudonym73 The catch is that it's going to take the Sqrt of a negative number if you're outside the sphere
🗪
1:12:35pseudonym73 The catch is that it's going to take the Sqrt of a negative number if you're outside the sphere
🗪
1:14:03We have come to the end of the questions
🗩
1:14:03We have come to the end of the questions
🗩
1:14:03We have come to the end of the questions
🗩