Learn about the different meanings of normals in CG and their uses for stylized modeling and shading.
There are a lot of CG specific meanings associated with the word "normal". Therefore it is very important to distinguish between different types of normals and what they stand for.
The mathematical definition of a normal is a vector perpendicular (right-angled) to an object, face, or line. In CG, normals usually define the directional component of a face.
There are different kinds of normals: world space normals, object space normals and tangent space normals. "Normal" is a word that appears a lot in Blender's shader editor: the most prominent being the "Normal" outputs on both the "Texture Coordinate" and "Geometry" nodes.
Normal outputs on the "Geometry" and "Texture Coordinate" nodes
They might seem like both nodes output the same coordinates whereas in reality the "Geometry" node outputs world normals; and the "Texture" Coordinate outputs object normals. What they have in common is that they both output the outwards-direction on any given point on the surface of a mesh as a vector represented in RGB format, the difference between world and object normals being that object normals are relative to an object's coordinates and world normals align with the coordinates of the editor. You can see the effect by rotating an object while using these two different normal outputs as an emissive color.
World normals (left) vs object normals (right) on a torus mesh.
Tangent normals are the most complex type and usually associated with normal maps which are mostly light purple in color. They are not bound to faces, edges or vertices unlike the two other types. This means that the resolution of normal maps is dependent on image width and height and not on the mesh density as is the case for world and object normals.
Like roughness, metallic and ILM maps, tangent normals do not represent color information but details in shading information (which is why normal maps should always be set to "Non-Color" mode when used with shader nodes). Their basic principle is that the shader uses the original surface normals and manipulates them using the data from a normal map to make it appear more detailed, meaning it converts world normals using tangent normals into more or less "custom" normals. This conversion is done by the "Normal Map" node. Tangent normals are also not mesh-specific, they can be applied to any mesh as long as it has proper UVs and therefore they are dependent on world normal and UV information (specifically UV tangents).
Normal editing is similar to how normal maps work: You change the normal direction relative to the face normal direction. This calls for yet another distinction: custom normal ("Custom Split Normals Data") and mesh - / face - / geometry normal. More about custom normal data here.
Some things to look out for when editing normal data:
- Split normals enable sharp edges when editing normal data. The Abnormal add-on allows for split normal manipulation.
- Mesh deformation through shape keys, lattices or bone weights can cause artifacts because it will break custom normals.
- Editing normals on faces for some NPR styles requires very specific topology, it should follow the shading, not the other way around as it is the case for traditional face topology.
- Shading artifacts induced by normal editing can come from insufficient or bad topology.