hello, is there a way to modify vertex normals in skeletal mesh at runtime? I use SetVertexTangents(i, FVector(1, 0, 0), FVector(0, 1, 0), FVector(0, 0, 1)), but it not work, anyone helps me? thanks. my code is as below:
void ComputeNormals(USkeletalMesh *Mesh) {
// ExecuteOnRenderThread(&, this {
FSkeletalMeshLODRenderData *Model = &Mesh->GetResourceForRendering()->LODRenderData[0];
int32 ModelVertNum = Model->StaticVertexBuffers.PositionVertexBuffer.GetNumVertices();
TArray Positions;
TArray Triangles;
TArray uvs;
for (int32 i = 0; i < ModelVertNum; i++) {
Positions.Add(Model->StaticVertexBuffers.PositionVertexBuffer.VertexPosition(i));
uvs.Add(Model->StaticVertexBuffers.StaticMeshVertexBuffer.GetVertexUV(i, 0));
}
FRawStaticIndexBuffer16or32Interface &indexBuffer = *(Model->MultiSizeIndexContainer.GetIndexBuffer());
for (int32 i = 0; i < indexBuffer.Num(); i += 3) {
Triangles.Add(indexBuffer.Get(i));
Triangles.Add(indexBuffer.Get(i + 1));
Triangles.Add(indexBuffer.Get(i + 2));
}
TArray OutNormals;
TArray OutTangents;
UKismetProceduralMeshLibrary::CalculateTangentsForMesh(Positions, Triangles, uvs, OutNormals, OutTangents);
for (int32 i = 0; i < ModelVertNum; i++) {
FVector TanX = OutTangents[i].TangentX;
FPackedNormal TangentZ = OutNormals[i];
int a = 255;
TangentZ.Vector.W = (int8)a;
FVector TanZ = TangentZ.ToFVector();
FVector TanY = (TanZ ^ TanX) * ((float)TangentZ.Vector.W / 127.5f - 1.0f);
// Model->StaticVertexBuffers.StaticMeshVertexBuffer.SetVertexTangents(i, TanX, TanY, OutNormals[i]);
Model->StaticVertexBuffers.StaticMeshVertexBuffer.SetVertexTangents(i, FVector(1, 0, 0), FVector(0, 1, 0), FVector(0, 0, 1));
}
// Model->StaticVertexBuffers.StaticMeshVertexBuffer.InitRHI();
BeginUpdateResourceRHI(&Model->StaticVertexBuffers.StaticMeshVertexBuffer);
// });
}
I change normal to an strange odd value,but behavior is alway natural,confused