If two (or more) triangles in the model share the same coordinate
index then the normal generator will attempt to generate one normal
for the vertex, resulting in a "smooth" looking surface. If two
coordinates don't have the same index then they will have two
separate normals, even if they have the same position. This will
result in a "crease" in your object. If you suspect that your
data isn't properly indexed, call GeometryInfo.recomputeIndexes().
Of course, sometimes your model *has* a crease in it. That's what
creaseAngle is. If two triangles' normals differ by more than
creaseAngle, then the vertex will get two separate normals, creating a
discontinuous crease in the model. This is perfect for the edge
of a table or the corner of a cube, for instance.