Parcourir la source

Merge phases of AssImpSkinWeightsImporter (#15564)

Signed-off-by: Martin Sattlecker <[email protected]>
Martin Sattlecker il y a 10 mois
Parent
commit
ab3c80f9d5

+ 12 - 32
Code/Tools/SceneAPI/SceneBuilder/Importers/AssImpSkinWeightsImporter.cpp

@@ -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

+ 0 - 16
Code/Tools/SceneAPI/SceneBuilder/Importers/AssImpSkinWeightsImporter.h

@@ -45,24 +45,8 @@ namespace AZ
                 static void Reflect(ReflectContext* context);
 
                 Events::ProcessingResult ImportSkinWeights(AssImpSceneNodeAppendedContext& context);
-                Events::ProcessingResult SetupNamedBoneLinks(AssImpFinalizeSceneContext& context);
 
             protected:
-                struct Pending
-                {
-                    const aiBone* m_bone = nullptr;
-                    AZStd::string m_sanitizedName;
-                    unsigned m_numVertices = 0;
-                    unsigned m_vertOffset = 0;
-                    AZStd::shared_ptr<SceneData::GraphData::SkinWeightData> m_skinWeightData;
-                };
-
-                //! List of skin weights that still need to be filled in. Setting the data for skin weights is
-                //! delayed until after the tree has been fully constructed as bones are linked by name, but until
-                //! the graph has been fully filled in, those names can change which would break the names recorded
-                //! for the skin.
-                AZStd::vector<Pending> m_pendingSkinWeights;
-
                 static const AZStd::string s_skinWeightName;
             };
         } // namespace SceneBuilder