Hardware 3D (C++ DirectX Graphics) Tutorial 34
From Chilipedia
Normal mapping is like what texture mapping would be if it actually lived up to its name. Time to learn about tangent space and other such weird things, I guess.
Contents
Topics Covered
Part 1
- Normal mapping motivation / goal
- Texture alignment
- RGB encoding of normal vectors
Part 2
- Translation of object space normal map into view space
- Refactoring using SOLID principles
- Single Responsibility Principle
- Open / Closed Principle
- Definition and limitations of object space normal mapping
Part 3
- Tangent Space
- Extraction of Tangent and Bitangent vectors from vertex data (pos, normal, uv)
- Synthesis of TBN matrix (tangent space rotation matrix)
- Fixing the mapping from Green color channel => Z component of normal map vector
Errata
In Part 1, Chili decodes the z component of the normal map by mapping from 0..1 => 0..1 directly, but this mapping is not common, nor is it correct for the map we are using. All channels should be mapped with 0..1 => -1..+1. This will be corrected in Part 3. It is true that the z channel will never be less than zero in a proper (tangent space) normal map, but it does not seem to be common to use this unused range to expand the dynamic range of the z channel encoding.