Normals

Last updated 2019/01/14

Concept

There are two types of normals, vertex normals and face normals. Let's start with the latter. Face normals are usually not exposed to the artist in a direct way, so the concept is a bit more abstract but it's very helpful nonetheless.

vertex order and face normals

A triangle is defined by its vertices - the corner points of the triangle. Each of those points is referenced by a number, and the order of those points defines the direction in which the face normal is orientated. A normal is just a vector, basically a direction without a specified origin. If the vertex order is clockwise, the normal points upwards; if it is counter-clockwise it's pointing down. You may know those faces as backfaces, the "back side" of polygons (note: can vary between 3d applications). The 3d application uses that vertex order, and consequently the face normal, to determine what is the inside and what is the outside of an object. Most game engines do not render the backfaces of your models unless explicitly told to do so.

Vertex normals are a continuation of that basic principle. Each vertex normal is a vector pointing in some direction. In the case of our single triangle, all the vertex normals point in the same direction as the face normal - unless explicitly changed by the artist. This is not particularly useful for a single triangle but it gets interesting if we have neighboring polygons.

vertex normals in a multi-polygon mesh

Now let's look at a 4x4 quad mesh which is slightly rounded in the middle. On the left is our faceted mesh, we can even see the triangulation. On the right, we can see the individual red vertex normals. Each polygon has 4 vertices and thus 4 vertex normals, despite several polygons sharing the same vertices. Vertices that are shared by multiple faces also have the same number of red normal indicators pointing upwards.
So what can we do with those vertex normals?

vertex normals in a smoothed mesh

We can average multiple normals together to make the surface look smooth and much more detailed than it actually is. Now, several faces share the same vertex normal which is used to calculate the shading on the surface. We can also mix hard and smooth surfaces.

smoothing groups

This time we define 3 smooth areas with hard edges between them. You can see on the right that the vertices on those edges still have some of their vertex normals diverging from another.
We wouldn't want to rotate and average dozens or hundreds of normals ourselves so we usually use smoothing groups or define hard edges to control the smoothness of our surfaces. Our 3d application will then average normals based on those rules. There are, however, cases where we might want to define our vertex normals explicitly.

Explicit normals

The most obvious use case for "custom" normals is low poly game models. We may want to fine-tune our models to get rid of weird shading errors or even project our normals from one mesh to another.

transferred normals from a sphere

In this example, we can see a primitive low-poly shrub with automatic normals on the left. The model on the right uses normals that have been transferred from a sphere, so all normals point outwards and produce a much softer overall look.

Another interesting use case for explicit normals can be seen in the "weighted normals" chapter. You can also use custom normals to drive specific emission effects in volumetric simulations or motion graphics projects. The possibilities are endless.

Normals and normal editing can be quite different between 3D content creation applications. Make sure you familiarize yourself with the options and features you have available. You should also be aware that explicit normals handling is something that is not supported properly by some applications and can be difficult to import and export.