Jelajahi Sumber

Merge pull request #68 from aws-lumberyard-dev/non-uniform-scale-updates

update usages of vector scale on Transform to use non-uniform scale
greerdv 4 tahun lalu
induk
melakukan
120743688f

+ 3 - 4
Gem/Code/Source/CullingAndLodExampleComponent.cpp

@@ -197,10 +197,9 @@ namespace AtomSampleViewer
         }
         }
 
 
         auto planeMeshHandle = meshFP->AcquireMesh(planeModelAsset, material);
         auto planeMeshHandle = meshFP->AcquireMesh(planeModelAsset, material);
-        Transform planeScale = Transform::CreateScale(Vector3(numAlongXAxis * spacing, numAlongYAxis * spacing, 1.0f));
-        Transform planeTranslation = Transform::CreateTranslation(Vector3(0.5f * numAlongXAxis * spacing, 0.5f * numAlongYAxis * spacing, 0.0f));
-        Transform planeModelToWorld = planeTranslation * planeScale;
-        meshFP->SetTransform(planeMeshHandle, planeModelToWorld);
+        Vector3 planeNonUniformScale(numAlongXAxis * spacing, numAlongYAxis * spacing, 1.0f);
+        Transform planeModelToWorld = Transform::CreateTranslation(Vector3(0.5f * numAlongXAxis * spacing, 0.5f * numAlongYAxis * spacing, 0.0f));
+        meshFP->SetTransform(planeMeshHandle, planeModelToWorld, planeNonUniformScale);
         m_meshHandles.push_back(AZStd::move(planeMeshHandle));
         m_meshHandles.push_back(AZStd::move(planeMeshHandle));
     }
     }
 
 

+ 2 - 2
Gem/Code/Source/DecalExampleComponent.cpp

@@ -87,8 +87,8 @@ namespace AtomSampleViewer
 
 
     void DecalExampleComponent::ScaleObjectToFitDecals()
     void DecalExampleComponent::ScaleObjectToFitDecals()
     {
     {
-        const AZ::Transform transform = AZ::Transform::CreateScale(AZ::Vector3(4.0f, 1.0f, 1.0f));
-        GetMeshFeatureProcessor()->SetTransform(m_meshHandle, transform);
+        const AZ::Vector3 nonUniformScale(4.0f, 1.0f, 1.0f);
+        GetMeshFeatureProcessor()->SetTransform(m_meshHandle, AZ::Transform::CreateIdentity(), nonUniformScale);
     }
     }
 
 
     void DecalExampleComponent::Deactivate()
     void DecalExampleComponent::Deactivate()

+ 14 - 14
Gem/Code/Source/DiffuseGIExampleComponent.cpp

@@ -244,9 +244,9 @@ namespace AtomSampleViewer
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             transform.SetTranslation(-5.0f, 0.0f, 0.0f);
             transform.SetTranslation(-5.0f, 0.0f, 0.0f);
             transform *= AZ::Transform::CreateRotationY(AZ::Constants::HalfPi);
             transform *= AZ::Transform::CreateRotationY(AZ::Constants::HalfPi);
-            transform.MultiplyByScale(AZ::Vector3(10.05f, 10.05f, 1.0f));
+            AZ::Vector3 nonUniformScale(10.05f, 10.05f, 1.0f);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::LeftWall)] = GetMeshFeatureProcessor()->AcquireMesh(m_planeModelAsset, materialMap);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::LeftWall)] = GetMeshFeatureProcessor()->AcquireMesh(m_planeModelAsset, materialMap);
-            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::LeftWall)], transform);
+            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::LeftWall)], transform, nonUniformScale);
         }
         }
         
         
         // right wall
         // right wall
@@ -259,9 +259,9 @@ namespace AtomSampleViewer
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             transform.SetTranslation(5.0f, 0.0f, 0.0f);
             transform.SetTranslation(5.0f, 0.0f, 0.0f);
             transform *= AZ::Transform::CreateRotationY(-AZ::Constants::HalfPi);
             transform *= AZ::Transform::CreateRotationY(-AZ::Constants::HalfPi);
-            transform.MultiplyByScale(AZ::Vector3(10.05f, 10.05f, 1.0f));
+            AZ::Vector3 nonUniformScale(10.05f, 10.05f, 1.0f);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::RightWall)] = GetMeshFeatureProcessor()->AcquireMesh(m_planeModelAsset, materialMap);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::RightWall)] = GetMeshFeatureProcessor()->AcquireMesh(m_planeModelAsset, materialMap);
-            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::RightWall)], transform);
+            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::RightWall)], transform, nonUniformScale);
         }
         }
         
         
         // back wall
         // back wall
@@ -274,9 +274,9 @@ namespace AtomSampleViewer
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             transform.SetTranslation(0.0f, 5.0f, 0.0f);
             transform.SetTranslation(0.0f, 5.0f, 0.0f);
             transform *= AZ::Transform::CreateRotationX(AZ::Constants::HalfPi);
             transform *= AZ::Transform::CreateRotationX(AZ::Constants::HalfPi);
-            transform.MultiplyByScale(AZ::Vector3(10.05f, 10.05f, 1.0f));
+            AZ::Vector3 nonUniformScale(10.05f, 10.05f, 1.0f);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::BackWall)] = GetMeshFeatureProcessor()->AcquireMesh(m_planeModelAsset, materialMap);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::BackWall)] = GetMeshFeatureProcessor()->AcquireMesh(m_planeModelAsset, materialMap);
-            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::BackWall)], transform);
+            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::BackWall)], transform, nonUniformScale);
         }
         }
         
         
         // ceiling
         // ceiling
@@ -289,9 +289,9 @@ namespace AtomSampleViewer
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             transform.SetTranslation(0.0f, 0.0f, 5.0f);
             transform.SetTranslation(0.0f, 0.0f, 5.0f);
             transform *= AZ::Transform::CreateRotationX(AZ::Constants::Pi);
             transform *= AZ::Transform::CreateRotationX(AZ::Constants::Pi);
-            transform.MultiplyByScale(AZ::Vector3(10.05f, 10.05f, 1.0f));
+            AZ::Vector3 nonUniformScale(10.05f, 10.05f, 1.0f);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::Ceiling)] = GetMeshFeatureProcessor()->AcquireMesh(m_planeModelAsset, materialMap);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::Ceiling)] = GetMeshFeatureProcessor()->AcquireMesh(m_planeModelAsset, materialMap);
-            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::Ceiling)], transform);
+            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::Ceiling)], transform, nonUniformScale);
         }
         }
         
         
         // floor
         // floor
@@ -303,9 +303,9 @@ namespace AtomSampleViewer
         
         
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             transform.SetTranslation(0.0f, 0.0f, -5.0f);
             transform.SetTranslation(0.0f, 0.0f, -5.0f);
-            transform.MultiplyByScale(AZ::Vector3(10.05f, 10.05f, 1.0f));
+            AZ::Vector3 nonUniformScale(10.05f, 10.05f, 1.0f);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::Floor)] = GetMeshFeatureProcessor()->AcquireMesh(m_planeModelAsset, materialMap);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::Floor)] = GetMeshFeatureProcessor()->AcquireMesh(m_planeModelAsset, materialMap);
-            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::Floor)], transform);
+            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::Floor)], transform, nonUniformScale);
         }
         }
         
         
         // large box
         // large box
@@ -317,9 +317,9 @@ namespace AtomSampleViewer
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             transform.SetTranslation(-2.0f, 0.0f, -2.0f);
             transform.SetTranslation(-2.0f, 0.0f, -2.0f);
             transform *= AZ::Transform::CreateRotationZ(AZ::Constants::HalfPi * 0.2f);
             transform *= AZ::Transform::CreateRotationZ(AZ::Constants::HalfPi * 0.2f);
-            transform.MultiplyByScale(AZ::Vector3(3.0f, 3.0f, 6.0f));
+            AZ::Vector3 nonUniformScale(3.0f, 3.0f, 6.0f);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::LargeBox)] = GetMeshFeatureProcessor()->AcquireMesh(m_cubeModelAsset, materialMap);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::LargeBox)] = GetMeshFeatureProcessor()->AcquireMesh(m_cubeModelAsset, materialMap);
-            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::LargeBox)], transform);
+            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::LargeBox)], transform, nonUniformScale);
         }
         }
         
         
         // small box
         // small box
@@ -331,9 +331,9 @@ namespace AtomSampleViewer
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             AZ::Transform transform = AZ::Transform::CreateIdentity();
             transform.SetTranslation(2.0f, -1.5f, -3.5f);
             transform.SetTranslation(2.0f, -1.5f, -3.5f);
             transform *= AZ::Transform::CreateRotationZ(-AZ::Constants::HalfPi * 0.2f);
             transform *= AZ::Transform::CreateRotationZ(-AZ::Constants::HalfPi * 0.2f);
-            transform.MultiplyByScale(AZ::Vector3(3.0f, 3.0f, 3.0f));
+            AZ::Vector3 nonUniformScale(3.0f, 3.0f, 3.0f);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::SmallBox)] = GetMeshFeatureProcessor()->AcquireMesh(m_cubeModelAsset, materialMap);
             m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::SmallBox)] = GetMeshFeatureProcessor()->AcquireMesh(m_cubeModelAsset, materialMap);
-            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::SmallBox)], transform);
+            GetMeshFeatureProcessor()->SetTransform(m_meshHandles[aznumeric_cast<uint32_t>(CornellBoxMeshes::SmallBox)], transform, nonUniformScale);
         }
         }
 
 
         // stop now if we were only loading the geometry
         // stop now if we were only loading the geometry

+ 3 - 2
Gem/Code/Source/MaterialHotReloadTestComponent.cpp

@@ -183,7 +183,7 @@ namespace AtomSampleViewer
         // The shader variant indicator banner will appear right below the main test mesh
         // The shader variant indicator banner will appear right below the main test mesh
         m_shaderVariantIndicatorMeshTransform = Transform::CreateIdentity();
         m_shaderVariantIndicatorMeshTransform = Transform::CreateIdentity();
         m_shaderVariantIndicatorMeshTransform.SetTranslation(Vector3{0.0f, 0.0f, -0.6f});
         m_shaderVariantIndicatorMeshTransform.SetTranslation(Vector3{0.0f, 0.0f, -0.6f});
-        m_shaderVariantIndicatorMeshTransform.SetScale(Vector3{1.0f, 0.125f, 1.0f});
+        m_shaderVariantIndicatorMeshNonUniformScale = Vector3(1.0f, 0.125f, 1.0f);
         m_shaderVariantIndicatorMeshTransform.SetRotation(Quaternion::CreateFromAxisAngle(Vector3::CreateAxisX(), -AZ::Constants::HalfPi));
         m_shaderVariantIndicatorMeshTransform.SetRotation(Quaternion::CreateFromAxisAngle(Vector3::CreateAxisX(), -AZ::Constants::HalfPi));
 
 
         // Load materials that will be used to indicate which shader variant is active...
         // Load materials that will be used to indicate which shader variant is active...
@@ -469,7 +469,8 @@ namespace AtomSampleViewer
             {
             {
                 m_meshFeatureProcessor->ReleaseMesh(m_shaderVariantIndicatorMeshHandle);
                 m_meshFeatureProcessor->ReleaseMesh(m_shaderVariantIndicatorMeshHandle);
                 m_shaderVariantIndicatorMeshHandle = m_meshFeatureProcessor->AcquireMesh(m_modelAsset, m_shaderVariantIndicatorMaterial_current);
                 m_shaderVariantIndicatorMeshHandle = m_meshFeatureProcessor->AcquireMesh(m_modelAsset, m_shaderVariantIndicatorMaterial_current);
-                m_meshFeatureProcessor->SetTransform(m_shaderVariantIndicatorMeshHandle, m_shaderVariantIndicatorMeshTransform);
+                m_meshFeatureProcessor->SetTransform(m_shaderVariantIndicatorMeshHandle, m_shaderVariantIndicatorMeshTransform,
+                    m_shaderVariantIndicatorMeshNonUniformScale);
             }
             }
         }
         }
 
 

+ 1 - 0
Gem/Code/Source/MaterialHotReloadTestComponent.h

@@ -107,6 +107,7 @@ namespace AtomSampleViewer
 
 
         // These are used to render a secondary mesh that indicates which shader variant is being used to render the primary mesh
         // These are used to render a secondary mesh that indicates which shader variant is being used to render the primary mesh
         AZ::Transform m_shaderVariantIndicatorMeshTransform;
         AZ::Transform m_shaderVariantIndicatorMeshTransform;
+        AZ::Vector3 m_shaderVariantIndicatorMeshNonUniformScale = AZ::Vector3::CreateOne();
         AZ::Render::MeshFeatureProcessorInterface::MeshHandle m_shaderVariantIndicatorMeshHandle;
         AZ::Render::MeshFeatureProcessorInterface::MeshHandle m_shaderVariantIndicatorMeshHandle;
         AZ::Data::Instance<AZ::RPI::Material> m_shaderVariantIndicatorMaterial_root;
         AZ::Data::Instance<AZ::RPI::Material> m_shaderVariantIndicatorMaterial_root;
         AZ::Data::Instance<AZ::RPI::Material> m_shaderVariantIndicatorMaterial_fullyBaked;
         AZ::Data::Instance<AZ::RPI::Material> m_shaderVariantIndicatorMaterial_fullyBaked;

+ 3 - 3
Gem/Code/Source/MultiRenderPipelineExampleComponent.cpp

@@ -128,10 +128,10 @@ namespace AtomSampleViewer
             m_bunnyMeshHandles[bunnyIndex] = meshFeatureProcessor->AcquireMesh(bunnyAsset, material);
             m_bunnyMeshHandles[bunnyIndex] = meshFeatureProcessor->AcquireMesh(bunnyAsset, material);
         }
         }
 
 
-        const Vector3 scale{ 12.f, 12.f, 0.1f };
+        const Vector3 floorNonUniformScale{ 12.f, 12.f, 0.1f };
         const Vector3 translation{ 0.f, 0.f, -0.05f };
         const Vector3 translation{ 0.f, 0.f, -0.05f };
-        Transform floorTransform = Transform::CreateTranslation(translation) * AZ::Transform::CreateScale(scale);
-        meshFeatureProcessor->SetTransform(m_floorMeshHandle, floorTransform);
+        Transform floorTransform = Transform::CreateTranslation(translation);
+        meshFeatureProcessor->SetTransform(m_floorMeshHandle, floorTransform, floorNonUniformScale);
 
 
         meshFeatureProcessor->SetTransform(m_bunnyMeshHandles[0], Transform::CreateTranslation(Vector3(0.f, 0.f, 0.21f)));
         meshFeatureProcessor->SetTransform(m_bunnyMeshHandles[0], Transform::CreateTranslation(Vector3(0.f, 0.f, 0.21f)));
         meshFeatureProcessor->SetTransform(m_bunnyMeshHandles[1], Transform::CreateTranslation(Vector3(-3.f, 3.f, 0.21f)));
         meshFeatureProcessor->SetTransform(m_bunnyMeshHandles[1], Transform::CreateTranslation(Vector3(-3.f, 3.f, 0.21f)));

+ 3 - 3
Gem/Code/Source/MultiSceneExampleComponent.cpp

@@ -189,11 +189,11 @@ namespace AtomSampleViewer
 
 
         // Create the floor
         // Create the floor
         {
         {
-            const Vector3 scale{ 24.f, 24.f, 1.0f };
+            const Vector3 nonUniformScale{ 24.f, 24.f, 1.0f };
             const Vector3 translation{ 0.f, 0.f, 0.0f };
             const Vector3 translation{ 0.f, 0.f, 0.0f };
-            const auto transform = Transform::CreateTranslation(translation) * Transform::CreateScale(scale);
+            const auto transform = Transform::CreateTranslation(translation);
             m_floorMeshHandle = LoadMesh("testdata/objects/cube/cube.azmodel");
             m_floorMeshHandle = LoadMesh("testdata/objects/cube/cube.azmodel");
-            m_meshFeatureProcessor->SetTransform(m_floorMeshHandle, transform);
+            m_meshFeatureProcessor->SetTransform(m_floorMeshHandle, transform, nonUniformScale);
         }
         }
 
 
         // Create the Skybox
         // Create the Skybox

+ 2 - 2
Gem/Code/Source/SSRExampleComponent.cpp

@@ -162,8 +162,8 @@ namespace AtomSampleViewer
         m_groundMeshHandle = GetMeshFeatureProcessor()->AcquireMesh(planeModel, AZ::RPI::Material::FindOrCreate(m_groundMaterialAsset));
         m_groundMeshHandle = GetMeshFeatureProcessor()->AcquireMesh(planeModel, AZ::RPI::Material::FindOrCreate(m_groundMaterialAsset));
 
 
         AZ::Transform transform = AZ::Transform::CreateIdentity();
         AZ::Transform transform = AZ::Transform::CreateIdentity();
-        transform.MultiplyByScale(AZ::Vector3(15.0f, 15.0f, 1.0f));
-        GetMeshFeatureProcessor()->SetTransform(m_groundMeshHandle, transform);
+        const AZ::Vector3 nonUniformScale(15.0f, 15.0f, 1.0f);
+        GetMeshFeatureProcessor()->SetTransform(m_groundMeshHandle, transform, nonUniformScale);
     }
     }
 
 
     void SSRExampleComponent::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint timePoint)
     void SSRExampleComponent::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint timePoint)

+ 4 - 5
Gem/Code/Source/ShadowExampleComponent.cpp

@@ -357,11 +357,10 @@ namespace AtomSampleViewer
         {
         {
             const AZ::Aabb& aabb = model->GetAabb();
             const AZ::Aabb& aabb = model->GetAabb();
             const float maxZ = aabb.GetMax().GetZ();
             const float maxZ = aabb.GetMax().GetZ();
-            const AZ::Vector3 scale{ 12.f, 12.f, 0.1f };
-            const AZ::Vector3 translation{ 0.f, 0.f, -maxZ * scale.GetZ() };
-            const auto transform = AZ::Transform::CreateTranslation(translation) *
-                AZ::Transform::CreateScale(scale);
-            GetMeshFeatureProcessor()->SetTransform(m_floorMeshHandle, transform);
+            const AZ::Vector3 nonUniformScale{ 12.f, 12.f, 0.1f };
+            const AZ::Vector3 translation{ 0.f, 0.f, -maxZ * nonUniformScale.GetZ() };
+            const auto transform = AZ::Transform::CreateTranslation(translation);
+            GetMeshFeatureProcessor()->SetTransform(m_floorMeshHandle, transform, nonUniformScale);
             m_floorMeshIsReady = true;
             m_floorMeshIsReady = true;
             if (m_bunnyMeshIsReady)
             if (m_bunnyMeshIsReady)
             {
             {