From 6081a159e35bd576915af1aee731d04b93584b42 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Sun, 4 Aug 2024 20:18:05 +0200 Subject: [PATCH] Fix new skinned mesh importing to properly handle vertex indices #2672 --- Source/Engine/Tools/ModelTool/ModelTool.OpenFBX.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/Engine/Tools/ModelTool/ModelTool.OpenFBX.cpp b/Source/Engine/Tools/ModelTool/ModelTool.OpenFBX.cpp index 088d11c33..20e2aca8e 100644 --- a/Source/Engine/Tools/ModelTool/ModelTool.OpenFBX.cpp +++ b/Source/Engine/Tools/ModelTool/ModelTool.OpenFBX.cpp @@ -870,7 +870,7 @@ bool ProcessMesh(ModelData& result, OpenFbxImporterData& data, const ofbx::Mesh* { int vtxIndex = clusterIndices[j]; float vtxWeight = (float)clusterWeights[j]; - if (vtxWeight <= 0 || vtxIndex < 0 || vtxIndex >= vertexCount) + if (vtxWeight <= 0 || vtxIndex < 0 || vtxIndex >= positions.values_count) continue; Int4& indices = blendIndices.Get()[vtxIndex]; Float4& weights = blendWeights.Get()[vtxIndex]; @@ -898,10 +898,11 @@ bool ProcessMesh(ModelData& result, OpenFbxImporterData& data, const ofbx::Mesh* // Remap blend values to triangulated data mesh.BlendIndices.Resize(vertexCount, false); mesh.BlendWeights.Resize(vertexCount, false); - for (int i = 0; i < triangulatedIndices.Count(); i++) + for (int i = 0; i < vertexCount; i++) { - mesh.BlendIndices.Get()[i] = blendIndices[positions.indices[triangulatedIndices[i]]]; - mesh.BlendWeights.Get()[i] = blendWeights[positions.indices[triangulatedIndices[i]]]; + const int idx = positions.indices[triangulatedIndices[i]]; + mesh.BlendIndices.Get()[i] = blendIndices[idx]; + mesh.BlendWeights.Get()[i] = blendWeights[idx]; } mesh.NormalizeBlendWeights(); @@ -944,8 +945,7 @@ bool ProcessMesh(ModelData& result, OpenFbxImporterData& data, const ofbx::Mesh* v.NormalDelta = shapeNormals ? ToFloat3(shapeNormals[i]) : Float3::Zero; for (int32 vertexIndex = 0; vertexIndex < vertexCount; vertexIndex++) { - int sourceIndex = triangulatedIndices[vertexIndex]; - sourceIndex = positions.indices[sourceIndex]; + int sourceIndex = positions.indices[triangulatedIndices[vertexIndex]]; if (sourceIndex == shapeIndex) { // Add blend shape vertex