|
@@ -31,7 +31,6 @@ namespace AZ
|
|
|
AssImpSkinWeightsImporter::AssImpSkinWeightsImporter()
|
|
|
{
|
|
|
BindToCall(&AssImpSkinWeightsImporter::ImportSkinWeights);
|
|
|
- BindToCall(&AssImpSkinWeightsImporter::SetupNamedBoneLinks);
|
|
|
}
|
|
|
|
|
|
void AssImpSkinWeightsImporter::Reflect(ReflectContext* context)
|
|
@@ -94,15 +93,19 @@ namespace AZ
|
|
|
continue;
|
|
|
}
|
|
|
skinWeightData = AZStd::make_shared<SceneData::GraphData::SkinWeightData>();
|
|
|
+ skinWeightData->ResizeContainerSpace(totalVertices);
|
|
|
+ }
|
|
|
+ AZStd::string sanitizedName = bone->mName.C_Str();
|
|
|
+ RenamedNodesMap::SanitizeNodeName(sanitizedName, context.m_scene.GetGraph(), context.m_currentGraphPosition);
|
|
|
+ int boneId = skinWeightData->GetBoneId(sanitizedName);
|
|
|
+ for (unsigned weight = 0; weight < bone->mNumWeights; ++weight)
|
|
|
+ {
|
|
|
+ DataTypes::ISkinWeightData::Link link;
|
|
|
+ link.boneId = boneId;
|
|
|
+ link.weight = bone->mWeights[weight].mWeight;
|
|
|
+
|
|
|
+ skinWeightData->AddAndSortLink(bone->mWeights[weight].mVertexId + vertexCount, link);
|
|
|
}
|
|
|
- Pending pending;
|
|
|
- pending.m_bone = bone;
|
|
|
- pending.m_sanitizedName = bone->mName.C_Str();
|
|
|
- RenamedNodesMap::SanitizeNodeName(pending.m_sanitizedName, context.m_scene.GetGraph(), context.m_currentGraphPosition);
|
|
|
- pending.m_numVertices = static_cast<unsigned int>(totalVertices);
|
|
|
- pending.m_skinWeightData = skinWeightData;
|
|
|
- pending.m_vertOffset = vertexCount;
|
|
|
- m_pendingSkinWeights.push_back(pending);
|
|
|
}
|
|
|
vertexCount += mesh->mNumVertices;
|
|
|
}
|
|
@@ -120,29 +123,6 @@ namespace AZ
|
|
|
|
|
|
return combinedSkinWeightsResult.GetResult();
|
|
|
}
|
|
|
-
|
|
|
- Events::ProcessingResult AssImpSkinWeightsImporter::SetupNamedBoneLinks(AssImpFinalizeSceneContext& /*context*/)
|
|
|
- {
|
|
|
- AZ_TraceContext("Importer", "Skin Weights");
|
|
|
-
|
|
|
- for (auto& it : m_pendingSkinWeights)
|
|
|
- {
|
|
|
- it.m_skinWeightData->ResizeContainerSpace(it.m_numVertices);
|
|
|
- int boneId = it.m_skinWeightData->GetBoneId(it.m_sanitizedName);
|
|
|
-
|
|
|
- for(unsigned weight = 0; weight < it.m_bone->mNumWeights; ++weight)
|
|
|
- {
|
|
|
- DataTypes::ISkinWeightData::Link link;
|
|
|
- link.boneId = boneId;
|
|
|
- link.weight = it.m_bone->mWeights[weight].mWeight;
|
|
|
-
|
|
|
- it.m_skinWeightData->AddAndSortLink(it.m_bone->mWeights[weight].mVertexId + it.m_vertOffset, link);
|
|
|
- }
|
|
|
- }
|
|
|
- const auto result = m_pendingSkinWeights.empty() ? Events::ProcessingResult::Ignored : Events::ProcessingResult::Success;
|
|
|
- m_pendingSkinWeights.clear();
|
|
|
- return result;
|
|
|
- }
|
|
|
} // namespace SceneBuilder
|
|
|
} // namespace SceneAPI
|
|
|
} // namespace AZ
|