Triangles are mostly simple structures living simple lives. But sometimes you forget how complex they really are. A usable triangle for 3D graphics usually contains:
To optimize, you can join some data together. Then you’ll end up with a vertex. Then your triangle will look like this:
Where 1 vertex has:
There is apparent savings there. But when joining them together in a mesh, you can save big on memory (and cache). All you need to describe a mesh, is with a list of vertices and a list of indices which forms triangles.
And with this, you’re free to optimize the triangle structure more easily since there are no duplicate vertices.