How do I get vertex normals from a static mesh?

With a static mesh, I can get:

  • vertex positions from mesh->RenderData->LODResources[0].VertexBuffers.PositionVertexBuffer;
  • vertex indexes from mesh->RenderData->LODResources[0].IndexBuffer.GetArrayView();

I am guessing I can get UVs and tangets from:

  • VertexBuffers.StaticMeshVertexBuffer.GetVertexUV(), and
  • VertexBuffers.StaticMeshVertexBuffer.GetTangentData()

But I don’t know about normals. How can I get vertex normals from a static mesh?


Alternatively, I found this:
How can I get polygon normals of a static mesh? - Rendering - Unreal Engine Forums

This appears to be just what I was looking for, however I don’t find that it works. In particular:

  • LODResources[0], which is a FStaticMeshLODResources, has no “VertexBuffer” member, and
  • VertexBuffers, which is a FStaticMeshVertexBuffers, has no GetTangentZ() function.

Perhaps I am missing something simple with that answer though. :slight_smile:

I believe this is doing what I want:

myMesh->RenderData->LODResources[0].VertexBuffers.StaticMeshVertexBuffer.VertexTangentZ(vertIndex);

Similarly,

myMesh->->RenderData->LODResources[0].VertexBuffers.StaticMeshVertexBuffer.VertexTangentX(vertIndex);

… can be used to get vertex tangents.

I’m not 100% sure that this is the right thing to do for getting a Static Mesh’s vertex normals & tangents. I really only stumbled upon the public variables and did a quick test with an 8-vertex cube.

Seems to be what I want, but would be great if someone could confirm.