Merge branch 'development' of https://github.com/o3de/o3de into TerrainMaterialsFix

monroegm-disable-blank-issue-2
Sergey Pereslavtsev 4 years ago
commit 231c25df89

@ -17,34 +17,34 @@ sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesti
from base import TestAutomationBase from base import TestAutomationBase
@pytest.mark.SUITE_periodic @pytest.mark.SUITE_main
@pytest.mark.parametrize("launcher_platform", ['windows_editor']) @pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("project", ["AutomatedTesting"]) @pytest.mark.parametrize("project", ["AutomatedTesting"])
class TestAutomation(TestAutomationBase): class TestAutomation(TestAutomationBase):
def test_ActorSplitsAfterCollision(self, request, workspace, editor, launcher_platform): def test_ActorSplitsAfterCollision(self, request, workspace, editor, launcher_platform):
from .tests import Blast_ActorSplitsAfterCollision as test_module from .tests import Blast_ActorSplitsAfterCollision as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_ActorSplitsAfterRadialDamage(self, request, workspace, editor, launcher_platform): def test_ActorSplitsAfterRadialDamage(self, request, workspace, editor, launcher_platform):
from .tests import Blast_ActorSplitsAfterRadialDamage as test_module from .tests import Blast_ActorSplitsAfterRadialDamage as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_ActorSplitsAfterCapsuleDamage(self, request, workspace, editor, launcher_platform): def test_ActorSplitsAfterCapsuleDamage(self, request, workspace, editor, launcher_platform):
from .tests import Blast_ActorSplitsAfterCapsuleDamage as test_module from .tests import Blast_ActorSplitsAfterCapsuleDamage as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_ActorSplitsAfterImpactSpreadDamage(self, request, workspace, editor, launcher_platform): def test_ActorSplitsAfterImpactSpreadDamage(self, request, workspace, editor, launcher_platform):
from .tests import Blast_ActorSplitsAfterImpactSpreadDamage as test_module from .tests import Blast_ActorSplitsAfterImpactSpreadDamage as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_ActorSplitsAfterShearDamage(self, request, workspace, editor, launcher_platform): def test_ActorSplitsAfterShearDamage(self, request, workspace, editor, launcher_platform):
from .tests import Blast_ActorSplitsAfterShearDamage as test_module from .tests import Blast_ActorSplitsAfterShearDamage as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_ActorSplitsAfterTriangleDamage(self, request, workspace, editor, launcher_platform): def test_ActorSplitsAfterTriangleDamage(self, request, workspace, editor, launcher_platform):
from .tests import Blast_ActorSplitsAfterTriangleDamage as test_module from .tests import Blast_ActorSplitsAfterTriangleDamage as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_ActorSplitsAfterStressDamage(self, request, workspace, editor, launcher_platform): def test_ActorSplitsAfterStressDamage(self, request, workspace, editor, launcher_platform):
from .tests import Blast_ActorSplitsAfterStressDamage as test_module from .tests import Blast_ActorSplitsAfterStressDamage as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)

@ -14,7 +14,7 @@ import azlmbr.math as math
import azlmbr.asset as asset import azlmbr.asset as asset
# Open a level (any level should work) # Open a level (any level should work)
editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'WaterSample') editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'Base')
def GetSetCompareTest(component, path, assetId): def GetSetCompareTest(component, path, assetId):
# Test Get/Set (get old value, set new value, check that new value was set correctly) # Test Get/Set (get old value, set new value, check that new value was set correctly)

@ -24,6 +24,7 @@ from hydra_utils import launch_test_case
@pytest.mark.parametrize('level', ['Simple']) @pytest.mark.parametrize('level', ['Simple'])
class TestComponentCommands(object): class TestComponentCommands(object):
# It needs a new test level in prefab format to make it testable again.
def test_MeshComponentBasics(self, request, editor, level, launcher_platform): def test_MeshComponentBasics(self, request, editor, level, launcher_platform):
unexpected_lines=[] unexpected_lines=[]

@ -5,6 +5,8 @@ For complete copyright and license terms please see the LICENSE at the root of t
SPDX-License-Identifier: Apache-2.0 OR MIT SPDX-License-Identifier: Apache-2.0 OR MIT
""" """
# It needs a new test level in prefab format to make it testable again.
# Tests a portion of the Component CRUD Python API while the Editor is running # Tests a portion of the Component CRUD Python API while the Editor is running
import azlmbr.bus as bus import azlmbr.bus as bus
@ -18,7 +20,7 @@ def CompareComponentEntityIdPairs(component1, component2):
return component1.Equal(component2) return component1.Equal(component2)
# Open a level (any level should work) # Open a level (any level should work)
editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'WaterSample') editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'Base')
# Get Component Types for Mesh and Comment # Get Component Types for Mesh and Comment
typeIdsList = editor.EditorComponentAPIBus(bus.Broadcast, 'FindComponentTypeIdsByEntityType', ["Mesh", "Comment", "Mesh Collider"], entity.EntityType().Game) typeIdsList = editor.EditorComponentAPIBus(bus.Broadcast, 'FindComponentTypeIdsByEntityType', ["Mesh", "Comment", "Mesh Collider"], entity.EntityType().Game)

@ -13,7 +13,7 @@ import azlmbr.entity as entity
import azlmbr.math as math import azlmbr.math as math
# Open a level (any level should work) # Open a level (any level should work)
editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'WaterSample') editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'Base')
def GetSetCompareTest(component, path, value): def GetSetCompareTest(component, path, value):
oldObj = editor.EditorComponentAPIBus(bus.Broadcast, 'GetComponentProperty', component, path) oldObj = editor.EditorComponentAPIBus(bus.Broadcast, 'GetComponentProperty', component, path)

@ -12,7 +12,7 @@ import azlmbr.editor as editor
from azlmbr.entity import EntityId from azlmbr.entity import EntityId
# Open a level (any level should work) # Open a level (any level should work)
editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'WaterSample') editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'Base')
parentEntityId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', EntityId()) parentEntityId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', EntityId())
childEntityId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', EntityId()) childEntityId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', EntityId())

@ -32,7 +32,7 @@ def onEditorEntityDeleted(parameters):
# Open a level (any level should work) # Open a level (any level should work)
editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'WaterSample') editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'Base')
# Listen for notifications when entities are created/deleted # Listen for notifications when entities are created/deleted
handler = bus.NotificationHandler('EditorEntityContextNotificationBus') handler = bus.NotificationHandler('EditorEntityContextNotificationBus')

@ -16,13 +16,13 @@ import os
sys.path.append(os.path.dirname(__file__)) sys.path.append(os.path.dirname(__file__))
from hydra_utils import launch_test_case from hydra_utils import launch_test_case
@pytest.mark.SUITE_sandbox @pytest.mark.SUITE_sandbox
@pytest.mark.parametrize('launcher_platform', ['windows_editor']) @pytest.mark.parametrize('launcher_platform', ['windows_editor'])
@pytest.mark.parametrize('project', ['AutomatedTesting']) @pytest.mark.parametrize('project', ['AutomatedTesting'])
@pytest.mark.parametrize('level', ['Simple']) @pytest.mark.parametrize('level', ['Simple'])
class TestObjectManagerAutomation(object): class TestObjectManagerAutomation(object):
# It needs a new test level in prefab format to make it testable again.
def test_ViewPane(self, request, editor, level, launcher_platform): def test_ViewPane(self, request, editor, level, launcher_platform):
unexpected_lines=[] unexpected_lines=[]

@ -20,12 +20,10 @@ def fetch_vector3_parts(vec3):
general.idle_enable(True) general.idle_enable(True)
# Try to open the WaterSample level. If not, fail the test. # It needs a new test level in prefab format to make it testable again.
# We need to rely on an existing level since the API does not provide editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'Base')
# a way to create entities, but only lets us manipulate them.
editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'WaterSample')
if (editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'GetCurrentLevelName') == 'WaterSample'): if (editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'GetCurrentLevelName') == 'Base'):
objs_list = general.get_all_objects() objs_list = general.get_all_objects()

@ -21,8 +21,7 @@ import azlmbr.bus as bus
import azlmbr.entity as entity import azlmbr.entity as entity
import azlmbr.editor as editor import azlmbr.editor as editor
import azlmbr.legacy.general as general import azlmbr.legacy.general as general
import editor_python_test_tools.pyside_component_utils as pysde_component_utils import editor_python_test_tools.pyside_component_utils as pyside_component_utils
def PySide_Example_test_case(): def PySide_Example_test_case():
# Open level, any level should work # Open level, any level should work

@ -13,7 +13,7 @@ import azlmbr.math
import azlmbr.legacy.general as general import azlmbr.legacy.general as general
# Open a level (any level should work) # Open a level (any level should work)
editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'WaterSample') editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'Base')
general.idle_wait(0.5) general.idle_wait(0.5)

@ -11,7 +11,7 @@ import azlmbr.math
import azlmbr.legacy.general as general import azlmbr.legacy.general as general
# Open a level (any level should work) # Open a level (any level should work)
general.open_level_no_prompt('WaterSample') general.open_level_no_prompt('Base')
general.idle_wait(0.5) general.idle_wait(0.5)
test_success = True test_success = True

@ -20,7 +20,7 @@ from editor_python_test_tools.utils import TestHelper as helper
def open_base_level(): def open_base_level():
helper.init_idle() helper.init_idle()
helper.open_level("Prefab", "Base") helper.open_level("", "Base")
def find_entity_by_name(entity_name): def find_entity_by_name(entity_name):

@ -61,7 +61,7 @@ def launch_and_validate_results(request, test_directory, editor, editor_script,
from os import path from os import path
editor.args.extend([ editor.args.extend([
"--regset=/Amazon/Preferences/EnablePrefabSystem=true", "--regset=/Amazon/Preferences/EnablePrefabSystem=true",
f"--regset-file={os.path.join(workspace.paths.engine_root(), 'Registry', 'prefab.test.setreg')}"]) f"--regset-file={os.path.join(editor.workspace.paths.engine_root(), 'Registry', 'prefab.test.setreg')}"])
else: else:
editor.args.extend(["--regset=/Amazon/Preferences/EnablePrefabSystem=false"]) editor.args.extend(["--regset=/Amazon/Preferences/EnablePrefabSystem=false"])

@ -7,8 +7,7 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
import PySide2 import PySide2
import editor_python_test_tools.pyside_utils import editor_python_test_tools.pyside_utils as pyside_utils
def get_component_combobox_values(component_name, property_name, log_fn=None): def get_component_combobox_values(component_name, property_name, log_fn=None):
""" """

@ -67,7 +67,7 @@ class TestHelper:
return result == 0 return result == 0
@staticmethod @staticmethod
def open_level(directory : str, level : str): def open_level(directory : str, level : str, no_prompt: bool = True):
# type: (str, str) -> None # type: (str, str) -> None
""" """
:param level: the name of the level folder in AutomatedTesting\\Physics\\ :param level: the name of the level folder in AutomatedTesting\\Physics\\
@ -75,7 +75,11 @@ class TestHelper:
:return: None :return: None
""" """
Report.info("Open level {}/{}".format(directory, level)) Report.info("Open level {}/{}".format(directory, level))
if no_prompt:
success = general.open_level_no_prompt(os.path.join(directory, level)) success = general.open_level_no_prompt(os.path.join(directory, level))
else:
success = general.open_level(os.path.join(directory, level))
if not success: if not success:
open_level_name = general.get_current_level_name() open_level_name = general.get_current_level_name()
if open_level_name == level: if open_level_name == level:

@ -52,11 +52,11 @@ class TestAutomation(TestAutomationBase):
@revert_physics_config @revert_physics_config
def test_CharacterController_SwitchLevels(self, request, workspace, editor, launcher_platform): def test_CharacterController_SwitchLevels(self, request, workspace, editor, launcher_platform):
from .tests.character_controller import CharacterController_SwitchLevels as test_module from .tests.character_controller import CharacterController_SwitchLevels as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_Ragdoll_AddPhysxRagdollComponentWorks(self, request, workspace, editor, launcher_platform): def test_Ragdoll_AddPhysxRagdollComponentWorks(self, request, workspace, editor, launcher_platform):
from .tests.ragdoll import Ragdoll_AddPhysxRagdollComponentWorks as test_module from .tests.ragdoll import Ragdoll_AddPhysxRagdollComponentWorks as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@revert_physics_config @revert_physics_config
def test_ScriptCanvas_MultipleRaycastNode(self, request, workspace, editor, launcher_platform): def test_ScriptCanvas_MultipleRaycastNode(self, request, workspace, editor, launcher_platform):
@ -81,7 +81,7 @@ class TestAutomation(TestAutomationBase):
@revert_physics_config @revert_physics_config
def test_Collider_PxMeshConvexMeshCollides(self, request, workspace, editor, launcher_platform): def test_Collider_PxMeshConvexMeshCollides(self, request, workspace, editor, launcher_platform):
from .tests.collider import Collider_PxMeshConvexMeshCollides as test_module from .tests.collider import Collider_PxMeshConvexMeshCollides as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@revert_physics_config @revert_physics_config
def test_ShapeCollider_CylinderShapeCollides(self, request, workspace, editor, launcher_platform): def test_ShapeCollider_CylinderShapeCollides(self, request, workspace, editor, launcher_platform):

@ -53,7 +53,8 @@ class EditorSingleTest_WithFileOverrides(EditorSingleTest):
for f in original_file_list: for f in original_file_list:
fm._restore_file(f, file_list[f]) fm._restore_file(f, file_list[f])
@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.")
# @pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.")
@pytest.mark.SUITE_main @pytest.mark.SUITE_main
@pytest.mark.parametrize("launcher_platform", ['windows_editor']) @pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("project", ["AutomatedTesting"]) @pytest.mark.parametrize("project", ["AutomatedTesting"])
@ -72,6 +73,48 @@ class TestAutomationWithPrefabSystemEnabled(EditorTestSuite):
class C4982802_PhysXColliderShape_CanBeSelected(EditorSharedTest): class C4982802_PhysXColliderShape_CanBeSelected(EditorSharedTest):
from .tests.collider import Collider_CapsuleShapeEditing as test_module from .tests.collider import Collider_CapsuleShapeEditing as test_module
class C14654881_CharacterController_SwitchLevels(EditorSharedTest):
from .tests.character_controller import CharacterController_SwitchLevels as test_module
class C14861500_DefaultSetting_ColliderShape(EditorSharedTest):
from .tests.collider import Collider_CheckDefaultShapeSettingIsPxMesh as test_module
class C4044695_PhysXCollider_AddMultipleSurfaceFbx(EditorSharedTest):
from .tests.collider import Collider_MultipleSurfaceSlots as test_module
class C14861501_PhysXCollider_RenderMeshAutoAssigned(EditorSharedTest):
from .tests.collider import Collider_PxMeshAutoAssignedWhenAddingRenderMeshComponent as test_module
@pytest.mark.xfail(reason="This will fail due to this issue ATOM-15487.")
class C14861502_PhysXCollider_AssetAutoAssigned(EditorSharedTest):
from .tests.collider import Collider_PxMeshAutoAssignedWhenModifyingRenderMeshComponent as test_module
class C4982803_Enable_PxMesh_Option(EditorSharedTest):
from .tests.collider import Collider_PxMeshConvexMeshCollides as test_module
class C15096740_Material_LibraryUpdatedCorrectly(EditorSharedTest):
from .tests.material import Material_LibraryClearingAssignsDefault as test_module
class C17411467_AddPhysxRagdollComponent(EditorSharedTest):
from .tests.ragdoll import Ragdoll_AddPhysxRagdollComponentWorks as test_module
class C19578021_ShapeCollider_CanBeAdded(EditorSharedTest):
from .tests.shape_collider import ShapeCollider_CanBeAddedWitNoWarnings as test_module
class C19578018_ShapeColliderWithNoShapeComponent(EditorSharedTest):
from .tests.shape_collider import ShapeCollider_InactiveWhenNoShapeComponent as test_module
class C19723164_ShapeCollider_WontCrashEditor(EditorSharedTest):
from .tests.shape_collider import ShapeCollider_LargeNumberOfShapeCollidersWontCrashEditor as test_module
class C12905528_ForceRegion_WithNonTriggerCollider(EditorSharedTest):
from .tests.force_region import ForceRegion_WithNonTriggerColliderWarning as test_module
# Fixme: expected_lines = ["[Warning] (PhysX Force Region) - Please ensure collider component marked as trigger exists in entity"]
class C14861504_RenderMeshAsset_WithNoPxAsset(EditorSharedTest):
from .tests.collider import Collider_PxMeshNotAutoAssignedWhenNoPhysicsFbx as test_module
@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.") @pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.")
@pytest.mark.SUITE_main @pytest.mark.SUITE_main
@pytest.mark.parametrize("launcher_platform", ['windows_editor']) @pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@ -116,18 +159,12 @@ class TestAutomation(EditorTestSuite):
class C14654881_CharacterController_SwitchLevels(EditorSharedTest): class C14654881_CharacterController_SwitchLevels(EditorSharedTest):
from .tests.character_controller import CharacterController_SwitchLevels as test_module from .tests.character_controller import CharacterController_SwitchLevels as test_module
class C17411467_AddPhysxRagdollComponent(EditorSharedTest):
from .tests.ragdoll import Ragdoll_AddPhysxRagdollComponentWorks as test_module
class C12712453_ScriptCanvas_MultipleRaycastNode(EditorSharedTest): class C12712453_ScriptCanvas_MultipleRaycastNode(EditorSharedTest):
from .tests.script_canvas import ScriptCanvas_MultipleRaycastNode as test_module from .tests.script_canvas import ScriptCanvas_MultipleRaycastNode as test_module
class C18243586_Joints_HingeLeadFollowerCollide(EditorSharedTest): class C18243586_Joints_HingeLeadFollowerCollide(EditorSharedTest):
from .tests.joints import Joints_HingeLeadFollowerCollide as test_module from .tests.joints import Joints_HingeLeadFollowerCollide as test_module
class C4982803_Enable_PxMesh_Option(EditorSharedTest):
from .tests.collider import Collider_PxMeshConvexMeshCollides as test_module
class C24308873_CylinderShapeCollider_CollidesWithPhysXTerrain(EditorSharedTest): class C24308873_CylinderShapeCollider_CollidesWithPhysXTerrain(EditorSharedTest):
from .tests.shape_collider import ShapeCollider_CylinderShapeCollides as test_module from .tests.shape_collider import ShapeCollider_CylinderShapeCollides as test_module
@ -297,19 +334,6 @@ class TestAutomation(EditorTestSuite):
class C18243591_Joints_BallLeadFollowerCollide(EditorSharedTest): class C18243591_Joints_BallLeadFollowerCollide(EditorSharedTest):
from .tests.joints import Joints_BallLeadFollowerCollide as test_module from .tests.joints import Joints_BallLeadFollowerCollide as test_module
class C19578018_ShapeColliderWithNoShapeComponent(EditorSharedTest):
from .tests.shape_collider import ShapeCollider_InactiveWhenNoShapeComponent as test_module
class C14861500_DefaultSetting_ColliderShape(EditorSharedTest):
from .tests.collider import Collider_CheckDefaultShapeSettingIsPxMesh as test_module
class C19723164_ShapeCollider_WontCrashEditor(EditorSharedTest):
from .tests.shape_collider import ShapeCollider_LargeNumberOfShapeCollidersWontCrashEditor as test_module
class C12905528_ForceRegion_WithNonTriggerCollider(EditorSharedTest):
from .tests.force_region import ForceRegion_WithNonTriggerColliderWarning as test_module
# Fixme: expected_lines = ["[Warning] (PhysX Force Region) - Please ensure collider component marked as trigger exists in entity"]
class C5932040_ForceRegion_CubeExertsWorldForce(EditorSharedTest): class C5932040_ForceRegion_CubeExertsWorldForce(EditorSharedTest):
from .tests.force_region import ForceRegion_WorldSpaceForceOnRigidBodies as test_module from .tests.force_region import ForceRegion_WorldSpaceForceOnRigidBodies as test_module
@ -322,25 +346,9 @@ class TestAutomation(EditorTestSuite):
class C5959809_ForceRegion_RotationalOffset(EditorSharedTest): class C5959809_ForceRegion_RotationalOffset(EditorSharedTest):
from .tests.force_region import ForceRegion_RotationalOffset as test_module from .tests.force_region import ForceRegion_RotationalOffset as test_module
class C15096740_Material_LibraryUpdatedCorrectly(EditorSharedTest):
from .tests.material import Material_LibraryClearingAssignsDefault as test_module
class C4976236_AddPhysxColliderComponent(EditorSharedTest): class C4976236_AddPhysxColliderComponent(EditorSharedTest):
from .tests.collider import Collider_AddColliderComponent as test_module from .tests.collider import Collider_AddColliderComponent as test_module
@pytest.mark.xfail(reason="This will fail due to this issue ATOM-15487.")
class C14861502_PhysXCollider_AssetAutoAssigned(EditorSharedTest):
from .tests.collider import Collider_PxMeshAutoAssignedWhenModifyingRenderMeshComponent as test_module
class C14861501_PhysXCollider_RenderMeshAutoAssigned(EditorSharedTest):
from .tests.collider import Collider_PxMeshAutoAssignedWhenAddingRenderMeshComponent as test_module
class C4044695_PhysXCollider_AddMultipleSurfaceFbx(EditorSharedTest):
from .tests.collider import Collider_MultipleSurfaceSlots as test_module
class C14861504_RenderMeshAsset_WithNoPxAsset(EditorSharedTest):
from .tests.collider import Collider_PxMeshNotAutoAssignedWhenNoPhysicsFbx as test_module
class C100000_RigidBody_EnablingGravityWorksPoC(EditorSharedTest): class C100000_RigidBody_EnablingGravityWorksPoC(EditorSharedTest):
from .tests.rigid_body import RigidBody_EnablingGravityWorksPoC as test_module from .tests.rigid_body import RigidBody_EnablingGravityWorksPoC as test_module
@ -350,8 +358,5 @@ class TestAutomation(EditorTestSuite):
class C6090547_ForceRegion_ParentChildForceRegions(EditorSharedTest): class C6090547_ForceRegion_ParentChildForceRegions(EditorSharedTest):
from .tests.force_region import ForceRegion_ParentChildForcesCombineForces as test_module from .tests.force_region import ForceRegion_ParentChildForcesCombineForces as test_module
class C19578021_ShapeCollider_CanBeAdded(EditorSharedTest):
from .tests.shape_collider import ShapeCollider_CanBeAddedWitNoWarnings as test_module
class C15425929_Undo_Redo(EditorSharedTest): class C15425929_Undo_Redo(EditorSharedTest):
from .tests import Physics_UndoRedoWorksOnEntityWithPhysComponents as test_module from .tests import Physics_UndoRedoWorksOnEntityWithPhysComponents as test_module

@ -388,17 +388,17 @@ class TestAutomation(TestAutomationBase):
@revert_physics_config @revert_physics_config
def test_ShapeCollider_InactiveWhenNoShapeComponent(self, request, workspace, editor, launcher_platform): def test_ShapeCollider_InactiveWhenNoShapeComponent(self, request, workspace, editor, launcher_platform):
from .tests.shape_collider import ShapeCollider_InactiveWhenNoShapeComponent as test_module from .tests.shape_collider import ShapeCollider_InactiveWhenNoShapeComponent as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@revert_physics_config @revert_physics_config
def test_Collider_CheckDefaultShapeSettingIsPxMesh(self, request, workspace, editor, launcher_platform): def test_Collider_CheckDefaultShapeSettingIsPxMesh(self, request, workspace, editor, launcher_platform):
from .tests.collider import Collider_CheckDefaultShapeSettingIsPxMesh as test_module from .tests.collider import Collider_CheckDefaultShapeSettingIsPxMesh as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@revert_physics_config @revert_physics_config
def test_ShapeCollider_LargeNumberOfShapeCollidersWontCrashEditor(self, request, workspace, editor, launcher_platform): def test_ShapeCollider_LargeNumberOfShapeCollidersWontCrashEditor(self, request, workspace, editor, launcher_platform):
from .tests.shape_collider import ShapeCollider_LargeNumberOfShapeCollidersWontCrashEditor as test_module from .tests.shape_collider import ShapeCollider_LargeNumberOfShapeCollidersWontCrashEditor as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@revert_physics_config @revert_physics_config
def test_Collider_SphereShapeEditing(self, request, workspace, editor, launcher_platform): def test_Collider_SphereShapeEditing(self, request, workspace, editor, launcher_platform):
@ -418,7 +418,7 @@ class TestAutomation(TestAutomationBase):
def test_ForceRegion_WithNonTriggerColliderWarning(self, request, workspace, editor, launcher_platform): def test_ForceRegion_WithNonTriggerColliderWarning(self, request, workspace, editor, launcher_platform):
from .tests.force_region import ForceRegion_WithNonTriggerColliderWarning as test_module from .tests.force_region import ForceRegion_WithNonTriggerColliderWarning as test_module
# Fixme: expected_lines = ["[Warning] (PhysX Force Region) - Please ensure collider component marked as trigger exists in entity"] # Fixme: expected_lines = ["[Warning] (PhysX Force Region) - Please ensure collider component marked as trigger exists in entity"]
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_ForceRegion_WorldSpaceForceOnRigidBodies(self, request, workspace, editor, launcher_platform): def test_ForceRegion_WorldSpaceForceOnRigidBodies(self, request, workspace, editor, launcher_platform):
from .tests.force_region import ForceRegion_WorldSpaceForceOnRigidBodies as test_module from .tests.force_region import ForceRegion_WorldSpaceForceOnRigidBodies as test_module
@ -438,8 +438,12 @@ class TestAutomation(TestAutomationBase):
def test_Material_LibraryClearingAssignsDefault(self, request, workspace, editor, launcher_platform): def test_Material_LibraryClearingAssignsDefault(self, request, workspace, editor, launcher_platform):
from .tests.material import Material_LibraryClearingAssignsDefault as test_module from .tests.material import Material_LibraryClearingAssignsDefault as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@pytest.mark.xfail(reason=
"Test failed due to an error message shown while in game mode: "
"'(Prefab) - Invalid asset found referenced in scene while entering game mode. "
"The asset was stored in an instance of Asset.'")
def test_Collider_AddColliderComponent(self, request, workspace, editor, launcher_platform): def test_Collider_AddColliderComponent(self, request, workspace, editor, launcher_platform):
from .tests.collider import Collider_AddColliderComponent as test_module from .tests.collider import Collider_AddColliderComponent as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module, enable_prefab_system=False)
@ -448,19 +452,19 @@ class TestAutomation(TestAutomationBase):
reason="This will fail due to this issue ATOM-15487.") reason="This will fail due to this issue ATOM-15487.")
def test_Collider_PxMeshAutoAssignedWhenModifyingRenderMeshComponent(self, request, workspace, editor, launcher_platform): def test_Collider_PxMeshAutoAssignedWhenModifyingRenderMeshComponent(self, request, workspace, editor, launcher_platform):
from .tests.collider import Collider_PxMeshAutoAssignedWhenModifyingRenderMeshComponent as test_module from .tests.collider import Collider_PxMeshAutoAssignedWhenModifyingRenderMeshComponent as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_Collider_PxMeshAutoAssignedWhenAddingRenderMeshComponent(self, request, workspace, editor, launcher_platform): def test_Collider_PxMeshAutoAssignedWhenAddingRenderMeshComponent(self, request, workspace, editor, launcher_platform):
from .tests.collider import Collider_PxMeshAutoAssignedWhenAddingRenderMeshComponent as test_module from .tests.collider import Collider_PxMeshAutoAssignedWhenAddingRenderMeshComponent as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_Collider_MultipleSurfaceSlots(self, request, workspace, editor, launcher_platform): def test_Collider_MultipleSurfaceSlots(self, request, workspace, editor, launcher_platform):
from .tests.collider import Collider_MultipleSurfaceSlots as test_module from .tests.collider import Collider_MultipleSurfaceSlots as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_Collider_PxMeshNotAutoAssignedWhenNoPhysicsFbx(self, request, workspace, editor, launcher_platform): def test_Collider_PxMeshNotAutoAssignedWhenNoPhysicsFbx(self, request, workspace, editor, launcher_platform):
from .tests.collider import Collider_PxMeshNotAutoAssignedWhenNoPhysicsFbx as test_module from .tests.collider import Collider_PxMeshNotAutoAssignedWhenNoPhysicsFbx as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_RigidBody_EnablingGravityWorksPoC(self, request, workspace, editor, launcher_platform): def test_RigidBody_EnablingGravityWorksPoC(self, request, workspace, editor, launcher_platform):
from .tests.rigid_body import RigidBody_EnablingGravityWorksPoC as test_module from .tests.rigid_body import RigidBody_EnablingGravityWorksPoC as test_module
@ -486,7 +490,7 @@ class TestAutomation(TestAutomationBase):
@revert_physics_config @revert_physics_config
def test_ShapeCollider_CanBeAddedWitNoWarnings(self, request, workspace, editor, launcher_platform): def test_ShapeCollider_CanBeAddedWitNoWarnings(self, request, workspace, editor, launcher_platform):
from .tests.shape_collider import ShapeCollider_CanBeAddedWitNoWarnings as test_module from .tests.shape_collider import ShapeCollider_CanBeAddedWitNoWarnings as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@revert_physics_config @revert_physics_config
def test_Physics_UndoRedoWorksOnEntityWithPhysComponents(self, request, workspace, editor, launcher_platform): def test_Physics_UndoRedoWorksOnEntityWithPhysComponents(self, request, workspace, editor, launcher_platform):

@ -53,10 +53,12 @@ def CharacterController_SwitchLevels():
import os import os
import sys import sys
from editor_python_test_tools.utils import Report from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper from editor_python_test_tools.utils import TestHelper as helper
import azlmbr.legacy.general as general import azlmbr.legacy.general as general
import azlmbr.bus import azlmbr.bus
import editor_python_test_tools.hydra_editor_utils as hydra
# Constants # Constants
WAIT_FOR_ERRORS = 3.0 WAIT_FOR_ERRORS = 3.0
@ -77,7 +79,7 @@ def CharacterController_SwitchLevels():
helper.exit_game_mode(Tests.level1_exit_game_mode) helper.exit_game_mode(Tests.level1_exit_game_mode)
# 2.1) Load level 2 (empty level) # 2.1) Load level 2 (empty level)
helper.open_level("Physics", "Base") hydra.open_base_level()
# 2.2) Enter game mode # 2.2) Enter game mode
helper.enter_game_mode(Tests.level2_enter_game_mode) helper.enter_game_mode(Tests.level2_enter_game_mode)

@ -45,14 +45,15 @@ def Collider_CheckDefaultShapeSettingIsPxMesh():
from editor_python_test_tools.utils import Report from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper from editor_python_test_tools.utils import TestHelper as helper
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports # Open 3D Engine Imports
import azlmbr.legacy.general as general import azlmbr.legacy.general as general
PHYSICS_ASSET_INDEX = 7 # Hardcoded enum index value for Shape property PHYSICS_ASSET_INDEX = 7 # Hardcoded enum index value for Shape property
helper.init_idle()
# 1) Load empty level # 1) Load empty level
helper.open_level("Physics", "Base") hydra.open_base_level()
# 2) Create an entity to hold the PhysX Shape Collider component # 2) Create an entity to hold the PhysX Shape Collider component
collider_entity = Entity.create_editor_entity("Collider") collider_entity = Entity.create_editor_entity("Collider")

@ -54,6 +54,8 @@ def Collider_MultipleSurfaceSlots():
from editor_python_test_tools.utils import TestHelper as helper from editor_python_test_tools.utils import TestHelper as helper
from editor_python_test_tools.asset_utils import Asset from editor_python_test_tools.asset_utils import Asset
import editor_python_test_tools.hydra_editor_utils as hydra
# Constants # Constants
PHYSICS_ASSET_INDEX = 7 # Hardcoded enum index value for Shape property PHYSICS_ASSET_INDEX = 7 # Hardcoded enum index value for Shape property
SURFACE_TAG_COUNT = 4 # Number of surface tags included in used asset SURFACE_TAG_COUNT = 4 # Number of surface tags included in used asset
@ -62,9 +64,8 @@ def Collider_MultipleSurfaceSlots():
STATIC_MESH = os.path.join("assets", "Physics", "Collider_MultipleSurfaceSlots", "test.azmodel") STATIC_MESH = os.path.join("assets", "Physics", "Collider_MultipleSurfaceSlots", "test.azmodel")
PHYSX_MESH = os.path.join("assets", "Physics","Collider_MultipleSurfaceSlots", "test.pxmesh") PHYSX_MESH = os.path.join("assets", "Physics","Collider_MultipleSurfaceSlots", "test.pxmesh")
helper.init_idle()
# 1) Load the empty level # 1) Load the empty level
helper.open_level("Physics", "Base") hydra.open_base_level()
# 2) Create an entity # 2) Create an entity
test_entity = Entity.create_editor_entity("test_entity") test_entity = Entity.create_editor_entity("test_entity")

@ -54,15 +54,16 @@ def Collider_PxMeshAutoAssignedWhenAddingRenderMeshComponent():
from editor_python_test_tools.utils import TestHelper as helper from editor_python_test_tools.utils import TestHelper as helper
from editor_python_test_tools.asset_utils import Asset from editor_python_test_tools.asset_utils import Asset
import editor_python_test_tools.hydra_editor_utils as hydra
# Asset paths # Asset paths
STATIC_MESH = os.path.join("assets", "Physics", "Collider_PxMeshAutoAssigned", "spherebot", "r0-b_body.azmodel") STATIC_MESH = os.path.join("assets", "Physics", "Collider_PxMeshAutoAssigned", "spherebot", "r0-b_body.azmodel")
PHYSX_MESH = os.path.join( PHYSX_MESH = os.path.join(
"assets", "Physics", "Collider_PxMeshAutoAssigned", "spherebot", "r0-b_body.pxmesh" "assets", "Physics", "Collider_PxMeshAutoAssigned", "spherebot", "r0-b_body.pxmesh"
) )
helper.init_idle()
# 1) Load the empty level # 1) Load the empty level
helper.open_level("Physics", "Base") hydra.open_base_level()
# 2) Create an entity # 2) Create an entity
test_entity = Entity.create_editor_entity("test_entity") test_entity = Entity.create_editor_entity("test_entity")

@ -53,6 +53,8 @@ def Collider_PxMeshAutoAssignedWhenModifyingRenderMeshComponent():
from editor_python_test_tools.utils import TestHelper as helper from editor_python_test_tools.utils import TestHelper as helper
from editor_python_test_tools.asset_utils import Asset from editor_python_test_tools.asset_utils import Asset
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports # Open 3D Engine Imports
import azlmbr.legacy.general as general import azlmbr.legacy.general as general
@ -60,9 +62,8 @@ def Collider_PxMeshAutoAssignedWhenModifyingRenderMeshComponent():
MESH_PROPERTY_PATH = "Controller|Configuration|Mesh Asset" MESH_PROPERTY_PATH = "Controller|Configuration|Mesh Asset"
TESTED_PROPERTY_PATH = "Shape Configuration|Asset|PhysX Mesh" TESTED_PROPERTY_PATH = "Shape Configuration|Asset|PhysX Mesh"
helper.init_idle()
# 1) Load the empty level # 1) Load the empty level
helper.open_level("Physics", "Base") hydra.open_base_level()
# 2) Create an entity # 2) Create an entity
test_entity = Entity.create_editor_entity("test_entity") test_entity = Entity.create_editor_entity("test_entity")

@ -62,7 +62,9 @@ def Collider_PxMeshConvexMeshCollides():
from editor_python_test_tools.utils import Report from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper from editor_python_test_tools.utils import TestHelper as helper
from editor_python_test_tools.asset_utils import Asset from editor_python_test_tools.asset_utils import Asset
import azlmbr.math as math import azlmbr.math as math
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports # Open 3D Engine Imports
import azlmbr import azlmbr
@ -73,9 +75,8 @@ def Collider_PxMeshConvexMeshCollides():
MESH_ASSET_PATH = os.path.join("assets", "Physics", "Collider_PxMeshConvexMeshCollides", "spherebot", "r0-b_body.pxmesh") MESH_ASSET_PATH = os.path.join("assets", "Physics", "Collider_PxMeshConvexMeshCollides", "spherebot", "r0-b_body.pxmesh")
TIMEOUT = 2.0 TIMEOUT = 2.0
helper.init_idle()
# 1) Load the level # 1) Load the level
helper.open_level("Physics", "Base") hydra.open_base_level()
# 2) Create test entity # 2) Create test entity
collider = EditorEntity.create_editor_entity_at([512.0, 512.0, 33.0], "Collider") collider = EditorEntity.create_editor_entity_at([512.0, 512.0, 33.0], "Collider")

@ -59,15 +59,16 @@ def Collider_PxMeshNotAutoAssignedWhenNoPhysicsFbx():
from editor_python_test_tools.utils import Tracer from editor_python_test_tools.utils import Tracer
from editor_python_test_tools.asset_utils import Asset from editor_python_test_tools.asset_utils import Asset
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports # Open 3D Engine Imports
import azlmbr.asset as azasset import azlmbr.asset as azasset
# Asset paths # Asset paths
STATIC_MESH = os.path.join("assets", "Physics", "Collider_PxMeshNotAutoAssignedWhenNoPhysicsFbx", "test_asset.azmodel") STATIC_MESH = os.path.join("assets", "Physics", "Collider_PxMeshNotAutoAssignedWhenNoPhysicsFbx", "test_asset.azmodel")
helper.init_idle()
# 1) Load the empty level # 1) Load the empty level
helper.open_level("Physics", "Base") hydra.open_base_level()
# 2) Create an entity # 2) Create an entity
test_entity = Entity.create_editor_entity("test_entity") test_entity = Entity.create_editor_entity("test_entity")

@ -44,15 +44,15 @@ def ForceRegion_WithNonTriggerColliderWarning():
:return: None :return: None
""" """
import azlmbr.legacy.general as general import azlmbr.legacy.general as general
import editor_python_test_tools.hydra_editor_utils as hydra
from editor_python_test_tools.editor_entity_utils import EditorEntity from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.utils import Report from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper from editor_python_test_tools.utils import TestHelper as helper
from editor_python_test_tools.utils import Tracer from editor_python_test_tools.utils import Tracer
helper.init_idle()
# 1) Load the empty level # 1) Load the empty level
helper.open_level("Physics", "Base") hydra.open_base_level()
# 2) Create test entity # 2) Create test entity
test_entity = EditorEntity.create_editor_entity("TestEntity") test_entity = EditorEntity.create_editor_entity("TestEntity")

@ -57,6 +57,8 @@ def Material_LibraryClearingAssignsDefault():
from editor_python_test_tools.utils import TestHelper as helper from editor_python_test_tools.utils import TestHelper as helper
from editor_python_test_tools.asset_utils import Asset from editor_python_test_tools.asset_utils import Asset
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports # Open 3D Engine Imports
import azlmbr.asset as azasset import azlmbr.asset as azasset
@ -66,9 +68,8 @@ def Material_LibraryClearingAssignsDefault():
default_material_path = os.path.join("assets", "physics", "surfacetypemateriallibrary.physmaterial") default_material_path = os.path.join("assets", "physics", "surfacetypemateriallibrary.physmaterial")
new_material_path = os.path.join("physicssurfaces", "default_phys_materials.physmaterial") new_material_path = os.path.join("physicssurfaces", "default_phys_materials.physmaterial")
helper.init_idle()
# 1) Load the level # 1) Load the level
helper.open_level("Physics", "Base") hydra.open_base_level()
# 2) Create new Entity with PhysX Character Controller # 2) Create new Entity with PhysX Character Controller
test_entity = EditorEntity.create_editor_entity("TestEntity") test_entity = EditorEntity.create_editor_entity("TestEntity")

@ -49,9 +49,10 @@ def Ragdoll_AddPhysxRagdollComponentWorks():
from editor_python_test_tools.utils import TestHelper as helper from editor_python_test_tools.utils import TestHelper as helper
from editor_python_test_tools.utils import Tracer from editor_python_test_tools.utils import Tracer
helper.init_idle() import editor_python_test_tools.hydra_editor_utils as hydra
# 1) Load the level # 1) Load the level
helper.open_level("Physics", "Base") hydra.open_base_level()
# 2) Create test entity # 2) Create test entity
test_entity = EditorEntity.create_editor_entity("TestEntity") test_entity = EditorEntity.create_editor_entity("TestEntity")

@ -50,12 +50,13 @@ def ShapeCollider_CanBeAddedWitNoWarnings():
from editor_python_test_tools.utils import TestHelper as helper from editor_python_test_tools.utils import TestHelper as helper
from editor_python_test_tools.utils import Tracer from editor_python_test_tools.utils import Tracer
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports # Open 3D Engine Imports
import azlmbr.legacy.general as general import azlmbr.legacy.general as general
helper.init_idle()
# 1) Load the empty level # 1) Load the empty level
helper.open_level("Physics", "Base") hydra.open_base_level()
# 2) Create an entity # 2) Create an entity
collider_entity = Entity.create_editor_entity("Collider") collider_entity = Entity.create_editor_entity("Collider")

@ -54,6 +54,8 @@ def ShapeCollider_InactiveWhenNoShapeComponent():
from editor_python_test_tools.editor_entity_utils import EditorEntity from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.utils import TestHelper as helper from editor_python_test_tools.utils import TestHelper as helper
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports # Open 3D Engine Imports
import azlmbr.bus as bus import azlmbr.bus as bus
import azlmbr.editor as editor import azlmbr.editor as editor
@ -65,9 +67,8 @@ def ShapeCollider_InactiveWhenNoShapeComponent():
""" """
return editor.EditorComponentAPIBus(bus.Broadcast, "IsComponentEnabled", component_id) return editor.EditorComponentAPIBus(bus.Broadcast, "IsComponentEnabled", component_id)
helper.init_idle()
# 1) Load the level # 1) Load the level
helper.open_level("Physics", "Base") hydra.open_base_level()
# 2) Add an entity with a PhysX Shape Collider component. # 2) Add an entity with a PhysX Shape Collider component.
collider = EditorEntity.create_editor_entity("Collider") collider = EditorEntity.create_editor_entity("Collider")

@ -45,6 +45,8 @@ def ShapeCollider_LargeNumberOfShapeCollidersWontCrashEditor():
from editor_python_test_tools.utils import TestHelper as helper from editor_python_test_tools.utils import TestHelper as helper
from editor_python_test_tools.editor_entity_utils import EditorEntity as Entity from editor_python_test_tools.editor_entity_utils import EditorEntity as Entity
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports # Open 3D Engine Imports
import azlmbr.legacy.general as general import azlmbr.legacy.general as general
@ -61,9 +63,8 @@ def ShapeCollider_LargeNumberOfShapeCollidersWontCrashEditor():
# Wait 60 frames more # Wait 60 frames more
general.idle_wait_frames(60) general.idle_wait_frames(60)
helper.init_idle()
# 1) Load the empty level # 1) Load the empty level
helper.open_level("Physics", "Base") hydra.open_base_level()
# 2) Create 512 entities with PhysX Shape Collider and Sphere Shape components # 2) Create 512 entities with PhysX Shape Collider and Sphere Shape components
entity_failure = False entity_failure = False

@ -24,12 +24,12 @@ from base import TestAutomationBase
class TestAutomation(TestAutomationBase): class TestAutomation(TestAutomationBase):
def test_WhiteBox_AddComponentToEntity(self, request, workspace, editor, launcher_platform): def test_WhiteBox_AddComponentToEntity(self, request, workspace, editor, launcher_platform):
from .tests import WhiteBox_AddComponentToEntity as test_module from .tests import WhiteBox_AddComponentToEntity as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_WhiteBox_SetDefaultShape(self, request, workspace, editor, launcher_platform): def test_WhiteBox_SetDefaultShape(self, request, workspace, editor, launcher_platform):
from .tests import WhiteBox_SetDefaultShape as test_module from .tests import WhiteBox_SetDefaultShape as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_WhiteBox_SetInvisible(self, request, workspace, editor, launcher_platform): def test_WhiteBox_SetInvisible(self, request, workspace, editor, launcher_platform):
from .tests import WhiteBox_SetInvisible as test_module from .tests import WhiteBox_SetInvisible as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)

@ -32,7 +32,7 @@ def C28798177_WhiteBox_AddComponentToEntity():
# open level # open level
helper.init_idle() helper.init_idle()
general.open_level("EmptyLevel") helper.open_level("WhiteBox", "EmptyLevel", no_prompt=False)
# create white box entity and attach component # create white box entity and attach component
white_box_entity = init.create_white_box_entity() white_box_entity = init.create_white_box_entity()

@ -54,7 +54,7 @@ def C29279329_WhiteBox_SetDefaultShape():
# open level # open level
helper.init_idle() helper.init_idle()
general.open_level("EmptyLevel") helper.open_level("WhiteBox", "EmptyLevel", no_prompt=False)
# create white box entity and attach component # create white box entity and attach component
white_box_entity = init.create_white_box_entity() white_box_entity = init.create_white_box_entity()

@ -39,7 +39,7 @@ def C28798205_WhiteBox_SetInvisible():
# open level # open level
helper.init_idle() helper.init_idle()
general.open_level("EmptyLevel") helper.open_level("WhiteBox", "EmptyLevel", no_prompt=False)
white_box_entity_name = 'WhiteBox-Visibility' white_box_entity_name = 'WhiteBox-Visibility'
white_box_visibility_path = 'White Box Material|Visible' white_box_visibility_path = 'White Box Material|Visible'

@ -79,7 +79,7 @@ def bundler_batch_setup_fixture(request, workspace, asset_processor, timeout) ->
workspace.asset_processor_platform) workspace.asset_processor_platform)
) )
# Useful sizes # Useful sizes
self.max_bundle_size_in_mib = 5 self.max_bundle_size_in_mib = 35
self.number_of_bytes_in_mib = 1024 * 1024 self.number_of_bytes_in_mib = 1024 * 1024
self.workspace = workspace self.workspace = workspace
self.platforms = platforms self.platforms = platforms
@ -271,11 +271,13 @@ def bundler_batch_setup_fixture(request, workspace, asset_processor, timeout) ->
for rel_path in self.get_asset_relative_paths(self.asset_info_file_result): for rel_path in self.get_asset_relative_paths(self.asset_info_file_result):
assets_from_file.append(os.path.normpath(rel_path)) assets_from_file.append(os.path.normpath(rel_path))
expected_size = self.max_bundle_size_in_mib * self.number_of_bytes_in_mib
# extract all files from the bundles # extract all files from the bundles
for bundle in dependent_bundle_name: for bundle in dependent_bundle_name:
file_info = os.stat(bundle) file_info = os.stat(bundle)
# Verify that the size of all bundles is less than the max size specified # Verify that the size of all bundles is less than the max size specified
assert file_info.st_size <= (self.max_bundle_size_in_mib * self.number_of_bytes_in_mib) assert file_info.st_size <= expected_size, \
f"file_info.st_size {file_info.st_size} for bundle {bundle} was expected to be smaller than {expected_size}"
with zipfile.ZipFile(bundle) as bundle_zip: with zipfile.ZipFile(bundle) as bundle_zip:
bundle_zip.extractall(extract_dir) bundle_zip.extractall(extract_dir)

@ -242,7 +242,7 @@ Node Type: BoneData
BasisX: < 1.000000, -0.000000, 0.000000> BasisX: < 1.000000, -0.000000, 0.000000>
BasisY: < 0.000000, 1.000000, 0.000000> BasisY: < 0.000000, 1.000000, 0.000000>
BasisZ: <-0.000000, -0.000000, 1.000000> BasisZ: <-0.000000, -0.000000, 1.000000>
Transl: < 0.152547, 0.043345, 0.090954> Transl: < 0.152547, 0.043345, 0.090955>
Node Name: animation Node Name: animation
Node Path: RootNode.jack_root.Bip01__pelvis.spine1.spine2.animation Node Path: RootNode.jack_root.Bip01__pelvis.spine1.spine2.animation
@ -544,7 +544,7 @@ Node Type: BoneData
Node Name: animation Node Name: animation
Node Path: RootNode.jack_root.Bip01__pelvis.spine1.spine2.spine3.l_shldr.l_upArm.l_upArmRoll.animation Node Path: RootNode.jack_root.Bip01__pelvis.spine1.spine2.spine3.l_shldr.l_upArm.l_upArmRoll.animation
Node Type: AnimationData Node Type: AnimationData
KeyFrames: Count 195. Hash: 8781707605519483934 KeyFrames: Count 195. Hash: 15529789169672670472
TimeStepBetweenFrames: 0.033333 TimeStepBetweenFrames: 0.033333
Node Name: transform Node Name: transform
@ -710,7 +710,7 @@ Node Type: BoneData
BasisX: < 0.514369, 0.855813, 0.054857> BasisX: < 0.514369, 0.855813, 0.054857>
BasisY: < 0.088153, 0.010863, -0.996047> BasisY: < 0.088153, 0.010863, -0.996047>
BasisZ: <-0.853026, 0.517172, -0.069855> BasisZ: <-0.853026, 0.517172, -0.069855>
Transl: <-0.247306, -0.062325, 0.878372> Transl: <-0.247306, -0.062325, 0.878373>
Node Name: animation Node Name: animation
Node Path: RootNode.jack_root.Bip01__pelvis.spine1.spine2.spine3.r_shldr.r_upArm.r_loArm.r_loArmRoll.animation Node Path: RootNode.jack_root.Bip01__pelvis.spine1.spine2.spine3.r_shldr.r_upArm.r_loArm.r_loArmRoll.animation
@ -857,7 +857,7 @@ Node Type: BoneData
BasisX: < 0.329257, 0.944038, -0.019538> BasisX: < 0.329257, 0.944038, -0.019538>
BasisY: < 0.465563, -0.180309, -0.866452> BasisY: < 0.465563, -0.180309, -0.866452>
BasisZ: <-0.821487, 0.276189, -0.498877> BasisZ: <-0.821487, 0.276189, -0.498877>
Transl: <-0.255124, -0.049696, 0.794466> Transl: <-0.255124, -0.049696, 0.794467>
Node Name: animation Node Name: animation
Node Path: RootNode.jack_root.Bip01__pelvis.spine1.spine2.spine3.l_shldr.l_upArm.l_loArm.l_hand.l_metacarpal.animation Node Path: RootNode.jack_root.Bip01__pelvis.spine1.spine2.spine3.l_shldr.l_upArm.l_loArm.l_hand.l_metacarpal.animation
@ -953,7 +953,7 @@ Node Type: BoneData
BasisX: <-0.102387, -0.418082, -0.902621> BasisX: <-0.102387, -0.418082, -0.902621>
BasisY: < 0.928150, 0.286271, -0.237880> BasisY: < 0.928150, 0.286271, -0.237880>
BasisZ: < 0.357847, -0.862123, 0.358732> BasisZ: < 0.357847, -0.862123, 0.358732>
Transl: < 0.187367, 0.698323, 1.467209> Transl: < 0.187367, 0.698324, 1.467209>
Node Name: animation Node Name: animation
Node Path: RootNode.jack_root.Bip01__pelvis.spine1.spine2.spine3.r_shldr.r_upArm.r_loArm.r_hand.r_mid1.animation Node Path: RootNode.jack_root.Bip01__pelvis.spine1.spine2.spine3.r_shldr.r_upArm.r_loArm.r_hand.r_mid1.animation

@ -114,7 +114,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.9225030 0.3829492 -0.0483544 -0.3849890 0.9218784 -0.0438619 0.0277800 0.0590787 0.9978667 -0.0995240 0.0035963 0.9837443" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.9225030 0.3829492 -0.0483544 -0.3849890 0.9218784 -0.0438619 0.0277800 0.0590787 0.9978667 -0.0995240 0.0035963 0.9837442" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -191,7 +191,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.9225030 0.3829492 -0.0483544 -0.3849890 0.9218784 -0.0438619 0.0277800 0.0590787 0.9978667 -0.1057190 -0.0095780 0.7612199" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.9225030 0.3829492 -0.0483544 -0.3849890 0.9218784 -0.0438619 0.0277800 0.0590787 0.9978667 -0.1057190 -0.0095780 0.7612200" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -204,7 +204,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.9225030 0.3829492 -0.0483545 -0.3857441 0.9101822 -0.1508971 -0.0137745 0.1578555 0.9873661 -0.1119141 -0.0227522 0.5386958" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.9225030 0.3829492 -0.0483545 -0.3857441 0.9101822 -0.1508971 -0.0137745 0.1578555 0.9873661 -0.1119141 -0.0227522 0.5386957" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -268,7 +268,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.9918931 -0.1127676 0.0585800 0.1181807 0.9880368 -0.0990792 -0.0467063 0.1051989 0.9933537 0.1314755 0.0908038 0.5390974" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.9918931 -0.1127676 0.0585800 0.1181807 0.9880368 -0.0990792 -0.0467063 0.1051989 0.9933537 0.1314754 0.0908038 0.5390974" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -319,7 +319,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.9846771 -0.1743657 -0.0027636 -0.0040787 0.0071844 0.9999658 -0.1743399 0.9846547 -0.0077855 -0.0024987 0.0198645 1.2316585" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.9846771 -0.1743657 -0.0027636 -0.0040787 0.0071844 0.9999658 -0.1743399 0.9846547 -0.0077855 -0.0024987 0.0198645 1.2316583" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -408,7 +408,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.9636059 0.2673270 0.0000002 -0.2673270 0.9636059 0.0000004 -0.0000001 -0.0000005 0.9999999 -0.1057001 -0.0939669 0.0932542" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.9636059 0.2673270 0.0000002 -0.2673270 0.9636059 0.0000004 -0.0000001 -0.0000005 0.9999999 -0.1057001 -0.0939668 0.0932542" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -497,7 +497,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="1.0000000 -0.0000001 0.0000001 0.0000001 1.0000000 0.0000005 -0.0000001 -0.0000005 1.0000000 0.1525467 0.0433452 0.0909544" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="1.0000000 -0.0000001 0.0000001 0.0000001 1.0000000 0.0000005 -0.0000001 -0.0000005 1.0000000 0.1525467 0.0433452 0.0909545" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -548,7 +548,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.9795371 -0.2012138 -0.0044671 0.0088889 -0.0654249 0.9978178 -0.2010670 0.9773599 0.0658747 -0.0031105 0.0209422 1.3816533" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.9795371 -0.2012138 -0.0044671 0.0088889 -0.0654249 0.9978178 -0.2010670 0.9773599 0.0658747 -0.0031105 0.0209422 1.3816534" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -650,7 +650,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="1.0000000 -0.0000001 0.0000001 0.0000001 1.0000000 0.0000005 -0.0000001 -0.0000005 1.0000000 0.1525467 0.1935186 0.0237662" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="1.0000000 -0.0000001 0.0000001 0.0000001 1.0000000 0.0000005 -0.0000001 -0.0000005 1.0000000 0.1525467 0.1935186 0.0237663" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -701,7 +701,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.9948647 -0.0988443 0.0217715 0.0113319 0.1049736 0.9944103 -0.1005772 0.9895505 -0.1033145 -0.0014216 0.0085115 1.5712386" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.9948647 -0.0988443 0.0217715 0.0113319 0.1049736 0.9944103 -0.1005772 0.9895505 -0.1033145 -0.0014216 0.0085115 1.5712385" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -727,7 +727,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.3913002 -0.9108952 0.1309726 -0.9019646 -0.4078557 -0.1418229 0.1826037 -0.0626373 -0.9811893 0.0803188 0.0196155 1.4967986" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.3913002 -0.9108952 0.1309726 -0.9019646 -0.4078557 -0.1418229 0.1826037 -0.0626373 -0.9811893 0.0803188 0.0196155 1.4967985" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -854,7 +854,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.9994818 -0.0310398 -0.0085214 -0.0078972 -0.0201766 0.9997651 -0.0312043 0.9993144 0.0199210 -0.0020550 0.0351172 1.6630899" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.9994818 -0.0310398 -0.0085214 -0.0078972 -0.0201766 0.9997651 -0.0312043 0.9993144 0.0199210 -0.0020550 0.0351172 1.6630900" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -905,7 +905,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.1350640 0.9784527 -0.1561655 0.9639030 0.0932519 -0.2493893 -0.2294530 -0.1842118 -0.9557285 -0.1881499 -0.0555908 1.4517218" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.1350640 0.9784527 -0.1561655 0.9639030 0.0932519 -0.2493893 -0.2294530 -0.1842118 -0.9557285 -0.1881499 -0.0555909 1.4517218" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1109,7 +1109,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.0534004 -0.3009000 -0.9521595 -0.9985610 0.0208024 0.0494289 0.0049341 0.9534288 -0.3015778 0.1978613 0.1747155 1.4348212" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.0534004 -0.3009000 -0.9521595 -0.9985610 0.0208024 0.0494289 0.0049341 0.9534288 -0.3015778 0.1978613 0.1747155 1.4348211" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1141,7 +1141,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="KeyFrames - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="KeyFrames - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="8781707605519483934" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="15529789169672670472" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -1415,7 +1415,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.9665319 -0.0616776 0.2490221 0.2565261 0.2200654 -0.9411510 0.0032468 0.9735332 0.2285221 -0.2390312 -0.0175187 0.9024240" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.9665319 -0.0616776 0.2490221 0.2565261 0.2200654 -0.9411510 0.0032468 0.9735332 0.2285221 -0.2390311 -0.0175187 0.9024240" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1441,7 +1441,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.3292569 0.9440380 -0.0195383 0.1345730 -0.0673964 -0.9886089 -0.9346014 0.3228769 -0.1492327 -0.2613609 -0.0465721 0.8402831" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.3292569 0.9440380 -0.0195383 0.1345730 -0.0673964 -0.9886089 -0.9346014 0.3228769 -0.1492327 -0.2613609 -0.0465721 0.8402832" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1454,7 +1454,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.5215136 0.8398412 -0.1506330 -0.0192358 -0.1649243 -0.9861184 -0.8530262 0.5171716 -0.0698552 -0.2693057 -0.0706829 0.8937123" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.5215136 0.8398412 -0.1506330 -0.0192358 -0.1649243 -0.9861184 -0.8530262 0.5171716 -0.0698552 -0.2693058 -0.0706829 0.8937123" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1467,7 +1467,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.5143689 0.8558125 0.0548569 0.0881534 0.0108630 -0.9960474 -0.8530262 0.5171716 -0.0698552 -0.2473062 -0.0623250 0.8783725" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.5143689 0.8558125 0.0548569 0.0881534 0.0108630 -0.9960474 -0.8530262 0.5171716 -0.0698552 -0.2473062 -0.0623250 0.8783726" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1569,7 +1569,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.0802934 -0.4308499 -0.8988443 0.5990614 -0.7415851 0.3019556 -0.7966672 -0.5142179 0.3176499 0.2168119 0.6618763 1.4820503" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.0802934 -0.4308499 -0.8988443 0.5990614 -0.7415851 0.3019556 -0.7966672 -0.5142179 0.3176499 0.2168119 0.6618764 1.4820503" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1582,7 +1582,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.0260422 -0.4643564 -0.8852653 0.9706670 -0.2234796 0.0886692 -0.2390129 -0.8569889 0.4565554 0.2131762 0.6597862 1.4626874" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.0260422 -0.4643564 -0.8852653 0.9706670 -0.2234796 0.0886692 -0.2390129 -0.8569889 0.4565554 0.2131762 0.6597863 1.4626874" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1608,7 +1608,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.0557957 -0.0005854 -0.9984418 -0.9981855 -0.0227144 -0.0557681 -0.0226463 0.9997417 -0.0018517 0.1809568 0.7018137 1.4945196" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.0557957 -0.0005854 -0.9984418 -0.9981855 -0.0227144 -0.0557681 -0.0226463 0.9997417 -0.0018517 0.1809568 0.7018138 1.4945196" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1659,7 +1659,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.9665319 -0.0616776 0.2490221 0.2373489 -0.1534441 -0.9592289 0.0973740 0.9862305 -0.1336694 -0.2288372 -0.0087736 0.8650238" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.9665319 -0.0616776 0.2490221 0.2373489 -0.1534441 -0.9592289 0.0973740 0.9862305 -0.1336694 -0.2288371 -0.0087736 0.8650237" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1710,7 +1710,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.3615634 0.9298344 0.0684081 0.4901183 -0.1271389 -0.8623338 -0.7931304 0.3453165 -0.5016975 -0.2471175 -0.0273644 0.7929417" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.3615634 0.9298344 0.0684081 0.4901183 -0.1271389 -0.8623338 -0.7931304 0.3453165 -0.5016975 -0.2471175 -0.0273644 0.7929418" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1761,7 +1761,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.3292569 0.9440380 -0.0195383 0.4655626 -0.1803091 -0.8664525 -0.8214875 0.2761891 -0.4988768 -0.2551242 -0.0496955 0.7944664" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.3292569 0.9440380 -0.0195383 0.4655626 -0.1803091 -0.8664525 -0.8214875 0.2761891 -0.4988768 -0.2551242 -0.0496955 0.7944666" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1812,7 +1812,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.3559713 0.9329765 -0.0532857 0.1359657 -0.1081222 -0.9847956 -0.9245527 0.3433140 -0.1653412 -0.2679712 -0.0667890 0.8432873" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.3559713 0.9329765 -0.0532857 0.1359657 -0.1081222 -0.9847956 -0.9245527 0.3433140 -0.1653412 -0.2679712 -0.0667891 0.8432874" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1825,7 +1825,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.3169729 0.9297552 -0.1873048 0.2697999 -0.2777221 -0.9219966 -0.9092504 0.2417132 -0.3388780 -0.2744931 -0.0856099 0.8500432" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.3169729 0.9297552 -0.1873048 0.2697999 -0.2777221 -0.9219966 -0.9092504 0.2417132 -0.3388780 -0.2744932 -0.0856099 0.8500431" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1914,7 +1914,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.0052020 0.3264090 0.9452143 0.5280435 -0.8035957 0.2745980 0.8492015 0.4976858 -0.1765385 0.1653490 0.6116705 1.5069345" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.0052020 0.3264090 0.9452143 0.5280435 -0.8035957 0.2745980 0.8492015 0.4976858 -0.1765385 0.1653489 0.6116704 1.5069345" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -1965,7 +1965,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.1023873 -0.4180822 -0.9026206 0.9281499 0.2862708 -0.2378801 0.3578474 -0.8621231 0.3587325 0.1873666 0.6983235 1.4672089" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.1023873 -0.4180822 -0.9026206 0.9281499 0.2862708 -0.2378801 0.3578474 -0.8621231 0.3587325 0.1873666 0.6983237 1.4672090" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -2067,7 +2067,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.0656088 -0.4626088 -0.8841316 0.9937954 -0.1100428 -0.0161683 -0.0898128 -0.8797066 0.4669581 0.1996420 0.6531383 1.4435714" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.0656088 -0.4626088 -0.8841316 0.9937954 -0.1100428 -0.0161683 -0.0898128 -0.8797066 0.4669581 0.1996421 0.6531384 1.4435714" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -2169,7 +2169,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.9665319 -0.0616776 0.2490221 0.2373489 -0.1534441 -0.9592289 0.0973740 0.9862305 -0.1336694 -0.2218228 -0.0133082 0.8366759" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.9665319 -0.0616776 0.2490221 0.2373489 -0.1534441 -0.9592289 0.0973740 0.9862305 -0.1336694 -0.2218228 -0.0133083 0.8366759" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -2220,7 +2220,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.3615634 0.9298344 0.0684081 0.7452133 -0.2441212 -0.6205335 -0.5602937 0.2753409 -0.7811900 -0.2311346 -0.0315104 0.7648208" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.3615634 0.9298344 0.0684081 0.7452133 -0.2441212 -0.6205335 -0.5602937 0.2753409 -0.7811900 -0.2311346 -0.0315104 0.7648209" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -2271,7 +2271,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.3292569 0.9440380 -0.0195383 0.7326652 -0.2684788 -0.6253964 -0.5956439 0.1916010 -0.7800621 -0.2399473 -0.0555735 0.7662210" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.3292569 0.9440380 -0.0195383 0.7326652 -0.2684788 -0.6253964 -0.5956439 0.1916010 -0.7800621 -0.2399472 -0.0555734 0.7662212" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -2322,7 +2322,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.3559713 0.9329765 -0.0532857 0.5122607 -0.2425047 -0.8238812 -0.7815840 0.2659818 -0.5642518 -0.2625020 -0.0711384 0.8036732" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.3559713 0.9329765 -0.0532857 0.5122607 -0.2425047 -0.8238812 -0.7815840 0.2659818 -0.5642518 -0.2625019 -0.0711384 0.8036732" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -2373,7 +2373,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.3169729 0.9297552 -0.1873048 0.6083978 -0.3508277 -0.7118790 -0.7275853 0.1116905 -0.6768638 -0.2653106 -0.0950621 0.8186633" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.3169729 0.9297552 -0.1873048 0.6083978 -0.3508277 -0.7118790 -0.7275853 0.1116905 -0.6768638 -0.2653105 -0.0950620 0.8186634" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -2475,7 +2475,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.1023873 -0.4180822 -0.9026206 0.0986766 0.8986452 -0.4274341 0.9898382 -0.1328314 -0.0507549 0.1570989 0.6889878 1.4749659" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.1023873 -0.4180822 -0.9026206 0.0986766 0.8986452 -0.4274341 0.9898382 -0.1328314 -0.0507549 0.1570989 0.6889879 1.4749659" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -2526,7 +2526,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.0260422 -0.4643564 -0.8852653 -0.5639869 0.7379948 -0.3705161 0.8253731 0.4896291 -0.2811100 0.1495006 0.6467174 1.4714146" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.0260422 -0.4643564 -0.8852653 -0.5639869 0.7379948 -0.3705161 0.8253731 0.4896291 -0.2811100 0.1495006 0.6467175 1.4714146" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -2628,7 +2628,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.1100348 -0.4672045 -0.8772753 0.2567038 0.8393306 -0.4791943 0.9602060 -0.2779281 0.0275776 0.1585392 0.6416523 1.4316828" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.1100348 -0.4672045 -0.8772753 0.2567038 0.8393306 -0.4791943 0.9602060 -0.2779281 0.0275776 0.1585393 0.6416522 1.4316828" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -2793,7 +2793,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.3559713 0.9329765 -0.0532857 0.7935058 -0.3318905 -0.5100955 -0.4935922 0.1392968 -0.8584654 -0.2455191 -0.0791781 0.7763593" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.3559713 0.9329765 -0.0532857 0.7935058 -0.3318905 -0.5100955 -0.4935922 0.1392968 -0.8584654 -0.2455190 -0.0791781 0.7763594" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -2844,7 +2844,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="0.3169729 0.9297552 -0.1873048 0.8471319 -0.3663475 -0.3849116 -0.4264922 -0.0366653 -0.9037473 -0.2508485 -0.1034015 0.8017413" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="0.3169729 0.9297552 -0.1873048 0.8471319 -0.3663475 -0.3849116 -0.4264922 -0.0366653 -0.9037473 -0.2508485 -0.1034015 0.8017412" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>
@ -3009,7 +3009,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="Matrix3x4" field="m_data" value="-0.0656088 -0.4626088 -0.8841316 -0.8307251 0.5161862 -0.2084411 0.5528033 0.7207946 -0.4181670 0.1489982 0.6300828 1.4593928" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/> <Class name="Matrix3x4" field="m_data" value="-0.0656088 -0.4626088 -0.8841316 -0.8307251 0.5161862 -0.2084411 0.5528033 0.7207946 -0.4181670 0.1489982 0.6300829 1.4593928" type="{1906D8A5-7DEC-4DE3-A606-9E53BB3459E7}"/>
</Class> </Class>
</Class> </Class>
</Class> </Class>

@ -90,7 +90,7 @@ Node Path: RootNode.lodtest_lod1.lodtest_lod1_1
Node Type: MeshData Node Type: MeshData
Positions: Count 192. Hash: 1283526254311745349 Positions: Count 192. Hash: 1283526254311745349
Normals: Count 192. Hash: 1873340970602844856 Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 3728991722746136013 FaceList: Count 124. Hash: 8546457964849634958
FaceMaterialIds: Count 124. Hash: 2372486708814455910 FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: lodtest_lod1_2 Node Name: lodtest_lod1_2
@ -107,7 +107,7 @@ Node Path: RootNode.lodtest_lod1.lodtest_lod1_1_optimized
Node Type: MeshData Node Type: MeshData
Positions: Count 192. Hash: 7921557352486854444 Positions: Count 192. Hash: 7921557352486854444
Normals: Count 192. Hash: 1873340970602844856 Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 18311637590974204568 FaceList: Count 124. Hash: 7602933716150163115
FaceMaterialIds: Count 124. Hash: 2372486708814455910 FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: transform Node Name: transform
@ -641,14 +641,14 @@ Node Type: MaterialData
Node Name: TangentSet_0 Node Name: TangentSet_0
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1.TangentSet_0 Node Path: RootNode.lodtest_lod1.lodtest_lod1_1.TangentSet_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 11165448242141781141 Tangents: Count 192. Hash: 13347865366302598201
GenerationMethod: 1 GenerationMethod: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_0 Node Name: BitangentSet_0
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1.BitangentSet_0 Node Path: RootNode.lodtest_lod1.lodtest_lod1_1.BitangentSet_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 7987814487334449536 Bitangents: Count 192. Hash: 11177881960262055002
GenerationMethod: 1 GenerationMethod: 1
Node Name: transform Node Name: transform
@ -705,14 +705,14 @@ Node Type: MeshVertexUVData
Node Name: TangentSet_0 Node Name: TangentSet_0
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1_optimized.TangentSet_0 Node Path: RootNode.lodtest_lod1.lodtest_lod1_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 7293001660047850407 Tangents: Count 192. Hash: 13256424469303674766
GenerationMethod: 1 GenerationMethod: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_0 Node Name: BitangentSet_0
Node Path: RootNode.lodtest_lod1.lodtest_lod1_1_optimized.BitangentSet_0 Node Path: RootNode.lodtest_lod1.lodtest_lod1_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 2874689498270494796 Bitangents: Count 192. Hash: 12542581737782433115
GenerationMethod: 1 GenerationMethod: 1
Node Name: transform Node Name: transform

@ -424,7 +424,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="3728991722746136013" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="8546457964849634958" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -492,7 +492,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="18311637590974204568" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="7602933716150163115" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -1729,7 +1729,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="11165448242141781141" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="13347865366302598201" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -1760,7 +1760,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="7987814487334449536" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="11177881960262055002" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -1891,7 +1891,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="7293001660047850407" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="13256424469303674766" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -1922,7 +1922,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="2874689498270494796" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="12542581737782433115" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">

@ -15,7 +15,7 @@ Node Path: RootNode.Cone.Cone_1
Node Type: MeshData Node Type: MeshData
Positions: Count 128. Hash: 7714223793259938211 Positions: Count 128. Hash: 7714223793259938211
Normals: Count 128. Hash: 2352668179264002707 Normals: Count 128. Hash: 2352668179264002707
FaceList: Count 62. Hash: 14563017593520122982 FaceList: Count 62. Hash: 9996709738915796379
FaceMaterialIds: Count 62. Hash: 12234218120113875284 FaceMaterialIds: Count 62. Hash: 12234218120113875284
Node Name: Cone_2 Node Name: Cone_2
@ -32,7 +32,7 @@ Node Path: RootNode.Cone.Cone_1_optimized
Node Type: MeshData Node Type: MeshData
Positions: Count 128. Hash: 10174710861731544050 Positions: Count 128. Hash: 10174710861731544050
Normals: Count 128. Hash: 2352668179264002707 Normals: Count 128. Hash: 2352668179264002707
FaceList: Count 62. Hash: 11332459830831720586 FaceList: Count 62. Hash: 16809217014760075539
FaceMaterialIds: Count 62. Hash: 12234218120113875284 FaceMaterialIds: Count 62. Hash: 12234218120113875284
Node Name: Cube_phys_1 Node Name: Cube_phys_1
@ -100,14 +100,14 @@ Node Type: MaterialData
Node Name: TangentSet_0 Node Name: TangentSet_0
Node Path: RootNode.Cone.Cone_1.TangentSet_0 Node Path: RootNode.Cone.Cone_1.TangentSet_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 128. Hash: 14351734474754285313 Tangents: Count 128. Hash: 913385441694195840
GenerationMethod: 1 GenerationMethod: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_0 Node Name: BitangentSet_0
Node Path: RootNode.Cone.Cone_1.BitangentSet_0 Node Path: RootNode.Cone.Cone_1.BitangentSet_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 128. Hash: 15997251922861304891 Bitangents: Count 128. Hash: 16763868708150748964
GenerationMethod: 1 GenerationMethod: 1
Node Name: transform Node Name: transform
@ -164,14 +164,14 @@ Node Type: MeshVertexUVData
Node Name: TangentSet_0 Node Name: TangentSet_0
Node Path: RootNode.Cone.Cone_1_optimized.TangentSet_0 Node Path: RootNode.Cone.Cone_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 128. Hash: 12937806066914201637 Tangents: Count 128. Hash: 11496565252852403390
GenerationMethod: 1 GenerationMethod: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_0 Node Name: BitangentSet_0
Node Path: RootNode.Cone.Cone_1_optimized.BitangentSet_0 Node Path: RootNode.Cone.Cone_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 128. Hash: 873786942732834087 Bitangents: Count 128. Hash: 6810649909977646014
GenerationMethod: 1 GenerationMethod: 1
Node Name: transform Node Name: transform

@ -55,7 +55,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="14563017593520122982" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="9996709738915796379" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -123,7 +123,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="11332459830831720586" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="16809217014760075539" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -309,7 +309,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="14351734474754285313" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="913385441694195840" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -340,7 +340,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="15997251922861304891" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="16763868708150748964" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -471,7 +471,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="12937806066914201637" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="11496565252852403390" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -502,7 +502,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="873786942732834087" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="6810649909977646014" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">

@ -40,7 +40,7 @@ Node Path: RootNode.Cone.Cone_1
Node Type: MeshData Node Type: MeshData
Positions: Count 128. Hash: 12506421592104186200 Positions: Count 128. Hash: 12506421592104186200
Normals: Count 128. Hash: 367461522682321485 Normals: Count 128. Hash: 367461522682321485
FaceList: Count 62. Hash: 13208951979626973193 FaceList: Count 62. Hash: 5910399941817424750
FaceMaterialIds: Count 62. Hash: 15454348664434923102 FaceMaterialIds: Count 62. Hash: 15454348664434923102
Node Name: Cone_2 Node Name: Cone_2
@ -57,7 +57,7 @@ Node Path: RootNode.Cone.Cone_1_optimized
Node Type: MeshData Node Type: MeshData
Positions: Count 128. Hash: 14946490408303214595 Positions: Count 128. Hash: 14946490408303214595
Normals: Count 128. Hash: 367461522682321485 Normals: Count 128. Hash: 367461522682321485
FaceList: Count 62. Hash: 11102693598481718079 FaceList: Count 62. Hash: 17210030509394354449
FaceMaterialIds: Count 62. Hash: 15454348664434923102 FaceMaterialIds: Count 62. Hash: 15454348664434923102
Node Name: transform Node Name: transform
@ -389,14 +389,14 @@ Node Type: MaterialData
Node Name: TangentSet_0 Node Name: TangentSet_0
Node Path: RootNode.Cone.Cone_1.TangentSet_0 Node Path: RootNode.Cone.Cone_1.TangentSet_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 128. Hash: 12695232913942738512 Tangents: Count 128. Hash: 11574815809363656385
GenerationMethod: 1 GenerationMethod: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_0 Node Name: BitangentSet_0
Node Path: RootNode.Cone.Cone_1.BitangentSet_0 Node Path: RootNode.Cone.Cone_1.BitangentSet_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 128. Hash: 9034210764777745751 Bitangents: Count 128. Hash: 1026129762512670051
GenerationMethod: 1 GenerationMethod: 1
Node Name: transform Node Name: transform
@ -483,14 +483,14 @@ Node Type: MeshVertexUVData
Node Name: TangentSet_0 Node Name: TangentSet_0
Node Path: RootNode.Cone.Cone_1_optimized.TangentSet_0 Node Path: RootNode.Cone.Cone_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 128. Hash: 10740776669168782230 Tangents: Count 128. Hash: 5198081677141836233
GenerationMethod: 1 GenerationMethod: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_0 Node Name: BitangentSet_0
Node Path: RootNode.Cone.Cone_1_optimized.BitangentSet_0 Node Path: RootNode.Cone.Cone_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 128. Hash: 6990068477421150065 Bitangents: Count 128. Hash: 6948605204859680167
GenerationMethod: 1 GenerationMethod: 1
Node Name: transform Node Name: transform

@ -178,7 +178,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="13208951979626973193" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="5910399941817424750" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -246,7 +246,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="11102693598481718079" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="17210030509394354449" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -957,7 +957,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="12695232913942738512" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="11574815809363656385" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -988,7 +988,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="9034210764777745751" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="1026129762512670051" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -1174,7 +1174,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="10740776669168782230" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="5198081677141836233" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -1205,7 +1205,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="6990068477421150065" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="6948605204859680167" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">

@ -40,7 +40,7 @@ Node Path: RootNode.Cylinder.Cylinder_1
Node Type: MeshData Node Type: MeshData
Positions: Count 192. Hash: 1283526254311745349 Positions: Count 192. Hash: 1283526254311745349
Normals: Count 192. Hash: 1873340970602844856 Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 3728991722746136013 FaceList: Count 124. Hash: 8546457964849634958
FaceMaterialIds: Count 124. Hash: 2372486708814455910 FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: Cylinder_2 Node Name: Cylinder_2
@ -57,7 +57,7 @@ Node Path: RootNode.Cylinder.Cylinder_1_optimized
Node Type: MeshData Node Type: MeshData
Positions: Count 192. Hash: 7921557352486854444 Positions: Count 192. Hash: 7921557352486854444
Normals: Count 192. Hash: 1873340970602844856 Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 18311637590974204568 FaceList: Count 124. Hash: 7602933716150163115
FaceMaterialIds: Count 124. Hash: 2372486708814455910 FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: transform Node Name: transform
@ -269,14 +269,14 @@ Node Type: MaterialData
Node Name: TangentSet_0 Node Name: TangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1.TangentSet_0 Node Path: RootNode.Cylinder.Cylinder_1.TangentSet_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 11165448242141781141 Tangents: Count 192. Hash: 13347865366302598201
GenerationMethod: 1 GenerationMethod: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_0 Node Name: BitangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1.BitangentSet_0 Node Path: RootNode.Cylinder.Cylinder_1.BitangentSet_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 7987814487334449536 Bitangents: Count 192. Hash: 11177881960262055002
GenerationMethod: 1 GenerationMethod: 1
Node Name: transform Node Name: transform
@ -333,14 +333,14 @@ Node Type: MeshVertexUVData
Node Name: TangentSet_0 Node Name: TangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1_optimized.TangentSet_0 Node Path: RootNode.Cylinder.Cylinder_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 7293001660047850407 Tangents: Count 192. Hash: 13256424469303674766
GenerationMethod: 1 GenerationMethod: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_0 Node Name: BitangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1_optimized.BitangentSet_0 Node Path: RootNode.Cylinder.Cylinder_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 2874689498270494796 Bitangents: Count 192. Hash: 12542581737782433115
GenerationMethod: 1 GenerationMethod: 1
Node Name: transform Node Name: transform

@ -178,7 +178,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="3728991722746136013" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="8546457964849634958" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -246,7 +246,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="18311637590974204568" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="7602933716150163115" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -737,7 +737,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="11165448242141781141" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="13347865366302598201" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -768,7 +768,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="7987814487334449536" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="11177881960262055002" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -899,7 +899,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="7293001660047850407" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="13256424469303674766" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -930,7 +930,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="2874689498270494796" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="12542581737782433115" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">

@ -40,7 +40,7 @@ Node Path: RootNode.Cylinder.Cylinder_1
Node Type: MeshData Node Type: MeshData
Positions: Count 192. Hash: 1283526254311745349 Positions: Count 192. Hash: 1283526254311745349
Normals: Count 192. Hash: 1873340970602844856 Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 3728991722746136013 FaceList: Count 124. Hash: 8546457964849634958
FaceMaterialIds: Count 124. Hash: 2372486708814455910 FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: Cylinder_2 Node Name: Cylinder_2
@ -57,7 +57,7 @@ Node Path: RootNode.Cylinder.Cylinder_1_optimized
Node Type: MeshData Node Type: MeshData
Positions: Count 192. Hash: 7921557352486854444 Positions: Count 192. Hash: 7921557352486854444
Normals: Count 192. Hash: 1873340970602844856 Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 18311637590974204568 FaceList: Count 124. Hash: 7602933716150163115
FaceMaterialIds: Count 124. Hash: 2372486708814455910 FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: transform Node Name: transform
@ -269,14 +269,14 @@ Node Type: MaterialData
Node Name: TangentSet_0 Node Name: TangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1.TangentSet_0 Node Path: RootNode.Cylinder.Cylinder_1.TangentSet_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 11165448242141781141 Tangents: Count 192. Hash: 13347865366302598201
GenerationMethod: 1 GenerationMethod: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_0 Node Name: BitangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1.BitangentSet_0 Node Path: RootNode.Cylinder.Cylinder_1.BitangentSet_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 7987814487334449536 Bitangents: Count 192. Hash: 11177881960262055002
GenerationMethod: 1 GenerationMethod: 1
Node Name: transform Node Name: transform
@ -333,14 +333,14 @@ Node Type: MeshVertexUVData
Node Name: TangentSet_0 Node Name: TangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1_optimized.TangentSet_0 Node Path: RootNode.Cylinder.Cylinder_1_optimized.TangentSet_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 7293001660047850407 Tangents: Count 192. Hash: 13256424469303674766
GenerationMethod: 1 GenerationMethod: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_0 Node Name: BitangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1_optimized.BitangentSet_0 Node Path: RootNode.Cylinder.Cylinder_1_optimized.BitangentSet_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 2874689498270494796 Bitangents: Count 192. Hash: 12542581737782433115
GenerationMethod: 1 GenerationMethod: 1
Node Name: transform Node Name: transform

@ -178,7 +178,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="3728991722746136013" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="8546457964849634958" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -246,7 +246,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="18311637590974204568" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="7602933716150163115" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -737,7 +737,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="11165448242141781141" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="13347865366302598201" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -768,7 +768,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="7987814487334449536" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="11177881960262055002" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -899,7 +899,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="7293001660047850407" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="13256424469303674766" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -930,7 +930,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="2874689498270494796" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="12542581737782433115" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">

@ -40,7 +40,7 @@ Node Path: RootNode.Cylinder.Cylinder_1
Node Type: MeshData Node Type: MeshData
Positions: Count 192. Hash: 1283526254311745349 Positions: Count 192. Hash: 1283526254311745349
Normals: Count 192. Hash: 1873340970602844856 Normals: Count 192. Hash: 1873340970602844856
FaceList: Count 124. Hash: 3728991722746136013 FaceList: Count 124. Hash: 8546457964849634958
FaceMaterialIds: Count 124. Hash: 2372486708814455910 FaceMaterialIds: Count 124. Hash: 2372486708814455910
Node Name: Cylinder_2 Node Name: Cylinder_2
@ -261,14 +261,14 @@ Node Type: MaterialData
Node Name: TangentSet_0 Node Name: TangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1.TangentSet_0 Node Path: RootNode.Cylinder.Cylinder_1.TangentSet_0
Node Type: MeshVertexTangentData Node Type: MeshVertexTangentData
Tangents: Count 192. Hash: 11165448242141781141 Tangents: Count 192. Hash: 13347865366302598201
GenerationMethod: 1 GenerationMethod: 1
SetIndex: 0 SetIndex: 0
Node Name: BitangentSet_0 Node Name: BitangentSet_0
Node Path: RootNode.Cylinder.Cylinder_1.BitangentSet_0 Node Path: RootNode.Cylinder.Cylinder_1.BitangentSet_0
Node Type: MeshVertexBitangentData Node Type: MeshVertexBitangentData
Bitangents: Count 192. Hash: 7987814487334449536 Bitangents: Count 192. Hash: 11177881960262055002
GenerationMethod: 1 GenerationMethod: 1
Node Name: transform Node Name: transform

@ -178,7 +178,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="FaceList - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="3728991722746136013" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="8546457964849634958" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -682,7 +682,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Tangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="11165448242141781141" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="13347865366302598201" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
@ -713,7 +713,7 @@
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">
<Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/> <Class name="AZStd::string" field="value1" value="Bitangents - Hash" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}"> <Class name="any" field="value2" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
<Class name="AZ::u64" field="m_data" value="7987814487334449536" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/> <Class name="AZ::u64" field="m_data" value="11177881960262055002" type="{D6597933-47CD-4FC8-B911-63F3E2B0993A}"/>
</Class> </Class>
</Class> </Class>
<Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}"> <Class name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">

@ -27,15 +27,15 @@ TEST_DIRECTORY = os.path.dirname(__file__)
class TestAutomation(TestAutomationBase): class TestAutomation(TestAutomationBase):
def test_Pane_HappyPath_OpenCloseSuccessfully(self, request, workspace, editor, launcher_platform): def test_Pane_HappyPath_OpenCloseSuccessfully(self, request, workspace, editor, launcher_platform):
from . import Pane_HappyPath_OpenCloseSuccessfully as test_module from . import Pane_HappyPath_OpenCloseSuccessfully as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_Pane_HappyPath_DocksProperly(self, request, workspace, editor, launcher_platform): def test_Pane_HappyPath_DocksProperly(self, request, workspace, editor, launcher_platform):
from . import Pane_HappyPath_DocksProperly as test_module from . import Pane_HappyPath_DocksProperly as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_Pane_HappyPath_ResizesProperly(self, request, workspace, editor, launcher_platform): def test_Pane_HappyPath_ResizesProperly(self, request, workspace, editor, launcher_platform):
from . import Pane_HappyPath_ResizesProperly as test_module from . import Pane_HappyPath_ResizesProperly as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
@pytest.mark.parametrize("level", ["tmp_level"]) @pytest.mark.parametrize("level", ["tmp_level"])
@ -45,7 +45,7 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown) request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True) file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
from . import ScriptCanvas_TwoComponents_InteractSuccessfully as test_module from . import ScriptCanvas_TwoComponents_InteractSuccessfully as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
@pytest.mark.parametrize("level", ["tmp_level"]) @pytest.mark.parametrize("level", ["tmp_level"])
@ -55,15 +55,15 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown) request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True) file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
from . import ScriptCanvas_ChangingAssets_ComponentStable as test_module from . import ScriptCanvas_ChangingAssets_ComponentStable as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_Graph_HappyPath_ZoomInZoomOut(self, request, workspace, editor, launcher_platform): def test_Graph_HappyPath_ZoomInZoomOut(self, request, workspace, editor, launcher_platform):
from . import Graph_HappyPath_ZoomInZoomOut as test_module from . import Graph_HappyPath_ZoomInZoomOut as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_NodePalette_HappyPath_CanSelectNode(self, request, workspace, editor, launcher_platform): def test_NodePalette_HappyPath_CanSelectNode(self, request, workspace, editor, launcher_platform):
from . import NodePalette_HappyPath_CanSelectNode as test_module from . import NodePalette_HappyPath_CanSelectNode as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
@pytest.mark.parametrize("level", ["tmp_level"]) @pytest.mark.parametrize("level", ["tmp_level"])
@ -73,11 +73,11 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown) request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True) file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
from . import ScriptCanvasComponent_OnEntityActivatedDeactivated_PrintMessage as test_module from . import ScriptCanvasComponent_OnEntityActivatedDeactivated_PrintMessage as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_NodePalette_HappyPath_ClearSelection(self, request, workspace, editor, launcher_platform, project): def test_NodePalette_HappyPath_ClearSelection(self, request, workspace, editor, launcher_platform, project):
from . import NodePalette_HappyPath_ClearSelection as test_module from . import NodePalette_HappyPath_ClearSelection as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
@pytest.mark.parametrize("level", ["tmp_level"]) @pytest.mark.parametrize("level", ["tmp_level"])
@ -87,7 +87,7 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown) request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True) file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
from . import ScriptCanvas_TwoEntities_UseSimultaneously as test_module from . import ScriptCanvas_TwoEntities_UseSimultaneously as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_ScriptEvent_HappyPath_CreatedWithoutError(self, request, workspace, editor, launcher_platform, project): def test_ScriptEvent_HappyPath_CreatedWithoutError(self, request, workspace, editor, launcher_platform, project):
def teardown(): def teardown():
@ -99,19 +99,19 @@ class TestAutomation(TestAutomationBase):
[os.path.join(workspace.paths.project(), "ScriptCanvas", "test_file.scriptevent")], True, True [os.path.join(workspace.paths.project(), "ScriptCanvas", "test_file.scriptevent")], True, True
) )
from . import ScriptEvent_HappyPath_CreatedWithoutError as test_module from . import ScriptEvent_HappyPath_CreatedWithoutError as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_ScriptCanvasTools_Toggle_OpenCloseSuccess(self, request, workspace, editor, launcher_platform): def test_ScriptCanvasTools_Toggle_OpenCloseSuccess(self, request, workspace, editor, launcher_platform):
from . import ScriptCanvasTools_Toggle_OpenCloseSuccess as test_module from . import ScriptCanvasTools_Toggle_OpenCloseSuccess as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_NodeInspector_HappyPath_VariableRenames(self, request, workspace, editor, launcher_platform, project): def test_NodeInspector_HappyPath_VariableRenames(self, request, workspace, editor, launcher_platform, project):
from . import NodeInspector_HappyPath_VariableRenames as test_module from . import NodeInspector_HappyPath_VariableRenames as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_Debugger_HappyPath_TargetMultipleGraphs(self, request, workspace, editor, launcher_platform, project): def test_Debugger_HappyPath_TargetMultipleGraphs(self, request, workspace, editor, launcher_platform, project):
from . import Debugger_HappyPath_TargetMultipleGraphs as test_module from . import Debugger_HappyPath_TargetMultipleGraphs as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@pytest.mark.parametrize("level", ["tmp_level"]) @pytest.mark.parametrize("level", ["tmp_level"])
def test_Debugger_HappyPath_TargetMultipleEntities(self, request, workspace, editor, launcher_platform, project, level): def test_Debugger_HappyPath_TargetMultipleEntities(self, request, workspace, editor, launcher_platform, project, level):
@ -120,16 +120,16 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown) request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True) file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
from . import Debugger_HappyPath_TargetMultipleEntities as test_module from . import Debugger_HappyPath_TargetMultipleEntities as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
def test_EditMenu_Default_UndoRedo(self, request, workspace, editor, launcher_platform, project): def test_EditMenu_Default_UndoRedo(self, request, workspace, editor, launcher_platform, project):
from . import EditMenu_Default_UndoRedo as test_module from . import EditMenu_Default_UndoRedo as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_Pane_Undocked_ClosesSuccessfully(self, request, workspace, editor, launcher_platform): def test_Pane_Undocked_ClosesSuccessfully(self, request, workspace, editor, launcher_platform):
from . import Pane_Undocked_ClosesSuccessfully as test_module from . import Pane_Undocked_ClosesSuccessfully as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@pytest.mark.parametrize("level", ["tmp_level"]) @pytest.mark.parametrize("level", ["tmp_level"])
def test_Entity_HappyPath_AddScriptCanvasComponent(self, request, workspace, editor, launcher_platform, project, level): def test_Entity_HappyPath_AddScriptCanvasComponent(self, request, workspace, editor, launcher_platform, project, level):
@ -138,11 +138,11 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown) request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True) file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
from . import Entity_HappyPath_AddScriptCanvasComponent as test_module from . import Entity_HappyPath_AddScriptCanvasComponent as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_Pane_Default_RetainOnSCRestart(self, request, workspace, editor, launcher_platform): def test_Pane_Default_RetainOnSCRestart(self, request, workspace, editor, launcher_platform):
from . import Pane_Default_RetainOnSCRestart as test_module from . import Pane_Default_RetainOnSCRestart as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
@pytest.mark.parametrize("level", ["tmp_level"]) @pytest.mark.parametrize("level", ["tmp_level"])
@ -152,7 +152,7 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown) request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True) file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
from . import ScriptEvents_HappyPath_SendReceiveAcrossMultiple as test_module from . import ScriptEvents_HappyPath_SendReceiveAcrossMultiple as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
@pytest.mark.parametrize("level", ["tmp_level"]) @pytest.mark.parametrize("level", ["tmp_level"])
@ -162,7 +162,7 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown) request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True) file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
from . import ScriptEvents_Default_SendReceiveSuccessfully as test_module from . import ScriptEvents_Default_SendReceiveSuccessfully as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
@pytest.mark.parametrize("level", ["tmp_level"]) @pytest.mark.parametrize("level", ["tmp_level"])
@ -172,24 +172,24 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown) request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True) file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
from . import ScriptEvents_ReturnSetType_Successfully as test_module from . import ScriptEvents_ReturnSetType_Successfully as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_NodeCategory_ExpandOnClick(self, request, workspace, editor, launcher_platform): def test_NodeCategory_ExpandOnClick(self, request, workspace, editor, launcher_platform):
from . import NodeCategory_ExpandOnClick as test_module from . import NodeCategory_ExpandOnClick as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_NodePalette_SearchText_Deletion(self, request, workspace, editor, launcher_platform): def test_NodePalette_SearchText_Deletion(self, request, workspace, editor, launcher_platform):
from . import NodePalette_SearchText_Deletion as test_module from . import NodePalette_SearchText_Deletion as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
def test_VariableManager_UnpinVariableType_Works(self, request, workspace, editor, launcher_platform): def test_VariableManager_UnpinVariableType_Works(self, request, workspace, editor, launcher_platform):
from . import VariableManager_UnpinVariableType_Works as test_module from . import VariableManager_UnpinVariableType_Works as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_Node_HappyPath_DuplicateNode(self, request, workspace, editor, launcher_platform): def test_Node_HappyPath_DuplicateNode(self, request, workspace, editor, launcher_platform):
from . import Node_HappyPath_DuplicateNode as test_module from . import Node_HappyPath_DuplicateNode as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
def test_ScriptEvent_AddRemoveParameter_ActionsSuccessful(self, request, workspace, editor, launcher_platform): def test_ScriptEvent_AddRemoveParameter_ActionsSuccessful(self, request, workspace, editor, launcher_platform):
def teardown(): def teardown():
@ -201,7 +201,7 @@ class TestAutomation(TestAutomationBase):
[os.path.join(workspace.paths.project(), "ScriptCanvas", "test_file.scriptevent")], True, True [os.path.join(workspace.paths.project(), "ScriptCanvas", "test_file.scriptevent")], True, True
) )
from . import ScriptEvent_AddRemoveParameter_ActionsSuccessful as test_module from . import ScriptEvent_AddRemoveParameter_ActionsSuccessful as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)
# NOTE: We had to use hydra_test_utils.py, as TestAutomationBase run_test method # NOTE: We had to use hydra_test_utils.py, as TestAutomationBase run_test method
# fails because of pyside_utils import # fails because of pyside_utils import
@ -227,7 +227,6 @@ class TestScriptCanvasTests(object):
expected_lines, expected_lines,
auto_test_mode=False, auto_test_mode=False,
timeout=60, timeout=60,
enable_prefab_system=False,
) )
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
@ -246,7 +245,6 @@ class TestScriptCanvasTests(object):
expected_lines, expected_lines,
auto_test_mode=False, auto_test_mode=False,
timeout=60, timeout=60,
enable_prefab_system=False,
) )
def test_GraphClose_Default_SavePrompt(self, request, editor, launcher_platform): def test_GraphClose_Default_SavePrompt(self, request, editor, launcher_platform):
@ -263,7 +261,6 @@ class TestScriptCanvasTests(object):
expected_lines, expected_lines,
auto_test_mode=False, auto_test_mode=False,
timeout=60, timeout=60,
enable_prefab_system=False,
) )
def test_VariableManager_Default_CreateDeleteVars(self, request, editor, launcher_platform): def test_VariableManager_Default_CreateDeleteVars(self, request, editor, launcher_platform):
@ -278,7 +275,6 @@ class TestScriptCanvasTests(object):
expected_lines, expected_lines,
auto_test_mode=False, auto_test_mode=False,
timeout=60, timeout=60,
enable_prefab_system=False,
) )
@pytest.mark.parametrize( @pytest.mark.parametrize(
@ -314,7 +310,6 @@ class TestScriptCanvasTests(object):
cfg_args=[config.get('cfg_args')], cfg_args=[config.get('cfg_args')],
auto_test_mode=False, auto_test_mode=False,
timeout=60, timeout=60,
enable_prefab_system=False,
) )
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
@ -343,7 +338,6 @@ class TestScriptCanvasTests(object):
expected_lines, expected_lines,
auto_test_mode=False, auto_test_mode=False,
timeout=60, timeout=60,
enable_prefab_system=False,
) )
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.") @pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
@ -371,6 +365,5 @@ class TestScriptCanvasTests(object):
expected_lines, expected_lines,
auto_test_mode=False, auto_test_mode=False,
timeout=60, timeout=60,
enable_prefab_system=False,
) )

@ -23,4 +23,4 @@ class TestAutomation(TestAutomationBase):
def test_Opening_Closing_Pane(self, request, workspace, editor, launcher_platform): def test_Opening_Closing_Pane(self, request, workspace, editor, launcher_platform):
from . import Opening_Closing_Pane as test_module from . import Opening_Closing_Pane as test_module
self._run_test(request, workspace, editor, test_module, enable_prefab_system=False) self._run_test(request, workspace, editor, test_module)

@ -45,4 +45,14 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
AutomatedTesting.Assets AutomatedTesting.Assets
) )
ly_add_pytest(
NAME AutomatedTesting::SmokeTest_Sandbox
TEST_SUITE sandbox
TEST_SERIAL
PATH ${CMAKE_CURRENT_LIST_DIR}
PYTEST_MARKS "SUITE_sandbox"
RUNTIME_DEPENDENCIES
AZ::AssetProcessor
)
endif() endif()

@ -14,7 +14,7 @@ import pytest
import subprocess import subprocess
@pytest.mark.SUITE_smoke @pytest.mark.SUITE_sandbox
class TestCLIToolAssetBuilderWorks(object): class TestCLIToolAssetBuilderWorks(object):
def test_CLITool_AssetBuilder_Works(self, build_directory): def test_CLITool_AssetBuilder_Works(self, build_directory):
file_path = os.path.join(build_directory, "AssetBuilder") file_path = os.path.join(build_directory, "AssetBuilder")

@ -0,0 +1,255 @@
{
"ContainerEntity": {
"Id": "ContainerEntity",
"Name": "Blast_ActorSplitsAfterCollision",
"Components": {
"Component_[10182366347512475253]": {
"$type": "EditorPrefabComponent",
"Id": 10182366347512475253
},
"Component_[12917798267488243668]": {
"$type": "EditorPendingCompositionComponent",
"Id": 12917798267488243668
},
"Component_[3261249813163778338]": {
"$type": "EditorOnlyEntityComponent",
"Id": 3261249813163778338
},
"Component_[3837204912784440039]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 3837204912784440039
},
"Component_[4272963378099646759]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 4272963378099646759,
"Parent Entity": ""
},
"Component_[4848458548047175816]": {
"$type": "EditorVisibilityComponent",
"Id": 4848458548047175816
},
"Component_[5787060997243919943]": {
"$type": "EditorInspectorComponent",
"Id": 5787060997243919943
},
"Component_[7804170251266531779]": {
"$type": "EditorLockComponent",
"Id": 7804170251266531779
},
"Component_[7874177159288365422]": {
"$type": "EditorEntitySortComponent",
"Id": 7874177159288365422
},
"Component_[8018146290632383969]": {
"$type": "EditorEntityIconComponent",
"Id": 8018146290632383969
},
"Component_[8452360690590857075]": {
"$type": "SelectionComponent",
"Id": 8452360690590857075
}
}
},
"Entities": {
"Entity_[678057008134]": {
"Id": "Entity_[678057008134]",
"Name": "Sphere_Moving",
"Components": {
"Component_[158491845118288574]": {
"$type": "EditorColliderComponent",
"Id": 158491845118288574,
"ColliderConfiguration": {
"CollisionGroupId": {
"GroupId": "{45EBDE87-10BA-405B-9118-1FE9C750E5A3}"
},
"MaterialSelection": {
"MaterialIds": [
{}
]
}
},
"ShapeConfiguration": {
"ShapeType": 0
}
},
"Component_[15882836540317052831]": {
"$type": "EditorOnlyEntityComponent",
"Id": 15882836540317052831
},
"Component_[15988538924200810686]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 15988538924200810686
},
"Component_[17332118306686659923]": {
"$type": "SelectionComponent",
"Id": 17332118306686659923
},
"Component_[18013098363541384892]": {
"$type": "EditorPendingCompositionComponent",
"Id": 18013098363541384892
},
"Component_[3299242856338866058]": {
"$type": "EditorVisibilityComponent",
"Id": 3299242856338866058
},
"Component_[3368757662560547573]": {
"$type": "EditorInspectorComponent",
"Id": 3368757662560547573,
"ComponentOrderEntryArray": [
{
"ComponentId": 9646670826592538370
},
{
"ComponentId": 158491845118288574,
"SortIndex": 1
},
{
"ComponentId": 7177752238184232813,
"SortIndex": 2
},
{
"ComponentId": 3538399061071907667,
"SortIndex": 3
}
]
},
"Component_[3538399061071907667]": {
"$type": "EditorSphereShapeComponent",
"Id": 3538399061071907667,
"GameView": true
},
"Component_[3584595476595239676]": {
"$type": "EditorLockComponent",
"Id": 3584595476595239676
},
"Component_[4539775501292735153]": {
"$type": "EditorEntityIconComponent",
"Id": 4539775501292735153
},
"Component_[5885911623396957736]": {
"$type": "EditorEntitySortComponent",
"Id": 5885911623396957736
},
"Component_[7177752238184232813]": {
"$type": "EditorRigidBodyComponent",
"Id": 7177752238184232813,
"Configuration": {
"entityId": "",
"Compute Mass": false,
"Mass": 100.0,
"Inertia tensor": {
"roll": 0.0,
"pitch": 0.0,
"yaw": 0.0,
"scale": 0.10000000149011612
}
}
},
"Component_[9646670826592538370]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 9646670826592538370,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
511.9999694824219,
532.0,
43.0
]
}
}
}
},
"Entity_[682351975430]": {
"Id": "Entity_[682351975430]",
"Name": "Destructable_Box",
"Components": {
"Component_[14428979635353087750]": {
"$type": "EditorEntitySortComponent",
"Id": 14428979635353087750
},
"Component_[14459069801260260996]": {
"$type": "EditorPendingCompositionComponent",
"Id": 14459069801260260996
},
"Component_[16353277599917996564]": {
"$type": "SelectionComponent",
"Id": 16353277599917996564
},
"Component_[16528484535459302978]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 16528484535459302978
},
"Component_[17689177494335411023]": {
"$type": "EditorVisibilityComponent",
"Id": 17689177494335411023
},
"Component_[18116908665747450198]": {
"$type": "EditorOnlyEntityComponent",
"Id": 18116908665747450198
},
"Component_[3544855145233062627]": {
"$type": "EditorInspectorComponent",
"Id": 3544855145233062627,
"ComponentOrderEntryArray": [
{
"ComponentId": 3826825320808092990
},
{
"ComponentId": 5627868831214978789,
"SortIndex": 1
},
{
"ComponentId": 7875098433529363009,
"SortIndex": 2
}
]
},
"Component_[3569626399556956817]": {
"$type": "EditorLockComponent",
"Id": 3569626399556956817
},
"Component_[3826825320808092990]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 3826825320808092990,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
511.9991455078125,
532.031982421875,
39.52538299560547
],
"Scale": [
1.0000001192092896,
0.9999998807907104,
1.0
]
}
},
"Component_[5627868831214978789]": {
"$type": "EditorBlastFamilyComponent",
"Id": 5627868831214978789,
"BlastAsset": {
"assetId": {
"guid": "{BAB71D97-F136-5C11-8AB6-6E9F768CA83B}"
},
"assetHint": "assets/destruction/box_2_chunks.blast"
},
"BlastMaterial": {
"BlastMaterialId": "{2F200947-553F-487F-B4EA-57F0EF5AE024}"
},
"PhysicsMaterial": {
"MaterialId": "{34AD1046-240B-448C-A694-AE80F595C431}"
}
},
"Component_[7159608037522336146]": {
"$type": "EditorEntityIconComponent",
"Id": 7159608037522336146
},
"Component_[7875098433529363009]": {
"$type": "EditorBlastMeshDataComponent",
"Id": 7875098433529363009
}
}
}
}
}

@ -0,0 +1,148 @@
{
"ContainerEntity": {
"Id": "ContainerEntity",
"Name": "Blast_ActorSplitsAfterDamage",
"Components": {
"Component_[10182366347512475253]": {
"$type": "EditorPrefabComponent",
"Id": 10182366347512475253
},
"Component_[12917798267488243668]": {
"$type": "EditorPendingCompositionComponent",
"Id": 12917798267488243668
},
"Component_[3261249813163778338]": {
"$type": "EditorOnlyEntityComponent",
"Id": 3261249813163778338
},
"Component_[3837204912784440039]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 3837204912784440039
},
"Component_[4272963378099646759]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 4272963378099646759,
"Parent Entity": ""
},
"Component_[4848458548047175816]": {
"$type": "EditorVisibilityComponent",
"Id": 4848458548047175816
},
"Component_[5787060997243919943]": {
"$type": "EditorInspectorComponent",
"Id": 5787060997243919943
},
"Component_[7804170251266531779]": {
"$type": "EditorLockComponent",
"Id": 7804170251266531779
},
"Component_[7874177159288365422]": {
"$type": "EditorEntitySortComponent",
"Id": 7874177159288365422
},
"Component_[8018146290632383969]": {
"$type": "EditorEntityIconComponent",
"Id": 8018146290632383969
},
"Component_[8452360690590857075]": {
"$type": "SelectionComponent",
"Id": 8452360690590857075
}
}
},
"Entities": {
"Entity_[682351975430]": {
"Id": "Entity_[682351975430]",
"Name": "Destructable_Box",
"Components": {
"Component_[14428979635353087750]": {
"$type": "EditorEntitySortComponent",
"Id": 14428979635353087750
},
"Component_[14459069801260260996]": {
"$type": "EditorPendingCompositionComponent",
"Id": 14459069801260260996
},
"Component_[16353277599917996564]": {
"$type": "SelectionComponent",
"Id": 16353277599917996564
},
"Component_[16528484535459302978]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 16528484535459302978
},
"Component_[17689177494335411023]": {
"$type": "EditorVisibilityComponent",
"Id": 17689177494335411023
},
"Component_[18116908665747450198]": {
"$type": "EditorOnlyEntityComponent",
"Id": 18116908665747450198
},
"Component_[3544855145233062627]": {
"$type": "EditorInspectorComponent",
"Id": 3544855145233062627,
"ComponentOrderEntryArray": [
{
"ComponentId": 3826825320808092990
},
{
"ComponentId": 5627868831214978789,
"SortIndex": 1
},
{
"ComponentId": 7875098433529363009,
"SortIndex": 2
}
]
},
"Component_[3569626399556956817]": {
"$type": "EditorLockComponent",
"Id": 3569626399556956817
},
"Component_[3826825320808092990]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 3826825320808092990,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
511.9991455078125,
532.031982421875,
39.52538299560547
],
"Scale": [
1.0000001192092896,
0.9999998807907104,
1.0
]
}
},
"Component_[5627868831214978789]": {
"$type": "EditorBlastFamilyComponent",
"Id": 5627868831214978789,
"BlastAsset": {
"assetId": {
"guid": "{BAB71D97-F136-5C11-8AB6-6E9F768CA83B}"
},
"assetHint": "assets/destruction/box_2_chunks.blast"
},
"BlastMaterial": {
"BlastMaterialId": "{2F200947-553F-487F-B4EA-57F0EF5AE024}"
},
"PhysicsMaterial": {
"MaterialId": "{34AD1046-240B-448C-A694-AE80F595C431}"
}
},
"Component_[7159608037522336146]": {
"$type": "EditorEntityIconComponent",
"Id": 7159608037522336146
},
"Component_[7875098433529363009]": {
"$type": "EditorBlastMeshDataComponent",
"Id": 7875098433529363009,
"Show Mesh Assets": true
}
}
}
}
}

@ -0,0 +1,217 @@
{
"ContainerEntity": {
"Id": "ContainerEntity",
"Name": "CharacterController_SwitchLevels",
"Components": {
"Component_[10182366347512475253]": {
"$type": "EditorPrefabComponent",
"Id": 10182366347512475253
},
"Component_[12917798267488243668]": {
"$type": "EditorPendingCompositionComponent",
"Id": 12917798267488243668
},
"Component_[3261249813163778338]": {
"$type": "EditorOnlyEntityComponent",
"Id": 3261249813163778338
},
"Component_[3837204912784440039]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 3837204912784440039
},
"Component_[4272963378099646759]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 4272963378099646759,
"Parent Entity": ""
},
"Component_[4848458548047175816]": {
"$type": "EditorVisibilityComponent",
"Id": 4848458548047175816
},
"Component_[5787060997243919943]": {
"$type": "EditorInspectorComponent",
"Id": 5787060997243919943
},
"Component_[7804170251266531779]": {
"$type": "EditorLockComponent",
"Id": 7804170251266531779
},
"Component_[7874177159288365422]": {
"$type": "EditorEntitySortComponent",
"Id": 7874177159288365422
},
"Component_[8018146290632383969]": {
"$type": "EditorEntityIconComponent",
"Id": 8018146290632383969
},
"Component_[8452360690590857075]": {
"$type": "SelectionComponent",
"Id": 8452360690590857075
}
}
},
"Entities": {
"Entity_[271494215500]": {
"Id": "Entity_[271494215500]",
"Name": "DefaultLevelSetup",
"Components": {
"Component_[10017568850356726118]": {
"$type": "EditorEntitySortComponent",
"Id": 10017568850356726118
},
"Component_[13730791873699866292]": {
"$type": "EditorVisibilityComponent",
"Id": 13730791873699866292
},
"Component_[14036484285432839222]": {
"$type": "EditorInspectorComponent",
"Id": 14036484285432839222,
"ComponentOrderEntryArray": [
{
"ComponentId": 9432950532896492451
},
{
"ComponentId": 16094906495473882735,
"SortIndex": 1
}
]
},
"Component_[15490606709331567745]": {
"$type": "EditorOnlyEntityComponent",
"Id": 15490606709331567745
},
"Component_[17819059404707659501]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 17819059404707659501
},
"Component_[2317367007807622931]": {
"$type": "EditorLockComponent",
"Id": 2317367007807622931
},
"Component_[2676812743453687109]": {
"$type": "EditorPendingCompositionComponent",
"Id": 2676812743453687109
},
"Component_[3047355939801335922]": {
"$type": "EditorEntityIconComponent",
"Id": 3047355939801335922
},
"Component_[3687396159953003426]": {
"$type": "SelectionComponent",
"Id": 3687396159953003426
},
"Component_[9432950532896492451]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 9432950532896492451,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
512.0,
512.0,
100.0
]
}
}
}
},
"Entity_[348803626828]": {
"Id": "Entity_[348803626828]",
"Name": "CharacterController",
"Components": {
"Component_[10957270521451904134]": {
"$type": "EditorOnlyEntityComponent",
"Id": 10957270521451904134
},
"Component_[12992548330649678626]": {
"$type": "EditorLockComponent",
"Id": 12992548330649678626
},
"Component_[15540557783782258382]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 15540557783782258382
},
"Component_[16081734969125733179]": {
"$type": "EditorEntitySortComponent",
"Id": 16081734969125733179
},
"Component_[1999380243426028380]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 1999380243426028380,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
511.9999694824219,
512.0,
34.0
]
}
},
"Component_[2476703453858708137]": {
"$type": "EditorEntityIconComponent",
"Id": 2476703453858708137
},
"Component_[259360796349614835]": {
"$type": "EditorVisibilityComponent",
"Id": 259360796349614835
},
"Component_[5309782390278392323]": {
"$type": "EditorCapsuleShapeComponent",
"Id": 5309782390278392323,
"GameView": true,
"ShapeColor": [
0.6666666865348816,
0.0,
0.0
],
"CapsuleShape": {
"Configuration": {
"DrawColor": [
0.6666666865348816,
0.0,
0.0
],
"Height": 2.0
}
}
},
"Component_[5810440768491728833]": {
"$type": "EditorInspectorComponent",
"Id": 5810440768491728833,
"ComponentOrderEntryArray": [
{
"ComponentId": 1999380243426028380
},
{
"ComponentId": 6864662272767840579,
"SortIndex": 1
},
{
"ComponentId": 5309782390278392323,
"SortIndex": 2
}
]
},
"Component_[6654367643820201613]": {
"$type": "EditorPendingCompositionComponent",
"Id": 6654367643820201613
},
"Component_[6864662272767840579]": {
"$type": "EditorCharacterControllerComponent",
"Id": 6864662272767840579,
"Configuration": {
"entityId": "",
"Material": {
"MaterialIds": [
{}
]
}
}
},
"Component_[9211907343705413938]": {
"$type": "SelectionComponent",
"Id": 9211907343705413938
}
}
}
}
}

@ -0,0 +1,118 @@
{
"ContainerEntity": {
"Id": "ContainerEntity",
"Name": "EmptyLevel",
"Components": {
"Component_[10182366347512475253]": {
"$type": "EditorPrefabComponent",
"Id": 10182366347512475253
},
"Component_[12917798267488243668]": {
"$type": "EditorPendingCompositionComponent",
"Id": 12917798267488243668
},
"Component_[3261249813163778338]": {
"$type": "EditorOnlyEntityComponent",
"Id": 3261249813163778338
},
"Component_[3837204912784440039]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 3837204912784440039
},
"Component_[4272963378099646759]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 4272963378099646759,
"Parent Entity": ""
},
"Component_[4848458548047175816]": {
"$type": "EditorVisibilityComponent",
"Id": 4848458548047175816
},
"Component_[5787060997243919943]": {
"$type": "EditorInspectorComponent",
"Id": 5787060997243919943
},
"Component_[7804170251266531779]": {
"$type": "EditorLockComponent",
"Id": 7804170251266531779
},
"Component_[7874177159288365422]": {
"$type": "EditorEntitySortComponent",
"Id": 7874177159288365422
},
"Component_[8018146290632383969]": {
"$type": "EditorEntityIconComponent",
"Id": 8018146290632383969
},
"Component_[8452360690590857075]": {
"$type": "SelectionComponent",
"Id": 8452360690590857075
}
}
},
"Entities": {
"Entity_[273050554979]": {
"Id": "Entity_[273050554979]",
"Name": "DefaultLevelSetup",
"Components": {
"Component_[10017568850356726118]": {
"$type": "EditorEntitySortComponent",
"Id": 10017568850356726118
},
"Component_[13730791873699866292]": {
"$type": "EditorVisibilityComponent",
"Id": 13730791873699866292
},
"Component_[14036484285432839222]": {
"$type": "EditorInspectorComponent",
"Id": 14036484285432839222,
"ComponentOrderEntryArray": [
{
"ComponentId": 9432950532896492451
},
{
"ComponentId": 16094906495473882735,
"SortIndex": 1
}
]
},
"Component_[16744953497953161231]": {
"$type": "EditorOnlyEntityComponent",
"Id": 16744953497953161231
},
"Component_[17819059404707659501]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 17819059404707659501
},
"Component_[2317367007807622931]": {
"$type": "EditorLockComponent",
"Id": 2317367007807622931
},
"Component_[2676812743453687109]": {
"$type": "EditorPendingCompositionComponent",
"Id": 2676812743453687109
},
"Component_[3047355939801335922]": {
"$type": "EditorEntityIconComponent",
"Id": 3047355939801335922
},
"Component_[3687396159953003426]": {
"$type": "SelectionComponent",
"Id": 3687396159953003426
},
"Component_[9432950532896492451]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 9432950532896492451,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
512.0,
512.0,
100.0
]
}
}
}
}
}
}

@ -0,0 +1,214 @@
{
"ContainerEntity": {
"Id": "ContainerEntity",
"Name": "auto_test",
"Components": {
"Component_[10182366347512475253]": {
"$type": "EditorPrefabComponent",
"Id": 10182366347512475253
},
"Component_[12917798267488243668]": {
"$type": "EditorPendingCompositionComponent",
"Id": 12917798267488243668
},
"Component_[3261249813163778338]": {
"$type": "EditorOnlyEntityComponent",
"Id": 3261249813163778338
},
"Component_[3837204912784440039]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 3837204912784440039
},
"Component_[4272963378099646759]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 4272963378099646759,
"Parent Entity": ""
},
"Component_[4848458548047175816]": {
"$type": "EditorVisibilityComponent",
"Id": 4848458548047175816
},
"Component_[5787060997243919943]": {
"$type": "EditorInspectorComponent",
"Id": 5787060997243919943
},
"Component_[7804170251266531779]": {
"$type": "EditorLockComponent",
"Id": 7804170251266531779
},
"Component_[7874177159288365422]": {
"$type": "EditorEntitySortComponent",
"Id": 7874177159288365422
},
"Component_[8018146290632383969]": {
"$type": "EditorEntityIconComponent",
"Id": 8018146290632383969
},
"Component_[8452360690590857075]": {
"$type": "SelectionComponent",
"Id": 8452360690590857075
}
}
},
"Entities": {
"Entity_[212522713927]": {
"Id": "Entity_[212522713927]",
"Name": "Entity1",
"Components": {
"Component_[13533719491703491179]": {
"$type": "EditorLockComponent",
"Id": 13533719491703491179
},
"Component_[14279778360325346613]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 14279778360325346613,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
512.0,
512.0,
32.0
]
}
},
"Component_[16516432490694776069]": {
"$type": "EditorPendingCompositionComponent",
"Id": 16516432490694776069
},
"Component_[16894842505954369943]": {
"$type": "ScriptEditorComponent",
"Id": 16894842505954369943,
"ScriptComponent": {
"Script": {
"assetId": {
"guid": "{AEB649BE-6E63-5D08-B6A6-323EE80125D9}",
"subId": 1
},
"assetHint": "scripts/auto_director.luac"
}
},
"ScriptAsset": {
"assetId": {
"guid": "{AEB649BE-6E63-5D08-B6A6-323EE80125D9}",
"subId": 1
},
"assetHint": "scripts/auto_director.luac"
}
},
"Component_[17917865139404413371]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 17917865139404413371
},
"Component_[300870010798916271]": {
"$type": "EditorOnlyEntityComponent",
"Id": 300870010798916271
},
"Component_[3542492159899223622]": {
"$type": "EditorEntitySortComponent",
"Id": 3542492159899223622
},
"Component_[5861133001616453159]": {
"$type": "SelectionComponent",
"Id": 5861133001616453159
},
"Component_[5861394204754691870]": {
"$type": "EditorVisibilityComponent",
"Id": 5861394204754691870
},
"Component_[6534723243071167847]": {
"$type": "EditorEntityIconComponent",
"Id": 6534723243071167847
},
"Component_[8192412641288145942]": {
"$type": "EditorInspectorComponent",
"Id": 8192412641288145942,
"ComponentOrderEntryArray": [
{
"ComponentId": 14279778360325346613
},
{
"ComponentId": 16894842505954369943,
"SortIndex": 1
}
]
}
}
},
"Entity_[264062321479]": {
"Id": "Entity_[264062321479]",
"Name": "Camera1",
"Components": {
"Component_[0]": {
"$type": "{CA11DA46-29FF-4083-B5F6-E02C3A8C3A3D} EditorCameraComponent"
},
"Component_[10250997976046839424]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 10250997976046839424,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
512.0531005859375,
505.3736877441406,
36.008216857910156
],
"Rotate": [
343.8316345214844,
359.8723449707031,
0.44026151299476624
],
"Scale": [
1.0,
1.0,
0.9999998807907104
]
}
},
"Component_[14117951654550186353]": {
"$type": "EditorOnlyEntityComponent",
"Id": 14117951654550186353
},
"Component_[15441561693121796704]": {
"$type": "EditorEntitySortComponent",
"Id": 15441561693121796704
},
"Component_[16579888413894171159]": {
"$type": "EditorEntityIconComponent",
"Id": 16579888413894171159
},
"Component_[2015490294161116421]": {
"$type": "EditorVisibilityComponent",
"Id": 2015490294161116421
},
"Component_[2585309221365912267]": {
"$type": "EditorInspectorComponent",
"Id": 2585309221365912267,
"ComponentOrderEntryArray": [
{
"ComponentId": 10250997976046839424
},
{
"ComponentId": 17989353981643488311,
"SortIndex": 1
}
]
},
"Component_[4907915728143987395]": {
"$type": "SelectionComponent",
"Id": 4907915728143987395
},
"Component_[5911437040663285596]": {
"$type": "EditorPendingCompositionComponent",
"Id": 5911437040663285596
},
"Component_[8717969720874629567]": {
"$type": "EditorLockComponent",
"Id": 8717969720874629567
},
"Component_[992024776394048323]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 992024776394048323
}
}
}
}
}

@ -0,0 +1,348 @@
{
"ContainerEntity": {
"Id": "ContainerEntity",
"Name": "ocean_component",
"Components": {
"Component_[10182366347512475253]": {
"$type": "EditorPrefabComponent",
"Id": 10182366347512475253
},
"Component_[12917798267488243668]": {
"$type": "EditorPendingCompositionComponent",
"Id": 12917798267488243668
},
"Component_[3261249813163778338]": {
"$type": "EditorOnlyEntityComponent",
"Id": 3261249813163778338
},
"Component_[3837204912784440039]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 3837204912784440039
},
"Component_[4272963378099646759]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 4272963378099646759,
"Parent Entity": ""
},
"Component_[4848458548047175816]": {
"$type": "EditorVisibilityComponent",
"Id": 4848458548047175816
},
"Component_[5787060997243919943]": {
"$type": "EditorInspectorComponent",
"Id": 5787060997243919943
},
"Component_[7804170251266531779]": {
"$type": "EditorLockComponent",
"Id": 7804170251266531779
},
"Component_[7874177159288365422]": {
"$type": "EditorEntitySortComponent",
"Id": 7874177159288365422
},
"Component_[8018146290632383969]": {
"$type": "EditorEntityIconComponent",
"Id": 8018146290632383969
},
"Component_[8452360690590857075]": {
"$type": "SelectionComponent",
"Id": 8452360690590857075
}
}
},
"Entities": {
"Entity_[113557230075]": {
"Id": "Entity_[113557230075]",
"Name": "the_ocean",
"Components": {
"Component_[10578707299131614649]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 10578707299131614649,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
55.0,
81.0,
20.0
]
}
},
"Component_[11046344975288527044]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 11046344975288527044
},
"Component_[13465592091248295601]": {
"$type": "EditorInspectorComponent",
"Id": 13465592091248295601,
"ComponentOrderEntryArray": [
{
"ComponentId": 10578707299131614649
},
{
"ComponentId": 2840515548992536974,
"SortIndex": 1
}
]
},
"Component_[13984822296855598165]": {
"$type": "EditorLockComponent",
"Id": 13984822296855598165
},
"Component_[14230937071328458692]": {
"$type": "EditorEntitySortComponent",
"Id": 14230937071328458692
},
"Component_[1515275142160994114]": {
"$type": "EditorPendingCompositionComponent",
"Id": 1515275142160994114
},
"Component_[16187876448121091850]": {
"$type": "EditorEntityIconComponent",
"Id": 16187876448121091850
},
"Component_[16861233641669829560]": {
"$type": "EditorOnlyEntityComponent",
"Id": 16861233641669829560
},
"Component_[9086259058015300489]": {
"$type": "SelectionComponent",
"Id": 9086259058015300489
},
"Component_[9741974704446379447]": {
"$type": "EditorVisibilityComponent",
"Id": 9741974704446379447
}
}
},
"Entity_[127885714554]": {
"Id": "Entity_[127885714554]",
"Name": "the_camera",
"Components": {
"Component_[0]": {
"$type": "{CA11DA46-29FF-4083-B5F6-E02C3A8C3A3D} EditorCameraComponent"
},
"Component_[12093754677865520350]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 12093754677865520350
},
"Component_[12730323471937880555]": {
"$type": "EditorEntityIconComponent",
"Id": 12730323471937880555
},
"Component_[13204709256342535717]": {
"$type": "EditorPendingCompositionComponent",
"Id": 13204709256342535717
},
"Component_[14559512685789945421]": {
"$type": "EditorLockComponent",
"Id": 14559512685789945421
},
"Component_[15770539414692920876]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 15770539414692920876,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
23.118545532226563,
128.9333038330078,
41.236572265625
],
"Rotate": [
0.12950840592384338,
35.17909240722656,
269.7752685546875
],
"Scale": [
1.0,
0.9999998807907104,
1.0
]
}
},
"Component_[17658049626755079421]": {
"$type": "EditorVisibilityComponent",
"Id": 17658049626755079421
},
"Component_[3194947345798045730]": {
"$type": "EditorInspectorComponent",
"Id": 3194947345798045730,
"ComponentOrderEntryArray": [
{
"ComponentId": 15770539414692920876
},
{
"ComponentId": 7411461277430009852,
"SortIndex": 1
}
]
},
"Component_[4514043637061174274]": {
"$type": "SelectionComponent",
"Id": 4514043637061174274
},
"Component_[6690157295583364107]": {
"$type": "EditorEntitySortComponent",
"Id": 6690157295583364107
},
"Component_[8418547677002847981]": {
"$type": "EditorOnlyEntityComponent",
"Id": 8418547677002847981
}
}
},
"Entity_[132180681850]": {
"Id": "Entity_[132180681850]",
"Name": "the_thing",
"Components": {
"Component_[10221686237776167339]": {
"$type": "EditorOnlyEntityComponent",
"Id": 10221686237776167339
},
"Component_[10230254870444799387]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 10230254870444799387
},
"Component_[10910683815551719249]": {
"$type": "EditorEntityIconComponent",
"Id": 10910683815551719249
},
"Component_[1551781018072505537]": {
"$type": "EditorInspectorComponent",
"Id": 1551781018072505537,
"ComponentOrderEntryArray": [
{
"ComponentId": 750431367071390348
},
{
"ComponentId": 10543707305560077725,
"SortIndex": 1
},
{
"ComponentId": 16828474708198673661,
"SortIndex": 2
},
{
"ComponentId": 6413469258372364445,
"SortIndex": 3
}
]
},
"Component_[1610584700060024614]": {
"$type": "EditorEntitySortComponent",
"Id": 1610584700060024614
},
"Component_[1702498396513087308]": {
"$type": "EditorLockComponent",
"Id": 1702498396513087308
},
"Component_[191898962635170167]": {
"$type": "SelectionComponent",
"Id": 191898962635170167
},
"Component_[5524024140510561095]": {
"$type": "EditorVisibilityComponent",
"Id": 5524024140510561095
},
"Component_[7126349013266909622]": {
"$type": "EditorPendingCompositionComponent",
"Id": 7126349013266909622
},
"Component_[750431367071390348]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 750431367071390348,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
56.0,
128.0,
37.0
],
"Scale": [
2.0,
2.0,
2.0
],
"UniformScale": 2.0
}
}
}
},
"Entity_[285018505936]": {
"Id": "Entity_[285018505936]",
"Name": "the_comments",
"Components": {
"Component_[12254043508887231201]": {
"$type": "EditorCommentComponent",
"Id": 12254043508887231201,
"Configuration": "This level is meant to show the most basic ocean scene.\n"
},
"Component_[13365140461414494550]": {
"$type": "EditorLockComponent",
"Id": 13365140461414494550
},
"Component_[15049990108511425568]": {
"$type": "EditorOnlyEntityComponent",
"Id": 15049990108511425568
},
"Component_[16058263010361769158]": {
"$type": "EditorCommentComponent",
"Id": 16058263010361769158,
"Configuration": "The physical object of \"the_thing\" requires the PhysicsEntities gem"
},
"Component_[3610853239595723287]": {
"$type": "EditorInspectorComponent",
"Id": 3610853239595723287,
"ComponentOrderEntryArray": [
{
"ComponentId": 6600498728445617807
},
{
"ComponentId": 12254043508887231201,
"SortIndex": 1
},
{
"ComponentId": 16058263010361769158,
"SortIndex": 2
}
]
},
"Component_[4646570851596337987]": {
"$type": "EditorEntitySortComponent",
"Id": 4646570851596337987
},
"Component_[6425461812824751097]": {
"$type": "EditorEntityIconComponent",
"Id": 6425461812824751097
},
"Component_[6600498728445617807]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 6600498728445617807,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
19.0,
114.0,
32.0
]
}
},
"Component_[748169014486201159]": {
"$type": "EditorVisibilityComponent",
"Id": 748169014486201159
},
"Component_[7489457744445094173]": {
"$type": "SelectionComponent",
"Id": 7489457744445094173
},
"Component_[8625778444077768294]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 8625778444077768294
},
"Component_[8776561997810927609]": {
"$type": "EditorPendingCompositionComponent",
"Id": 8776561997810927609
}
}
}
}
}

@ -0,0 +1,736 @@
{
"ContainerEntity": {
"Id": "ContainerEntity",
"Name": "ocean_trackview",
"Components": {
"Component_[10182366347512475253]": {
"$type": "EditorPrefabComponent",
"Id": 10182366347512475253
},
"Component_[12917798267488243668]": {
"$type": "EditorPendingCompositionComponent",
"Id": 12917798267488243668
},
"Component_[3261249813163778338]": {
"$type": "EditorOnlyEntityComponent",
"Id": 3261249813163778338
},
"Component_[3837204912784440039]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 3837204912784440039
},
"Component_[4272963378099646759]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 4272963378099646759,
"Parent Entity": ""
},
"Component_[4848458548047175816]": {
"$type": "EditorVisibilityComponent",
"Id": 4848458548047175816
},
"Component_[5787060997243919943]": {
"$type": "EditorInspectorComponent",
"Id": 5787060997243919943
},
"Component_[7804170251266531779]": {
"$type": "EditorLockComponent",
"Id": 7804170251266531779
},
"Component_[7874177159288365422]": {
"$type": "EditorEntitySortComponent",
"Id": 7874177159288365422
},
"Component_[8018146290632383969]": {
"$type": "EditorEntityIconComponent",
"Id": 8018146290632383969
},
"Component_[8452360690590857075]": {
"$type": "SelectionComponent",
"Id": 8452360690590857075
}
}
},
"Entities": {
"Entity_[113557230075]": {
"Id": "Entity_[113557230075]",
"Name": "the_ocean",
"Components": {
"Component_[10578707299131614649]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 10578707299131614649,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
55.0,
81.0,
16.0
]
}
},
"Component_[11046344975288527044]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 11046344975288527044
},
"Component_[13465592091248295601]": {
"$type": "EditorInspectorComponent",
"Id": 13465592091248295601,
"ComponentOrderEntryArray": [
{
"ComponentId": 10578707299131614649
},
{
"ComponentId": 8504984791098638268,
"SortIndex": 1
},
{
"ComponentId": 2840515548992536974,
"SortIndex": 2
}
]
},
"Component_[13984822296855598165]": {
"$type": "EditorLockComponent",
"Id": 13984822296855598165
},
"Component_[14230937071328458692]": {
"$type": "EditorEntitySortComponent",
"Id": 14230937071328458692
},
"Component_[1515275142160994114]": {
"$type": "EditorPendingCompositionComponent",
"Id": 1515275142160994114
},
"Component_[16187876448121091850]": {
"$type": "EditorEntityIconComponent",
"Id": 16187876448121091850
},
"Component_[8504984791098638268]": {
"$type": "EditorSequenceAgentComponent",
"Id": 8504984791098638268,
"SequenceComponentEntityIds": [
"Entity_[117514781392]"
]
},
"Component_[9060135739962621874]": {
"$type": "EditorOnlyEntityComponent",
"Id": 9060135739962621874
},
"Component_[9086259058015300489]": {
"$type": "SelectionComponent",
"Id": 9086259058015300489
},
"Component_[9741974704446379447]": {
"$type": "EditorVisibilityComponent",
"Id": 9741974704446379447
}
}
},
"Entity_[117514781392]": {
"Id": "Entity_[117514781392]",
"Name": "the_seq",
"Components": {
"Component_[10651628595557926239]": {
"$type": "EditorPendingCompositionComponent",
"Id": 10651628595557926239
},
"Component_[11623691525514612151]": {
"$type": "EditorInspectorComponent",
"Id": 11623691525514612151,
"ComponentOrderEntryArray": [
{
"ComponentId": 4273477098584349604
},
{
"ComponentId": 5882335637425824535,
"SortIndex": 1
}
]
},
"Component_[12470939899970032484]": {
"$type": "EditorEntityIconComponent",
"Id": 12470939899970032484
},
"Component_[14478010456841775378]": {
"$type": "EditorOnlyEntityComponent",
"Id": 14478010456841775378
},
"Component_[18243888196443202779]": {
"$type": "EditorLockComponent",
"Id": 18243888196443202779
},
"Component_[1910120971488156322]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 1910120971488156322
},
"Component_[2096039468306613876]": {
"$type": "EditorVisibilityComponent",
"Id": 2096039468306613876
},
"Component_[4273477098584349604]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 4273477098584349604,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
61.15132141113281,
82.34228515625,
56.032203674316406
]
}
},
"Component_[4856824333512618654]": {
"$type": "SelectionComponent",
"Id": 4856824333512618654
},
"Component_[5882335637425824535]": {
"$type": "EditorSequenceComponent",
"Id": 5882335637425824535,
"Sequence": {
"$type": "CAnimSequence",
"Name": "the_seq",
"SequenceEntityId": "Entity_[117514781392]",
"Flags": 1,
"ID": 1,
"Nodes": [
{
"$type": "CAnimAzEntityNode",
"ID": 1,
"Name": "the_ocean",
"Flags": 6,
"Entity": "Entity_[113557230075]"
},
{
"$type": "CAnimComponentNode",
"ID": 2,
"Name": "Infinite Ocean",
"Tracks": [
{
"$type": "CCompoundSplineTrack",
"ParamType": {
"Type": 8,
"Name": "FogColor"
},
"NumSubTracks": 3,
"SubTracks": [
{
"$type": "TAnimSplineTrack<Vec2 >",
"DefaultValue": {
"y": 0.01568629965186119
},
"ParamType": {
"Type": 82
},
"Spline": {
"Keys": [
{
"flags": 73,
"ds": {
"x": 1.0
},
"dd": {
"x": 1.0
}
},
{
"time": 3.0,
"flags": 73,
"value": {
"x": 3.0,
"y": 255.0
},
"ds": {
"x": 1.0
},
"dd": {
"x": 1.0
}
},
{
"time": 5.0,
"flags": 73,
"value": {
"x": 5.0,
"y": 255.0
},
"ds": {
"x": 0.6666666865348816
},
"dd": {
"x": 0.6666666865348816
}
},
{
"time": 7.699999809265137,
"flags": 73,
"value": {
"x": 7.699999809265137
},
"ds": {
"x": 0.8999999761581421
},
"dd": {
"x": 0.8999999761581421
}
},
{
"time": 10.0,
"flags": 73,
"value": {
"x": 10.0
},
"ds": {
"x": 0.766666829586029
},
"dd": {
"x": 0.766666829586029
}
}
]
},
"Id": 2
},
{
"$type": "TAnimSplineTrack<Vec2 >",
"DefaultValue": {
"y": 0.09411770105361938
},
"ParamType": {
"Type": 83
},
"Spline": {
"Keys": [
{
"flags": 73,
"ds": {
"x": 1.0
},
"dd": {
"x": 1.0
}
},
{
"time": 3.0,
"flags": 73,
"value": {
"x": 3.0,
"y": 255.0
},
"ds": {
"x": 1.0
},
"dd": {
"x": 1.0
}
},
{
"time": 5.0,
"flags": 73,
"value": {
"x": 5.0,
"y": 102.50434112548828
},
"ds": {
"x": 0.6666666865348816
},
"dd": {
"x": 0.6666666865348816
}
},
{
"time": 7.699999809265137,
"flags": 73,
"value": {
"x": 7.699999809265137
},
"ds": {
"x": 0.8999999761581421
},
"dd": {
"x": 0.8999999761581421
}
},
{
"time": 10.0,
"flags": 73,
"value": {
"x": 10.0,
"y": 23.16463851928711
},
"ds": {
"x": 0.766666829586029
},
"dd": {
"x": 0.766666829586029
}
}
]
},
"Id": 3
},
{
"$type": "TAnimSplineTrack<Vec2 >",
"DefaultValue": {
"y": 0.1411765068769455
},
"ParamType": {
"Type": 84
},
"Spline": {
"Keys": [
{
"flags": 73,
"ds": {
"x": 1.0
},
"dd": {
"x": 1.0
}
},
{
"time": 3.0,
"flags": 73,
"value": {
"x": 3.0,
"y": 255.0
},
"ds": {
"x": 1.0
},
"dd": {
"x": 1.0
}
},
{
"time": 5.0,
"flags": 73,
"value": {
"x": 5.0,
"y": 255.0
},
"ds": {
"x": 0.6666666865348816
},
"dd": {
"x": 0.6666666865348816
}
},
{
"time": 7.699999809265137,
"flags": 73,
"value": {
"x": 7.699999809265137,
"y": 54.11885070800781
},
"ds": {
"x": 0.8999999761581421
},
"dd": {
"x": 0.8999999761581421
}
},
{
"time": 10.0,
"flags": 73,
"value": {
"x": 10.0
},
"ds": {
"x": 0.766666829586029
},
"dd": {
"x": 0.766666829586029
}
}
]
},
"Id": 4
},
null
],
"SubTrackNames": [
"Red",
"Green",
"Blue",
"W"
],
"ValueType": 20,
"Id": 1
}
],
"Parent": 1,
"ComponentID": 2840515548992536974,
"ComponentTypeID": "{961C77CC-CB98-49B8-83C4-CB7FD6D9AB5B}"
},
{
"$type": "CAnimComponentNode",
"ID": 3,
"Name": "Transform",
"Tracks": [
{
"$type": "CCompoundSplineTrack",
"ParamType": {
"Type": 1,
"Name": "Position"
},
"NumSubTracks": 3,
"SubTracks": [
{
"$type": "TAnimSplineTrack<Vec2 >",
"DefaultValue": {
"x": -8029758706415567000.0,
"y": 55.0
},
"ParamType": {
"Type": 51
},
"Id": 6
},
{
"$type": "TAnimSplineTrack<Vec2 >",
"DefaultValue": {
"x": -8029758706415567000.0,
"y": 81.0
},
"ParamType": {
"Type": 52
},
"Id": 7
},
{
"$type": "TAnimSplineTrack<Vec2 >",
"DefaultValue": {
"x": -8029758706415567000.0,
"y": 57.0
},
"ParamType": {
"Type": 53
},
"Id": 8
},
null
],
"SubTrackNames": [
"X",
"Y",
"Z",
"W"
],
"ValueType": 1,
"Id": 5
},
{
"$type": "CCompoundSplineTrack",
"ParamType": {
"Type": 2,
"Name": "Rotation"
},
"NumSubTracks": 3,
"SubTracks": [
{
"$type": "TAnimSplineTrack<Vec2 >",
"DefaultValue": {
"x": -8029758706415567000.0
},
"ParamType": {
"Type": 54
},
"Id": 10
},
{
"$type": "TAnimSplineTrack<Vec2 >",
"DefaultValue": {
"x": -8029758706415567000.0
},
"ParamType": {
"Type": 55
},
"Id": 11
},
{
"$type": "TAnimSplineTrack<Vec2 >",
"DefaultValue": {
"x": -8029758706415567000.0
},
"ParamType": {
"Type": 56
},
"Id": 12
},
null
],
"SubTrackNames": [
"X",
"Y",
"Z",
"W"
],
"ValueType": 2,
"Id": 9
}
],
"Parent": 1,
"ComponentID": 10578707299131614649,
"ComponentTypeID": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0}"
}
],
"Events": [
"start"
]
}
},
"Component_[8277927932072884141]": {
"$type": "EditorEntitySortComponent",
"Id": 8277927932072884141
}
}
},
"Entity_[310788309712]": {
"Id": "Entity_[310788309712]",
"Name": "the_comments",
"Components": {
"Component_[10820736773970990934]": {
"$type": "SelectionComponent",
"Id": 10820736773970990934
},
"Component_[16460362337690040728]": {
"$type": "EditorVisibilityComponent",
"Id": 16460362337690040728
},
"Component_[1711788818167604478]": {
"$type": "EditorInspectorComponent",
"Id": 1711788818167604478,
"ComponentOrderEntryArray": [
{
"ComponentId": 17162444099898225645
},
{
"ComponentId": 4524863805502269700,
"SortIndex": 1
}
]
},
"Component_[17162444099898225645]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 17162444099898225645,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
61.0,
82.0,
56.0
]
}
},
"Component_[17783575382365366340]": {
"$type": "EditorOnlyEntityComponent",
"Id": 17783575382365366340
},
"Component_[2087049458930367042]": {
"$type": "EditorLockComponent",
"Id": 2087049458930367042
},
"Component_[2711019276572888356]": {
"$type": "EditorEntitySortComponent",
"Id": 2711019276572888356
},
"Component_[4524863805502269700]": {
"$type": "EditorCommentComponent",
"Id": 4524863805502269700,
"Configuration": "This level is meant to test track view with the ocean component."
},
"Component_[6476444408609098475]": {
"$type": "EditorPendingCompositionComponent",
"Id": 6476444408609098475
},
"Component_[7805954804953628853]": {
"$type": "EditorEntityIconComponent",
"Id": 7805954804953628853
},
"Component_[8159544250366547808]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 8159544250366547808
}
}
},
"Entity_[315083277008]": {
"Id": "Entity_[315083277008]",
"Name": "the_camera",
"Components": {
"Component_[0]": {
"$type": "{CA11DA46-29FF-4083-B5F6-E02C3A8C3A3D} EditorCameraComponent"
},
"Component_[11755705402873798069]": {
"$type": "EditorVisibilityComponent",
"Id": 11755705402873798069
},
"Component_[11939241802298470223]": {
"$type": "EditorInspectorComponent",
"Id": 11939241802298470223,
"ComponentOrderEntryArray": [
{
"ComponentId": 13678215694230152557
},
{
"ComponentId": 7780955726439597543,
"SortIndex": 1
},
{
"ComponentId": 14118047423140175065,
"SortIndex": 2
}
]
},
"Component_[1263945907594972096]": {
"$type": "EditorPendingCompositionComponent",
"Id": 1263945907594972096
},
"Component_[13678215694230152557]": {
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
"Id": 13678215694230152557,
"Parent Entity": "ContainerEntity",
"Transform Data": {
"Translate": [
5.279235363006592,
89.93304443359375,
41.92418670654297
],
"Rotate": [
8.572165489196777,
351.0418701171875,
134.06057739257813
],
"Scale": [
0.9999998807907104,
0.9999998807907104,
1.0
]
}
},
"Component_[16694969224252903921]": {
"$type": "SelectionComponent",
"Id": 16694969224252903921
},
"Component_[16770043767194988305]": {
"$type": "EditorLockComponent",
"Id": 16770043767194988305
},
"Component_[17615022962377688621]": {
"$type": "EditorEntityIconComponent",
"Id": 17615022962377688621
},
"Component_[4781886688900343222]": {
"$type": "EditorEntitySortComponent",
"Id": 4781886688900343222
},
"Component_[8790131188175752902]": {
"$type": "EditorDisabledCompositionComponent",
"Id": 8790131188175752902
},
"Component_[9731263833327927165]": {
"$type": "EditorOnlyEntityComponent",
"Id": 9731263833327927165
}
}
}
}
}

@ -143,7 +143,8 @@ bool CImageUtil::LoadPGM(const QString& fileName, CImageEx& image)
fseek(file, 0, SEEK_SET); fseek(file, 0, SEEK_SET);
char* str = new char[fileSize]; char* str = new char[fileSize];
fread(str, fileSize, 1, file);
[[maybe_unused]] auto bytesRead = fread(str, fileSize, 1, file);
[[maybe_unused]] char* nextToken = nullptr; [[maybe_unused]] char* nextToken = nullptr;
token = azstrtok(str, 0, seps, &nextToken); token = azstrtok(str, 0, seps, &nextToken);

@ -69,9 +69,11 @@ namespace UnitTest
// Note that ConvertToAbsolutePath will perform a realpath on the result. The result of AZ::Utils::GetExecutableDirectory // Note that ConvertToAbsolutePath will perform a realpath on the result. The result of AZ::Utils::GetExecutableDirectory
// uses AZ::Android::AndroidEnv::Get()->GetAppPrivateStoragePath() which will retrieve the storage path, but that path could // uses AZ::Android::AndroidEnv::Get()->GetAppPrivateStoragePath() which will retrieve the storage path, but that path could
// be symlinked, so we need to perform a real path on it before comparison // be symlinked, so we need to perform a real path on it before comparison
char realExecutableDirectory[AZ::IO::MaxPathLength]; char* realExecutableDirectory = realpath(executableDirectory, nullptr);
ASSERT_TRUE(realpath(executableDirectory, realExecutableDirectory)); ASSERT_NE(realExecutableDirectory, nullptr);
EXPECT_STRCASEEQ(realExecutableDirectory, absolutePath->c_str()); EXPECT_STRCASEEQ(realExecutableDirectory, absolutePath->c_str());
free(realExecutableDirectory);
} }
} }

@ -383,7 +383,7 @@ namespace AZ::IO::ZipDir
if (!AZ::IO::FileIOBase::GetDirectInstance()->Write(m_fileHandle, ptr, sizeToWrite)) if (!AZ::IO::FileIOBase::GetDirectInstance()->Write(m_fileHandle, ptr, sizeToWrite))
{ {
char error[1024]; char error[1024];
azstrerror_s(error, AZ_ARRAY_SIZE(error), errno); [[maybe_unused]] auto azStrErrorResult = azstrerror_s(error, AZ_ARRAY_SIZE(error), errno);
AZ_Warning("Archive", false, "Cannot write to zip file!! error = (%d): %s", errno, error); AZ_Warning("Archive", false, "Cannot write to zip file!! error = (%d): %s", errno, error);
return ZD_ERROR_IO_FAILED; return ZD_ERROR_IO_FAILED;
} }
@ -531,7 +531,7 @@ namespace AZ::IO::ZipDir
if (!WriteCompressedData((uint8_t*)pUncompressed, nSegmentSize, encrypt)) if (!WriteCompressedData((uint8_t*)pUncompressed, nSegmentSize, encrypt))
{ {
char error[1024]; char error[1024];
azstrerror_s(error, AZ_ARRAY_SIZE(error), errno); [[maybe_unused]] auto azStrErrorResult = azstrerror_s(error, AZ_ARRAY_SIZE(error), errno);
AZ_Warning("Archive", false, "Cannot write to zip file!! error = (%d): %s", errno, error); AZ_Warning("Archive", false, "Cannot write to zip file!! error = (%d): %s", errno, error);
return ZD_ERROR_IO_FAILED; return ZD_ERROR_IO_FAILED;
} }

@ -29,6 +29,19 @@ namespace AzFramework::SurfaceData
{ {
} }
//! Equality comparison operator for SurfaceTagWeight.
bool operator==(const SurfaceTagWeight& rhs) const
{
return (m_surfaceType == rhs.m_surfaceType) && (m_weight == rhs.m_weight);
}
//! Inequality comparison operator for SurfaceTagWeight.
bool operator!=(const SurfaceTagWeight& rhs) const
{
return !(*this == rhs);
}
AZ::Crc32 m_surfaceType = AZ::Crc32(Constants::s_unassignedTagName); AZ::Crc32 m_surfaceType = AZ::Crc32(Constants::s_unassignedTagName);
float m_weight = 0.0f; //! A Value in the range [0.0f .. 1.0f] float m_weight = 0.0f; //! A Value in the range [0.0f .. 1.0f]

@ -120,7 +120,7 @@ namespace AzFramework
int res = chdir(processLaunchInfo.m_workingDirectory.c_str()); int res = chdir(processLaunchInfo.m_workingDirectory.c_str());
if (res != 0) if (res != 0)
{ {
write(errorPipe[1], &errno, sizeof(int)); [[maybe_unused]] auto writeResult = write(errorPipe[1], &errno, sizeof(int));
// We *have* to _exit as we are the child process and simply // We *have* to _exit as we are the child process and simply
// returning at this point would mean we would start running // returning at this point would mean we would start running
// the code from our parent process and that will just wreck // the code from our parent process and that will just wreck
@ -132,16 +132,20 @@ namespace AzFramework
switch (processLaunchInfo.m_processPriority) switch (processLaunchInfo.m_processPriority)
{ {
case PROCESSPRIORITY_BELOWNORMAL: case PROCESSPRIORITY_BELOWNORMAL:
nice(1); {
[[maybe_unused]] auto niceResult = nice(1);
// also reduce disk impact: // also reduce disk impact:
// setiopolicy_np(IOPOL_TYPE_DISK, IOPOL_SCOPE_PROCESS, IOPOL_UTILITY); // setiopolicy_np(IOPOL_TYPE_DISK, IOPOL_SCOPE_PROCESS, IOPOL_UTILITY);
break; break;
}
case PROCESSPRIORITY_IDLE: case PROCESSPRIORITY_IDLE:
nice(20); {
[[maybe_unused]] auto niceResult = nice(20);
// also reduce disk impact: // also reduce disk impact:
// setiopolicy_np(IOPOL_TYPE_DISK, IOPOL_SCOPE_PROCESS, IOPOL_THROTTLE); // setiopolicy_np(IOPOL_TYPE_DISK, IOPOL_SCOPE_PROCESS, IOPOL_THROTTLE);
break; break;
} }
}
startupInfo.SetupHandlesForChildProcess(); startupInfo.SetupHandlesForChildProcess();
@ -153,7 +157,7 @@ namespace AzFramework
// to stop it from continuing to run as a clone of the parent. // to stop it from continuing to run as a clone of the parent.
// Communicate the error code back to the parent via a pipe for the // Communicate the error code back to the parent via a pipe for the
// parent to read. // parent to read.
write(errorPipe[1], &errval, sizeof(errval)); [[maybe_unused]] auto writeResult = write(errorPipe[1], &errval, sizeof(errval));
_exit(0); _exit(0);
} }
@ -317,7 +321,7 @@ namespace AzFramework
// Set up a pipe to communicate the error code from the subprocess's execvpe call // Set up a pipe to communicate the error code from the subprocess's execvpe call
AZStd::array<int, 2> childErrorPipeFds{}; AZStd::array<int, 2> childErrorPipeFds{};
pipe(childErrorPipeFds.data()); [[maybe_unused]] auto pipeResult = pipe(childErrorPipeFds.data());
// This configures the write end of the pipe to close on calls to `exec` // This configures the write end of the pipe to close on calls to `exec`
fcntl(childErrorPipeFds[1], F_SETFD, fcntl(childErrorPipeFds[1], F_GETFD) | FD_CLOEXEC); fcntl(childErrorPipeFds[1], F_SETFD, fcntl(childErrorPipeFds[1], F_GETFD) | FD_CLOEXEC);

@ -117,11 +117,7 @@ namespace UnitTest
EXPECT_EQ(param2[0], "param2val"); EXPECT_EQ(param2[0], "param2val");
} }
#if AZ_TRAIT_DISABLE_FAILED_PROCESS_LAUNCHER_TESTS
TEST_F(ProcessLaunchParseTests, DISABLED_ProcessLauncher_StringsWithCommas_Success)
#else
TEST_F(ProcessLaunchParseTests, ProcessLauncher_WithCommas_Success) TEST_F(ProcessLaunchParseTests, ProcessLauncher_WithCommas_Success)
#endif // AZ_TRAIT_DISABLE_FAILED_PROCESS_LAUNCHER_TESTS
{ {
ProcessLaunchParseTests::ParsedArgMap argMap; ProcessLaunchParseTests::ParsedArgMap argMap;
AzFramework::ProcessOutput processOutput; AzFramework::ProcessOutput processOutput;
@ -155,11 +151,7 @@ namespace UnitTest
EXPECT_EQ(param2[1], "al"); EXPECT_EQ(param2[1], "al");
} }
#if AZ_TRAIT_DISABLE_FAILED_PROCESS_LAUNCHER_TESTS
TEST_F(ProcessLaunchParseTests, DISABLED_ProcessLauncher_StringsWithSpaces_Success)
#else
TEST_F(ProcessLaunchParseTests, ProcessLauncher_WithSpaces_Success) TEST_F(ProcessLaunchParseTests, ProcessLauncher_WithSpaces_Success)
#endif // AZ_TRAIT_DISABLE_FAILED_PROCESS_LAUNCHER_TESTS
{ {
ProcessLaunchParseTests::ParsedArgMap argMap; ProcessLaunchParseTests::ParsedArgMap argMap;
AzFramework::ProcessOutput processOutput; AzFramework::ProcessOutput processOutput;
@ -191,11 +183,7 @@ namespace UnitTest
EXPECT_EQ(param2[0], "param2v al"); EXPECT_EQ(param2[0], "param2v al");
} }
#if AZ_TRAIT_DISABLE_FAILED_PROCESS_LAUNCHER_TESTS
TEST_F(ProcessLaunchParseTests, DISABLED_ProcessLauncher_StringsWithSpacesAndComma_Success)
#else
TEST_F(ProcessLaunchParseTests, ProcessLauncher_WithSpacesAndComma_Success) TEST_F(ProcessLaunchParseTests, ProcessLauncher_WithSpacesAndComma_Success)
#endif // AZ_TRAIT_DISABLE_FAILED_PROCESS_LAUNCHER_TESTS
{ {
ProcessLaunchParseTests::ParsedArgMap argMap; ProcessLaunchParseTests::ParsedArgMap argMap;
AzFramework::ProcessOutput processOutput; AzFramework::ProcessOutput processOutput;

@ -71,7 +71,7 @@ namespace AzNetworking
const char* GetNetworkErrorDesc(int32_t errorCode) const char* GetNetworkErrorDesc(int32_t errorCode)
{ {
static AZ_THREAD_LOCAL char buffer[1024]; static AZ_THREAD_LOCAL char buffer[1024];
strerror_r(errorCode, buffer, sizeof(buffer)); [[maybe_unused]] auto strErrorResult = strerror_r(errorCode, buffer, sizeof(buffer));
return buffer; return buffer;
} }
} }

@ -73,7 +73,7 @@ namespace AzToolsFramework
settings.m_keepDefaults = true; settings.m_keepDefaults = true;
} }
if ((flags & StoreFlags::StoreLinkIds) != StoreFlags::None) if ((flags & StoreFlags::StripLinkIds) != StoreFlags::StripLinkIds)
{ {
settings.m_metadata.Create<LinkIdMetadata>(); settings.m_metadata.Create<LinkIdMetadata>();
} }

@ -52,7 +52,7 @@ namespace AzToolsFramework
//! We do not save linkIds to file. However when loading a level we want to temporarily save //! We do not save linkIds to file. However when loading a level we want to temporarily save
//! linkIds to instance dom so any nested prefabs will have linkIds correctly set. //! linkIds to instance dom so any nested prefabs will have linkIds correctly set.
StoreLinkIds = 1 << 1 StripLinkIds = 1 << 1
}; };
AZ_DEFINE_ENUM_BITWISE_OPERATORS(StoreFlags); AZ_DEFINE_ENUM_BITWISE_OPERATORS(StoreFlags);

@ -222,7 +222,7 @@ namespace AzToolsFramework::Prefab
SetInstanceContainersOpenState(m_rootAliasFocusPath, false); SetInstanceContainersOpenState(m_rootAliasFocusPath, false);
const RootAliasPath previousContainerRootAliasPath = m_rootAliasFocusPath; const RootAliasPath previousContainerRootAliasPath = m_rootAliasFocusPath;
const InstanceOptionalConstReference previousFocusedInstance = GetInstanceReference(previousContainerRootAliasPath); const InstanceOptionalReference previousFocusedInstance = GetInstanceReference(previousContainerRootAliasPath);
m_rootAliasFocusPath = focusedInstance->get().GetAbsoluteInstanceAliasPath(); m_rootAliasFocusPath = focusedInstance->get().GetAbsoluteInstanceAliasPath();
m_focusedTemplateId = focusedInstance->get().GetTemplateId(); m_focusedTemplateId = focusedInstance->get().GetTemplateId();
@ -277,7 +277,7 @@ namespace AzToolsFramework::Prefab
AZ::EntityId PrefabFocusHandler::GetFocusedPrefabContainerEntityId([[maybe_unused]] AzFramework::EntityContextId entityContextId) const AZ::EntityId PrefabFocusHandler::GetFocusedPrefabContainerEntityId([[maybe_unused]] AzFramework::EntityContextId entityContextId) const
{ {
if (const InstanceOptionalConstReference instance = GetInstanceReference(m_rootAliasFocusPath); instance.has_value()) if (const InstanceOptionalReference instance = GetInstanceReference(m_rootAliasFocusPath); instance.has_value())
{ {
return instance->get().GetContainerEntityId(); return instance->get().GetContainerEntityId();
} }

@ -331,7 +331,7 @@ namespace AzToolsFramework
} }
PrefabDom storedPrefabDom(&loadedTemplateDom->get().GetAllocator()); PrefabDom storedPrefabDom(&loadedTemplateDom->get().GetAllocator());
if (!PrefabDomUtils::StoreInstanceInPrefabDom(loadedPrefabInstance, storedPrefabDom, PrefabDomUtils::StoreFlags::StoreLinkIds)) if (!PrefabDomUtils::StoreInstanceInPrefabDom(loadedPrefabInstance, storedPrefabDom))
{ {
return false; return false;
} }
@ -359,7 +359,7 @@ namespace AzToolsFramework
PrefabDom storedPrefabDom(&savingTemplateDom->get().GetAllocator()); PrefabDom storedPrefabDom(&savingTemplateDom->get().GetAllocator());
if (!PrefabDomUtils::StoreInstanceInPrefabDom(savingPrefabInstance, storedPrefabDom, if (!PrefabDomUtils::StoreInstanceInPrefabDom(savingPrefabInstance, storedPrefabDom,
PrefabDomUtils::StoreFlags::StripDefaultValues)) PrefabDomUtils::StoreFlags::StripDefaultValues | PrefabDomUtils::StoreFlags::StripLinkIds))
{ {
return false; return false;
} }

@ -197,7 +197,7 @@ namespace AzToolsFramework
// Update the template of the instance since the entities are modified since the template creation. // Update the template of the instance since the entities are modified since the template creation.
Prefab::PrefabDom serializedInstance; Prefab::PrefabDom serializedInstance;
if (Prefab::PrefabDomUtils::StoreInstanceInPrefabDom(instanceToCreate->get(), serializedInstance)) if (m_instanceToTemplateInterface->GenerateDomForInstance(serializedInstance, instanceToCreate->get()))
{ {
m_prefabSystemComponentInterface->UpdatePrefabTemplate(instanceToCreate->get().GetTemplateId(), serializedInstance); m_prefabSystemComponentInterface->UpdatePrefabTemplate(instanceToCreate->get().GetTemplateId(), serializedInstance);
} }

@ -162,6 +162,9 @@ namespace AzToolsFramework
} }
void PrefabSystemComponent::PropagateTemplateChanges(TemplateId templateId, InstanceOptionalConstReference instanceToExclude) void PrefabSystemComponent::PropagateTemplateChanges(TemplateId templateId, InstanceOptionalConstReference instanceToExclude)
{
TemplateReference findTemplateResult = FindTemplate(templateId);
if (findTemplateResult.has_value())
{ {
auto templateIdToLinkIdsIterator = m_templateToLinkIdsMap.find(templateId); auto templateIdToLinkIdsIterator = m_templateToLinkIdsMap.find(templateId);
if (templateIdToLinkIdsIterator != m_templateToLinkIdsMap.end()) if (templateIdToLinkIdsIterator != m_templateToLinkIdsMap.end())
@ -169,12 +172,13 @@ namespace AzToolsFramework
// We need to initialize a queue here because once all linked instances of a template are updated, // We need to initialize a queue here because once all linked instances of a template are updated,
// we will find all the linkIds corresponding to the updated template and add them to this queue again. // we will find all the linkIds corresponding to the updated template and add them to this queue again.
AZStd::queue<LinkIds> linkIdsToUpdateQueue; AZStd::queue<LinkIds> linkIdsToUpdateQueue;
linkIdsToUpdateQueue.push(LinkIds(templateIdToLinkIdsIterator->second.begin(), linkIdsToUpdateQueue.push(
templateIdToLinkIdsIterator->second.end())); LinkIds(templateIdToLinkIdsIterator->second.begin(), templateIdToLinkIdsIterator->second.end()));
UpdateLinkedInstances(linkIdsToUpdateQueue); UpdateLinkedInstances(linkIdsToUpdateQueue);
} }
UpdatePrefabInstances(templateId, instanceToExclude); UpdatePrefabInstances(templateId, instanceToExclude);
} }
}
void PrefabSystemComponent::UpdatePrefabTemplate(TemplateId templateId, const PrefabDom& updatedDom) void PrefabSystemComponent::UpdatePrefabTemplate(TemplateId templateId, const PrefabDom& updatedDom)
{ {

@ -256,7 +256,7 @@ namespace AzToolsFramework
return; return;
} }
PrefabDomReference sourceDom = sourceTemplate->get().GetPrefabDom(); PrefabDom& sourceDom = sourceTemplate->get().GetPrefabDom();
//use instance pointer to reach position //use instance pointer to reach position
PrefabDomValueReference instanceDomRef = link->get().GetLinkedInstanceDom(); PrefabDomValueReference instanceDomRef = link->get().GetLinkedInstanceDom();
@ -274,16 +274,14 @@ namespace AzToolsFramework
(result.GetOutcome() != AZ::JsonSerializationResult::Outcomes::PartialSkip), (result.GetOutcome() != AZ::JsonSerializationResult::Outcomes::PartialSkip),
"Some of the patches are not successfully applied."); "Some of the patches are not successfully applied.");
//remove the link id placed into the instance // Remove the link ids if present in the doms. We don't want any overrides to be created on top of linkIds because
auto linkIdIter = instanceDom.FindMember(PrefabDomUtils::LinkIdName); // linkIds are not persistent and will be created dynamically when prefabs are loaded into the editor.
if (linkIdIter != instanceDom.MemberEnd())
{
instanceDom.RemoveMember(PrefabDomUtils::LinkIdName); instanceDom.RemoveMember(PrefabDomUtils::LinkIdName);
} sourceDom.RemoveMember(PrefabDomUtils::LinkIdName);
//we use this to diff our copy against the vanilla template (source template) //we use this to diff our copy against the vanilla template (source template)
PrefabDom patchLink; PrefabDom patchLink;
m_instanceToTemplateInterface->GeneratePatch(patchLink, sourceDom->get(), instanceDom); m_instanceToTemplateInterface->GeneratePatch(patchLink, sourceDom, instanceDom);
// Create a copy of patchLink by providing the allocator of m_linkDomNext so that the patch doesn't become invalid when // Create a copy of patchLink by providing the allocator of m_linkDomNext so that the patch doesn't become invalid when
// the patch goes out of scope in this function. // the patch goes out of scope in this function.

@ -29,7 +29,7 @@
#include <AzToolsFramework/ContainerEntity/ContainerEntityInterface.h> #include <AzToolsFramework/ContainerEntity/ContainerEntityInterface.h>
#include <AzToolsFramework/Entity/EditorEntityContextBus.h> #include <AzToolsFramework/Entity/EditorEntityContextBus.h>
#include <AzToolsFramework/Entity/ReadOnly/ReadOnlyEntityInterface.h> #include <AzToolsFramework/Entity/ReadOnly/ReadOnlyEntityInterface.h>
#include <AzToolsFramework/Prefab/PrefabPublicInterface.h> #include <AzToolsFramework/Prefab/PrefabFocusPublicInterface.h>
#include <AzToolsFramework/ToolsComponents/TransformComponentBus.h> #include <AzToolsFramework/ToolsComponents/TransformComponentBus.h>
#include <AzToolsFramework/ToolsComponents/TransformComponentSerializer.h> #include <AzToolsFramework/ToolsComponents/TransformComponentSerializer.h>
#include <AzToolsFramework/ToolsComponents/EditorInspectorComponentBus.h> #include <AzToolsFramework/ToolsComponents/EditorInspectorComponentBus.h>
@ -963,18 +963,22 @@ namespace AzToolsFramework
if (!m_parentEntityId.IsValid()) if (!m_parentEntityId.IsValid())
{ {
// If Prefabs are enabled, reroute the invalid id to the level root // If Prefabs are enabled, reroute the invalid id to the focused prefab container entity id
bool isPrefabSystemEnabled = false; bool isPrefabSystemEnabled = false;
AzFramework::ApplicationRequests::Bus::BroadcastResult( AzFramework::ApplicationRequests::Bus::BroadcastResult(
isPrefabSystemEnabled, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled); isPrefabSystemEnabled, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
if (isPrefabSystemEnabled) if (isPrefabSystemEnabled)
{ {
auto prefabPublicInterface = AZ::Interface<Prefab::PrefabPublicInterface>::Get(); auto prefabFocusPublicInterface = AZ::Interface<Prefab::PrefabFocusPublicInterface>::Get();
if (prefabPublicInterface) if (prefabFocusPublicInterface)
{ {
m_parentEntityId = prefabPublicInterface->GetLevelInstanceContainerEntityId(); auto editorEntityContextId = AzFramework::EntityContextId::CreateNull();
EditorEntityContextRequestBus::BroadcastResult(
editorEntityContextId, &EditorEntityContextRequests::GetEditorEntityContextId);
m_parentEntityId = prefabFocusPublicInterface->GetFocusedPrefabContainerEntityId(editorEntityContextId);
refreshLevel = AZ::Edit::PropertyRefreshLevels::ValuesOnly; refreshLevel = AZ::Edit::PropertyRefreshLevels::ValuesOnly;
} }
} }

@ -1280,48 +1280,72 @@ namespace Detail
#endif #endif
#define ASSERT_CONSOLE_EXISTS 0
// the following macros allow the help text to be easily stripped out // the following macros allow the help text to be easily stripped out
// Summary: // Summary:
// Preferred way to register a CVar // Preferred way to register a CVar
#define REGISTER_CVAR(_var, _def_val, _flags, _comment) (ASSERT_CONSOLE_EXISTS, gEnv->pConsole == 0 ? 0 : gEnv->pConsole->Register((#_var), &(_var), (_def_val), (_flags), CVARHELP(_comment))) #define REGISTER_CVAR(_var, _def_val, _flags, _comment) \
(gEnv->pConsole == 0 ? 0 : gEnv->pConsole->Register((#_var), &(_var), (_def_val), (_flags), CVARHELP(_comment)))
// Summary: // Summary:
// Preferred way to register a CVar with a callback // Preferred way to register a CVar with a callback
#define REGISTER_CVAR_CB(_var, _def_val, _flags, _comment, _onchangefunction) (ASSERT_CONSOLE_EXISTS, gEnv->pConsole == 0 ? 0 : gEnv->pConsole->Register((#_var), &(_var), (_def_val), (_flags), CVARHELP(_comment), _onchangefunction)) #define REGISTER_CVAR_CB(_var, _def_val, _flags, _comment, _onchangefunction) \
(gEnv->pConsole == 0 ? 0 : gEnv->pConsole->Register((#_var), &(_var), (_def_val), (_flags), CVARHELP(_comment), _onchangefunction))
// Summary: // Summary:
// Preferred way to register a string CVar // Preferred way to register a string CVar
#define REGISTER_STRING(_name, _def_val, _flags, _comment) (ASSERT_CONSOLE_EXISTS, gEnv->pConsole == 0 ? 0 : gEnv->pConsole->RegisterString(_name, (_def_val), (_flags), CVARHELP(_comment))) #define REGISTER_STRING(_name, _def_val, _flags, _comment) \
(gEnv->pConsole == 0 ? 0 : gEnv->pConsole->RegisterString(_name, (_def_val), (_flags), CVARHELP(_comment)))
// Summary: // Summary:
// Preferred way to register a string CVar with a callback // Preferred way to register a string CVar with a callback
#define REGISTER_STRING_CB(_name, _def_val, _flags, _comment, _onchangefunction) (ASSERT_CONSOLE_EXISTS, gEnv->pConsole == 0 ? 0 : gEnv->pConsole->RegisterString(_name, (_def_val), (_flags), CVARHELP(_comment), _onchangefunction)) #define REGISTER_STRING_CB(_name, _def_val, _flags, _comment, _onchangefunction) \
(gEnv->pConsole == 0 ? 0 : gEnv->pConsole->RegisterString(_name, (_def_val), (_flags), CVARHELP(_comment), _onchangefunction))
// Summary: // Summary:
// Preferred way to register an int CVar // Preferred way to register an int CVar
#define REGISTER_INT(_name, _def_val, _flags, _comment) (ASSERT_CONSOLE_EXISTS, gEnv->pConsole == 0 ? 0 : gEnv->pConsole->RegisterInt(_name, (_def_val), (_flags), CVARHELP(_comment))) #define REGISTER_INT(_name, _def_val, _flags, _comment) \
(gEnv->pConsole == 0 ? 0 : gEnv->pConsole->RegisterInt(_name, (_def_val), (_flags), CVARHELP(_comment)))
// Summary: // Summary:
// Preferred way to register an int CVar with a callback // Preferred way to register an int CVar with a callback
#define REGISTER_INT_CB(_name, _def_val, _flags, _comment, _onchangefunction) (ASSERT_CONSOLE_EXISTS, gEnv->pConsole == 0 ? 0 : gEnv->pConsole->RegisterInt(_name, (_def_val), (_flags), CVARHELP(_comment), _onchangefunction)) #define REGISTER_INT_CB(_name, _def_val, _flags, _comment, _onchangefunction) \
(gEnv->pConsole == 0 ? 0 : gEnv->pConsole->RegisterInt(_name, (_def_val), (_flags), CVARHELP(_comment), _onchangefunction))
// Summary: // Summary:
// Preferred way to register a float CVar // Preferred way to register a float CVar
#define REGISTER_FLOAT(_name, _def_val, _flags, _comment) (ASSERT_CONSOLE_EXISTS, gEnv->pConsole == 0 ? 0 : gEnv->pConsole->RegisterFloat(_name, (_def_val), (_flags), CVARHELP(_comment))) #define REGISTER_FLOAT(_name, _def_val, _flags, _comment) \
(gEnv->pConsole == 0 ? 0 : gEnv->pConsole->RegisterFloat(_name, (_def_val), (_flags), CVARHELP(_comment)))
// Summary: // Summary:
// Offers more flexibility but more code is required // Offers more flexibility but more code is required
#define REGISTER_CVAR2(_name, _var, _def_val, _flags, _comment) (ASSERT_CONSOLE_EXISTS, gEnv->pConsole == 0 ? 0 : gEnv->pConsole->Register(_name, _var, (_def_val), (_flags), CVARHELP(_comment))) #define REGISTER_CVAR2(_name, _var, _def_val, _flags, _comment) \
(gEnv->pConsole == 0 ? 0 : gEnv->pConsole->Register(_name, _var, (_def_val), (_flags), CVARHELP(_comment)))
// Summary: // Summary:
// Offers more flexibility but more code is required // Offers more flexibility but more code is required
#define REGISTER_CVAR2_CB(_name, _var, _def_val, _flags, _comment, _onchangefunction) (ASSERT_CONSOLE_EXISTS, gEnv->pConsole == 0 ? 0 : gEnv->pConsole->Register(_name, _var, (_def_val), (_flags), CVARHELP(_comment), _onchangefunction)) #define REGISTER_CVAR2_CB(_name, _var, _def_val, _flags, _comment, _onchangefunction) \
(gEnv->pConsole == 0 ? 0 : gEnv->pConsole->Register(_name, _var, (_def_val), (_flags), CVARHELP(_comment), _onchangefunction))
// Summary: // Summary:
// Offers more flexibility but more code is required, explicit address taking of destination variable // Offers more flexibility but more code is required, explicit address taking of destination variable
#define REGISTER_CVAR3(_name, _var, _def_val, _flags, _comment) (ASSERT_CONSOLE_EXISTS, gEnv->pConsole == 0 ? 0 : gEnv->pConsole->Register(_name, &(_var), (_def_val), (_flags), CVARHELP(_comment))) #define REGISTER_CVAR3(_name, _var, _def_val, _flags, _comment) \
(gEnv->pConsole == 0 ? 0 : gEnv->pConsole->Register(_name, &(_var), (_def_val), (_flags), CVARHELP(_comment)))
// Summary: // Summary:
// Preferred way to register a console command // Preferred way to register a console command
#define REGISTER_COMMAND(_name, _func, _flags, _comment) (ASSERT_CONSOLE_EXISTS, gEnv->pConsole == 0 ? false : gEnv->pConsole->AddCommand(_name, _func, (_flags), CVARHELP(_comment))) #define REGISTER_COMMAND(_name, _func, _flags, _comment) \
(gEnv->pConsole == 0 ? false : gEnv->pConsole->AddCommand(_name, _func, (_flags), CVARHELP(_comment)))
// Summary: // Summary:
// Preferred way to unregister a CVar // Preferred way to unregister a CVar
#define UNREGISTER_CVAR(_name) (ASSERT_CONSOLE_EXISTS, gEnv->pConsole == 0 ? (void)0 : gEnv->pConsole->UnregisterVariable(_name)) #define UNREGISTER_CVAR(_name) \
(gEnv->pConsole == 0 ? (void)0 : gEnv->pConsole->UnregisterVariable(_name))
// Summary:
// Preferred way to unregister a console command // Preferred way to unregister a console command
#define UNREGISTER_COMMAND(_name) (ASSERT_CONSOLE_EXISTS, gEnv->pConsole == 0 ? (void)0 : gEnv->pConsole->RemoveCommand(_name)) #define UNREGISTER_COMMAND(_name) \
(gEnv->pConsole == 0 ? (void)0 : gEnv->pConsole->RemoveCommand(_name))
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// //

@ -106,7 +106,7 @@ typedef uint8 byte;
#ifdef _RELEASE #ifdef _RELEASE
#define __debugbreak() #define __debugbreak()
#else #else
#define __debugbreak() "_asm int 3" #define __debugbreak() asm("int3")
#endif #endif
#define __assume(x) #define __assume(x)

@ -13,7 +13,7 @@ namespace AzTestRunner
{ {
void set_quiet_mode() void set_quiet_mode()
{ {
freopen("/dev/null", "a", stdout); [[maybe_unused]] auto freopenResult = freopen("/dev/null", "a", stdout);
} }
const char* get_current_working_directory() const char* get_current_working_directory()
@ -24,7 +24,7 @@ namespace AzTestRunner
void pause_on_completion() void pause_on_completion()
{ {
system("pause"); [[maybe_unused]] auto systemResult = system("pause");
} }
} }

@ -115,22 +115,22 @@ namespace AZ
const aiMesh* mesh = scene->mMeshes[currentNode->mMeshes[sdkMeshIndex]]; const aiMesh* mesh = scene->mMeshes[currentNode->mMeshes[sdkMeshIndex]];
if(mesh->mTextureCoords[texCoordIndex]) if(mesh->mTextureCoords[texCoordIndex])
{ {
if (mesh->mTextureCoordsNames[texCoordIndex].length > 0) if (mesh->HasTextureCoordsName(texCoordIndex))
{ {
if (!customNameFound) if (!customNameFound)
{ {
name = mesh->mTextureCoordsNames[texCoordIndex].C_Str(); name = mesh->GetTextureCoordsName(texCoordIndex)->C_Str();
customNameFound = true; customNameFound = true;
} }
else else
{ {
AZ_Warning(Utilities::WarningWindow, AZ_Warning(Utilities::WarningWindow,
strcmp(name.c_str(), mesh->mTextureCoordsNames[texCoordIndex].C_Str()) == 0, strcmp(name.c_str(), mesh->GetTextureCoordsName(texCoordIndex)->C_Str()) == 0,
"Node %s has conflicting mesh coordinate names at index %d, %s and %s. Using %s.", "Node %s has conflicting mesh coordinate names at index %d, %s and %s. Using %s.",
currentNode->mName.C_Str(), currentNode->mName.C_Str(),
texCoordIndex, texCoordIndex,
name.c_str(), name.c_str(),
mesh->mTextureCoordsNames[texCoordIndex].C_Str(), mesh->GetTextureCoordsName(texCoordIndex)->C_Str(),
name.c_str()); name.c_str());
} }
} }

@ -8,33 +8,41 @@
"Name": "UserInterface_Compressed", "Name": "UserInterface_Compressed",
"SuppressEngineReduce": true, "SuppressEngineReduce": true,
"PixelFormat": "R8G8B8A8", "PixelFormat": "R8G8B8A8",
"SourceColor": "Linear", "SourceColor": "sRGB",
"DestColor": "Linear" "DestColor": "sRGB"
}, },
"PlatformsPresets": { "PlatformsPresets": {
"android": { "android": {
"UUID": "{2828FBFE-BDF9-45A7-9370-F93822719CCF}", "UUID": "{2828FBFE-BDF9-45A7-9370-F93822719CCF}",
"Name": "UserInterface_Compressed", "Name": "UserInterface_Compressed",
"SuppressEngineReduce": true, "SuppressEngineReduce": true,
"PixelFormat": "ASTC_4x4" "PixelFormat": "ASTC_4x4",
"SourceColor": "sRGB",
"DestColor": "sRGB"
}, },
"ios": { "ios": {
"UUID": "{2828FBFE-BDF9-45A7-9370-F93822719CCF}", "UUID": "{2828FBFE-BDF9-45A7-9370-F93822719CCF}",
"Name": "UserInterface_Compressed", "Name": "UserInterface_Compressed",
"SuppressEngineReduce": true, "SuppressEngineReduce": true,
"PixelFormat": "ASTC_6x6" "PixelFormat": "ASTC_6x6",
"SourceColor": "sRGB",
"DestColor": "sRGB"
}, },
"mac": { "mac": {
"UUID": "{2828FBFE-BDF9-45A7-9370-F93822719CCF}", "UUID": "{2828FBFE-BDF9-45A7-9370-F93822719CCF}",
"Name": "UserInterface_Compressed", "Name": "UserInterface_Compressed",
"SuppressEngineReduce": true, "SuppressEngineReduce": true,
"PixelFormat": "BC1" "PixelFormat": "BC1",
"SourceColor": "sRGB",
"DestColor": "sRGB"
}, },
"provo": { "provo": {
"UUID": "{2828FBFE-BDF9-45A7-9370-F93822719CCF}", "UUID": "{2828FBFE-BDF9-45A7-9370-F93822719CCF}",
"Name": "UserInterface_Compressed", "Name": "UserInterface_Compressed",
"SuppressEngineReduce": true, "SuppressEngineReduce": true,
"PixelFormat": "BC1" "PixelFormat": "BC1",
"SourceColor": "sRGB",
"DestColor": "sRGB"
} }
} }
} }

@ -8,33 +8,41 @@
"Name": "UserInterface_Lossless", "Name": "UserInterface_Lossless",
"SuppressEngineReduce": true, "SuppressEngineReduce": true,
"PixelFormat": "R8G8B8A8", "PixelFormat": "R8G8B8A8",
"SourceColor": "Linear", "SourceColor": "sRGB",
"DestColor": "Linear" "DestColor": "sRGB"
}, },
"PlatformsPresets": { "PlatformsPresets": {
"android": { "android": {
"UUID": "{83003128-F63E-422B-AEC2-68F0A947225F}", "UUID": "{83003128-F63E-422B-AEC2-68F0A947225F}",
"Name": "UserInterface_Lossless", "Name": "UserInterface_Lossless",
"SuppressEngineReduce": true, "SuppressEngineReduce": true,
"PixelFormat": "R8G8B8A8" "PixelFormat": "R8G8B8A8",
"SourceColor": "sRGB",
"DestColor": "sRGB"
}, },
"ios": { "ios": {
"UUID": "{83003128-F63E-422B-AEC2-68F0A947225F}", "UUID": "{83003128-F63E-422B-AEC2-68F0A947225F}",
"Name": "UserInterface_Lossless", "Name": "UserInterface_Lossless",
"SuppressEngineReduce": true, "SuppressEngineReduce": true,
"PixelFormat": "R8G8B8A8" "PixelFormat": "R8G8B8A8",
"SourceColor": "sRGB",
"DestColor": "sRGB"
}, },
"mac": { "mac": {
"UUID": "{83003128-F63E-422B-AEC2-68F0A947225F}", "UUID": "{83003128-F63E-422B-AEC2-68F0A947225F}",
"Name": "UserInterface_Lossless", "Name": "UserInterface_Lossless",
"SuppressEngineReduce": true, "SuppressEngineReduce": true,
"PixelFormat": "R8G8B8A8" "PixelFormat": "R8G8B8A8",
"SourceColor": "sRGB",
"DestColor": "sRGB"
}, },
"provo": { "provo": {
"UUID": "{83003128-F63E-422B-AEC2-68F0A947225F}", "UUID": "{83003128-F63E-422B-AEC2-68F0A947225F}",
"Name": "UserInterface_Lossless", "Name": "UserInterface_Lossless",
"SuppressEngineReduce": true, "SuppressEngineReduce": true,
"PixelFormat": "R8G8B8A8" "PixelFormat": "R8G8B8A8",
"SourceColor": "sRGB",
"DestColor": "sRGB"
} }
} }
} }

@ -21,6 +21,8 @@
#define mallocAligned(sze) _aligned_malloc(sze, 16) #define mallocAligned(sze) _aligned_malloc(sze, 16)
#define freeAligned(ptr) _aligned_free(ptr) #define freeAligned(ptr) _aligned_free(ptr)
AZ_PUSH_DISABLE_WARNING_GCC("-Wunused-value")
/* #################################################################################################################### /* ####################################################################################################################
*/ */
@ -1279,3 +1281,5 @@ namespace ImageProcessingAtom
FilterImage(filterIndex, filterOp, blurH, blurV, srcImg, srcMip, dstImg, dstMip, srcRect, dstRect); FilterImage(filterIndex, filterOp, blurH, blurV, srcImg, srcMip, dstImg, dstMip, srcRect, dstRect);
} }
} }
AZ_POP_DISABLE_WARNING_GCC

@ -1154,7 +1154,7 @@
{ {
"name": "thickness", "name": "thickness",
"displayName": " Thickness", "displayName": " Thickness",
"description": "Normalized global thickness, the maxima between this value (multiplied by thickness map if enabled) and thickness from shadow map (if applicable) will be used as final thickness of pixel", "description": "In thick transmission mode: Normalized global thickness, the maxima between this value (multiplied by thickness map if enabled) and thickness from shadow map (if applicable) will be used as final thickness of pixel\n\nIn thin transmission mode: This value modulates the distance traversed by light inside an object.",
"type": "float", "type": "float",
"defaultValue": 0.5, "defaultValue": 0.5,
"min": 0.0, "min": 0.0,
@ -1223,14 +1223,41 @@
"min": 0.0, "min": 0.0,
"softMax": 20.0 "softMax": 20.0
}, },
{
"name": "shrinkFactor",
"displayName": " Shrink Factor",
"description": "Shrink (absolute) offset towards the normal opposite direction to ensure correct shadow map projection",
"type": "float",
"defaultValue": 0.005,
"min": 0.0,
"softMax": 0.05
},
{
"name": "transmissionNdLBias",
"displayName": " Angle Bias",
"description": "cosine of angle to extend below (N . L = 0) in scattering through thin objects",
"type": "float",
"defaultValue": 0.1,
"min": -1.0,
"softMax": 1.0
},
{
"name": "distanceAttenuation",
"displayName": " Distance Attenuation",
"description": "Attenuation of the transmission effect, used to hide artifacts due to low-res shadow maps\nFor directional lights: attenuation proportional to the distance from the object to the camera.\nFor other light sources: attenuation proportional to the distance from the object to the light source.",
"type": "float",
"defaultValue": 0.5,
"min": 0.0,
"softMax": 4.0
},
{ {
"name": "transmissionScale", "name": "transmissionScale",
"displayName": " Scale", "displayName": " Scale",
"description": "Strength of transmission", "description": "Strength of transmission",
"type": "float", "type": "float",
"defaultValue": 3.0, "defaultValue": 1.0,
"min": 0.0, "min": 0.0,
"softMax": 20.0 "softMax": 5.0
} }
], ],
"detailLayerGroup": [ "detailLayerGroup": [
@ -1555,6 +1582,9 @@
"power": "subsurfaceScattering.transmissionPower", "power": "subsurfaceScattering.transmissionPower",
"distortion": "subsurfaceScattering.transmissionDistortion", "distortion": "subsurfaceScattering.transmissionDistortion",
"attenuation": "subsurfaceScattering.transmissionAttenuation", "attenuation": "subsurfaceScattering.transmissionAttenuation",
"shrinkFactor": "subsurfaceScattering.shrinkFactor",
"transmissionNdLBias": "subsurfaceScattering.transmissionNdLBias",
"distanceAttenuation": "subsurfaceScattering.distanceAttenuation",
"tintColor": "subsurfaceScattering.transmissionTint", "tintColor": "subsurfaceScattering.transmissionTint",
"thickness": "subsurfaceScattering.thickness", "thickness": "subsurfaceScattering.thickness",
"enabled": "subsurfaceScattering.enableSubsurfaceScattering", "enabled": "subsurfaceScattering.enableSubsurfaceScattering",

@ -93,7 +93,7 @@ ShaderResourceGroup MaterialSrg : SRG_PerMaterial
// Elements of m_transmissionParams: // Elements of m_transmissionParams:
// Thick object mode: (attenuation coefficient, power, distortion, scale) // Thick object mode: (attenuation coefficient, power, distortion, scale)
// Thin object mode: (float3 scatter distance, scale) // Thin object mode: (shrinkFactor, transmissionNdLBias, distanceAttenuation, scale)
float4 m_transmissionParams; float4 m_transmissionParams;
// (float3 TintColor, thickness) // (float3 TintColor, thickness)

@ -243,6 +243,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float
surface.transmission.tint = transmissionTintThickness.rgb; surface.transmission.tint = transmissionTintThickness.rgb;
surface.transmission.thickness = transmissionTintThickness.w; surface.transmission.thickness = transmissionTintThickness.w;
surface.transmission.transmissionParams = MaterialSrg::m_transmissionParams; surface.transmission.transmissionParams = MaterialSrg::m_transmissionParams;
surface.transmission.scatterDistance = MaterialSrg::m_scatterDistance;
// ------- Anisotropy ------- // ------- Anisotropy -------
@ -275,6 +276,17 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float
lightingData.diffuseAmbientOcclusion = GetOcclusionInput(MaterialSrg::m_diffuseOcclusionMap, MaterialSrg::m_sampler, IN.m_uv[MaterialSrg::m_diffuseOcclusionMapUvIndex], MaterialSrg::m_diffuseOcclusionFactor, o_diffuseOcclusion_useTexture); lightingData.diffuseAmbientOcclusion = GetOcclusionInput(MaterialSrg::m_diffuseOcclusionMap, MaterialSrg::m_sampler, IN.m_uv[MaterialSrg::m_diffuseOcclusionMapUvIndex], MaterialSrg::m_diffuseOcclusionFactor, o_diffuseOcclusion_useTexture);
lightingData.specularOcclusion = GetOcclusionInput(MaterialSrg::m_specularOcclusionMap, MaterialSrg::m_sampler, IN.m_uv[MaterialSrg::m_specularOcclusionMapUvIndex], MaterialSrg::m_specularOcclusionFactor, o_specularOcclusion_useTexture); lightingData.specularOcclusion = GetOcclusionInput(MaterialSrg::m_specularOcclusionMap, MaterialSrg::m_sampler, IN.m_uv[MaterialSrg::m_specularOcclusionMapUvIndex], MaterialSrg::m_specularOcclusionFactor, o_specularOcclusion_useTexture);
// ------- Thin Object Light Transmission -------
// Shrink (absolute) offset towards the normal opposite direction to ensure correct shadow map projection
lightingData.shrinkFactor = surface.transmission.transmissionParams.x;
// Angle offset for subsurface scattering through thin objects
lightingData.transmissionNdLBias = surface.transmission.transmissionParams.y;
// Attenuation applied to hide artifacts due to low-res shadow maps
lightingData.distanceAttenuation = surface.transmission.transmissionParams.z;
// ------- Clearcoat ------- // ------- Clearcoat -------
// [GFX TODO][ATOM-14603]: Clean up the double uses of these clear coat flags // [GFX TODO][ATOM-14603]: Clean up the double uses of these clear coat flags

@ -92,23 +92,34 @@ function ProcessEditor(context)
-- Update visibility for transmission... -- Update visibility for transmission...
local transmissionEnabled = TransmissionMode_None ~= context:GetMaterialPropertyValue_enum("subsurfaceScattering.transmissionMode") local thickTransmissionEnabled = TransmissionMode_ThickObject == context:GetMaterialPropertyValue_enum("subsurfaceScattering.transmissionMode")
local thinTransmissionEnabled = TransmissionMode_ThinObject == context:GetMaterialPropertyValue_enum("subsurfaceScattering.transmissionMode")
local commonTrasmissionVisibility local commonTrasmissionVisibility = MaterialPropertyVisibility_Hidden
if(transmissionEnabled) then local thickTransmissionVisibility = MaterialPropertyVisibility_Hidden
local thinTransmissionVisibility = MaterialPropertyVisibility_Hidden
if (thickTransmissionEnabled or thinTransmissionEnabled) then
commonTrasmissionVisibility = MaterialPropertyVisibility_Enabled commonTrasmissionVisibility = MaterialPropertyVisibility_Enabled
else
commonTrasmissionVisibility = MaterialPropertyVisibility_Hidden if(thickTransmissionEnabled) then
thickTransmissionVisibility = MaterialPropertyVisibility_Enabled
else -- thin transmission enabled
thinTransmissionVisibility = MaterialPropertyVisibility_Enabled
end
end end
context:SetMaterialPropertyVisibility("subsurfaceScattering.thickness", commonTrasmissionVisibility) context:SetMaterialPropertyVisibility("subsurfaceScattering.thickness", commonTrasmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.thicknessMap", commonTrasmissionVisibility) context:SetMaterialPropertyVisibility("subsurfaceScattering.thicknessMap", commonTrasmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionTint", commonTrasmissionVisibility) context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionTint", commonTrasmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionPower", commonTrasmissionVisibility) context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionPower", thickTransmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionDistortion", commonTrasmissionVisibility) context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionDistortion", thickTransmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionAttenuation", commonTrasmissionVisibility) context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionAttenuation", thickTransmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.shrinkFactor", thinTransmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionNdLBias", thinTransmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.distanceAttenuation", thinTransmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionScale", commonTrasmissionVisibility) context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionScale", commonTrasmissionVisibility)
UpdateTextureDependentPropertyVisibility(context, transmissionEnabled, "subsurfaceScattering.thicknessMap", "subsurfaceScattering.useThicknessMap", "subsurfaceScattering.thicknessMapUv")
UpdateTextureDependentPropertyVisibility(context, thickTransmissionEnabled or thinTransmissionEnabled, "subsurfaceScattering.thicknessMap", "subsurfaceScattering.useThicknessMap", "subsurfaceScattering.thicknessMapUv")
end end

@ -325,6 +325,7 @@ PbrLightingOutput SkinPS_Common(VSOutput IN)
surface.transmission.tint = transmissionTintThickness.rgb; surface.transmission.tint = transmissionTintThickness.rgb;
surface.transmission.thickness = transmissionTintThickness.w; surface.transmission.thickness = transmissionTintThickness.w;
surface.transmission.transmissionParams = MaterialSrg::m_transmissionParams; surface.transmission.transmissionParams = MaterialSrg::m_transmissionParams;
surface.transmission.scatterDistance = MaterialSrg::m_scatterDistance;
// ------- Lighting Data ------- // ------- Lighting Data -------
@ -341,6 +342,17 @@ PbrLightingOutput SkinPS_Common(VSOutput IN)
lightingData.specularResponse = FresnelSchlickWithRoughness(lightingData.NdotV, surface.specularF0, surface.roughnessLinear); lightingData.specularResponse = FresnelSchlickWithRoughness(lightingData.NdotV, surface.specularF0, surface.roughnessLinear);
lightingData.diffuseResponse = 1.0 - lightingData.specularResponse; lightingData.diffuseResponse = 1.0 - lightingData.specularResponse;
// ------- Thin Object Light Transmission -------
// Shrink (absolute) offset towards the normal opposite direction to ensure correct shadow map projection
lightingData.shrinkFactor = surface.transmission.transmissionParams.x;
// Angle offset for subsurface scattering through thin objects
lightingData.transmissionNdLBias = surface.transmission.transmissionParams.y;
// Attenuation applied to hide artifacts due to low-res shadow maps
lightingData.distanceAttenuation = surface.transmission.transmissionParams.z;
// ------- Occlusion ------- // ------- Occlusion -------
lightingData.diffuseAmbientOcclusion = GetOcclusionInput(MaterialSrg::m_diffuseOcclusionMap, MaterialSrg::m_sampler, IN.m_uv[MaterialSrg::m_diffuseOcclusionMapUvIndex], MaterialSrg::m_diffuseOcclusionFactor, o_diffuseOcclusion_useTexture); lightingData.diffuseAmbientOcclusion = GetOcclusionInput(MaterialSrg::m_diffuseOcclusionMap, MaterialSrg::m_sampler, IN.m_uv[MaterialSrg::m_diffuseOcclusionMapUvIndex], MaterialSrg::m_diffuseOcclusionFactor, o_diffuseOcclusion_useTexture);

@ -568,7 +568,7 @@
{ {
"name": "thickness", "name": "thickness",
"displayName": " Thickness", "displayName": " Thickness",
"description": "Normalized global thickness, the maxima between this value (multiplied by thickness map if enabled) and thickness from shadow map (if applicable) will be used as final thickness of pixel", "description": "In thick transmission mode: Normalized global thickness, the maxima between this value (multiplied by thickness map if enabled) and thickness from shadow map (if applicable) will be used as final thickness of pixel\n\nIn thin transmission mode: This value modulates the distance traversed by light inside an object.",
"type": "float", "type": "float",
"defaultValue": 0.5, "defaultValue": 0.5,
"min": 0.0, "min": 0.0,
@ -637,14 +637,41 @@
"min": 0.0, "min": 0.0,
"softMax": 20.0 "softMax": 20.0
}, },
{
"name": "shrinkFactor",
"displayName": " Shrink Factor",
"description": "Shrink (absolute) offset towards the normal opposite direction to ensure correct shadow map projection",
"type": "float",
"defaultValue": 0.005,
"min": 0.0,
"softMax": 0.05
},
{
"name": "transmissionNdLBias",
"displayName": " Angle Bias",
"description": "cosine of angle to extend below (N . L = 0) in scattering through thin objects",
"type": "float",
"defaultValue": 0.1,
"min": -1.0,
"softMax": 1.0
},
{
"name": "distanceAttenuation",
"displayName": " Distance Attenuation",
"description": "Attenuation of the transmission effect, used to hide artifacts due to low-res shadow maps\nFor directional lights: attenuation proportional to the distance from the object to the camera.\nFor other light sources: attenuation proportional to the distance from the object to the light source.",
"type": "float",
"defaultValue": 0.5,
"min": 0.0,
"softMax": 4.0
},
{ {
"name": "transmissionScale", "name": "transmissionScale",
"displayName": " Scale", "displayName": " Scale",
"description": "Strength of transmission", "description": "Strength of transmission",
"type": "float", "type": "float",
"defaultValue": 3.0, "defaultValue": 1.0,
"min": 0.0, "min": 0.0,
"softMax": 20.0 "softMax": 5.0
} }
], ],
"wrinkleLayers": [ "wrinkleLayers": [
@ -1011,6 +1038,9 @@
"power": "subsurfaceScattering.transmissionPower", "power": "subsurfaceScattering.transmissionPower",
"distortion": "subsurfaceScattering.transmissionDistortion", "distortion": "subsurfaceScattering.transmissionDistortion",
"attenuation": "subsurfaceScattering.transmissionAttenuation", "attenuation": "subsurfaceScattering.transmissionAttenuation",
"shrinkFactor": "subsurfaceScattering.shrinkFactor",
"transmissionNdLBias": "subsurfaceScattering.transmissionNdLBias",
"distanceAttenuation": "subsurfaceScattering.distanceAttenuation",
"tintColor": "subsurfaceScattering.transmissionTint", "tintColor": "subsurfaceScattering.transmissionTint",
"thickness": "subsurfaceScattering.thickness", "thickness": "subsurfaceScattering.thickness",
"enabled": "subsurfaceScattering.enableSubsurfaceScattering", "enabled": "subsurfaceScattering.enableSubsurfaceScattering",

@ -22,6 +22,10 @@
#include "MaterialInputs/UvSetCount.azsli" #include "MaterialInputs/UvSetCount.azsli"
#include "MaterialInputs/DetailMapsInput.azsli" #include "MaterialInputs/DetailMapsInput.azsli"
// Use human skin profile for thin object transmission (if enabled)
// Remove this line to use a custom profile based on the scatter color
#define USE_HUMAN_SKIN_PROFILE
ShaderResourceGroup MaterialSrg : SRG_PerMaterial ShaderResourceGroup MaterialSrg : SRG_PerMaterial
{ {
// Auto-generate material SRG fields for common inputs // Auto-generate material SRG fields for common inputs
@ -64,7 +68,7 @@ ShaderResourceGroup MaterialSrg : SRG_PerMaterial
// Elements of m_transmissionParams: // Elements of m_transmissionParams:
// Thick object mode: (attenuation coefficient, power, distortion, scale) // Thick object mode: (attenuation coefficient, power, distortion, scale)
// Thin object mode: (float3 scatter distance, scale) // Thin object mode: (shrinkFactor, transmissionNdLBias, distanceAttenuation, scale)
float4 m_transmissionParams; float4 m_transmissionParams;
// (float3 TintColor, thickness) // (float3 TintColor, thickness)

@ -16,24 +16,28 @@
#include <Atom/Features/PBR/LightingOptions.azsli> #include <Atom/Features/PBR/LightingOptions.azsli>
// Analytical integation (approximation) of diffusion profile over radius, could be replaced by other pre integrated kernels // Analytical integation (approximation) of diffusion profile over radius, could be replaced by other pre integrated kernels
// such as sum of Gaussian // such as sum of Gaussian (see T(s))
float3 TransmissionKernel(float t, float3 s) float3 TransmissionKernel(float t, float3 s)
{ {
float3 exponent = s * t; float3 exponent = s * t;
return 0.25 * (1.0 / exp(exponent) + 3.0 / exp(exponent / 3.0)); return 0.25 * (1.0 / exp(exponent) + 3.0 / exp(exponent / 3.0));
} }
float ThinObjectFalloff(const float3 surfaceNormal, const float3 dirToLight) // [specific profile for human skin]
// Analytical integation (approximation) of diffusion profile over radius, could be precomputed in a LUT
// From d'Eon and Luebke (https://developer.nvidia.com/gpugems/gpugems3/part-iii-rendering/chapter-14-advanced-techniques-realistic-real-time-skin, section 14.4.7)
float3 T(float s)
{ {
const float ndl = saturate(dot(-surfaceNormal, dirToLight)); // dipoles and multipoles are approximated with sums of a small number of Gaussians with variable weights and variances
return float3(0.233, 0.455, 0.649) * exp(-s*s/0.0064) +
// ndl works decently well but it can produce a harsh discontinuity in the area just before float3(0.1, 0.336, 0.344) * exp(-s*s/0.0484) +
// the shadow starts appearing on objects like cylinder and tubes. float3(0.118, 0.198, 0.0) * exp(-s*s/0.187) +
// Smoothing out ndl does a decent enough job of removing this artifact. float3(0.113, 0.007, 0.007) * exp(-s*s/0.567) +
return smoothstep(0, 1, ndl * ndl); float3(0.358, 0.004, 0.0) * exp(-s*s/1.99) +
float3(0.078, 0.0, 0.0) * exp(-s*s/7.41);
} }
float3 GetBackLighting(Surface surface, LightingData lightingData, float3 lightIntensity, float3 dirToLight, float shadowRatio) float3 GetBackLighting(Surface surface, LightingData lightingData, float3 lightIntensity, float3 dirToLight, float transmissionDistance, float attenuationDistance)
{ {
float3 result = float3(0.0, 0.0, 0.0); float3 result = float3(0.0, 0.0, 0.0);
@ -52,7 +56,7 @@ float3 GetBackLighting(Surface surface, LightingData lightingData, float3 lightI
// https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/ // https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/
{ {
thickness = max(shadowRatio, surface.transmission.thickness); thickness = max(transmissionDistance, surface.transmission.thickness);
float transmittance = pow( saturate( dot( lightingData.dirToCamera, -normalize( dirToLight + surface.normal * transmissionParams.z ) ) ), transmissionParams.y ) * transmissionParams.w; float transmittance = pow( saturate( dot( lightingData.dirToCamera, -normalize( dirToLight + surface.normal * transmissionParams.z ) ) ), transmissionParams.y ) * transmissionParams.w;
float lamberAttenuation = exp(-thickness * transmissionParams.x) * saturate(1.0 - thickness); float lamberAttenuation = exp(-thickness * transmissionParams.x) * saturate(1.0 - thickness);
result = transmittance * lamberAttenuation * lightIntensity; result = transmittance * lamberAttenuation * lightIntensity;
@ -60,18 +64,39 @@ float3 GetBackLighting(Surface surface, LightingData lightingData, float3 lightI
break; break;
case TransmissionMode::ThinObject: case TransmissionMode::ThinObject:
// Thin object mode, using thin-film assumption proposed by Jimenez J. et al, 2010, "Real-Time Realistic Skin Translucency" // Thin object mode, based on Jimenez J. et al, 2010, "Real-Time Realistic Skin Translucency"
// http://www.iryoku.com/translucency/downloads/Real-Time-Realistic-Skin-Translucency.pdf // http://www.iryoku.com/translucency/downloads/Real-Time-Realistic-Skin-Translucency.pdf
float litRatio = 1.0 - shadowRatio;
if (litRatio)
{ {
const float thickness = surface.transmission.thickness * transmissionParams.w; // transmissionDistance < 0.0f means shadows are not enabled --> avoid unnecessary computation
const float3 invScattering = rcp(transmissionParams.xyz); if (transmissionDistance < 0.0f)
const float falloff = ThinObjectFalloff(surface.normal, dirToLight); {
result = TransmissionKernel(thickness, invScattering) * falloff * lightIntensity * litRatio; break;
} }
// Irradiance arround surface point.
// Albedo at front (surface point) is used to approximate irradiance at the back of the object (observation 4 in [Jimenez J. et al, 2010])
// Increase angle of influence to smooth transition regions
float3 E = surface.albedo * saturate(lightingData.transmissionNdLBias + dot(-surface.normal, dirToLight));
// Transmission distance modulated by hardcoded constant C and the thickness exposed parameter (in this case modulating the distance traversed by the light inside the object)
const float C = 300.0f;
float s = transmissionDistance * C * surface.transmission.thickness;
// Use scattering color to weight thin object transmission color
const float3 invScattering = rcp(max(surface.transmission.scatterDistance, float(0.00001)));
#ifndef USE_HUMAN_SKIN_PROFILE
// Generic profile based on scatter color
result = TransmissionKernel(s, invScattering) * lightIntensity * E * transmissionParams.w;
#else // USE_HUMAN_SKIN_PROFILE
// Profile specific to human skin
result = T(s) * lightIntensity * E * transmissionParams.w;
#endif
// Distance attenuation applied to hide artifacts due to low-res projected areas onto shadowmaps (might need some work in the future)
result /= max(1.0, attenuationDistance * attenuationDistance * lightingData.distanceAttenuation);
}
break; break;
} }

@ -28,6 +28,15 @@ class LightingData
// Direction light shadow coordinates // Direction light shadow coordinates
float3 shadowCoords[ViewSrg::MaxCascadeCount]; float3 shadowCoords[ViewSrg::MaxCascadeCount];
// (N . L) to accept below (N . L = 0) in scattering through thin objects
float transmissionNdLBias;
// Shrink (absolute) offset towards the normal opposite direction to ensure correct shadow map projection
float shrinkFactor;
// Attenuation applied to hide artifacts due to low-res shadow maps
float distanceAttenuation;
// Normalized direction from surface to camera // Normalized direction from surface to camera
float3 dirToCamera; float3 dirToCamera;

@ -135,8 +135,15 @@ void ApplyCapsuleLight(ViewSrg::CapsuleLight light, Surface surface, inout Light
float3 closestIntersectionPoint = startPoint + closestT * startToEnd; float3 closestIntersectionPoint = startPoint + closestT * startToEnd;
float3 posToLight = closestIntersectionPoint - surface.position; float3 posToLight = closestIntersectionPoint - surface.position;
// Tranmission contribution // Transmission contribution
lightingData.translucentBackLighting += GetBackLighting(surface, lightingData, lightIntensity, normalize(posToLight), 0.0); // We cannot compute the actual transmission distance so we want to:
// - If transmission mode is thick object -> use transmission thickness parameter instead
// - If transmission mode is thin object -> ignore back lighting
// To detect and apply this behavior in the GetBackLighting function, we need to use a negative transmissionDistance
const float transmissionDistance = -1.0f;
// If the transmissionDistance is ignored then the attenuation distance (only used on thin objects) does not have any influence
const float attenuationDistance = 0.0f;
lightingData.translucentBackLighting += GetBackLighting(surface, lightingData, lightIntensity, normalize(posToLight), transmissionDistance, attenuationDistance);
// Calculate the offset from the nearest point on the reflection vector to the nearest point on the capsule light // Calculate the offset from the nearest point on the reflection vector to the nearest point on the capsule light
float3 posToClosestPointAlongReflection = dot(posToLight, reflectionDir) * reflectionDir; float3 posToClosestPointAlongReflection = dot(posToLight, reflectionDir) * reflectionDir;

@ -18,7 +18,13 @@ void ApplyDirectionalLights(Surface surface, inout LightingData lightingData)
// Shadowed check // Shadowed check
const uint shadowIndex = ViewSrg::m_shadowIndexDirectionalLight; const uint shadowIndex = ViewSrg::m_shadowIndexDirectionalLight;
float litRatio = 1.0f; float litRatio = 1.0f;
float backShadowRatio = 0.0f; float camToSurfDist = distance(ViewSrg::m_worldPosition, surface.position);
// Distance travelled by the light inside the object. If not redefined to a non-negative value, it will take the following behavior:
// - If transmission mode is thick object -> use transmission thickness parameter instead
// - If transmission mode is thin object -> ignore back lighting
float transmissionDistance = -1.0f;
if (o_enableShadows && shadowIndex < SceneSrg::m_directionalLightCount) if (o_enableShadows && shadowIndex < SceneSrg::m_directionalLightCount)
{ {
litRatio = DirectionalLightShadow::GetVisibility( litRatio = DirectionalLightShadow::GetVisibility(
@ -30,7 +36,19 @@ void ApplyDirectionalLights(Surface surface, inout LightingData lightingData)
#if ENABLE_TRANSMISSION #if ENABLE_TRANSMISSION
if (o_transmission_mode == TransmissionMode::ThickObject) if (o_transmission_mode == TransmissionMode::ThickObject)
{ {
backShadowRatio = DirectionalLightShadow::GetThickness(shadowIndex, lightingData.shadowCoords); transmissionDistance = DirectionalLightShadow::GetThickness(shadowIndex, lightingData.shadowCoords);
}
else if (o_transmission_mode == TransmissionMode::ThinObject)
{
// Fetch and use shrinked positions for thin object transmission to ensure they fall onto the object when querying
DirectionalLightShadow::GetShadowCoords(
shadowIndex,
surface.position - lightingData.shrinkFactor * surface.vertexNormal,
surface.normal,
lightingData.shadowCoords);
// the depth from the shadow map
transmissionDistance = DirectionalLightShadow::GetThickness(shadowIndex, lightingData.shadowCoords);
} }
#endif #endif
} }
@ -52,23 +70,20 @@ void ApplyDirectionalLights(Surface surface, inout LightingData lightingData)
// [GFX TODO][ATOM-2012] care of multiple directional light // [GFX TODO][ATOM-2012] care of multiple directional light
// Currently shadow check is done only for index == shadowIndex. // Currently shadow check is done only for index == shadowIndex.
float currentLitRatio = 1.0f; float currentLitRatio = 1.0f;
float currentBackShadowRatio = 1.0f; float currentTransmissionDistance = -1.0f;
if (o_enableShadows)
{
currentLitRatio = (index == shadowIndex) ? litRatio : 1.;
currentBackShadowRatio = 1.0 - currentLitRatio; if (o_enableShadows && index == shadowIndex)
#if ENABLE_TRANSMISSION
if (o_transmission_mode == TransmissionMode::ThickObject)
{ {
currentBackShadowRatio = (index == shadowIndex) ? backShadowRatio : 0.; // Add contribution only if current directional light is the active one for shadows
} currentLitRatio = litRatio;
#endif currentTransmissionDistance = transmissionDistance;
} }
// Transmission contribution
lightingData.translucentBackLighting += GetBackLighting(surface, lightingData, light.m_rgbIntensityLux, dirToLight, currentTransmissionDistance, camToSurfDist);
lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, light.m_rgbIntensityLux, dirToLight) * currentLitRatio; lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, light.m_rgbIntensityLux, dirToLight) * currentLitRatio;
lightingData.specularLighting += GetSpecularLighting(surface, lightingData, light.m_rgbIntensityLux, dirToLight) * currentLitRatio; lightingData.specularLighting += GetSpecularLighting(surface, lightingData, light.m_rgbIntensityLux, dirToLight) * currentLitRatio;
lightingData.translucentBackLighting += GetBackLighting(surface, lightingData, light.m_rgbIntensityLux, dirToLight, currentBackShadowRatio);
} }
// Add debug coloring for directional light shadow // Add debug coloring for directional light shadow

@ -77,8 +77,11 @@ void ApplyDiskLight(ViewSrg::DiskLight light, Surface surface, inout LightingDat
// shadow // shadow
float litRatio = 1.0; float litRatio = 1.0;
// How much is back face shadowed, it's set to the reverse of litRatio to share the same default value with thickness, which should be 0 if no shadow map available // Distance travelled by the light inside the object. If not redefined to a non-negative value, it will take the following behavior:
float backShadowRatio = 0.0; // - If transmission mode is thick object -> use transmission thickness parameter instead
// - If transmission mode is thin object -> ignore back lighting
float transmissionDistance = -1.0f;
if (o_enableShadows) if (o_enableShadows)
{ {
litRatio = ProjectedShadow::GetVisibility( litRatio = ProjectedShadow::GetVisibility(
@ -88,14 +91,16 @@ void ApplyDiskLight(ViewSrg::DiskLight light, Surface surface, inout LightingDat
-dirToConeTip, -dirToConeTip,
surface.vertexNormal); surface.vertexNormal);
// Use backShadowRatio to carry thickness from shadow map for thick mode
backShadowRatio = 1.0 - litRatio; // o_transmission_mode == NONE is not taken into account because GetBackLighting already ignores this case
#if ENABLE_TRANSMISSION #if ENABLE_TRANSMISSION
if (o_transmission_mode == TransmissionMode::ThickObject) if (o_transmission_mode == TransmissionMode::ThickObject)
{ {
backShadowRatio = ProjectedShadow::GetThickness( transmissionDistance = ProjectedShadow::GetThickness(light.m_shadowIndex, surface.position);
light.m_shadowIndex, }
surface.position); else if (o_transmission_mode == TransmissionMode::ThinObject)
{
transmissionDistance = ProjectedShadow::GetThickness(light.m_shadowIndex, surface.position - lightingData.shrinkFactor * surface.vertexNormal);
} }
#endif #endif
} }
@ -115,7 +120,7 @@ void ApplyDiskLight(ViewSrg::DiskLight light, Surface surface, inout LightingDat
lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, lightIntensity, posToLightDir) * litRatio; lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, lightIntensity, posToLightDir) * litRatio;
// Transmission contribution // Transmission contribution
lightingData.translucentBackLighting += GetBackLighting(surface, lightingData, lightIntensity, posToLightDir, backShadowRatio); lightingData.translucentBackLighting += GetBackLighting(surface, lightingData, lightIntensity, posToLightDir, transmissionDistance, distanceToLight2);
// Adjust the light direction for specular based on disk size // Adjust the light direction for specular based on disk size

@ -46,6 +46,16 @@ void AddSampleContribution(
float3 intensityRgb = float3(intensity, intensity, intensity); float3 intensityRgb = float3(intensity, intensity, intensity);
diffuseAcc += GetDiffuseLighting(surface, lightingData, intensityRgb, posToLightSampleDir); diffuseAcc += GetDiffuseLighting(surface, lightingData, intensityRgb, posToLightSampleDir);
translucentAcc += GetBackLighting(surface, lightingData, intensityRgb, posToLightSampleDir, 0.0);
// Transmission contribution
// We cannot compute the actual transmission distance so we want to:
// - If transmission mode is thick object -> use transmission thickness parameter instead
// - If transmission mode is thin object -> ignore back lighting
// To detect and apply this behavior in the GetBackLighting function, we need to use a negative transmissionDistance
const float transmissionDistance = -1.0f;
// If the transmissionDistance is ignored then the attenuation distance (only used on thin objects) does not have any influence
const float attenuationDistance = 0.0f;
translucentAcc += GetBackLighting(surface, lightingData, intensityRgb, posToLightSampleDir, transmissionDistance, attenuationDistance);
specularAcc += GetSpecularLighting(surface, lightingData, intensityRgb, posToLightSampleDir); specularAcc += GetSpecularLighting(surface, lightingData, intensityRgb, posToLightSampleDir);
} }

@ -67,6 +67,7 @@ uint ComputeShadowIndex(const ViewSrg::PointLight light, const Surface surface)
void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingData lightingData) void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingData lightingData)
{ {
float3 posToLight = light.m_position - surface.position; float3 posToLight = light.m_position - surface.position;
float posToLightDist = length(posToLight);
float d2 = dot(posToLight, posToLight); // light distance squared float d2 = dot(posToLight, posToLight); // light distance squared
float falloff = d2 * light.m_invAttenuationRadiusSquared; float falloff = d2 * light.m_invAttenuationRadiusSquared;
@ -84,8 +85,11 @@ void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingD
// shadow // shadow
float litRatio = 1.0; float litRatio = 1.0;
// How much is back face shadowed, it's set to the reverse of litRatio to share the same default value with thickness, which should be 0 if no shadow map available // Distance travelled by the light inside the object. If not redefined to a non-negative value, it will take the following behavior:
float backShadowRatio = 0.0; // - If transmission mode is thick object -> use transmission thickness parameter instead
// - If transmission mode is thin object -> ignore back lighting
float transmissionDistance = -1.0f;
if (o_enableShadows) if (o_enableShadows)
{ {
const float3 lightDir = normalize(light.m_position - surface.position); const float3 lightDir = normalize(light.m_position - surface.position);
@ -97,14 +101,15 @@ void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingD
lightDir, lightDir,
surface.vertexNormal); surface.vertexNormal);
// Use backShadowRatio to carry thickness from shadow map for thick mode
backShadowRatio = 1.0 - litRatio;
#if ENABLE_TRANSMISSION #if ENABLE_TRANSMISSION
// o_transmission_mode == NONE is not taken into account because GetBackLighting already ignores this case
if (o_transmission_mode == TransmissionMode::ThickObject) if (o_transmission_mode == TransmissionMode::ThickObject)
{ {
backShadowRatio = ProjectedShadow::GetThickness( transmissionDistance = ProjectedShadow::GetThickness(shadowIndex, surface.position);
shadowIndex, }
surface.position); else if (o_transmission_mode == TransmissionMode::ThinObject)
{
transmissionDistance = ProjectedShadow::GetThickness(shadowIndex, surface.position - lightingData.shrinkFactor * surface.vertexNormal);
} }
#endif #endif
} }
@ -113,7 +118,7 @@ void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingD
lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, lightIntensity, normalize(posToLight)) * litRatio; lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, lightIntensity, normalize(posToLight)) * litRatio;
// Transmission contribution // Transmission contribution
lightingData.translucentBackLighting += GetBackLighting(surface, lightingData, lightIntensity, normalize(posToLight), backShadowRatio); lightingData.translucentBackLighting += GetBackLighting(surface, lightingData, lightIntensity, normalize(posToLight), transmissionDistance, posToLightDist);
// Adjust the light direcion for specular based on bulb size // Adjust the light direcion for specular based on bulb size

@ -148,13 +148,21 @@ void ApplyQuadLight(ViewSrg::QuadLight light, Surface surface, inout LightingDat
GetDiffuseLighting(surface, lightingData, intensity, dirToLightCenter) GetDiffuseLighting(surface, lightingData, intensity, dirToLightCenter)
); );
// Transmission contribution
// We cannot compute the actual transmission distance so we want to:
// - If transmission mode is thick object -> use transmission thickness parameter instead
// - If transmission mode is thin object -> ignore back lighting
// To detect and apply this behavior in the GetBackLighting function, we need to use a negative transmissionDistance
const float transmissionDistance = -1.0f;
// If the transmissionDistance is ignored then the attenuation distance (only used on thin objects) does not have any influence
const float attenuationDistance = 0.0f;
lightingData.translucentBackLighting += lightingData.translucentBackLighting +=
( (
GetBackLighting(surface, lightingData, intensity, p0, 0.0) + GetBackLighting(surface, lightingData, intensity, p0, transmissionDistance, attenuationDistance) +
GetBackLighting(surface, lightingData, intensity, p1, 0.0) + GetBackLighting(surface, lightingData, intensity, p1, transmissionDistance, attenuationDistance) +
GetBackLighting(surface, lightingData, intensity, p2, 0.0) + GetBackLighting(surface, lightingData, intensity, p2, transmissionDistance, attenuationDistance) +
GetBackLighting(surface, lightingData, intensity, p3, 0.0) + GetBackLighting(surface, lightingData, intensity, p3, transmissionDistance, attenuationDistance) +
GetBackLighting(surface, lightingData, intensity, dirToLightCenter, 0.0) GetBackLighting(surface, lightingData, intensity, dirToLightCenter, transmissionDistance, attenuationDistance)
); );
// Calculate specular by choosing a single representative point on the light's surface based on the reflection ray // Calculate specular by choosing a single representative point on the light's surface based on the reflection ray

@ -14,7 +14,8 @@ class TransmissionSurfaceData
{ {
float3 tint; float3 tint;
float thickness; //!< pre baked local thickness, used for transmission float thickness; //!< pre baked local thickness, used for transmission
float4 transmissionParams; //!< parameters: thick mode->(attenuation coefficient, power, distortion, scale), thin mode: (float3 scatter distance, scale) float4 transmissionParams; //!< parameters: thick mode->(attenuation coefficient, power, distortion, scale), thin mode: (shrinkFactor, transmissionNdLBias, distanceAttenuation, scale)
float3 scatterDistance; //!< scatter distance (same as in MaterialSrg) >
void InitializeToZero(); void InitializeToZero();
}; };
@ -24,6 +25,7 @@ void TransmissionSurfaceData::InitializeToZero()
tint = float3(0.0f, 0.0f, 0.0f); tint = float3(0.0f, 0.0f, 0.0f);
thickness = 0.0f; thickness = 0.0f;
transmissionParams = float4(0.0f, 0.0f, 0.0f, 0.0f); transmissionParams = float4(0.0f, 0.0f, 0.0f, 0.0f);
scatterDistance = float3(0.0f, 0.0f, 0.0f);
} }
#endif #endif

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save