Bläddra i källkod

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

* Tangent space FromFBX -> FromSourceScene

Signed-off-by: stankowi <[email protected]>
AMZN-stankowi 4 år sedan
förälder
incheckning
0c43493e29

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

@@ -86,7 +86,7 @@ namespace AZ
                 // AssImp only has one bitangentStream per mesh.
                 bitangentStream->SetBitangentSetIndex(0);
 
-                bitangentStream->SetTangentSpace(AZ::SceneAPI::DataTypes::TangentSpace::FromFbx);
+                bitangentStream->SetTangentSpace(AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene);
                 bitangentStream->ReserveContainerSpace(vertexCount);
                 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.
                 tangentStream->SetTangentSetIndex(0);
 
-                tangentStream->SetTangentSpace(AZ::SceneAPI::DataTypes::TangentSpace::FromFbx);
+                tangentStream->SetTangentSpace(AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene);
                 tangentStream->ReserveContainerSpace(vertexCount);
                 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
             {
-                FromFbx     = 0,
-                MikkT       = 1,
-                EMotionFX   = 2
+                FromSourceScene = 0,
+                MikkT           = 1,
+                EMotionFX       = 2
             };
 
             enum class BitangentMethod

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

@@ -20,7 +20,7 @@ namespace AZ
                 SerializeContext* serializeContext = azrtti_cast<SerializeContext*>(context);
                 if (serializeContext)
                 {
-                    serializeContext->Class<MeshVertexBitangentData>()->Version(1);
+                    serializeContext->Class<MeshVertexBitangentData>()->Version(2);
                 }
 
                 BehaviorContext* behaviorContext = azrtti_cast<BehaviorContext*>(context);
@@ -34,7 +34,7 @@ namespace AZ
                         ->Method("GetBitangentSetIndex", &MeshVertexBitangentData::GetBitangentSetIndex)
                         ->Method("GetTangentSpace", &MeshVertexBitangentData::GetTangentSpace)
                         ->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");
                 }
             }

+ 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;
             protected:
                 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;
             };
 

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

@@ -20,7 +20,7 @@ namespace AZ
                 SerializeContext* serializeContext = azrtti_cast<SerializeContext*>(context);
                 if (serializeContext)
                 {
-                    serializeContext->Class<MeshVertexTangentData>()->Version(1);
+                    serializeContext->Class<MeshVertexTangentData>()->Version(2);
                 }
 
                 BehaviorContext* behaviorContext = azrtti_cast<BehaviorContext*>(context);
@@ -34,7 +34,7 @@ namespace AZ
                         ->Method("GetTangentSetIndex", &MeshVertexTangentData::GetTangentSetIndex)
                         ->Method("GetTangentSpace", &MeshVertexTangentData::GetTangentSpace)
                         ->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");
                 }
             }

+ 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;
             protected:
                 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;
             };
 

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

@@ -142,7 +142,7 @@ namespace AZ
                     return;
                 }
 
-                serializeContext->Class<TangentsRule, DataTypes::IRule>()->Version(1)
+                serializeContext->Class<TangentsRule, DataTypes::IRule>()->Version(2)
                     ->Field("tangentSpace", &TangentsRule::m_tangentSpace)
                     ->Field("bitangentMethod", &TangentsRule::m_bitangentMethod)
                     ->Field("normalize", &TangentsRule::m_normalize)
@@ -156,7 +156,7 @@ namespace AZ
                         ->Attribute("AutoExpand", true)
                         ->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.")
-                        ->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::EMotionFX, "EMotion FX")
                         ->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);
                         bitangentData->AppendBitangent(AZ::Vector3{0.12f, 0.34f, 0.56f});
                         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);
                         return true;
                     }
@@ -317,7 +317,7 @@ namespace AZ
                 ExpectExecute("TestExpectFloatEquals(bitangentData.y, 0.88)");
                 ExpectExecute("TestExpectFloatEquals(bitangentData.z, 0.99)");
                 ExpectExecute("TestExpectIntegerEquals(meshVertexBitangentData:GetBitangentSetIndex(), 1)");
-                ExpectExecute("TestExpectTrue(meshVertexBitangentData:GetTangentSpace(), MeshVertexBitangentData.FromFbx)");
+                ExpectExecute("TestExpectTrue(meshVertexBitangentData:GetTangentSpace(), MeshVertexBitangentData.FromSourceScene)");
             }
 
             TEST_F(GrapDatahBehaviorScriptTest, SceneGraph_MeshVertexTangentData_AccessWorks)

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

@@ -129,7 +129,7 @@ namespace EMotionFX
                     return;
                 }
 
-                serializeContext->Class<MotionSamplingRule, IRule>()->Version(3)
+                serializeContext->Class<MotionSamplingRule, IRule>()->Version(4)
                     ->Field("motionDataType", &MotionSamplingRule::m_motionDataType)
                     ->Field("sampleRateMethod", &MotionSamplingRule::m_sampleRateMethod)
                     ->Field("customSampleRate", &MotionSamplingRule::m_customSampleRate)
@@ -151,7 +151,7 @@ namespace EMotionFX
                             ->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.")
                             ->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")
                         ->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.")
@@ -199,7 +199,7 @@ namespace EMotionFX
 
             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

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

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

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

@@ -123,8 +123,8 @@ namespace AZ::SceneGenerationComponents
         while (uvData)
         {
             // 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)
             {
@@ -198,8 +198,8 @@ namespace AZ::SceneGenerationComponents
         }
 
         // 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.
         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 ((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;
         }
@@ -232,7 +232,7 @@ namespace AZ::SceneGenerationComponents
                 switch (space)
                 {
                 // 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;
                 }