Knowing this, we use a dot product to generate a range from 0 to 1 as a threshold to define when an edge should be hard versus soft. For example, a value closer to 1 would mean that the angle is larger resulting in a hard edge, while closer to 0 would mean a soft edge. This information is then used to generate groups of normals that share soft edges. For each of these groups, we smooth the normals across the faces creating smooth faces.