Vertex Normals

Vertex normals (sometimes called pseudo-normals) are values stored at each vertex that are most commonly used by a renderer to determine the reflection of lighting or shading models, such as phong shading. For example, the normal of a surface is used to calculate which direction light reflects off this surface. While surfaces inherently all have normals as part of their structure, vertices do not. This is why storing an explicit normal at each vertex is required.

Vertex normals are 3D coordinates, with each coordinate within the range [-1,1].

These normal values may, in theory, be used to store any type of information. However, there are two common ways it is used to direct lighting.

Surface Normal (Implicit)

The most common setting of vertex normals is where the normal on each vertex is set identical to the surface normal of the face. This gives the geometry a "sharp-edged" look when rendered. This is usually the value of normals that is implied if vertex normals are missing from a surface.

Averaged Vertex Normal

Another common setting of vertex normals is where the normal is the average of all the surface normals that meet at that point. A vertex normal at the corner of a box, for example, would be the average of the three faces around that corner. The rendering of geometries with averaged normals produces a softer look, depending on the shader used.

Vertex Normal Storage on Geometries

Most FME geometries (except meshes and point clouds) store vertex normals as specially-named measures on the vertices of the geometry. The names of these measures are:

  • fme_vertex_normal_x
  • fme_vertex_normal_y
  • fme_vertex_normal_z

Point clouds store vertex normals as named components. The names of these components are:

  • normal_x
  • normal_y
  • normal_z

Mesh parts use references to a common vertex normal pool. For more information, see Mesh.

See Also