فهرست منبع

FBX to Scene part 3, tangent generation rule FBX -> SourceScene (#1747)

* Tangent space FromFBX -> FromSourceScene

Signed-off-by: stankowi <[email protected]>
AMZN-stankowi 4 سال پیش
والد
کامیت
0c43493e29

+ 1 - 1
Code/Tools/SceneAPI/SceneBuilder/Importers/AssImpBitangentStreamImporter.cpp

@@ -86,7 +86,7 @@ namespace AZ
                 // AssImp only has one bitangentStream per mesh.
                 // AssImp only has one bitangentStream per mesh.
                 bitangentStream->SetBitangentSetIndex(0);
                 bitangentStream->SetBitangentSetIndex(0);
 
 
-                bitangentStream->SetTangentSpace(AZ::SceneAPI::DataTypes::TangentSpace::FromFbx);
+                bitangentStream->SetTangentSpace(AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene);
                 bitangentStream->ReserveContainerSpace(vertexCount);
                 bitangentStream->ReserveContainerSpace(vertexCount);
                 for (int sdkMeshIndex = 0; sdkMeshIndex < currentNode->mNumMeshes; ++sdkMeshIndex)
                 for (int sdkMeshIndex = 0; sdkMeshIndex < currentNode->mNumMeshes; ++sdkMeshIndex)
                 {
                 {

+ 1 - 1
Code/Tools/SceneAPI/SceneBuilder/Importers/AssImpTangentStreamImporter.cpp

@@ -88,7 +88,7 @@ namespace AZ
                 // AssImp only has one tangentStream per mesh.
                 // AssImp only has one tangentStream per mesh.
                 tangentStream->SetTangentSetIndex(0);
                 tangentStream->SetTangentSetIndex(0);
 
 
-                tangentStream->SetTangentSpace(AZ::SceneAPI::DataTypes::TangentSpace::FromFbx);
+                tangentStream->SetTangentSpace(AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene);
                 tangentStream->ReserveContainerSpace(vertexCount);
                 tangentStream->ReserveContainerSpace(vertexCount);
                 for (int sdkMeshIndex = 0; sdkMeshIndex < currentNode->mNumMeshes; ++sdkMeshIndex)
                 for (int sdkMeshIndex = 0; sdkMeshIndex < currentNode->mNumMeshes; ++sdkMeshIndex)
                 {
                 {

+ 3 - 3
Code/Tools/SceneAPI/SceneCore/DataTypes/GraphData/IMeshVertexTangentData.h

@@ -23,9 +23,9 @@ namespace AZ
         {
         {
             enum class TangentSpace
             enum class TangentSpace
             {
             {
-                FromFbx     = 0,
-                MikkT       = 1,
-                EMotionFX   = 2
+                FromSourceScene = 0,
+                MikkT           = 1,
+                EMotionFX       = 2
             };
             };
 
 
             enum class BitangentMethod
             enum class BitangentMethod

+ 2 - 2
Code/Tools/SceneAPI/SceneData/GraphData/MeshVertexBitangentData.cpp

@@ -20,7 +20,7 @@ namespace AZ
                 SerializeContext* serializeContext = azrtti_cast<SerializeContext*>(context);
                 SerializeContext* serializeContext = azrtti_cast<SerializeContext*>(context);
                 if (serializeContext)
                 if (serializeContext)
                 {
                 {
-                    serializeContext->Class<MeshVertexBitangentData>()->Version(1);
+                    serializeContext->Class<MeshVertexBitangentData>()->Version(2);
                 }
                 }
 
 
                 BehaviorContext* behaviorContext = azrtti_cast<BehaviorContext*>(context);
                 BehaviorContext* behaviorContext = azrtti_cast<BehaviorContext*>(context);
@@ -34,7 +34,7 @@ namespace AZ
                         ->Method("GetBitangentSetIndex", &MeshVertexBitangentData::GetBitangentSetIndex)
                         ->Method("GetBitangentSetIndex", &MeshVertexBitangentData::GetBitangentSetIndex)
                         ->Method("GetTangentSpace", &MeshVertexBitangentData::GetTangentSpace)
                         ->Method("GetTangentSpace", &MeshVertexBitangentData::GetTangentSpace)
                         ->Enum<(int)SceneAPI::DataTypes::TangentSpace::EMotionFX>("EMotionFX")
                         ->Enum<(int)SceneAPI::DataTypes::TangentSpace::EMotionFX>("EMotionFX")
-                        ->Enum<(int)SceneAPI::DataTypes::TangentSpace::FromFbx>("FromFbx")
+                        ->Enum<(int)SceneAPI::DataTypes::TangentSpace::FromSourceScene>("FromSourceScene")
                         ->Enum<(int)SceneAPI::DataTypes::TangentSpace::MikkT>("MikkT");
                         ->Enum<(int)SceneAPI::DataTypes::TangentSpace::MikkT>("MikkT");
                 }
                 }
             }
             }

+ 1 - 1
Code/Tools/SceneAPI/SceneData/GraphData/MeshVertexBitangentData.h

@@ -50,7 +50,7 @@ namespace AZ
                 SCENE_DATA_API void GetDebugOutput(AZ::SceneAPI::Utilities::DebugOutput& output) const override;
                 SCENE_DATA_API void GetDebugOutput(AZ::SceneAPI::Utilities::DebugOutput& output) const override;
             protected:
             protected:
                 AZStd::vector<AZ::Vector3>              m_bitangents;
                 AZStd::vector<AZ::Vector3>              m_bitangents;
-                AZ::SceneAPI::DataTypes::TangentSpace   m_tangentSpace = AZ::SceneAPI::DataTypes::TangentSpace::FromFbx;
+                AZ::SceneAPI::DataTypes::TangentSpace   m_tangentSpace = AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene;
                 size_t                                  m_setIndex = 0;
                 size_t                                  m_setIndex = 0;
             };
             };
 
 

+ 2 - 2
Code/Tools/SceneAPI/SceneData/GraphData/MeshVertexTangentData.cpp

@@ -20,7 +20,7 @@ namespace AZ
                 SerializeContext* serializeContext = azrtti_cast<SerializeContext*>(context);
                 SerializeContext* serializeContext = azrtti_cast<SerializeContext*>(context);
                 if (serializeContext)
                 if (serializeContext)
                 {
                 {
-                    serializeContext->Class<MeshVertexTangentData>()->Version(1);
+                    serializeContext->Class<MeshVertexTangentData>()->Version(2);
                 }
                 }
 
 
                 BehaviorContext* behaviorContext = azrtti_cast<BehaviorContext*>(context);
                 BehaviorContext* behaviorContext = azrtti_cast<BehaviorContext*>(context);
@@ -34,7 +34,7 @@ namespace AZ
                         ->Method("GetTangentSetIndex", &MeshVertexTangentData::GetTangentSetIndex)
                         ->Method("GetTangentSetIndex", &MeshVertexTangentData::GetTangentSetIndex)
                         ->Method("GetTangentSpace", &MeshVertexTangentData::GetTangentSpace)
                         ->Method("GetTangentSpace", &MeshVertexTangentData::GetTangentSpace)
                         ->Enum<(int)SceneAPI::DataTypes::TangentSpace::EMotionFX>("EMotionFX")
                         ->Enum<(int)SceneAPI::DataTypes::TangentSpace::EMotionFX>("EMotionFX")
-                        ->Enum<(int)SceneAPI::DataTypes::TangentSpace::FromFbx>("FromFbx")
+                        ->Enum<(int)SceneAPI::DataTypes::TangentSpace::FromSourceScene>("FromSourceScene")
                         ->Enum<(int)SceneAPI::DataTypes::TangentSpace::MikkT>("MikkT");
                         ->Enum<(int)SceneAPI::DataTypes::TangentSpace::MikkT>("MikkT");
                 }
                 }
             }
             }

+ 1 - 1
Code/Tools/SceneAPI/SceneData/GraphData/MeshVertexTangentData.h

@@ -49,7 +49,7 @@ namespace AZ
                 SCENE_DATA_API void GetDebugOutput(AZ::SceneAPI::Utilities::DebugOutput& output) const override;
                 SCENE_DATA_API void GetDebugOutput(AZ::SceneAPI::Utilities::DebugOutput& output) const override;
             protected:
             protected:
                 AZStd::vector<AZ::Vector4>              m_tangents;
                 AZStd::vector<AZ::Vector4>              m_tangents;
-                AZ::SceneAPI::DataTypes::TangentSpace   m_tangentSpace = AZ::SceneAPI::DataTypes::TangentSpace::FromFbx;
+                AZ::SceneAPI::DataTypes::TangentSpace   m_tangentSpace = AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene;
                 size_t                                  m_setIndex = 0;
                 size_t                                  m_setIndex = 0;
             };
             };
 
 

+ 2 - 2
Code/Tools/SceneAPI/SceneData/Rules/TangentsRule.cpp

@@ -142,7 +142,7 @@ namespace AZ
                     return;
                     return;
                 }
                 }
 
 
-                serializeContext->Class<TangentsRule, DataTypes::IRule>()->Version(1)
+                serializeContext->Class<TangentsRule, DataTypes::IRule>()->Version(2)
                     ->Field("tangentSpace", &TangentsRule::m_tangentSpace)
                     ->Field("tangentSpace", &TangentsRule::m_tangentSpace)
                     ->Field("bitangentMethod", &TangentsRule::m_bitangentMethod)
                     ->Field("bitangentMethod", &TangentsRule::m_bitangentMethod)
                     ->Field("normalize", &TangentsRule::m_normalize)
                     ->Field("normalize", &TangentsRule::m_normalize)
@@ -156,7 +156,7 @@ namespace AZ
                         ->Attribute("AutoExpand", true)
                         ->Attribute("AutoExpand", true)
                         ->Attribute(AZ::Edit::Attributes::NameLabelOverride, "")
                         ->Attribute(AZ::Edit::Attributes::NameLabelOverride, "")
                         ->DataElement(AZ::Edit::UIHandlers::ComboBox, &AZ::SceneAPI::SceneData::TangentsRule::m_tangentSpace, "Tangent space", "Specify the tangent space used for normal map baking. Choose 'From Fbx' to extract the tangents and bitangents directly from the Fbx file. When there is no tangents rule or the Fbx has no tangents stored inside it, the 'MikkT' option will be used with orthogonal tangents of unit length, so with the normalize option enabled, using the first UV set.")
                         ->DataElement(AZ::Edit::UIHandlers::ComboBox, &AZ::SceneAPI::SceneData::TangentsRule::m_tangentSpace, "Tangent space", "Specify the tangent space used for normal map baking. Choose 'From Fbx' to extract the tangents and bitangents directly from the Fbx file. When there is no tangents rule or the Fbx has no tangents stored inside it, the 'MikkT' option will be used with orthogonal tangents of unit length, so with the normalize option enabled, using the first UV set.")
-                        ->EnumAttribute(AZ::SceneAPI::DataTypes::TangentSpace::FromFbx, "From Fbx")
+                        ->EnumAttribute(AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene, "From Source Scene")
                         ->EnumAttribute(AZ::SceneAPI::DataTypes::TangentSpace::MikkT, "MikkT")
                         ->EnumAttribute(AZ::SceneAPI::DataTypes::TangentSpace::MikkT, "MikkT")
                         ->EnumAttribute(AZ::SceneAPI::DataTypes::TangentSpace::EMotionFX, "EMotion FX")
                         ->EnumAttribute(AZ::SceneAPI::DataTypes::TangentSpace::EMotionFX, "EMotion FX")
                         ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::EntireTree)
                         ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::EntireTree)

+ 2 - 2
Code/Tools/SceneAPI/SceneData/Tests/GraphData/GraphDataBehaviorTests.cpp

@@ -83,7 +83,7 @@ namespace AZ
                         auto* bitangentData = AZStd::any_cast<AZ::SceneData::GraphData::MeshVertexBitangentData>(&data);
                         auto* bitangentData = AZStd::any_cast<AZ::SceneData::GraphData::MeshVertexBitangentData>(&data);
                         bitangentData->AppendBitangent(AZ::Vector3{0.12f, 0.34f, 0.56f});
                         bitangentData->AppendBitangent(AZ::Vector3{0.12f, 0.34f, 0.56f});
                         bitangentData->AppendBitangent(AZ::Vector3{0.77f, 0.88f, 0.99f});
                         bitangentData->AppendBitangent(AZ::Vector3{0.77f, 0.88f, 0.99f});
-                        bitangentData->SetTangentSpace(AZ::SceneAPI::DataTypes::TangentSpace::FromFbx);
+                        bitangentData->SetTangentSpace(AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene);
                         bitangentData->SetBitangentSetIndex(1);
                         bitangentData->SetBitangentSetIndex(1);
                         return true;
                         return true;
                     }
                     }
@@ -317,7 +317,7 @@ namespace AZ
                 ExpectExecute("TestExpectFloatEquals(bitangentData.y, 0.88)");
                 ExpectExecute("TestExpectFloatEquals(bitangentData.y, 0.88)");
                 ExpectExecute("TestExpectFloatEquals(bitangentData.z, 0.99)");
                 ExpectExecute("TestExpectFloatEquals(bitangentData.z, 0.99)");
                 ExpectExecute("TestExpectIntegerEquals(meshVertexBitangentData:GetBitangentSetIndex(), 1)");
                 ExpectExecute("TestExpectIntegerEquals(meshVertexBitangentData:GetBitangentSetIndex(), 1)");
-                ExpectExecute("TestExpectTrue(meshVertexBitangentData:GetTangentSpace(), MeshVertexBitangentData.FromFbx)");
+                ExpectExecute("TestExpectTrue(meshVertexBitangentData:GetTangentSpace(), MeshVertexBitangentData.FromSourceScene)");
             }
             }
 
 
             TEST_F(GrapDatahBehaviorScriptTest, SceneGraph_MeshVertexTangentData_AccessWorks)
             TEST_F(GrapDatahBehaviorScriptTest, SceneGraph_MeshVertexTangentData_AccessWorks)

+ 3 - 3
Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Rules/MotionSamplingRule.cpp

@@ -129,7 +129,7 @@ namespace EMotionFX
                     return;
                     return;
                 }
                 }
 
 
-                serializeContext->Class<MotionSamplingRule, IRule>()->Version(3)
+                serializeContext->Class<MotionSamplingRule, IRule>()->Version(4)
                     ->Field("motionDataType", &MotionSamplingRule::m_motionDataType)
                     ->Field("motionDataType", &MotionSamplingRule::m_motionDataType)
                     ->Field("sampleRateMethod", &MotionSamplingRule::m_sampleRateMethod)
                     ->Field("sampleRateMethod", &MotionSamplingRule::m_sampleRateMethod)
                     ->Field("customSampleRate", &MotionSamplingRule::m_customSampleRate)
                     ->Field("customSampleRate", &MotionSamplingRule::m_customSampleRate)
@@ -151,7 +151,7 @@ namespace EMotionFX
                             ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::EntireTree)
                             ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::EntireTree)
                         ->DataElement(AZ::Edit::UIHandlers::ComboBox, &MotionSamplingRule::m_sampleRateMethod, "Sample rate", "Either use the Fbx sample rate or use a custom sample rate. The sample rate is automatically limited to the rate from Fbx.")
                         ->DataElement(AZ::Edit::UIHandlers::ComboBox, &MotionSamplingRule::m_sampleRateMethod, "Sample rate", "Either use the Fbx sample rate or use a custom sample rate. The sample rate is automatically limited to the rate from Fbx.")
                             ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::EntireTree)
                             ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::EntireTree)
-                            ->EnumAttribute(SampleRateMethod::FromFbx, "From Fbx")
+                            ->EnumAttribute(SampleRateMethod::FromSourceScene, "From Source Scene")
                             ->EnumAttribute(SampleRateMethod::Custom, "Custom sample rate")
                             ->EnumAttribute(SampleRateMethod::Custom, "Custom sample rate")
                         ->DataElement(AZ::Edit::UIHandlers::Default, &MotionSamplingRule::m_keepDuration, "Keep duration", "When enabled this keep the duration the same as the Fbx motion duration, even if no joints are animated. "
                         ->DataElement(AZ::Edit::UIHandlers::Default, &MotionSamplingRule::m_keepDuration, "Keep duration", "When enabled this keep the duration the same as the Fbx motion duration, even if no joints are animated. "
                             "When this option is disabled and the motion doesn't animate any joints then the resulting motion will have a duration of zero seconds.")
                             "When this option is disabled and the motion doesn't animate any joints then the resulting motion will have a duration of zero seconds.")
@@ -199,7 +199,7 @@ namespace EMotionFX
 
 
             AZ::Crc32 MotionSamplingRule::GetVisibilityCustomSampleRate() const
             AZ::Crc32 MotionSamplingRule::GetVisibilityCustomSampleRate() const
             {
             {
-                return m_sampleRateMethod == SampleRateMethod::FromFbx ? AZ::Edit::PropertyVisibility::Hide : AZ::Edit::PropertyVisibility::Show;
+                return m_sampleRateMethod == SampleRateMethod::FromSourceScene ? AZ::Edit::PropertyVisibility::Hide : AZ::Edit::PropertyVisibility::Show;
             }
             }
 
 
             AZ::Crc32 MotionSamplingRule::GetVisibilityAllowedSizePercentage() const
             AZ::Crc32 MotionSamplingRule::GetVisibilityAllowedSizePercentage() const

+ 2 - 2
Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Rules/MotionSamplingRule.h

@@ -30,7 +30,7 @@ namespace EMotionFX
 
 
                 enum class SampleRateMethod : AZ::u8
                 enum class SampleRateMethod : AZ::u8
                 {
                 {
-                    FromFbx = 0,
+                    FromSourceScene = 0,
                     Custom = 1
                     Custom = 1
                 };
                 };
 
 
@@ -71,7 +71,7 @@ namespace EMotionFX
                 AZ::Crc32 GetVisibilityAllowedSizePercentage() const;
                 AZ::Crc32 GetVisibilityAllowedSizePercentage() const;
                 
                 
                 float m_customSampleRate = 60.0f;
                 float m_customSampleRate = 60.0f;
-                SampleRateMethod m_sampleRateMethod = SampleRateMethod::FromFbx;
+                SampleRateMethod m_sampleRateMethod = SampleRateMethod::FromSourceScene;
                 AZ::TypeId m_motionDataType = AZ::TypeId::CreateNull();
                 AZ::TypeId m_motionDataType = AZ::TypeId::CreateNull();
                 bool m_keepDuration = true;
                 bool m_keepDuration = true;
 
 

+ 6 - 6
Gems/SceneProcessing/Code/Source/Generation/Components/TangentGenerator/TangentGenerateComponent.cpp

@@ -123,8 +123,8 @@ namespace AZ::SceneGenerationComponents
         while (uvData)
         while (uvData)
         {
         {
             // Get the tangents and bitangents from the source scene.
             // Get the tangents and bitangents from the source scene.
-            AZ::SceneAPI::DataTypes::IMeshVertexTangentData*    fbxTangentData   = AZ::SceneAPI::SceneData::TangentsRule::FindTangentData(graph, nodeIndex, uvSetIndex, AZ::SceneAPI::DataTypes::TangentSpace::FromFbx);
-            AZ::SceneAPI::DataTypes::IMeshVertexBitangentData*  fbxBitangentData = AZ::SceneAPI::SceneData::TangentsRule::FindBitangentData(graph, nodeIndex, uvSetIndex, AZ::SceneAPI::DataTypes::TangentSpace::FromFbx);
+            AZ::SceneAPI::DataTypes::IMeshVertexTangentData*    fbxTangentData   = AZ::SceneAPI::SceneData::TangentsRule::FindTangentData(graph, nodeIndex, uvSetIndex, AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene);
+            AZ::SceneAPI::DataTypes::IMeshVertexBitangentData*  fbxBitangentData = AZ::SceneAPI::SceneData::TangentsRule::FindBitangentData(graph, nodeIndex, uvSetIndex, AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene);
 
 
             if (fbxTangentData && fbxBitangentData)
             if (fbxTangentData && fbxBitangentData)
             {
             {
@@ -198,8 +198,8 @@ namespace AZ::SceneGenerationComponents
         }
         }
 
 
         // Check if we had tangents inside the source scene file.
         // Check if we had tangents inside the source scene file.
-        AZ::SceneAPI::DataTypes::IMeshVertexTangentData*    fbxTangentData   = AZ::SceneAPI::SceneData::TangentsRule::FindTangentData(graph, nodeIndex, 0, AZ::SceneAPI::DataTypes::TangentSpace::FromFbx);
-        AZ::SceneAPI::DataTypes::IMeshVertexBitangentData*  fbxBitangentData = AZ::SceneAPI::SceneData::TangentsRule::FindBitangentData(graph, nodeIndex, 0, AZ::SceneAPI::DataTypes::TangentSpace::FromFbx);
+        AZ::SceneAPI::DataTypes::IMeshVertexTangentData*    fbxTangentData   = AZ::SceneAPI::SceneData::TangentsRule::FindTangentData(graph, nodeIndex, 0, AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene);
+        AZ::SceneAPI::DataTypes::IMeshVertexBitangentData*  fbxBitangentData = AZ::SceneAPI::SceneData::TangentsRule::FindBitangentData(graph, nodeIndex, 0, AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene);
 
 
         // Check what tangent spaces we need.
         // Check what tangent spaces we need.
         AZStd::vector<AZ::SceneAPI::DataTypes::TangentSpace> requiredSpaces = CollectRequiredTangentSpaces(scene);
         AZStd::vector<AZ::SceneAPI::DataTypes::TangentSpace> requiredSpaces = CollectRequiredTangentSpaces(scene);
@@ -212,7 +212,7 @@ namespace AZ::SceneGenerationComponents
         }
         }
 
 
         // If all we need is import from the source scene, and we have tangent data from the source scene already, then skip generating.
         // If all we need is import from the source scene, and we have tangent data from the source scene already, then skip generating.
-        if ((requiredSpaces.size() == 1 && requiredSpaces[0] == AZ::SceneAPI::DataTypes::TangentSpace::FromFbx) && fbxTangentData && fbxBitangentData)
+        if ((requiredSpaces.size() == 1 && requiredSpaces[0] == AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene) && fbxTangentData && fbxBitangentData)
         {
         {
             return true;
             return true;
         }
         }
@@ -232,7 +232,7 @@ namespace AZ::SceneGenerationComponents
                 switch (space)
                 switch (space)
                 {
                 {
                 // If we want Fbx tangents, we don't need to do anything for that.
                 // If we want Fbx tangents, we don't need to do anything for that.
-                case AZ::SceneAPI::DataTypes::TangentSpace::FromFbx:
+                case AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene:
                 {
                 {
                     allSuccess &= true;
                     allSuccess &= true;
                 }
                 }