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
@pytest.mark.SUITE_periodic
@pytest.mark.SUITE_main
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("project", ["AutomatedTesting"])
class TestAutomation(TestAutomationBase):
def test_ActorSplitsAfterCollision(self, request, workspace, editor, launcher_platform):
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):
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):
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):
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):
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):
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):
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
# Open a level (any level should work)
editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'WaterSample')
editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'Base')
def GetSetCompareTest(component, path, assetId):
# 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'])
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):
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
"""
# 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
import azlmbr.bus as bus
@ -18,7 +20,7 @@ def CompareComponentEntityIdPairs(component1, component2):
return component1.Equal(component2)
# 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
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
# Open a level (any level should work)
editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'WaterSample')
editor.EditorToolsApplicationRequestBus(bus.Broadcast, 'OpenLevelNoPrompt', 'Base')
def GetSetCompareTest(component, path, value):
oldObj = editor.EditorComponentAPIBus(bus.Broadcast, 'GetComponentProperty', component, path)

@ -12,7 +12,7 @@ import azlmbr.editor as editor
from azlmbr.entity import EntityId
# 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())
childEntityId = editor.ToolsApplicationRequestBus(bus.Broadcast, 'CreateNewEntity', EntityId())

@ -32,7 +32,7 @@ def onEditorEntityDeleted(parameters):
# 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
handler = bus.NotificationHandler('EditorEntityContextNotificationBus')

@ -16,13 +16,13 @@ import os
sys.path.append(os.path.dirname(__file__))
from hydra_utils import launch_test_case
@pytest.mark.SUITE_sandbox
@pytest.mark.parametrize('launcher_platform', ['windows_editor'])
@pytest.mark.parametrize('project', ['AutomatedTesting'])
@pytest.mark.parametrize('level', ['Simple'])
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):
unexpected_lines=[]

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

@ -21,8 +21,7 @@ import azlmbr.bus as bus
import azlmbr.entity as entity
import azlmbr.editor as editor
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():
# Open level, any level should work

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

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

@ -20,7 +20,7 @@ from editor_python_test_tools.utils import TestHelper as helper
def open_base_level():
helper.init_idle()
helper.open_level("Prefab", "Base")
helper.open_level("", "Base")
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
editor.args.extend([
"--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:
editor.args.extend(["--regset=/Amazon/Preferences/EnablePrefabSystem=false"])

@ -7,8 +7,7 @@ SPDX-License-Identifier: Apache-2.0 OR MIT
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):
"""

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

@ -52,11 +52,11 @@ class TestAutomation(TestAutomationBase):
@revert_physics_config
def test_CharacterController_SwitchLevels(self, request, workspace, editor, launcher_platform):
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):
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
def test_ScriptCanvas_MultipleRaycastNode(self, request, workspace, editor, launcher_platform):
@ -81,7 +81,7 @@ class TestAutomation(TestAutomationBase):
@revert_physics_config
def test_Collider_PxMeshConvexMeshCollides(self, request, workspace, editor, launcher_platform):
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
def test_ShapeCollider_CylinderShapeCollides(self, request, workspace, editor, launcher_platform):

@ -53,7 +53,8 @@ class EditorSingleTest_WithFileOverrides(EditorSingleTest):
for f in original_file_list:
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.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("project", ["AutomatedTesting"])
@ -72,6 +73,48 @@ class TestAutomationWithPrefabSystemEnabled(EditorTestSuite):
class C4982802_PhysXColliderShape_CanBeSelected(EditorSharedTest):
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.SUITE_main
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@ -115,19 +158,13 @@ class TestAutomation(EditorTestSuite):
class C14654881_CharacterController_SwitchLevels(EditorSharedTest):
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):
from .tests.script_canvas import ScriptCanvas_MultipleRaycastNode as test_module
class C18243586_Joints_HingeLeadFollowerCollide(EditorSharedTest):
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):
from .tests.shape_collider import ShapeCollider_CylinderShapeCollides as test_module
@ -297,19 +334,6 @@ class TestAutomation(EditorTestSuite):
class C18243591_Joints_BallLeadFollowerCollide(EditorSharedTest):
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):
from .tests.force_region import ForceRegion_WorldSpaceForceOnRigidBodies as test_module
@ -321,26 +345,10 @@ class TestAutomation(EditorTestSuite):
class C5959809_ForceRegion_RotationalOffset(EditorSharedTest):
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):
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):
from .tests.rigid_body import RigidBody_EnablingGravityWorksPoC as test_module
@ -350,8 +358,5 @@ class TestAutomation(EditorTestSuite):
class C6090547_ForceRegion_ParentChildForceRegions(EditorSharedTest):
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):
from .tests import Physics_UndoRedoWorksOnEntityWithPhysComponents as test_module

@ -388,17 +388,17 @@ class TestAutomation(TestAutomationBase):
@revert_physics_config
def test_ShapeCollider_InactiveWhenNoShapeComponent(self, request, workspace, editor, launcher_platform):
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
def test_Collider_CheckDefaultShapeSettingIsPxMesh(self, request, workspace, editor, launcher_platform):
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
def test_ShapeCollider_LargeNumberOfShapeCollidersWontCrashEditor(self, request, workspace, editor, launcher_platform):
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
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):
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"]
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):
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):
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):
from .tests.collider import Collider_AddColliderComponent as test_module
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.")
def test_Collider_PxMeshAutoAssignedWhenModifyingRenderMeshComponent(self, request, workspace, editor, launcher_platform):
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):
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):
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):
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):
from .tests.rigid_body import RigidBody_EnablingGravityWorksPoC as test_module
@ -486,7 +490,7 @@ class TestAutomation(TestAutomationBase):
@revert_physics_config
def test_ShapeCollider_CanBeAddedWitNoWarnings(self, request, workspace, editor, launcher_platform):
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
def test_Physics_UndoRedoWorksOnEntityWithPhysComponents(self, request, workspace, editor, launcher_platform):

@ -53,10 +53,12 @@ def CharacterController_SwitchLevels():
import os
import sys
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
import azlmbr.legacy.general as general
import azlmbr.bus
import editor_python_test_tools.hydra_editor_utils as hydra
# Constants
WAIT_FOR_ERRORS = 3.0
@ -77,7 +79,7 @@ def CharacterController_SwitchLevels():
helper.exit_game_mode(Tests.level1_exit_game_mode)
# 2.1) Load level 2 (empty level)
helper.open_level("Physics", "Base")
hydra.open_base_level()
# 2.2) 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 TestHelper as helper
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports
import azlmbr.legacy.general as general
PHYSICS_ASSET_INDEX = 7 # Hardcoded enum index value for Shape property
helper.init_idle()
# 1) Load empty level
helper.open_level("Physics", "Base")
hydra.open_base_level()
# 2) Create an entity to hold the PhysX Shape Collider component
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.asset_utils import Asset
import editor_python_test_tools.hydra_editor_utils as hydra
# Constants
PHYSICS_ASSET_INDEX = 7 # Hardcoded enum index value for Shape property
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")
PHYSX_MESH = os.path.join("assets", "Physics","Collider_MultipleSurfaceSlots", "test.pxmesh")
helper.init_idle()
# 1) Load the empty level
helper.open_level("Physics", "Base")
hydra.open_base_level()
# 2) Create an 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.asset_utils import Asset
import editor_python_test_tools.hydra_editor_utils as hydra
# Asset paths
STATIC_MESH = os.path.join("assets", "Physics", "Collider_PxMeshAutoAssigned", "spherebot", "r0-b_body.azmodel")
PHYSX_MESH = os.path.join(
"assets", "Physics", "Collider_PxMeshAutoAssigned", "spherebot", "r0-b_body.pxmesh"
)
helper.init_idle()
# 1) Load the empty level
helper.open_level("Physics", "Base")
hydra.open_base_level()
# 2) Create an 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.asset_utils import Asset
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports
import azlmbr.legacy.general as general
@ -60,9 +62,8 @@ def Collider_PxMeshAutoAssignedWhenModifyingRenderMeshComponent():
MESH_PROPERTY_PATH = "Controller|Configuration|Mesh Asset"
TESTED_PROPERTY_PATH = "Shape Configuration|Asset|PhysX Mesh"
helper.init_idle()
# 1) Load the empty level
helper.open_level("Physics", "Base")
hydra.open_base_level()
# 2) Create an 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 TestHelper as helper
from editor_python_test_tools.asset_utils import Asset
import azlmbr.math as math
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports
import azlmbr
@ -73,9 +75,8 @@ def Collider_PxMeshConvexMeshCollides():
MESH_ASSET_PATH = os.path.join("assets", "Physics", "Collider_PxMeshConvexMeshCollides", "spherebot", "r0-b_body.pxmesh")
TIMEOUT = 2.0
helper.init_idle()
# 1) Load the level
helper.open_level("Physics", "Base")
hydra.open_base_level()
# 2) Create test entity
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.asset_utils import Asset
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports
import azlmbr.asset as azasset
# Asset paths
STATIC_MESH = os.path.join("assets", "Physics", "Collider_PxMeshNotAutoAssignedWhenNoPhysicsFbx", "test_asset.azmodel")
helper.init_idle()
# 1) Load the empty level
helper.open_level("Physics", "Base")
hydra.open_base_level()
# 2) Create an entity
test_entity = Entity.create_editor_entity("test_entity")

@ -44,15 +44,15 @@ def ForceRegion_WithNonTriggerColliderWarning():
:return: None
"""
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.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
from editor_python_test_tools.utils import Tracer
helper.init_idle()
# 1) Load the empty level
helper.open_level("Physics", "Base")
hydra.open_base_level()
# 2) Create test entity
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.asset_utils import Asset
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports
import azlmbr.asset as azasset
@ -66,9 +68,8 @@ def Material_LibraryClearingAssignsDefault():
default_material_path = os.path.join("assets", "physics", "surfacetypemateriallibrary.physmaterial")
new_material_path = os.path.join("physicssurfaces", "default_phys_materials.physmaterial")
helper.init_idle()
# 1) Load the level
helper.open_level("Physics", "Base")
hydra.open_base_level()
# 2) Create new Entity with PhysX Character Controller
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 Tracer
helper.init_idle()
import editor_python_test_tools.hydra_editor_utils as hydra
# 1) Load the level
helper.open_level("Physics", "Base")
hydra.open_base_level()
# 2) Create test entity
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 Tracer
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports
import azlmbr.legacy.general as general
helper.init_idle()
# 1) Load the empty level
helper.open_level("Physics", "Base")
hydra.open_base_level()
# 2) Create an entity
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.utils import TestHelper as helper
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports
import azlmbr.bus as bus
import azlmbr.editor as editor
@ -65,9 +67,8 @@ def ShapeCollider_InactiveWhenNoShapeComponent():
"""
return editor.EditorComponentAPIBus(bus.Broadcast, "IsComponentEnabled", component_id)
helper.init_idle()
# 1) Load the level
helper.open_level("Physics", "Base")
hydra.open_base_level()
# 2) Add an entity with a PhysX Shape Collider component.
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.editor_entity_utils import EditorEntity as Entity
import editor_python_test_tools.hydra_editor_utils as hydra
# Open 3D Engine Imports
import azlmbr.legacy.general as general
@ -61,9 +63,8 @@ def ShapeCollider_LargeNumberOfShapeCollidersWontCrashEditor():
# Wait 60 frames more
general.idle_wait_frames(60)
helper.init_idle()
# 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
entity_failure = False

@ -24,12 +24,12 @@ from base import TestAutomationBase
class TestAutomation(TestAutomationBase):
def test_WhiteBox_AddComponentToEntity(self, request, workspace, editor, launcher_platform):
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):
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):
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
helper.init_idle()
general.open_level("EmptyLevel")
helper.open_level("WhiteBox", "EmptyLevel", no_prompt=False)
# create white box entity and attach component
white_box_entity = init.create_white_box_entity()

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

@ -39,7 +39,7 @@ def C28798205_WhiteBox_SetInvisible():
# open level
helper.init_idle()
general.open_level("EmptyLevel")
helper.open_level("WhiteBox", "EmptyLevel", no_prompt=False)
white_box_entity_name = 'WhiteBox-Visibility'
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)
)
# 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.workspace = workspace
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):
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
for bundle in dependent_bundle_name:
file_info = os.stat(bundle)
# 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:
bundle_zip.extractall(extract_dir)

@ -242,7 +242,7 @@ Node Type: BoneData
BasisX: < 1.000000, -0.000000, 0.000000>
BasisY: < 0.000000, 1.000000, 0.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 Path: RootNode.jack_root.Bip01__pelvis.spine1.spine2.animation
@ -544,7 +544,7 @@ Node Type: BoneData
Node Name: animation
Node Path: RootNode.jack_root.Bip01__pelvis.spine1.spine2.spine3.l_shldr.l_upArm.l_upArmRoll.animation
Node Type: AnimationData
KeyFrames: Count 195. Hash: 8781707605519483934
KeyFrames: Count 195. Hash: 15529789169672670472
TimeStepBetweenFrames: 0.033333
Node Name: transform
@ -710,7 +710,7 @@ Node Type: BoneData
BasisX: < 0.514369, 0.855813, 0.054857>
BasisY: < 0.088153, 0.010863, -0.996047>
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 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>
BasisY: < 0.465563, -0.180309, -0.866452>
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 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>
BasisY: < 0.928150, 0.286271, -0.237880>
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 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::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<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>
@ -191,7 +191,7 @@
<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="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>
@ -204,7 +204,7 @@
<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="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>
@ -268,7 +268,7 @@
<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="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>
@ -319,7 +319,7 @@
<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="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>
@ -408,7 +408,7 @@
<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="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>
@ -497,7 +497,7 @@
<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="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>
@ -548,7 +548,7 @@
<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="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>
@ -650,7 +650,7 @@
<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="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>
@ -701,7 +701,7 @@
<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="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>
@ -727,7 +727,7 @@
<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="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>
@ -854,7 +854,7 @@
<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="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>
@ -905,7 +905,7 @@
<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="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>
@ -1109,7 +1109,7 @@
<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="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>
@ -1141,7 +1141,7 @@
<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="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 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::string" field="value1" value="WorldTransform" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
<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>
@ -1441,7 +1441,7 @@
<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="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>
@ -1454,7 +1454,7 @@
<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="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>
@ -1467,7 +1467,7 @@
<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="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>
@ -1569,7 +1569,7 @@
<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="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>
@ -1582,7 +1582,7 @@
<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="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>
@ -1608,7 +1608,7 @@
<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="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>
@ -1659,7 +1659,7 @@
<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="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>
@ -1710,7 +1710,7 @@
<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="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>
@ -1761,7 +1761,7 @@
<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="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>
@ -1812,7 +1812,7 @@
<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="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>
@ -1825,7 +1825,7 @@
<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="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>
@ -1914,7 +1914,7 @@
<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="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>
@ -1965,7 +1965,7 @@
<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="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>
@ -2067,7 +2067,7 @@
<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="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>
@ -2169,7 +2169,7 @@
<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="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>
@ -2220,7 +2220,7 @@
<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="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>
@ -2271,7 +2271,7 @@
<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="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>
@ -2322,7 +2322,7 @@
<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="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>
@ -2373,7 +2373,7 @@
<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="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>
@ -2475,7 +2475,7 @@
<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="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>
@ -2526,7 +2526,7 @@
<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="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>
@ -2628,7 +2628,7 @@
<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="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>
@ -2793,7 +2793,7 @@
<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="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>
@ -2844,7 +2844,7 @@
<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="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>
@ -3009,7 +3009,7 @@
<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="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>

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

@ -424,7 +424,7 @@
<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="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 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::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="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 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::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="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 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::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="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 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::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="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 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::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="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 name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">

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

@ -55,7 +55,7 @@
<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="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 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::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="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 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::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="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 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::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="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 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::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="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 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::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="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 name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">

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

@ -178,7 +178,7 @@
<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="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 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::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="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 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::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="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 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::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="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 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::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="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 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::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="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 name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">

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

@ -178,7 +178,7 @@
<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="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 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::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="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 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::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="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 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::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="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 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::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="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 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::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="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 name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">

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

@ -178,7 +178,7 @@
<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="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 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::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="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 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::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="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 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::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="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 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::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="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 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::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="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 name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">

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

@ -178,7 +178,7 @@
<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="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 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::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="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 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::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="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 name="AZStd::pair" field="element" type="{48BF1FCF-92A6-52E1-A543-F0B96702B0E2}">

@ -27,15 +27,15 @@ TEST_DIRECTORY = os.path.dirname(__file__)
class TestAutomation(TestAutomationBase):
def test_Pane_HappyPath_OpenCloseSuccessfully(self, request, workspace, editor, launcher_platform):
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):
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):
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.parametrize("level", ["tmp_level"])
@ -45,7 +45,7 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
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.parametrize("level", ["tmp_level"])
@ -55,15 +55,15 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
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):
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):
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.parametrize("level", ["tmp_level"])
@ -73,11 +73,11 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
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):
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.parametrize("level", ["tmp_level"])
@ -87,7 +87,7 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
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 teardown():
@ -99,19 +99,19 @@ class TestAutomation(TestAutomationBase):
[os.path.join(workspace.paths.project(), "ScriptCanvas", "test_file.scriptevent")], True, True
)
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):
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):
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):
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"])
def test_Debugger_HappyPath_TargetMultipleEntities(self, request, workspace, editor, launcher_platform, project, level):
@ -120,16 +120,16 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
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.")
def test_EditMenu_Default_UndoRedo(self, request, workspace, editor, launcher_platform, project):
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):
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"])
def test_Entity_HappyPath_AddScriptCanvasComponent(self, request, workspace, editor, launcher_platform, project, level):
@ -138,11 +138,11 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
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):
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.parametrize("level", ["tmp_level"])
@ -152,7 +152,7 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
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.parametrize("level", ["tmp_level"])
@ -162,7 +162,7 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
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.parametrize("level", ["tmp_level"])
@ -172,24 +172,24 @@ class TestAutomation(TestAutomationBase):
request.addfinalizer(teardown)
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
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):
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):
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.")
def test_VariableManager_UnpinVariableType_Works(self, request, workspace, editor, launcher_platform):
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):
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 teardown():
@ -201,7 +201,7 @@ class TestAutomation(TestAutomationBase):
[os.path.join(workspace.paths.project(), "ScriptCanvas", "test_file.scriptevent")], True, True
)
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
# fails because of pyside_utils import
@ -227,7 +227,6 @@ class TestScriptCanvasTests(object):
expected_lines,
auto_test_mode=False,
timeout=60,
enable_prefab_system=False,
)
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
@ -246,7 +245,6 @@ class TestScriptCanvasTests(object):
expected_lines,
auto_test_mode=False,
timeout=60,
enable_prefab_system=False,
)
def test_GraphClose_Default_SavePrompt(self, request, editor, launcher_platform):
@ -263,7 +261,6 @@ class TestScriptCanvasTests(object):
expected_lines,
auto_test_mode=False,
timeout=60,
enable_prefab_system=False,
)
def test_VariableManager_Default_CreateDeleteVars(self, request, editor, launcher_platform):
@ -278,7 +275,6 @@ class TestScriptCanvasTests(object):
expected_lines,
auto_test_mode=False,
timeout=60,
enable_prefab_system=False,
)
@pytest.mark.parametrize(
@ -314,7 +310,6 @@ class TestScriptCanvasTests(object):
cfg_args=[config.get('cfg_args')],
auto_test_mode=False,
timeout=60,
enable_prefab_system=False,
)
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
@ -343,7 +338,6 @@ class TestScriptCanvasTests(object):
expected_lines,
auto_test_mode=False,
timeout=60,
enable_prefab_system=False,
)
@pytest.mark.xfail(reason="Test fails to find expected lines, it needs to be fixed.")
@ -371,6 +365,5 @@ class TestScriptCanvasTests(object):
expected_lines,
auto_test_mode=False,
timeout=60,
enable_prefab_system=False,
)

@ -23,4 +23,4 @@ class TestAutomation(TestAutomationBase):
def test_Opening_Closing_Pane(self, request, workspace, editor, launcher_platform):
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
)
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()

@ -14,7 +14,7 @@ import pytest
import subprocess
@pytest.mark.SUITE_smoke
@pytest.mark.SUITE_sandbox
class TestCLIToolAssetBuilderWorks(object):
def test_CLITool_AssetBuilder_Works(self, build_directory):
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);
char* str = new char[fileSize];
fread(str, fileSize, 1, file);
[[maybe_unused]] auto bytesRead = fread(str, fileSize, 1, file);
[[maybe_unused]] char* nextToken = nullptr;
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
// 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
char realExecutableDirectory[AZ::IO::MaxPathLength];
ASSERT_TRUE(realpath(executableDirectory, realExecutableDirectory));
char* realExecutableDirectory = realpath(executableDirectory, nullptr);
ASSERT_NE(realExecutableDirectory, nullptr);
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))
{
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);
return ZD_ERROR_IO_FAILED;
}
@ -531,7 +531,7 @@ namespace AZ::IO::ZipDir
if (!WriteCompressedData((uint8_t*)pUncompressed, nSegmentSize, encrypt))
{
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);
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);
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());
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
// returning at this point would mean we would start running
// the code from our parent process and that will just wreck
@ -132,15 +132,19 @@ namespace AzFramework
switch (processLaunchInfo.m_processPriority)
{
case PROCESSPRIORITY_BELOWNORMAL:
nice(1);
{
[[maybe_unused]] auto niceResult = nice(1);
// also reduce disk impact:
// setiopolicy_np(IOPOL_TYPE_DISK, IOPOL_SCOPE_PROCESS, IOPOL_UTILITY);
break;
}
case PROCESSPRIORITY_IDLE:
nice(20);
{
[[maybe_unused]] auto niceResult = nice(20);
// also reduce disk impact:
// setiopolicy_np(IOPOL_TYPE_DISK, IOPOL_SCOPE_PROCESS, IOPOL_THROTTLE);
break;
}
}
startupInfo.SetupHandlesForChildProcess();
@ -153,7 +157,7 @@ namespace AzFramework
// 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
// parent to read.
write(errorPipe[1], &errval, sizeof(errval));
[[maybe_unused]] auto writeResult = write(errorPipe[1], &errval, sizeof(errval));
_exit(0);
}
@ -317,7 +321,7 @@ namespace AzFramework
// Set up a pipe to communicate the error code from the subprocess's execvpe call
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`
fcntl(childErrorPipeFds[1], F_SETFD, fcntl(childErrorPipeFds[1], F_GETFD) | FD_CLOEXEC);

@ -117,11 +117,7 @@ namespace UnitTest
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)
#endif // AZ_TRAIT_DISABLE_FAILED_PROCESS_LAUNCHER_TESTS
{
ProcessLaunchParseTests::ParsedArgMap argMap;
AzFramework::ProcessOutput processOutput;
@ -155,11 +151,7 @@ namespace UnitTest
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)
#endif // AZ_TRAIT_DISABLE_FAILED_PROCESS_LAUNCHER_TESTS
{
ProcessLaunchParseTests::ParsedArgMap argMap;
AzFramework::ProcessOutput processOutput;
@ -191,11 +183,7 @@ namespace UnitTest
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)
#endif // AZ_TRAIT_DISABLE_FAILED_PROCESS_LAUNCHER_TESTS
{
ProcessLaunchParseTests::ParsedArgMap argMap;
AzFramework::ProcessOutput processOutput;

@ -71,7 +71,7 @@ namespace AzNetworking
const char* GetNetworkErrorDesc(int32_t errorCode)
{
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;
}
}

@ -73,7 +73,7 @@ namespace AzToolsFramework
settings.m_keepDefaults = true;
}
if ((flags & StoreFlags::StoreLinkIds) != StoreFlags::None)
if ((flags & StoreFlags::StripLinkIds) != StoreFlags::StripLinkIds)
{
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
//! 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);

@ -222,7 +222,7 @@ namespace AzToolsFramework::Prefab
SetInstanceContainersOpenState(m_rootAliasFocusPath, false);
const RootAliasPath previousContainerRootAliasPath = m_rootAliasFocusPath;
const InstanceOptionalConstReference previousFocusedInstance = GetInstanceReference(previousContainerRootAliasPath);
const InstanceOptionalReference previousFocusedInstance = GetInstanceReference(previousContainerRootAliasPath);
m_rootAliasFocusPath = focusedInstance->get().GetAbsoluteInstanceAliasPath();
m_focusedTemplateId = focusedInstance->get().GetTemplateId();
@ -277,7 +277,7 @@ namespace AzToolsFramework::Prefab
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();
}

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

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

@ -163,17 +163,21 @@ namespace AzToolsFramework
void PrefabSystemComponent::PropagateTemplateChanges(TemplateId templateId, InstanceOptionalConstReference instanceToExclude)
{
auto templateIdToLinkIdsIterator = m_templateToLinkIdsMap.find(templateId);
if (templateIdToLinkIdsIterator != m_templateToLinkIdsMap.end())
TemplateReference findTemplateResult = FindTemplate(templateId);
if (findTemplateResult.has_value())
{
// 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.
AZStd::queue<LinkIds> linkIdsToUpdateQueue;
linkIdsToUpdateQueue.push(LinkIds(templateIdToLinkIdsIterator->second.begin(),
templateIdToLinkIdsIterator->second.end()));
UpdateLinkedInstances(linkIdsToUpdateQueue);
auto templateIdToLinkIdsIterator = m_templateToLinkIdsMap.find(templateId);
if (templateIdToLinkIdsIterator != m_templateToLinkIdsMap.end())
{
// 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.
AZStd::queue<LinkIds> linkIdsToUpdateQueue;
linkIdsToUpdateQueue.push(
LinkIds(templateIdToLinkIdsIterator->second.begin(), templateIdToLinkIdsIterator->second.end()));
UpdateLinkedInstances(linkIdsToUpdateQueue);
}
UpdatePrefabInstances(templateId, instanceToExclude);
}
UpdatePrefabInstances(templateId, instanceToExclude);
}
void PrefabSystemComponent::UpdatePrefabTemplate(TemplateId templateId, const PrefabDom& updatedDom)

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

@ -29,7 +29,7 @@
#include <AzToolsFramework/ContainerEntity/ContainerEntityInterface.h>
#include <AzToolsFramework/Entity/EditorEntityContextBus.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/TransformComponentSerializer.h>
#include <AzToolsFramework/ToolsComponents/EditorInspectorComponentBus.h>
@ -963,18 +963,22 @@ namespace AzToolsFramework
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;
AzFramework::ApplicationRequests::Bus::BroadcastResult(
isPrefabSystemEnabled, &AzFramework::ApplicationRequests::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;
}
}

@ -1280,48 +1280,72 @@ namespace Detail
#endif
#define ASSERT_CONSOLE_EXISTS 0
// the following macros allow the help text to be easily stripped out
// Summary:
// 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:
// 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:
// 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:
// 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:
// 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:
// 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:
// 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:
// 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:
// 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:
// 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:
// 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:
// 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
#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
#define __debugbreak()
#else
#define __debugbreak() "_asm int 3"
#define __debugbreak() asm("int3")
#endif
#define __assume(x)

@ -13,7 +13,7 @@ namespace AzTestRunner
{
void set_quiet_mode()
{
freopen("/dev/null", "a", stdout);
[[maybe_unused]] auto freopenResult = freopen("/dev/null", "a", stdout);
}
const char* get_current_working_directory()
@ -24,7 +24,7 @@ namespace AzTestRunner
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]];
if(mesh->mTextureCoords[texCoordIndex])
{
if (mesh->mTextureCoordsNames[texCoordIndex].length > 0)
if (mesh->HasTextureCoordsName(texCoordIndex))
{
if (!customNameFound)
{
name = mesh->mTextureCoordsNames[texCoordIndex].C_Str();
name = mesh->GetTextureCoordsName(texCoordIndex)->C_Str();
customNameFound = true;
}
else
{
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.",
currentNode->mName.C_Str(),
texCoordIndex,
name.c_str(),
mesh->mTextureCoordsNames[texCoordIndex].C_Str(),
mesh->GetTextureCoordsName(texCoordIndex)->C_Str(),
name.c_str());
}
}

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

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

@ -21,6 +21,8 @@
#define mallocAligned(sze) _aligned_malloc(sze, 16)
#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);
}
}
AZ_POP_DISABLE_WARNING_GCC

@ -1154,7 +1154,7 @@
{
"name": "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",
"defaultValue": 0.5,
"min": 0.0,
@ -1223,14 +1223,41 @@
"min": 0.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",
"displayName": " Scale",
"description": "Strength of transmission",
"type": "float",
"defaultValue": 3.0,
"defaultValue": 1.0,
"min": 0.0,
"softMax": 20.0
"softMax": 5.0
}
],
"detailLayerGroup": [
@ -1555,6 +1582,9 @@
"power": "subsurfaceScattering.transmissionPower",
"distortion": "subsurfaceScattering.transmissionDistortion",
"attenuation": "subsurfaceScattering.transmissionAttenuation",
"shrinkFactor": "subsurfaceScattering.shrinkFactor",
"transmissionNdLBias": "subsurfaceScattering.transmissionNdLBias",
"distanceAttenuation": "subsurfaceScattering.distanceAttenuation",
"tintColor": "subsurfaceScattering.transmissionTint",
"thickness": "subsurfaceScattering.thickness",
"enabled": "subsurfaceScattering.enableSubsurfaceScattering",

@ -93,7 +93,7 @@ ShaderResourceGroup MaterialSrg : SRG_PerMaterial
// Elements of m_transmissionParams:
// 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;
// (float3 TintColor, thickness)

@ -243,6 +243,7 @@ PbrLightingOutput ForwardPassPS_Common(VSOutput IN, bool isFrontFace, out float
surface.transmission.tint = transmissionTintThickness.rgb;
surface.transmission.thickness = transmissionTintThickness.w;
surface.transmission.transmissionParams = MaterialSrg::m_transmissionParams;
surface.transmission.scatterDistance = MaterialSrg::m_scatterDistance;
// ------- 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.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 -------
// [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...
local transmissionEnabled = TransmissionMode_None ~= context:GetMaterialPropertyValue_enum("subsurfaceScattering.transmissionMode")
local commonTrasmissionVisibility
if(transmissionEnabled) then
local thickTransmissionEnabled = TransmissionMode_ThickObject == context:GetMaterialPropertyValue_enum("subsurfaceScattering.transmissionMode")
local thinTransmissionEnabled = TransmissionMode_ThinObject == context:GetMaterialPropertyValue_enum("subsurfaceScattering.transmissionMode")
local commonTrasmissionVisibility = MaterialPropertyVisibility_Hidden
local thickTransmissionVisibility = MaterialPropertyVisibility_Hidden
local thinTransmissionVisibility = MaterialPropertyVisibility_Hidden
if (thickTransmissionEnabled or thinTransmissionEnabled) then
commonTrasmissionVisibility = MaterialPropertyVisibility_Enabled
else
commonTrasmissionVisibility = MaterialPropertyVisibility_Hidden
if(thickTransmissionEnabled) then
thickTransmissionVisibility = MaterialPropertyVisibility_Enabled
else -- thin transmission enabled
thinTransmissionVisibility = MaterialPropertyVisibility_Enabled
end
end
context:SetMaterialPropertyVisibility("subsurfaceScattering.thickness", commonTrasmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.thicknessMap", commonTrasmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionTint", commonTrasmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionPower", commonTrasmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionDistortion", commonTrasmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionAttenuation", commonTrasmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionPower", thickTransmissionVisibility)
context:SetMaterialPropertyVisibility("subsurfaceScattering.transmissionDistortion", thickTransmissionVisibility)
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)
UpdateTextureDependentPropertyVisibility(context, transmissionEnabled, "subsurfaceScattering.thicknessMap", "subsurfaceScattering.useThicknessMap", "subsurfaceScattering.thicknessMapUv")
UpdateTextureDependentPropertyVisibility(context, thickTransmissionEnabled or thinTransmissionEnabled, "subsurfaceScattering.thicknessMap", "subsurfaceScattering.useThicknessMap", "subsurfaceScattering.thicknessMapUv")
end

@ -325,6 +325,7 @@ PbrLightingOutput SkinPS_Common(VSOutput IN)
surface.transmission.tint = transmissionTintThickness.rgb;
surface.transmission.thickness = transmissionTintThickness.w;
surface.transmission.transmissionParams = MaterialSrg::m_transmissionParams;
surface.transmission.scatterDistance = MaterialSrg::m_scatterDistance;
// ------- Lighting Data -------
@ -341,6 +342,17 @@ PbrLightingOutput SkinPS_Common(VSOutput IN)
lightingData.specularResponse = FresnelSchlickWithRoughness(lightingData.NdotV, surface.specularF0, surface.roughnessLinear);
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 -------
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",
"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",
"defaultValue": 0.5,
"min": 0.0,
@ -637,14 +637,41 @@
"min": 0.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",
"displayName": " Scale",
"description": "Strength of transmission",
"type": "float",
"defaultValue": 3.0,
"defaultValue": 1.0,
"min": 0.0,
"softMax": 20.0
"softMax": 5.0
}
],
"wrinkleLayers": [
@ -1011,6 +1038,9 @@
"power": "subsurfaceScattering.transmissionPower",
"distortion": "subsurfaceScattering.transmissionDistortion",
"attenuation": "subsurfaceScattering.transmissionAttenuation",
"shrinkFactor": "subsurfaceScattering.shrinkFactor",
"transmissionNdLBias": "subsurfaceScattering.transmissionNdLBias",
"distanceAttenuation": "subsurfaceScattering.distanceAttenuation",
"tintColor": "subsurfaceScattering.transmissionTint",
"thickness": "subsurfaceScattering.thickness",
"enabled": "subsurfaceScattering.enableSubsurfaceScattering",

@ -22,6 +22,10 @@
#include "MaterialInputs/UvSetCount.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
{
// Auto-generate material SRG fields for common inputs
@ -64,7 +68,7 @@ ShaderResourceGroup MaterialSrg : SRG_PerMaterial
// Elements of m_transmissionParams:
// 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;
// (float3 TintColor, thickness)

@ -16,24 +16,28 @@
#include <Atom/Features/PBR/LightingOptions.azsli>
// 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 exponent = s * t;
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));
// ndl works decently well but it can produce a harsh discontinuity in the area just before
// the shadow starts appearing on objects like cylinder and tubes.
// Smoothing out ndl does a decent enough job of removing this artifact.
return smoothstep(0, 1, ndl * ndl);
// 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) +
float3(0.1, 0.336, 0.344) * exp(-s*s/0.0484) +
float3(0.118, 0.198, 0.0) * exp(-s*s/0.187) +
float3(0.113, 0.007, 0.007) * exp(-s*s/0.567) +
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);
@ -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/
{
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 lamberAttenuation = exp(-thickness * transmissionParams.x) * saturate(1.0 - thickness);
result = transmittance * lamberAttenuation * lightIntensity;
@ -60,18 +64,39 @@ float3 GetBackLighting(Surface surface, LightingData lightingData, float3 lightI
break;
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
float litRatio = 1.0 - shadowRatio;
if (litRatio)
{
const float thickness = surface.transmission.thickness * transmissionParams.w;
const float3 invScattering = rcp(transmissionParams.xyz);
const float falloff = ThinObjectFalloff(surface.normal, dirToLight);
result = TransmissionKernel(thickness, invScattering) * falloff * lightIntensity * litRatio;
}
// transmissionDistance < 0.0f means shadows are not enabled --> avoid unnecessary computation
if (transmissionDistance < 0.0f)
{
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;
}

@ -28,6 +28,15 @@ class LightingData
// Direction light shadow coordinates
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
float3 dirToCamera;

@ -135,8 +135,15 @@ void ApplyCapsuleLight(ViewSrg::CapsuleLight light, Surface surface, inout Light
float3 closestIntersectionPoint = startPoint + closestT * startToEnd;
float3 posToLight = closestIntersectionPoint - surface.position;
// Tranmission contribution
lightingData.translucentBackLighting += GetBackLighting(surface, lightingData, lightIntensity, normalize(posToLight), 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;
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
float3 posToClosestPointAlongReflection = dot(posToLight, reflectionDir) * reflectionDir;

@ -18,7 +18,13 @@ void ApplyDirectionalLights(Surface surface, inout LightingData lightingData)
// Shadowed check
const uint shadowIndex = ViewSrg::m_shadowIndexDirectionalLight;
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)
{
litRatio = DirectionalLightShadow::GetVisibility(
@ -30,7 +36,19 @@ void ApplyDirectionalLights(Surface surface, inout LightingData lightingData)
#if ENABLE_TRANSMISSION
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
}
@ -52,23 +70,20 @@ void ApplyDirectionalLights(Surface surface, inout LightingData lightingData)
// [GFX TODO][ATOM-2012] care of multiple directional light
// Currently shadow check is done only for index == shadowIndex.
float currentLitRatio = 1.0f;
float currentBackShadowRatio = 1.0f;
if (o_enableShadows)
float currentTransmissionDistance = -1.0f;
if (o_enableShadows && index == shadowIndex)
{
currentLitRatio = (index == shadowIndex) ? litRatio : 1.;
currentBackShadowRatio = 1.0 - currentLitRatio;
#if ENABLE_TRANSMISSION
if (o_transmission_mode == TransmissionMode::ThickObject)
{
currentBackShadowRatio = (index == shadowIndex) ? backShadowRatio : 0.;
}
#endif
// Add contribution only if current directional light is the active one for shadows
currentLitRatio = litRatio;
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.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

@ -76,9 +76,12 @@ void ApplyDiskLight(ViewSrg::DiskLight light, Surface surface, inout LightingDat
// shadow
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
float backShadowRatio = 0.0;
// 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)
{
litRatio = ProjectedShadow::GetVisibility(
@ -88,14 +91,16 @@ void ApplyDiskLight(ViewSrg::DiskLight light, Surface surface, inout LightingDat
-dirToConeTip,
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 (o_transmission_mode == TransmissionMode::ThickObject)
{
backShadowRatio = ProjectedShadow::GetThickness(
light.m_shadowIndex,
surface.position);
transmissionDistance = ProjectedShadow::GetThickness(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
}
@ -115,8 +120,8 @@ void ApplyDiskLight(ViewSrg::DiskLight light, Surface surface, inout LightingDat
lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, lightIntensity, posToLightDir) * litRatio;
// 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
// Calculate the reflection off the normal from the view direction

@ -46,6 +46,16 @@ void AddSampleContribution(
float3 intensityRgb = float3(intensity, intensity, intensity);
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);
}

@ -67,6 +67,7 @@ uint ComputeShadowIndex(const ViewSrg::PointLight light, const Surface surface)
void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingData lightingData)
{
float3 posToLight = light.m_position - surface.position;
float posToLightDist = length(posToLight);
float d2 = dot(posToLight, posToLight); // light distance squared
float falloff = d2 * light.m_invAttenuationRadiusSquared;
@ -84,8 +85,11 @@ void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingD
// shadow
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
float backShadowRatio = 0.0;
// 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)
{
const float3 lightDir = normalize(light.m_position - surface.position);
@ -96,16 +100,17 @@ void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingD
surface.position,
lightDir,
surface.vertexNormal);
// Use backShadowRatio to carry thickness from shadow map for thick mode
backShadowRatio = 1.0 - litRatio;
#if ENABLE_TRANSMISSION
// o_transmission_mode == NONE is not taken into account because GetBackLighting already ignores this case
if (o_transmission_mode == TransmissionMode::ThickObject)
{
backShadowRatio = ProjectedShadow::GetThickness(
shadowIndex,
surface.position);
}
transmissionDistance = ProjectedShadow::GetThickness(shadowIndex, surface.position);
}
else if (o_transmission_mode == TransmissionMode::ThinObject)
{
transmissionDistance = ProjectedShadow::GetThickness(shadowIndex, surface.position - lightingData.shrinkFactor * surface.vertexNormal);
}
#endif
}
@ -113,7 +118,7 @@ void ApplyPointLight(ViewSrg::PointLight light, Surface surface, inout LightingD
lightingData.diffuseLighting += GetDiffuseLighting(surface, lightingData, lightIntensity, normalize(posToLight)) * litRatio;
// 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

@ -148,13 +148,21 @@ void ApplyQuadLight(ViewSrg::QuadLight light, Surface surface, inout LightingDat
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 +=
(
GetBackLighting(surface, lightingData, intensity, p0, 0.0) +
GetBackLighting(surface, lightingData, intensity, p1, 0.0) +
GetBackLighting(surface, lightingData, intensity, p2, 0.0) +
GetBackLighting(surface, lightingData, intensity, p3, 0.0) +
GetBackLighting(surface, lightingData, intensity, dirToLightCenter, 0.0)
GetBackLighting(surface, lightingData, intensity, p0, transmissionDistance, attenuationDistance) +
GetBackLighting(surface, lightingData, intensity, p1, transmissionDistance, attenuationDistance) +
GetBackLighting(surface, lightingData, intensity, p2, transmissionDistance, attenuationDistance) +
GetBackLighting(surface, lightingData, intensity, p3, transmissionDistance, attenuationDistance) +
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

@ -14,7 +14,8 @@ class TransmissionSurfaceData
{
float3 tint;
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();
};
@ -24,6 +25,7 @@ void TransmissionSurfaceData::InitializeToZero()
tint = float3(0.0f, 0.0f, 0.0f);
thickness = 0.0f;
transmissionParams = float4(0.0f, 0.0f, 0.0f, 0.0f);
scatterDistance = float3(0.0f, 0.0f, 0.0f);
}
#endif

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

Loading…
Cancel
Save