diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/Motion/SceneDebug/Jack_Idle_Aim_ZUp.dbgsg b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/Motion/SceneDebug/Jack_Idle_Aim_ZUp.dbgsg index c8c5c8697b..d27055e826 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/Motion/SceneDebug/Jack_Idle_Aim_ZUp.dbgsg +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/Motion/SceneDebug/Jack_Idle_Aim_ZUp.dbgsg @@ -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 diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/Motion/SceneDebug/jack_idle_aim_zup.dbgsg.xml b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/Motion/SceneDebug/jack_idle_aim_zup.dbgsg.xml index caaf3810fe..ba0da98440 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/Motion/SceneDebug/jack_idle_aim_zup.dbgsg.xml +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/Motion/SceneDebug/jack_idle_aim_zup.dbgsg.xml @@ -114,7 +114,7 @@ - + @@ -191,7 +191,7 @@ - + @@ -204,7 +204,7 @@ - + @@ -268,7 +268,7 @@ - + @@ -319,7 +319,7 @@ - + @@ -408,7 +408,7 @@ - + @@ -497,7 +497,7 @@ - + @@ -548,7 +548,7 @@ - + @@ -650,7 +650,7 @@ - + @@ -701,7 +701,7 @@ - + @@ -727,7 +727,7 @@ - + @@ -854,7 +854,7 @@ - + @@ -905,7 +905,7 @@ - + @@ -1109,7 +1109,7 @@ - + @@ -1141,7 +1141,7 @@ - + @@ -1415,7 +1415,7 @@ - + @@ -1441,7 +1441,7 @@ - + @@ -1454,7 +1454,7 @@ - + @@ -1467,7 +1467,7 @@ - + @@ -1569,7 +1569,7 @@ - + @@ -1582,7 +1582,7 @@ - + @@ -1608,7 +1608,7 @@ - + @@ -1659,7 +1659,7 @@ - + @@ -1710,7 +1710,7 @@ - + @@ -1761,7 +1761,7 @@ - + @@ -1812,7 +1812,7 @@ - + @@ -1825,7 +1825,7 @@ - + @@ -1914,7 +1914,7 @@ - + @@ -1965,7 +1965,7 @@ - + @@ -2067,7 +2067,7 @@ - + @@ -2169,7 +2169,7 @@ - + @@ -2220,7 +2220,7 @@ - + @@ -2271,7 +2271,7 @@ - + @@ -2322,7 +2322,7 @@ - + @@ -2373,7 +2373,7 @@ - + @@ -2475,7 +2475,7 @@ - + @@ -2526,7 +2526,7 @@ - + @@ -2628,7 +2628,7 @@ - + @@ -2793,7 +2793,7 @@ - + @@ -2844,7 +2844,7 @@ - + @@ -3009,7 +3009,7 @@ - + diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingLOD/SceneDebug/lodtest.dbgsg b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingLOD/SceneDebug/lodtest.dbgsg index 90bcb94795..6d0b8fe246 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingLOD/SceneDebug/lodtest.dbgsg +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingLOD/SceneDebug/lodtest.dbgsg @@ -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 diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingLOD/SceneDebug/lodtest.dbgsg.xml b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingLOD/SceneDebug/lodtest.dbgsg.xml index d1af4198b5..73cb0e2776 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingLOD/SceneDebug/lodtest.dbgsg.xml +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingLOD/SceneDebug/lodtest.dbgsg.xml @@ -424,7 +424,7 @@ - + @@ -492,7 +492,7 @@ - + @@ -1729,7 +1729,7 @@ - + @@ -1760,7 +1760,7 @@ - + @@ -1891,7 +1891,7 @@ - + @@ -1922,7 +1922,7 @@ - + diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingPhysics/SceneDebug/physicstest.dbgsg b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingPhysics/SceneDebug/physicstest.dbgsg index 9b7ec58b7a..8cafe03a8f 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingPhysics/SceneDebug/physicstest.dbgsg +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingPhysics/SceneDebug/physicstest.dbgsg @@ -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 diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingPhysics/SceneDebug/physicstest.dbgsg.xml b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingPhysics/SceneDebug/physicstest.dbgsg.xml index b22eb14fc6..24452dabeb 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingPhysics/SceneDebug/physicstest.dbgsg.xml +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/SoftNamingPhysics/SceneDebug/physicstest.dbgsg.xml @@ -55,7 +55,7 @@ - + @@ -123,7 +123,7 @@ - + @@ -309,7 +309,7 @@ - + @@ -340,7 +340,7 @@ - + @@ -471,7 +471,7 @@ - + @@ -502,7 +502,7 @@ - + diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshLinkedMaterials/SceneDebug/multiple_mesh_linked_materials.dbgsg b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshLinkedMaterials/SceneDebug/multiple_mesh_linked_materials.dbgsg index c0544ea3a9..a9f329af3b 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshLinkedMaterials/SceneDebug/multiple_mesh_linked_materials.dbgsg +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshLinkedMaterials/SceneDebug/multiple_mesh_linked_materials.dbgsg @@ -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 diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshLinkedMaterials/SceneDebug/multiple_mesh_linked_materials.dbgsg.xml b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshLinkedMaterials/SceneDebug/multiple_mesh_linked_materials.dbgsg.xml index 3eaf018fb6..fe2ffe18f5 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshLinkedMaterials/SceneDebug/multiple_mesh_linked_materials.dbgsg.xml +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshLinkedMaterials/SceneDebug/multiple_mesh_linked_materials.dbgsg.xml @@ -178,7 +178,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -957,7 +957,7 @@ - + @@ -988,7 +988,7 @@ - + @@ -1174,7 +1174,7 @@ - + @@ -1205,7 +1205,7 @@ - + diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshOneMaterial/SceneDebug/multiple_mesh_one_material.dbgsg b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshOneMaterial/SceneDebug/multiple_mesh_one_material.dbgsg index 48135760f2..f1b230c37f 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshOneMaterial/SceneDebug/multiple_mesh_one_material.dbgsg +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshOneMaterial/SceneDebug/multiple_mesh_one_material.dbgsg @@ -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 diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshOneMaterial/SceneDebug/multiple_mesh_one_material.dbgsg.xml b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshOneMaterial/SceneDebug/multiple_mesh_one_material.dbgsg.xml index 39ac33f654..2ff1a1bc9e 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshOneMaterial/SceneDebug/multiple_mesh_one_material.dbgsg.xml +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshOneMaterial/SceneDebug/multiple_mesh_one_material.dbgsg.xml @@ -178,7 +178,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -737,7 +737,7 @@ - + @@ -768,7 +768,7 @@ - + @@ -899,7 +899,7 @@ - + @@ -930,7 +930,7 @@ - + diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material.dbgsg b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material.dbgsg index c5587a2778..8a350f1ff9 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material.dbgsg +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material.dbgsg @@ -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 diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material.dbgsg.xml b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material.dbgsg.xml index c41c1414a4..5d86d401cf 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material.dbgsg.xml +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material.dbgsg.xml @@ -178,7 +178,7 @@ - + @@ -246,7 +246,7 @@ - + @@ -737,7 +737,7 @@ - + @@ -768,7 +768,7 @@ - + @@ -899,7 +899,7 @@ - + @@ -930,7 +930,7 @@ - + diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material_override.dbgsg b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material_override.dbgsg index 8426a68d3b..32fbc37a50 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material_override.dbgsg +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material_override.dbgsg @@ -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 diff --git a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material_override.dbgsg.xml b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material_override.dbgsg.xml index 01167ec0ee..dec8ec1bb8 100644 --- a/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material_override.dbgsg.xml +++ b/AutomatedTesting/Gem/PythonTests/assetpipeline/fbx_tests/assets/TwoMeshTwoMaterial/SceneDebug/multiple_mesh_multiple_material_override.dbgsg.xml @@ -178,7 +178,7 @@ - + @@ -682,7 +682,7 @@ - + @@ -713,7 +713,7 @@ - + diff --git a/Code/Editor/Util/ImageUtil.cpp b/Code/Editor/Util/ImageUtil.cpp index 45d39f1f02..627ea9f750 100644 --- a/Code/Editor/Util/ImageUtil.cpp +++ b/Code/Editor/Util/ImageUtil.cpp @@ -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); diff --git a/Code/Framework/AzCore/AzCore/RTTI/AzStdOnDemandReflectionSpecializations.cpp b/Code/Framework/AzCore/AzCore/RTTI/AzStdOnDemandReflectionSpecializations.cpp index c42e32cd42..582d106964 100644 --- a/Code/Framework/AzCore/AzCore/RTTI/AzStdOnDemandReflectionSpecializations.cpp +++ b/Code/Framework/AzCore/AzCore/RTTI/AzStdOnDemandReflectionSpecializations.cpp @@ -136,7 +136,7 @@ namespace AZ::CommonOnDemandReflections ->template Constructor() ->Attribute(AZ::Script::Attributes::ConstructorOverride, &OnDemandLuaFunctions::ConstructStringView) ->Attribute(AZ::Script::Attributes::ReaderWriterOverride, ScriptContext::CustomReaderWriter(&OnDemandLuaFunctions::StringTypeToLua, &OnDemandLuaFunctions::StringTypeFromLua)) - ->Method("ToString", [](const ContainerType& stringView) { return static_cast(stringView).c_str(); }, { { { "Reference", "String view object being converted to string" } } }) + ->Method("ToString", [](const ContainerType& stringView) { return stringView.data(); }, { { { "Reference", "String view object being converted to string" } } }) ->Attribute(AZ::Script::Attributes::ToolTip, "Converts string_view to string") ->Attribute(AZ::Script::Attributes::Operator, AZ::Script::Attributes::OperatorType::ToString) ->template WrappingMember(&ContainerType::data) diff --git a/Code/Framework/AzCore/Tests/Platform/Android/Tests/UtilsTests_Android.cpp b/Code/Framework/AzCore/Tests/Platform/Android/Tests/UtilsTests_Android.cpp index 7ec589d103..45063bfa27 100644 --- a/Code/Framework/AzCore/Tests/Platform/Android/Tests/UtilsTests_Android.cpp +++ b/Code/Framework/AzCore/Tests/Platform/Android/Tests/UtilsTests_Android.cpp @@ -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); } } diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.cpp b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.cpp index 05c773f056..de6cc0042b 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.cpp @@ -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; } diff --git a/Code/Framework/AzFramework/AzFramework/SurfaceData/SurfaceData.h b/Code/Framework/AzFramework/AzFramework/SurfaceData/SurfaceData.h index 77d9ae4239..9faa03f921 100644 --- a/Code/Framework/AzFramework/AzFramework/SurfaceData/SurfaceData.h +++ b/Code/Framework/AzFramework/AzFramework/SurfaceData/SurfaceData.h @@ -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] diff --git a/Code/Framework/AzFramework/Platform/Linux/AzFramework/Process/ProcessWatcher_Linux.cpp b/Code/Framework/AzFramework/Platform/Linux/AzFramework/Process/ProcessWatcher_Linux.cpp index 7c86e00fec..999f2e9650 100644 --- a/Code/Framework/AzFramework/Platform/Linux/AzFramework/Process/ProcessWatcher_Linux.cpp +++ b/Code/Framework/AzFramework/Platform/Linux/AzFramework/Process/ProcessWatcher_Linux.cpp @@ -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 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); diff --git a/Code/Framework/AzNetworking/Platform/Common/UnixLike/AzNetworking/Utilities/NetworkCommon_UnixLike.cpp b/Code/Framework/AzNetworking/Platform/Common/UnixLike/AzNetworking/Utilities/NetworkCommon_UnixLike.cpp index e2825f4afb..20dfe8b155 100644 --- a/Code/Framework/AzNetworking/Platform/Common/UnixLike/AzNetworking/Utilities/NetworkCommon_UnixLike.cpp +++ b/Code/Framework/AzNetworking/Platform/Common/UnixLike/AzNetworking/Utilities/NetworkCommon_UnixLike.cpp @@ -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; } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.cpp index c7e37258f2..62c6518d4c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabFocusHandler.cpp @@ -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(); } diff --git a/Code/Tools/AzTestRunner/Platform/Common/platform_host_posix.cpp b/Code/Tools/AzTestRunner/Platform/Common/platform_host_posix.cpp index e2e0e801df..7eee861fba 100644 --- a/Code/Tools/AzTestRunner/Platform/Common/platform_host_posix.cpp +++ b/Code/Tools/AzTestRunner/Platform/Common/platform_host_posix.cpp @@ -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"); } } diff --git a/Code/Tools/SceneAPI/SceneBuilder/Importers/AssImpUvMapImporter.cpp b/Code/Tools/SceneAPI/SceneBuilder/Importers/AssImpUvMapImporter.cpp index 9e0d788896..31c155c7eb 100644 --- a/Code/Tools/SceneAPI/SceneBuilder/Importers/AssImpUvMapImporter.cpp +++ b/Code/Tools/SceneAPI/SceneBuilder/Importers/AssImpUvMapImporter.cpp @@ -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()); } } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Assets/Config/UserInterface_Compressed.preset b/Gems/Atom/Asset/ImageProcessingAtom/Assets/Config/UserInterface_Compressed.preset index cd1b00b2fb..c89fae1136 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Assets/Config/UserInterface_Compressed.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Assets/Config/UserInterface_Compressed.preset @@ -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" } } } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Assets/Config/UserInterface_Lossless.preset b/Gems/Atom/Asset/ImageProcessingAtom/Assets/Config/UserInterface_Lossless.preset index bec6a604ef..e68ea9edc3 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Assets/Config/UserInterface_Lossless.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Assets/Config/UserInterface_Lossless.preset @@ -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" } } } diff --git a/Gems/Atom/Feature/Common/Assets/Passes/SsaoCompute.pass b/Gems/Atom/Feature/Common/Assets/Passes/SsaoCompute.pass index 2c48506f8f..3c4a8c76f1 100644 --- a/Gems/Atom/Feature/Common/Assets/Passes/SsaoCompute.pass +++ b/Gems/Atom/Feature/Common/Assets/Passes/SsaoCompute.pass @@ -50,8 +50,7 @@ "FilePath": "Shaders/PostProcessing/SsaoCompute.shader" }, "Make Fullscreen Pass": true, - "PipelineViewTag": "MainCamera", - "Use Async Compute": true + "PipelineViewTag": "MainCamera" }, "FallbackConnections": [ { diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp index 131cbd7053..5b3f305cd0 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.cpp @@ -177,10 +177,19 @@ namespace EMStudio m_rotateManipulators.ConfigureView( AzToolsFramework::RotationManipulatorRadius(), AzFramework::ViewportColors::XAxisColor, AzFramework::ViewportColors::YAxisColor, AzFramework::ViewportColors::ZAxisColor); + m_rotateManipulators.InstallLeftMouseDownCallback( + [this]([[maybe_unused]]const AzToolsFramework::AngularManipulator::Action& action) + { + const AZ::EntityId entityId = m_animViewportWidget->GetAnimViewportRenderer()->GetEntityId(); + AZ::TransformBus::EventResult(m_mouseDownStartTransform, entityId, &AZ::TransformBus::Events::GetLocalTM); + }); + m_rotateManipulators.InstallMouseMoveCallback( [this](const AzToolsFramework::AngularManipulator::Action& action) { - OnManipulatorRotated(action.LocalOrientation()); + const AZ::EntityId entityId = m_animViewportWidget->GetAnimViewportRenderer()->GetEntityId(); + AZ::TransformBus::Event(entityId, &AZ::TransformBus::Events::SetLocalRotationQuaternion, + m_mouseDownStartTransform.GetRotation() * action.m_current.m_delta); }); // Setup the scale manipulator @@ -189,10 +198,21 @@ namespace EMStudio m_scaleManipulators.ConfigureView( AzToolsFramework::LinearManipulatorAxisLength(), AzFramework::ViewportColors::XAxisColor, AzFramework::ViewportColors::YAxisColor, AzFramework::ViewportColors::ZAxisColor); + m_scaleManipulators.InstallAxisLeftMouseDownCallback( + [this]([[maybe_unused]] const AzToolsFramework::LinearManipulator::Action& action) + { + const AZ::EntityId entityId = m_animViewportWidget->GetAnimViewportRenderer()->GetEntityId(); + AZ::TransformBus::EventResult(m_mouseDownStartTransform, entityId, &AZ::TransformBus::Events::GetLocalTM); + }); m_scaleManipulators.InstallAxisMouseMoveCallback( [this](const AzToolsFramework::LinearManipulator::Action& action) { - OnManipulatorScaled(action.LocalScale(), action.LocalScaleOffset()); + // Since we are compulting a uniform scale, the delta scale should be the none-zero value from one of the three axis. + const float deltaScale = action.m_current.m_localPositionOffset.GetMaxElement() + + action.m_current.m_localPositionOffset.GetMinElement(); + const AZ::EntityId entityId = m_animViewportWidget->GetAnimViewportRenderer()->GetEntityId(); + AZ::TransformBus::Event(entityId, &AZ::TransformBus::Events::SetLocalUniformScale, + m_mouseDownStartTransform.GetUniformScale() + deltaScale); }); } @@ -259,33 +279,6 @@ namespace EMStudio AZ::TransformBus::Event(entityId, &AZ::TransformBus::Events::SetLocalTranslation, position); } - void AtomRenderPlugin::OnManipulatorRotated(const AZ::Quaternion& rotation) - { - const AZ::EntityId entityId = m_animViewportWidget->GetAnimViewportRenderer()->GetEntityId(); - AZ::TransformBus::Event(entityId, &AZ::TransformBus::Events::SetLocalRotationQuaternion, rotation); - } - - void AtomRenderPlugin::OnManipulatorScaled( - const AZ::Vector3& scale, const AZ::Vector3& scaleOffset) - { - // Use the scaleOffset to determine which axis to use on the uniform scale. - float localScale = 1.0f; - if (scaleOffset.GetX() != 0.0f) - { - localScale = scale.GetX(); - } - else if (scaleOffset.GetY() != 0.0f) - { - localScale = scale.GetY(); - } - else if (scaleOffset.GetZ() != 0.0f) - { - localScale = scale.GetZ(); - } - const AZ::EntityId entityId = m_animViewportWidget->GetAnimViewportRenderer()->GetEntityId(); - AZ::TransformBus::Event(entityId, &AZ::TransformBus::Events::SetLocalUniformScale, localScale); - } - void AtomRenderPlugin::LoadRenderOptions() { AZStd::string renderOptionsFilename(GetManager()->GetAppDataFolder()); diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h index 23980ddc0d..2207690628 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AtomRenderPlugin.h @@ -70,8 +70,6 @@ namespace EMStudio void SetupManipulators(); void OnManipulatorMoved(const AZ::Vector3& position); - void OnManipulatorRotated(const AZ::Quaternion& rotation); - void OnManipulatorScaled(const AZ::Vector3& scale, const AZ::Vector3& scaleOffset); QWidget* m_innerWidget = nullptr; AnimViewportWidget* m_animViewportWidget = nullptr; @@ -82,6 +80,7 @@ namespace EMStudio AzToolsFramework::RotationManipulators m_rotateManipulators; AzToolsFramework::ScaleManipulators m_scaleManipulators; AZStd::shared_ptr m_manipulatorManager; + AZ::Transform m_mouseDownStartTransform; MCORE_DEFINECOMMANDCALLBACK(ImportActorCallback); MCORE_DEFINECOMMANDCALLBACK(RemoveActorCallback); diff --git a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp index 58c66c3b8c..c2ce6a5ffe 100644 --- a/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp +++ b/Gems/AtomTressFX/External/Code/src/TressFX/TressFXAsset.cpp @@ -282,8 +282,8 @@ namespace AMD TressFXTFXFileHeader header = {}; // read the header - EI_Seek(ioObject, 0); // make sure the stream pos is at the beginning. - EI_Read((void*)&header, sizeof(TressFXTFXFileHeader), ioObject); + [[maybe_unused]] auto eiSeekResult = EI_Seek(ioObject, 0); // make sure the stream pos is at the beginning. + [[maybe_unused]] auto eiReadResult = EI_Read((void*)&header, sizeof(TressFXTFXFileHeader), ioObject); // If the tfx version is lower than the current major version, exit. if (header.version < AMD_TRESSFX_VERSION_MAJOR) @@ -317,8 +317,8 @@ namespace AMD m_positions.resize(m_numTotalVertices); // size of m_positions = number of total vertices * sizeo of each position vector. // Read position data from the io stream. - EI_Seek(ioObject, header.offsetVertexPosition); - EI_Read((void*)m_positions.data(), numStrandsInFile * m_numVerticesPerStrand * sizeof(AMD::float4), ioObject); // note that the position data in io stream contains only guide hairs. If we call GenerateFollowHairs + eiSeekResult = EI_Seek(ioObject, header.offsetVertexPosition); + eiReadResult = EI_Read((void*)m_positions.data(), numStrandsInFile * m_numVerticesPerStrand * sizeof(AMD::float4), ioObject); // note that the position data in io stream contains only guide hairs. If we call GenerateFollowHairs // to generate follow hairs, m_positions will be re-allocated. // We need to make up some strands to fill up the buffer because the number of strands from stream is not necessarily multile of thread size. @@ -335,11 +335,11 @@ namespace AMD } // Read strand UVs - EI_Seek(ioObject, header.offsetStrandUV); + eiSeekResult = EI_Seek(ioObject, header.offsetStrandUV); m_strandUV.resize(m_numTotalStrands); // If we call GenerateFollowHairs to generate follow hairs, // m_strandUV will be re-allocated. - EI_Read((void*)m_strandUV.data(), numStrandsInFile * sizeof(AMD::float2), ioObject); + eiReadResult = EI_Read((void*)m_strandUV.data(), numStrandsInFile * sizeof(AMD::float2), ioObject); // Fill up the last empty space AMD::int32 indexLastStrand = (numStrandsInFile - 1); @@ -683,21 +683,21 @@ namespace AMD void TressFXAsset::GetBonesNames(FILE* ioObject, std::vector& boneNames) { AMD::int32 numOfBones = 0; - EI_Seek(ioObject, 0); - EI_Read((void*)&numOfBones, sizeof(AMD::int32), ioObject); + [[maybe_unused]] auto eiSeekResult = EI_Seek(ioObject, 0); + [[maybe_unused]] auto eiReadResult = EI_Read((void*)&numOfBones, sizeof(AMD::int32), ioObject); // boneNames.reserve(numOfBones); boneNames.resize(numOfBones); for (int i = 0; i < numOfBones; i++) { int boneIndex; - EI_Read((char*)&boneIndex, sizeof(AMD::int32), ioObject); + eiReadResult = EI_Read((char*)&boneIndex, sizeof(AMD::int32), ioObject); AMD::int32 charLen = 0; - EI_Read((char*)&charLen, sizeof(AMD::int32), ioObject); // character length includes null termination already. + eiReadResult = EI_Read((char*)&charLen, sizeof(AMD::int32), ioObject); // character length includes null termination already. char boneName[128]; - EI_Read(boneName, sizeof(char) * charLen, ioObject); + eiReadResult = EI_Read(boneName, sizeof(char) * charLen, ioObject); boneName[charLen] = '\0'; // adding 0 termination to be on the safe side. boneNames[i] = std::string(boneName); } @@ -730,8 +730,8 @@ namespace AMD m_boneSkinningData.resize(0); AMD::int32 numOfBones = 0; - EI_Seek(ioObject, 0); - EI_Read((void*)&numOfBones, sizeof(AMD::int32), ioObject); + [[maybe_unused]] auto eiSeekResult = EI_Seek(ioObject, 0); + [[maybe_unused]] auto eiReadResult = EI_Read((void*)&numOfBones, sizeof(AMD::int32), ioObject); if (skeletonBoneIndices.size() != numOfBones) { @@ -742,18 +742,18 @@ namespace AMD for (int i = 0; i < numOfBones; i++) { int boneIndex; - EI_Read((char*)&boneIndex, sizeof(AMD::int32), ioObject); + eiReadResult = EI_Read((char*)&boneIndex, sizeof(AMD::int32), ioObject); AMD::int32 charLen = 0; - EI_Read((char*)&charLen, sizeof(AMD::int32), ioObject); // character length includes null termination already. + eiReadResult = EI_Read((char*)&charLen, sizeof(AMD::int32), ioObject); // character length includes null termination already. char boneName[128]; - EI_Read(boneName, sizeof(char) * charLen, ioObject); + eiReadResult = EI_Read(boneName, sizeof(char) * charLen, ioObject); } // Reading the number of strands AMD::int32 numOfStrandsInStream = 0; - EI_Read((char*)&numOfStrandsInStream, sizeof(AMD::int32), ioObject); + eiReadResult = EI_Read((char*)&numOfStrandsInStream, sizeof(AMD::int32), ioObject); //If the number of strands from the input stream (tfxbone) is bigger than what we already know from tfx, something is wrong. if (m_numGuideStrands < numOfStrandsInStream) @@ -765,15 +765,15 @@ namespace AMD for (int i = 0; i < numOfStrandsInStream; ++i) { AMD::int32 index = 0; // Well, we don't really use this here. - EI_Read((char*)&index, sizeof(AMD::int32), ioObject); + eiReadResult = EI_Read((char*)&index, sizeof(AMD::int32), ioObject); for (AMD::int32 j = 0; j < TRESSFX_MAX_INFLUENTIAL_BONE_COUNT; ++j) { AMD::int32 boneIndex; - EI_Read((char*)&boneIndex, sizeof(AMD::int32), ioObject); + eiReadResult = EI_Read((char*)&boneIndex, sizeof(AMD::int32), ioObject); assert(boneIndex >= 0); skinData.boneIndex[j] = (float)skeletonBoneIndices[boneIndex]; // Change the joint index to be what the engine wants - EI_Read((char*)&skinData.weight[j], sizeof(AMD::real32), ioObject); + eiReadResult = EI_Read((char*)&skinData.weight[j], sizeof(AMD::real32), ioObject); } #if defined(AZ_ENABLE_TRACING) @@ -987,4 +987,3 @@ namespace AMD return true; } } // namespace AMD - diff --git a/Gems/GradientSignal/Code/Source/Components/GradientSurfaceDataComponent.cpp b/Gems/GradientSignal/Code/Source/Components/GradientSurfaceDataComponent.cpp index cd87e3044c..86bcbf2a2d 100644 --- a/Gems/GradientSignal/Code/Source/Components/GradientSurfaceDataComponent.cpp +++ b/Gems/GradientSignal/Code/Source/Components/GradientSurfaceDataComponent.cpp @@ -251,7 +251,7 @@ namespace GradientSignal const float value = m_gradientSampler.GetValue(sampleParams); if (value >= m_configuration.m_thresholdMin && value <= m_configuration.m_thresholdMax) { - weights.AddSurfaceWeightsIfGreater(m_configuration.m_modifierTags, value); + weights.AddSurfaceTagWeights(m_configuration.m_modifierTags, value); } } }); diff --git a/Gems/MotionMatching/Assets/Levels/MotionMatching_AutomaticDemo/CameraController_AutomaticDemo.scriptcanvas b/Gems/MotionMatching/Assets/Levels/MotionMatching_AutomaticDemo/CameraController_AutomaticDemo.scriptcanvas index 8569d7686b..391ad295a5 100644 --- a/Gems/MotionMatching/Assets/Levels/MotionMatching_AutomaticDemo/CameraController_AutomaticDemo.scriptcanvas +++ b/Gems/MotionMatching/Assets/Levels/MotionMatching_AutomaticDemo/CameraController_AutomaticDemo.scriptcanvas @@ -5,7 +5,7 @@ "ClassData": { "m_scriptCanvas": { "Id": { - "id": 1874297699023155003 + "id": 8461866310375259320 }, "Name": "CameraController", "Components": { @@ -579,17 +579,88 @@ }, { "Id": { - "id": 58633135722148 + "id": 214400860662419 + }, + "Name": "SC Node(GetVariable)", + "Components": { + "Component_[1359072869693534631]": { + "$type": "GetVariableNode", + "Id": 1359072869693534631, + "Slots": [ + { + "id": { + "m_id": "{7500DE86-7349-4213-B3D6-F2872EDF15A6}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "toolTip": "When signaled sends the property referenced by this node to a Data Output slot", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{8C8D3DD7-F821-42F4-AF51-5D976133DAE4}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "toolTip": "Signaled after the referenced property has been pushed to the Data Output slot", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{5E4734A2-3CAF-4E29-AC72-5689FF1FD619}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Number", + "DisplayDataType": { + "m_type": 3 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + } + ], + "m_variableId": { + "m_id": "{0620A309-A152-4CF3-BF76-284115B30780}" + }, + "m_variableDataOutSlotId": { + "m_id": "{5E4734A2-3CAF-4E29-AC72-5689FF1FD619}" + } + } + } + }, + { + "Id": { + "id": 58581596114596 }, "Name": "SC-Node(OperatorMul)", "Components": { - "Component_[13427352953117170385]": { + "Component_[14210959117790557692]": { "$type": "OperatorMul", - "Id": 13427352953117170385, + "Id": 14210959117790557692, "Slots": [ { "id": { - "m_id": "{B6D38C30-7BB4-4549-AFFA-C5A52AE9796E}" + "m_id": "{374AA17F-7CC0-4808-8269-6CC4F64579C3}" }, "contracts": [ { @@ -604,7 +675,7 @@ }, { "id": { - "m_id": "{86D20026-0D06-4DFB-B3CD-9BE5038B8121}" + "m_id": "{1E111259-19D2-4180-81A1-F648F79B004D}" }, "contracts": [ { @@ -619,7 +690,7 @@ }, { "id": { - "m_id": "{F9E6233F-EAFB-43F5-A10D-96A3A41763A7}" + "m_id": "{E7D6A002-7522-4915-BCCB-89A29E3D5582}" }, "DynamicTypeOverride": 3, "contracts": [ @@ -648,10 +719,10 @@ ] } ], - "slotName": "Number", + "slotName": "Transform", "toolTip": "An operand to use in performing the specified Operation", "DisplayDataType": { - "m_type": 3 + "m_type": 7 }, "DisplayGroup": { "Value": 1114760223 @@ -667,7 +738,7 @@ }, { "id": { - "m_id": "{9D3D613C-ABE4-4028-A1CC-22E6E036376C}" + "m_id": "{0ABC384E-FBE6-40F8-B5C3-7652B814102C}" }, "DynamicTypeOverride": 3, "contracts": [ @@ -696,10 +767,10 @@ ] } ], - "slotName": "Number", + "slotName": "Transform", "toolTip": "An operand to use in performing the specified Operation", "DisplayDataType": { - "m_type": 3 + "m_type": 7 }, "DisplayGroup": { "Value": 1114760223 @@ -715,7 +786,7 @@ }, { "id": { - "m_id": "{C0EA31C9-71C6-4CCF-A31B-33E7385C78D0}" + "m_id": "{7DA1EC3E-277C-4DDA-94FD-EF2EC66CD272}" }, "DynamicTypeOverride": 3, "contracts": [ @@ -747,7 +818,7 @@ "slotName": "Result", "toolTip": "The result of the specified operation", "DisplayDataType": { - "m_type": 3 + "m_type": 7 }, "DisplayGroup": { "Value": 1114760223 @@ -765,110 +836,65 @@ "Datums": [ { "scriptCanvasType": { - "m_type": 3 + "m_type": 7 }, "isNullPointer": false, - "$type": "double", - "value": 1.0, - "label": "Number" + "$type": "Transform", + "value": { + "Translation": [ + 0.0, + 0.0, + 0.0 + ], + "Rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "Scale": 1.0 + }, + "label": "Transform" }, { "scriptCanvasType": { - "m_type": 3 + "m_type": 7 }, "isNullPointer": false, - "$type": "double", - "value": -90.0, - "label": "Number" - } - ] - } - } - }, - { - "Id": { - "id": 214400860662419 - }, - "Name": "SC Node(GetVariable)", - "Components": { - "Component_[1359072869693534631]": { - "$type": "GetVariableNode", - "Id": 1359072869693534631, - "Slots": [ - { - "id": { - "m_id": "{7500DE86-7349-4213-B3D6-F2872EDF15A6}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "In", - "toolTip": "When signaled sends the property referenced by this node to a Data Output slot", - "Descriptor": { - "ConnectionType": 1, - "SlotType": 1 - } - }, - { - "id": { - "m_id": "{8C8D3DD7-F821-42F4-AF51-5D976133DAE4}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "Out", - "toolTip": "Signaled after the referenced property has been pushed to the Data Output slot", - "Descriptor": { - "ConnectionType": 2, - "SlotType": 1 - } - }, - { - "id": { - "m_id": "{5E4734A2-3CAF-4E29-AC72-5689FF1FD619}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "Number", - "DisplayDataType": { - "m_type": 3 - }, - "Descriptor": { - "ConnectionType": 2, - "SlotType": 2 + "$type": "Transform", + "value": { + "Translation": [ + 0.0, + 0.0, + 0.0 + ], + "Rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "Scale": 1.0 }, - "DataType": 1 + "label": "Transform" } - ], - "m_variableId": { - "m_id": "{0620A309-A152-4CF3-BF76-284115B30780}" - }, - "m_variableDataOutSlotId": { - "m_id": "{5E4734A2-3CAF-4E29-AC72-5689FF1FD619}" - } + ] } } }, { "Id": { - "id": 58577301147300 + "id": 213241219492499 }, - "Name": "SC-Node(OperatorMul)", + "Name": "SC-Node(OperatorAdd)", "Components": { - "Component_[14055904483179664364]": { - "$type": "OperatorMul", - "Id": 14055904483179664364, + "Component_[14948826965328970882]": { + "$type": "OperatorAdd", + "Id": 14948826965328970882, "Slots": [ { "id": { - "m_id": "{F5BE2CBC-3CA3-44BD-B7D4-71D9CAC023B3}" + "m_id": "{56805D2B-0C98-4145-80FB-AA1DCB16CF1A}" }, "contracts": [ { @@ -883,7 +909,7 @@ }, { "id": { - "m_id": "{4CD5D25E-73DA-4936-89E9-8F0A7946DED1}" + "m_id": "{008FCEC7-3E86-4249-A736-F158EFDB0EFA}" }, "contracts": [ { @@ -898,7 +924,7 @@ }, { "id": { - "m_id": "{2F0B4FC7-0B48-42A9-8073-8493E9F1D2E5}" + "m_id": "{DB849F77-66D0-4D64-A45F-122F93E1E80C}" }, "DynamicTypeOverride": 3, "contracts": [ @@ -907,7 +933,6 @@ }, { "$type": "MathOperatorContract", - "OperatorType": "Multiply", "NativeTypes": [ { "m_type": 3 @@ -916,7 +941,19 @@ "m_type": 6 }, { - "m_type": 7 + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 }, { "m_type": 14 @@ -946,7 +983,7 @@ }, { "id": { - "m_id": "{67B729E8-73F9-4B97-A67C-C986E874BD01}" + "m_id": "{CA8ABF3F-BF80-4A8B-A2B2-A1D2C16278C1}" }, "DynamicTypeOverride": 3, "contracts": [ @@ -955,7 +992,6 @@ }, { "$type": "MathOperatorContract", - "OperatorType": "Multiply", "NativeTypes": [ { "m_type": 3 @@ -964,7 +1000,19 @@ "m_type": 6 }, { - "m_type": 7 + "m_type": 8 + }, + { + "m_type": 9 + }, + { + "m_type": 10 + }, + { + "m_type": 11 + }, + { + "m_type": 12 }, { "m_type": 14 @@ -994,7 +1042,7 @@ }, { "id": { - "m_id": "{785A9BC8-8F65-4DFE-8809-7C8E937A8D8B}" + "m_id": "{53895246-F759-4328-AABB-D26E49E5208D}" }, "DynamicTypeOverride": 3, "contracts": [ @@ -1003,7 +1051,6 @@ }, { "$type": "MathOperatorContract", - "OperatorType": "Multiply", "NativeTypes": [ { "m_type": 3 @@ -1012,414 +1059,10 @@ "m_type": 6 }, { - "m_type": 7 + "m_type": 8 }, { - "m_type": 14 - }, - { - "m_type": 15 - } - ] - } - ], - "slotName": "Result", - "toolTip": "The result of the specified operation", - "DisplayDataType": { - "m_type": 3 - }, - "DisplayGroup": { - "Value": 1114760223 - }, - "Descriptor": { - "ConnectionType": 2, - "SlotType": 2 - }, - "DynamicGroup": { - "Value": 1114760223 - }, - "DataType": 1 - } - ], - "Datums": [ - { - "scriptCanvasType": { - "m_type": 3 - }, - "isNullPointer": false, - "$type": "double", - "value": 1.0, - "label": "Number" - }, - { - "scriptCanvasType": { - "m_type": 3 - }, - "isNullPointer": false, - "$type": "double", - "value": 1.0, - "label": "Number" - } - ] - } - } - }, - { - "Id": { - "id": 58581596114596 - }, - "Name": "SC-Node(OperatorMul)", - "Components": { - "Component_[14210959117790557692]": { - "$type": "OperatorMul", - "Id": 14210959117790557692, - "Slots": [ - { - "id": { - "m_id": "{374AA17F-7CC0-4808-8269-6CC4F64579C3}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "In", - "Descriptor": { - "ConnectionType": 1, - "SlotType": 1 - } - }, - { - "id": { - "m_id": "{1E111259-19D2-4180-81A1-F648F79B004D}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "Out", - "Descriptor": { - "ConnectionType": 2, - "SlotType": 1 - } - }, - { - "id": { - "m_id": "{E7D6A002-7522-4915-BCCB-89A29E3D5582}" - }, - "DynamicTypeOverride": 3, - "contracts": [ - { - "$type": "SlotTypeContract" - }, - { - "$type": "MathOperatorContract", - "OperatorType": "Multiply", - "NativeTypes": [ - { - "m_type": 3 - }, - { - "m_type": 6 - }, - { - "m_type": 7 - }, - { - "m_type": 14 - }, - { - "m_type": 15 - } - ] - } - ], - "slotName": "Transform", - "toolTip": "An operand to use in performing the specified Operation", - "DisplayDataType": { - "m_type": 7 - }, - "DisplayGroup": { - "Value": 1114760223 - }, - "Descriptor": { - "ConnectionType": 1, - "SlotType": 2 - }, - "DynamicGroup": { - "Value": 1114760223 - }, - "DataType": 1 - }, - { - "id": { - "m_id": "{0ABC384E-FBE6-40F8-B5C3-7652B814102C}" - }, - "DynamicTypeOverride": 3, - "contracts": [ - { - "$type": "SlotTypeContract" - }, - { - "$type": "MathOperatorContract", - "OperatorType": "Multiply", - "NativeTypes": [ - { - "m_type": 3 - }, - { - "m_type": 6 - }, - { - "m_type": 7 - }, - { - "m_type": 14 - }, - { - "m_type": 15 - } - ] - } - ], - "slotName": "Transform", - "toolTip": "An operand to use in performing the specified Operation", - "DisplayDataType": { - "m_type": 7 - }, - "DisplayGroup": { - "Value": 1114760223 - }, - "Descriptor": { - "ConnectionType": 1, - "SlotType": 2 - }, - "DynamicGroup": { - "Value": 1114760223 - }, - "DataType": 1 - }, - { - "id": { - "m_id": "{7DA1EC3E-277C-4DDA-94FD-EF2EC66CD272}" - }, - "DynamicTypeOverride": 3, - "contracts": [ - { - "$type": "SlotTypeContract" - }, - { - "$type": "MathOperatorContract", - "OperatorType": "Multiply", - "NativeTypes": [ - { - "m_type": 3 - }, - { - "m_type": 6 - }, - { - "m_type": 7 - }, - { - "m_type": 14 - }, - { - "m_type": 15 - } - ] - } - ], - "slotName": "Result", - "toolTip": "The result of the specified operation", - "DisplayDataType": { - "m_type": 7 - }, - "DisplayGroup": { - "Value": 1114760223 - }, - "Descriptor": { - "ConnectionType": 2, - "SlotType": 2 - }, - "DynamicGroup": { - "Value": 1114760223 - }, - "DataType": 1 - } - ], - "Datums": [ - { - "scriptCanvasType": { - "m_type": 7 - }, - "isNullPointer": false, - "$type": "Transform", - "value": { - "Translation": [ - 0.0, - 0.0, - 0.0 - ], - "Rotation": [ - 0.0, - 0.0, - 0.0, - 1.0 - ], - "Scale": 1.0 - }, - "label": "Transform" - }, - { - "scriptCanvasType": { - "m_type": 7 - }, - "isNullPointer": false, - "$type": "Transform", - "value": { - "Translation": [ - 0.0, - 0.0, - 0.0 - ], - "Rotation": [ - 0.0, - 0.0, - 0.0, - 1.0 - ], - "Scale": 1.0 - }, - "label": "Transform" - } - ] - } - } - }, - { - "Id": { - "id": 213241219492499 - }, - "Name": "SC-Node(OperatorAdd)", - "Components": { - "Component_[14948826965328970882]": { - "$type": "OperatorAdd", - "Id": 14948826965328970882, - "Slots": [ - { - "id": { - "m_id": "{56805D2B-0C98-4145-80FB-AA1DCB16CF1A}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "In", - "Descriptor": { - "ConnectionType": 1, - "SlotType": 1 - } - }, - { - "id": { - "m_id": "{008FCEC7-3E86-4249-A736-F158EFDB0EFA}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "Out", - "Descriptor": { - "ConnectionType": 2, - "SlotType": 1 - } - }, - { - "id": { - "m_id": "{DB849F77-66D0-4D64-A45F-122F93E1E80C}" - }, - "DynamicTypeOverride": 3, - "contracts": [ - { - "$type": "SlotTypeContract" - }, - { - "$type": "MathOperatorContract", - "NativeTypes": [ - { - "m_type": 3 - }, - { - "m_type": 6 - }, - { - "m_type": 8 - }, - { - "m_type": 9 - }, - { - "m_type": 10 - }, - { - "m_type": 11 - }, - { - "m_type": 12 - }, - { - "m_type": 14 - }, - { - "m_type": 15 - } - ] - } - ], - "slotName": "Number", - "toolTip": "An operand to use in performing the specified Operation", - "DisplayDataType": { - "m_type": 3 - }, - "DisplayGroup": { - "Value": 1114760223 - }, - "Descriptor": { - "ConnectionType": 1, - "SlotType": 2 - }, - "DynamicGroup": { - "Value": 1114760223 - }, - "DataType": 1 - }, - { - "id": { - "m_id": "{CA8ABF3F-BF80-4A8B-A2B2-A1D2C16278C1}" - }, - "DynamicTypeOverride": 3, - "contracts": [ - { - "$type": "SlotTypeContract" - }, - { - "$type": "MathOperatorContract", - "NativeTypes": [ - { - "m_type": 3 - }, - { - "m_type": 6 - }, - { - "m_type": 8 - }, - { - "m_type": 9 + "m_type": 9 }, { "m_type": 10 @@ -1439,8 +1082,8 @@ ] } ], - "slotName": "Number", - "toolTip": "An operand to use in performing the specified Operation", + "slotName": "Result", + "toolTip": "The result of the specified operation", "DisplayDataType": { "m_type": 3 }, @@ -1448,7 +1091,7 @@ "Value": 1114760223 }, "Descriptor": { - "ConnectionType": 1, + "ConnectionType": 2, "SlotType": 2 }, "DynamicGroup": { @@ -1458,7 +1101,7 @@ }, { "id": { - "m_id": "{53895246-F759-4328-AABB-D26E49E5208D}" + "m_id": "{095D00D3-962F-47DD-8400-F025C008E579}" }, "DynamicTypeOverride": 3, "contracts": [ @@ -1498,8 +1141,8 @@ ] } ], - "slotName": "Result", - "toolTip": "The result of the specified operation", + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", "DisplayDataType": { "m_type": 3 }, @@ -1507,7 +1150,7 @@ "Value": 1114760223 }, "Descriptor": { - "ConnectionType": 2, + "ConnectionType": 1, "SlotType": 2 }, "DynamicGroup": { @@ -1534,6 +1177,16 @@ "$type": "double", "value": 0.0, "label": "Number" + }, + { + "isOverloadedStorage": false, + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 0.0, + "label": "Number" } ] } @@ -1582,296 +1235,86 @@ "DataType": 1 }, { - "id": { - "m_id": "{6BB59597-64B4-458F-9C96-B3E0DA73279A}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "In", - "Descriptor": { - "ConnectionType": 1, - "SlotType": 1 - } - }, - { - "id": { - "m_id": "{44A7845D-724A-4BB6-99F1-12B2E7979D93}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "Out", - "Descriptor": { - "ConnectionType": 2, - "SlotType": 1 - } - } - ], - "Datums": [ - { - "scriptCanvasType": { - "m_type": 1 - }, - "isNullPointer": false, - "$type": "EntityId", - "value": { - "id": 2901262558 - }, - "label": "Transform" - }, - { - "scriptCanvasType": { - "m_type": 7 - }, - "isNullPointer": false, - "$type": "Transform", - "value": { - "Translation": [ - 0.0, - 0.0, - 0.0 - ], - "Rotation": [ - 0.0, - 0.0, - 0.0, - 1.0 - ], - "Scale": 1.0 - }, - "label": "Transform: 1" - } - ], - "methodType": 0, - "methodName": "SetWorldTM", - "className": "TransformBus", - "resultSlotIDs": [ - {} - ], - "inputSlots": [ - { - "m_id": "{785CBBEE-E704-4049-A180-8E99E3E1E1F2}" - }, - { - "m_id": "{A7826FF9-C3B2-4E28-815D-9B07A6EE0949}" - } - ], - "prettyClassName": "TransformBus" - } - } - }, - { - "Id": { - "id": 239870016727699 - }, - "Name": "SC-Node(OperatorMul)", - "Components": { - "Component_[3092852928531574536]": { - "$type": "OperatorMul", - "Id": 3092852928531574536, - "Slots": [ - { - "id": { - "m_id": "{FEFF67A1-C89B-447E-80D4-CD94CB0C8AD7}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "In", - "Descriptor": { - "ConnectionType": 1, - "SlotType": 1 - } - }, - { - "id": { - "m_id": "{7E5D8673-F03A-4134-87DE-88AD13A74C29}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "Out", - "Descriptor": { - "ConnectionType": 2, - "SlotType": 1 - } - }, - { - "id": { - "m_id": "{8A243C9C-0D69-4753-B28B-A8D2FAC5D508}" - }, - "DynamicTypeOverride": 3, - "contracts": [ - { - "$type": "SlotTypeContract" - }, - { - "$type": "MathOperatorContract", - "OperatorType": "Multiply", - "NativeTypes": [ - { - "m_type": 3 - }, - { - "m_type": 6 - }, - { - "m_type": 7 - }, - { - "m_type": 14 - }, - { - "m_type": 15 - } - ] - } - ], - "slotName": "Number", - "toolTip": "An operand to use in performing the specified Operation", - "DisplayDataType": { - "m_type": 3 - }, - "DisplayGroup": { - "Value": 1114760223 - }, - "Descriptor": { - "ConnectionType": 1, - "SlotType": 2 - }, - "DynamicGroup": { - "Value": 1114760223 - }, - "DataType": 1 - }, - { - "id": { - "m_id": "{3F3F3DD6-124E-48A8-8373-6666900D8177}" - }, - "DynamicTypeOverride": 3, - "contracts": [ - { - "$type": "SlotTypeContract" - }, - { - "$type": "MathOperatorContract", - "OperatorType": "Multiply", - "NativeTypes": [ - { - "m_type": 3 - }, - { - "m_type": 6 - }, - { - "m_type": 7 - }, - { - "m_type": 14 - }, - { - "m_type": 15 - } - ] - } - ], - "slotName": "Number", - "toolTip": "An operand to use in performing the specified Operation", - "DisplayDataType": { - "m_type": 3 - }, - "DisplayGroup": { - "Value": 1114760223 - }, - "Descriptor": { - "ConnectionType": 1, - "SlotType": 2 - }, - "DynamicGroup": { - "Value": 1114760223 - }, - "DataType": 1 - }, - { - "id": { - "m_id": "{DFD1DE7E-B470-43F6-A6CF-E9E572D0C075}" - }, - "DynamicTypeOverride": 3, - "contracts": [ - { - "$type": "SlotTypeContract" - }, - { - "$type": "MathOperatorContract", - "OperatorType": "Multiply", - "NativeTypes": [ - { - "m_type": 3 - }, - { - "m_type": 6 - }, - { - "m_type": 7 - }, - { - "m_type": 14 - }, - { - "m_type": 15 - } - ] + "id": { + "m_id": "{6BB59597-64B4-458F-9C96-B3E0DA73279A}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" } ], - "slotName": "Result", - "toolTip": "The result of the specified operation", - "DisplayDataType": { - "m_type": 3 - }, - "DisplayGroup": { - "Value": 1114760223 + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{44A7845D-724A-4BB6-99F1-12B2E7979D93}" }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", "Descriptor": { "ConnectionType": 2, - "SlotType": 2 - }, - "DynamicGroup": { - "Value": 1114760223 - }, - "DataType": 1 + "SlotType": 1 + } } ], "Datums": [ { - "isOverloadedStorage": false, "scriptCanvasType": { - "m_type": 3 + "m_type": 1 }, "isNullPointer": false, - "$type": "double", - "value": 1.0, - "label": "Number" + "$type": "EntityId", + "value": { + "id": 2901262558 + }, + "label": "Transform" }, { - "isOverloadedStorage": false, "scriptCanvasType": { - "m_type": 3 + "m_type": 7 }, "isNullPointer": false, - "$type": "double", - "value": 10.0, - "label": "Number" + "$type": "Transform", + "value": { + "Translation": [ + 0.0, + 0.0, + 0.0 + ], + "Rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "Scale": 1.0 + }, + "label": "Transform: 1" } - ] + ], + "methodType": 0, + "methodName": "SetWorldTM", + "className": "TransformBus", + "resultSlotIDs": [ + {} + ], + "inputSlots": [ + { + "m_id": "{785CBBEE-E704-4049-A180-8E99E3E1E1F2}" + }, + { + "m_id": "{A7826FF9-C3B2-4E28-815D-9B07A6EE0949}" + } + ], + "prettyClassName": "TransformBus" } } }, @@ -2227,33 +1670,243 @@ "$type": "SlotTypeContract" } ], - "slotName": "Result: Transform", + "slotName": "Result: Transform", + "DisplayDataType": { + "m_type": 7 + }, + "Descriptor": { + "ConnectionType": 2, + "SlotType": 2 + }, + "DataType": 1 + } + ], + "Datums": [ + { + "scriptCanvasType": { + "m_type": 8 + }, + "isNullPointer": false, + "$type": "Vector3", + "value": [ + 0.0, + 0.0, + 0.0 + ], + "label": "Vector3: Translation" + } + ], + "Initialized": true + } + } + }, + { + "Id": { + "id": 34623617265138 + }, + "Name": "SC-Node(OperatorMul)", + "Components": { + "Component_[6682944070117268251]": { + "$type": "OperatorMul", + "Id": 6682944070117268251, + "Slots": [ + { + "id": { + "m_id": "{E55CADF9-9769-43D3-B6BD-8EFA828C5B7B}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "In", + "Descriptor": { + "ConnectionType": 1, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{00F5960A-A85F-4B88-A562-BB6E7BFCE05E}" + }, + "contracts": [ + { + "$type": "SlotTypeContract" + } + ], + "slotName": "Out", + "Descriptor": { + "ConnectionType": 2, + "SlotType": 1 + } + }, + { + "id": { + "m_id": "{FB35B335-EA81-45FF-A0BA-CED33329EB93}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + { + "$type": "MathOperatorContract", + "OperatorType": "Multiply", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 7 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{85824692-0B8B-4400-87BC-9D8CA6127A88}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + { + "$type": "MathOperatorContract", + "OperatorType": "Multiply", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 7 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Number", + "toolTip": "An operand to use in performing the specified Operation", + "DisplayDataType": { + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 + }, + "Descriptor": { + "ConnectionType": 1, + "SlotType": 2 + }, + "DynamicGroup": { + "Value": 1114760223 + }, + "DataType": 1 + }, + { + "id": { + "m_id": "{84852FBC-F135-48B2-B5C8-AFF3B1F35E42}" + }, + "DynamicTypeOverride": 3, + "contracts": [ + { + "$type": "SlotTypeContract" + }, + { + "$type": "MathOperatorContract", + "OperatorType": "Multiply", + "NativeTypes": [ + { + "m_type": 3 + }, + { + "m_type": 6 + }, + { + "m_type": 7 + }, + { + "m_type": 14 + }, + { + "m_type": 15 + } + ] + } + ], + "slotName": "Result", + "toolTip": "The result of the specified operation", "DisplayDataType": { - "m_type": 7 + "m_type": 3 + }, + "DisplayGroup": { + "Value": 1114760223 }, "Descriptor": { "ConnectionType": 2, "SlotType": 2 }, + "DynamicGroup": { + "Value": 1114760223 + }, "DataType": 1 } ], "Datums": [ { + "isOverloadedStorage": false, "scriptCanvasType": { - "m_type": 8 + "m_type": 3 }, "isNullPointer": false, - "$type": "Vector3", - "value": [ - 0.0, - 0.0, - 0.0 - ], - "label": "Vector3: Translation" + "$type": "double", + "value": 1.0, + "label": "Number" + }, + { + "isOverloadedStorage": false, + "scriptCanvasType": { + "m_type": 3 + }, + "isNullPointer": false, + "$type": "double", + "value": 12.5, + "label": "Number" } - ], - "Initialized": true + ] } } }, @@ -2361,77 +2014,6 @@ } } }, - { - "Id": { - "id": 58594481016484 - }, - "Name": "SC Node(GetVariable)", - "Components": { - "Component_[8136131668650391163]": { - "$type": "GetVariableNode", - "Id": 8136131668650391163, - "Slots": [ - { - "id": { - "m_id": "{09256706-E7A2-47C3-ACE0-3BE7D80E34FD}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "In", - "toolTip": "When signaled sends the property referenced by this node to a Data Output slot", - "Descriptor": { - "ConnectionType": 1, - "SlotType": 1 - } - }, - { - "id": { - "m_id": "{1ACC7F53-E81A-4721-9AC8-5C1A33C8BE96}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "Out", - "toolTip": "Signaled after the referenced property has been pushed to the Data Output slot", - "Descriptor": { - "ConnectionType": 2, - "SlotType": 1 - } - }, - { - "id": { - "m_id": "{4972DD3B-D554-47B7-816B-CBCF67697ABA}" - }, - "contracts": [ - { - "$type": "SlotTypeContract" - } - ], - "slotName": "Number", - "DisplayDataType": { - "m_type": 3 - }, - "Descriptor": { - "ConnectionType": 2, - "SlotType": 2 - }, - "DataType": 1 - } - ], - "m_variableId": { - "m_id": "{0620A309-A152-4CF3-BF76-284115B30780}" - }, - "m_variableDataOutSlotId": { - "m_id": "{4972DD3B-D554-47B7-816B-CBCF67697ABA}" - } - } - } - }, { "Id": { "id": 58658905525924 @@ -2668,62 +2250,6 @@ } ], "m_connections": [ - { - "Id": { - "id": 58706150166180 - }, - "Name": "srcEndpoint=(Get Variable: Out), destEndpoint=(RotationZDegrees: In)", - "Components": { - "Component_[553961487450147653]": { - "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", - "Id": 553961487450147653, - "sourceEndpoint": { - "nodeId": { - "id": 58594481016484 - }, - "slotId": { - "m_id": "{1ACC7F53-E81A-4721-9AC8-5C1A33C8BE96}" - } - }, - "targetEndpoint": { - "nodeId": { - "id": 58590186049188 - }, - "slotId": { - "m_id": "{4B28D8A2-7F6C-4EB1-A7D5-EA68FB783B52}" - } - } - } - } - }, - { - "Id": { - "id": 58710445133476 - }, - "Name": "srcEndpoint=(Get Variable: Number), destEndpoint=(RotationZDegrees: Number: Degrees)", - "Components": { - "Component_[8946072267986857913]": { - "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", - "Id": 8946072267986857913, - "sourceEndpoint": { - "nodeId": { - "id": 58594481016484 - }, - "slotId": { - "m_id": "{4972DD3B-D554-47B7-816B-CBCF67697ABA}" - } - }, - "targetEndpoint": { - "nodeId": { - "id": 58590186049188 - }, - "slotId": { - "m_id": "{694A218A-8047-4981-BF62-726AF9BCB3C6}" - } - } - } - } - }, { "Id": { "id": 58714740100772 @@ -2883,122 +2409,10 @@ }, "targetEndpoint": { "nodeId": { - "id": 58581596114596 - }, - "slotId": { - "m_id": "{374AA17F-7CC0-4808-8269-6CC4F64579C3}" - } - } - } - } - }, - { - "Id": { - "id": 58740509904548 - }, - "Name": "srcEndpoint=(Multiply (*): Result), destEndpoint=(Multiply (*): Transform)", - "Components": { - "Component_[7007808555566524915]": { - "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", - "Id": 7007808555566524915, - "sourceEndpoint": { - "nodeId": { - "id": 58624545787556 - }, - "slotId": { - "m_id": "{96271AD4-A2BB-4597-B78F-8053F0200C3D}" - } - }, - "targetEndpoint": { - "nodeId": { - "id": 58581596114596 - }, - "slotId": { - "m_id": "{E7D6A002-7522-4915-BCCB-89A29E3D5582}" - } - } - } - } - }, - { - "Id": { - "id": 58753394806436 - }, - "Name": "srcEndpoint=(TickBus Handler: Number), destEndpoint=(Multiply (*): Value)", - "Components": { - "Component_[1087668963814879388]": { - "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", - "Id": 1087668963814879388, - "sourceEndpoint": { - "nodeId": { - "id": 58667495460516 - }, - "slotId": { - "m_id": "{02148868-388F-44F0-9E3A-C31601701F3B}" - } - }, - "targetEndpoint": { - "nodeId": { - "id": 58577301147300 - }, - "slotId": { - "m_id": "{67B729E8-73F9-4B97-A67C-C986E874BD01}" - } - } - } - } - }, - { - "Id": { - "id": 58783459577508 - }, - "Name": "srcEndpoint=(Set Variable: Out), destEndpoint=(Get Variable: In)", - "Components": { - "Component_[5808096905671825435]": { - "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", - "Id": 5808096905671825435, - "sourceEndpoint": { - "nodeId": { - "id": 58654610558628 - }, - "slotId": { - "m_id": "{47175A2C-5EE4-4C48-8CC1-8F2C84D36FE5}" - } - }, - "targetEndpoint": { - "nodeId": { - "id": 58594481016484 - }, - "slotId": { - "m_id": "{09256706-E7A2-47C3-ACE0-3BE7D80E34FD}" - } - } - } - } - }, - { - "Id": { - "id": 58787754544804 - }, - "Name": "srcEndpoint=(Multiply (*): Result), destEndpoint=(Multiply (*): Value)", - "Components": { - "Component_[11775794502882233004]": { - "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", - "Id": 11775794502882233004, - "sourceEndpoint": { - "nodeId": { - "id": 58577301147300 - }, - "slotId": { - "m_id": "{785A9BC8-8F65-4DFE-8809-7C8E937A8D8B}" - } - }, - "targetEndpoint": { - "nodeId": { - "id": 58633135722148 + "id": 58581596114596 }, "slotId": { - "m_id": "{F9E6233F-EAFB-43F5-A10D-96A3A41763A7}" + "m_id": "{374AA17F-7CC0-4808-8269-6CC4F64579C3}" } } } @@ -3006,27 +2420,27 @@ }, { "Id": { - "id": 58792049512100 + "id": 58740509904548 }, - "Name": "srcEndpoint=(Multiply (*): Out), destEndpoint=(Multiply (*): In)", + "Name": "srcEndpoint=(Multiply (*): Result), destEndpoint=(Multiply (*): Transform)", "Components": { - "Component_[80299809090156725]": { + "Component_[7007808555566524915]": { "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", - "Id": 80299809090156725, + "Id": 7007808555566524915, "sourceEndpoint": { "nodeId": { - "id": 58577301147300 + "id": 58624545787556 }, "slotId": { - "m_id": "{4CD5D25E-73DA-4936-89E9-8F0A7946DED1}" + "m_id": "{96271AD4-A2BB-4597-B78F-8053F0200C3D}" } }, "targetEndpoint": { "nodeId": { - "id": 58633135722148 + "id": 58581596114596 }, "slotId": { - "m_id": "{B6D38C30-7BB4-4549-AFFA-C5A52AE9796E}" + "m_id": "{E7D6A002-7522-4915-BCCB-89A29E3D5582}" } } } @@ -3284,34 +2698,6 @@ } } }, - { - "Id": { - "id": 164626484669075 - }, - "Name": "srcEndpoint=(: ), destEndpoint=(: )", - "Components": { - "Component_[14524450253664706586]": { - "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", - "Id": 14524450253664706586, - "sourceEndpoint": { - "nodeId": { - "id": 58667495460516 - }, - "slotId": { - "m_id": "{8965578E-A29D-4468-B12B-9D4E4F814641}" - } - }, - "targetEndpoint": { - "nodeId": { - "id": 58577301147300 - }, - "slotId": { - "m_id": "{F5BE2CBC-3CA3-44BD-B7D4-71D9CAC023B3}" - } - } - } - } - }, { "Id": { "id": 214778817784467 @@ -3426,27 +2812,27 @@ }, { "Id": { - "id": 240698945415827 + "id": 71140482223643 }, - "Name": "srcEndpoint=(Get Variable: Out), destEndpoint=(Multiply (*): In)", + "Name": "srcEndpoint=(Set Variable: Out), destEndpoint=(RotationZDegrees: In)", "Components": { - "Component_[12012899230680400379]": { + "Component_[11167812872648006272]": { "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", - "Id": 12012899230680400379, + "Id": 11167812872648006272, "sourceEndpoint": { "nodeId": { - "id": 214400860662419 + "id": 58654610558628 }, "slotId": { - "m_id": "{8C8D3DD7-F821-42F4-AF51-5D976133DAE4}" + "m_id": "{47175A2C-5EE4-4C48-8CC1-8F2C84D36FE5}" } }, "targetEndpoint": { "nodeId": { - "id": 239870016727699 + "id": 58590186049188 }, "slotId": { - "m_id": "{FEFF67A1-C89B-447E-80D4-CD94CB0C8AD7}" + "m_id": "{4B28D8A2-7F6C-4EB1-A7D5-EA68FB783B52}" } } } @@ -3454,27 +2840,55 @@ }, { "Id": { - "id": 241158506916499 + "id": 71557094051355 }, - "Name": "srcEndpoint=(TickBus Handler: Number), destEndpoint=(Multiply (*): Value)", + "Name": "srcEndpoint=(Set Variable: Number), destEndpoint=(RotationZDegrees: Number: Degrees)", "Components": { - "Component_[6729356013537587652]": { + "Component_[13278183946958091954]": { "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", - "Id": 6729356013537587652, + "Id": 13278183946958091954, "sourceEndpoint": { "nodeId": { - "id": 58667495460516 + "id": 58654610558628 }, "slotId": { - "m_id": "{02148868-388F-44F0-9E3A-C31601701F3B}" + "m_id": "{1B58C71B-3AB9-4D90-A8D5-164A20B083DA}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 58590186049188 + }, + "slotId": { + "m_id": "{694A218A-8047-4981-BF62-726AF9BCB3C6}" + } + } + } + } + }, + { + "Id": { + "id": 35443956018674 + }, + "Name": "srcEndpoint=(Get Variable: Out), destEndpoint=(Multiply (*): In)", + "Components": { + "Component_[1036318540886899366]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 1036318540886899366, + "sourceEndpoint": { + "nodeId": { + "id": 214400860662419 + }, + "slotId": { + "m_id": "{8C8D3DD7-F821-42F4-AF51-5D976133DAE4}" } }, "targetEndpoint": { "nodeId": { - "id": 239870016727699 + "id": 34623617265138 }, "slotId": { - "m_id": "{8A243C9C-0D69-4753-B28B-A8D2FAC5D508}" + "m_id": "{E55CADF9-9769-43D3-B6BD-8EFA828C5B7B}" } } } @@ -3482,19 +2896,19 @@ }, { "Id": { - "id": 241845701683859 + "id": 36113970916850 }, "Name": "srcEndpoint=(Multiply (*): Out), destEndpoint=(Add (+): In)", "Components": { - "Component_[1977054835666987502]": { + "Component_[14283307370513044941]": { "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", - "Id": 1977054835666987502, + "Id": 14283307370513044941, "sourceEndpoint": { "nodeId": { - "id": 239870016727699 + "id": 34623617265138 }, "slotId": { - "m_id": "{7E5D8673-F03A-4134-87DE-88AD13A74C29}" + "m_id": "{00F5960A-A85F-4B88-A562-BB6E7BFCE05E}" } }, "targetEndpoint": { @@ -3510,19 +2924,19 @@ }, { "Id": { - "id": 242150644361875 + "id": 36401733725682 }, "Name": "srcEndpoint=(Multiply (*): Result), destEndpoint=(Add (+): Number)", "Components": { - "Component_[4687422202712804034]": { + "Component_[5424678033357045019]": { "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", - "Id": 4687422202712804034, + "Id": 5424678033357045019, "sourceEndpoint": { "nodeId": { - "id": 239870016727699 + "id": 34623617265138 }, "slotId": { - "m_id": "{DFD1DE7E-B470-43F6-A6CF-E9E572D0C075}" + "m_id": "{84852FBC-F135-48B2-B5C8-AFF3B1F35E42}" } }, "targetEndpoint": { @@ -3535,6 +2949,34 @@ } } } + }, + { + "Id": { + "id": 37033093918194 + }, + "Name": "srcEndpoint=(TickBus Handler: Number), destEndpoint=(Multiply (*): Number)", + "Components": { + "Component_[7944449722082928320]": { + "$type": "{64CA5016-E803-4AC4-9A36-BDA2C890C6EB} Connection", + "Id": 7944449722082928320, + "sourceEndpoint": { + "nodeId": { + "id": 58667495460516 + }, + "slotId": { + "m_id": "{02148868-388F-44F0-9E3A-C31601701F3B}" + } + }, + "targetEndpoint": { + "nodeId": { + "id": 34623617265138 + }, + "slotId": { + "m_id": "{FB35B335-EA81-45FF-A0BA-CED33329EB93}" + } + } + } + } } ] }, @@ -3548,7 +2990,7 @@ "GraphCanvasData": [ { "Key": { - "id": 58577301147300 + "id": 34623617265138 }, "Value": { "ComponentData": { @@ -3562,8 +3004,8 @@ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { "$type": "GeometrySaveData", "Position": [ - -40.0, - 180.0 + 440.0, + 300.0 ] }, "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { @@ -3571,7 +3013,7 @@ }, "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { "$type": "PersistentIdComponentSaveData", - "PersistentId": "{EB1D5C50-BE43-4D5B-95CA-72BB2444355C}" + "PersistentId": "{D071B475-12EA-47E9-9D36-3FF719DFDF55}" } } } @@ -3636,37 +3078,6 @@ } } }, - { - "Key": { - "id": 58594481016484 - }, - "Value": { - "ComponentData": { - "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { - "$type": "NodeSaveData" - }, - "{328FF15C-C302-458F-A43D-E1794DE0904E}": { - "$type": "GeneralNodeTitleComponentSaveData", - "PaletteOverride": "GetVariableNodeTitlePalette" - }, - "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { - "$type": "GeometrySaveData", - "Position": [ - 1820.0, - 160.0 - ] - }, - "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { - "$type": "StylingComponentSaveData", - "SubStyle": ".getVariable" - }, - "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { - "$type": "PersistentIdComponentSaveData", - "PersistentId": "{4F7B87C1-4C5D-4B00-87F1-E742C7F9B0BB}" - } - } - } - }, { "Key": { "id": 58607365918372 @@ -3758,36 +3169,6 @@ } } }, - { - "Key": { - "id": 58633135722148 - }, - "Value": { - "ComponentData": { - "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { - "$type": "NodeSaveData" - }, - "{328FF15C-C302-458F-A43D-E1794DE0904E}": { - "$type": "GeneralNodeTitleComponentSaveData", - "PaletteOverride": "MathNodeTitlePalette" - }, - "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { - "$type": "GeometrySaveData", - "Position": [ - 300.0, - 180.0 - ] - }, - "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { - "$type": "StylingComponentSaveData" - }, - "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { - "$type": "PersistentIdComponentSaveData", - "PersistentId": "{3B2FC30A-C96E-4D45-8FB8-D93213E40656}" - } - } - } - }, { "Key": { "id": 58654610558628 @@ -3804,8 +3185,8 @@ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { "$type": "GeometrySaveData", "Position": [ - 1300.0, - 480.0 + 1120.0, + 160.0 ] }, "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { @@ -3892,8 +3273,8 @@ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { "$type": "GeometrySaveData", "Position": [ - -480.0, - 500.0 + -420.0, + 180.0 ] }, "{9E81C95F-89C0-4476-8E82-63CCC4E52E04}": { @@ -3990,8 +3371,8 @@ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { "$type": "GeometrySaveData", "Position": [ - 940.0, - 520.0 + 800.0, + 160.0 ] }, "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { @@ -4020,8 +3401,8 @@ "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { "$type": "GeometrySaveData", "Position": [ - 100.0, - 540.0 + 60.0, + 160.0 ] }, "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { @@ -4037,46 +3418,15 @@ }, { "Key": { - "id": 239870016727699 - }, - "Value": { - "ComponentData": { - "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": { - "$type": "NodeSaveData" - }, - "{328FF15C-C302-458F-A43D-E1794DE0904E}": { - "$type": "GeneralNodeTitleComponentSaveData", - "PaletteOverride": "MathNodeTitlePalette" - }, - "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": { - "$type": "GeometrySaveData", - "Position": [ - 480.0, - 700.0 - ] - }, - "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": { - "$type": "StylingComponentSaveData" - }, - "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": { - "$type": "PersistentIdComponentSaveData", - "PersistentId": "{591ECD3E-51E5-4452-B8F0-91EEC22334EC}" - } - } - } - }, - { - "Key": { - "id": 1874297699023155003 + "id": 8461866310375259320 }, "Value": { "ComponentData": { "{5F84B500-8C45-40D1-8EFC-A5306B241444}": { "$type": "SceneComponentSaveData", "ViewParams": { - "Scale": 0.6141249999999999, - "AnchorX": -615.5098876953125, - "AnchorY": -29.309993743896484 + "AnchorX": -166.0, + "AnchorY": 51.0 } } } @@ -4095,11 +3445,11 @@ }, { "Key": 11545666372999204726, - "Value": 2 + "Value": 1 }, { "Key": 12702286953450386850, - "Value": 6 + "Value": 4 }, { "Key": 12777283451032324504, @@ -4151,103 +3501,9 @@ }, "VariableName": "RotateCamZ" } - }, - { - "Key": { - "m_id": "{6A2D4F20-5402-4283-8799-EB8DEABD6369}" - }, - "Value": { - "Datum": { - "scriptCanvasType": { - "m_type": 3 - }, - "isNullPointer": false, - "$type": "double", - "value": 0.1 - }, - "VariableId": { - "m_id": "{6A2D4F20-5402-4283-8799-EB8DEABD6369}" - }, - "VariableName": "JoystickDeadzone" - } - }, - { - "Key": { - "m_id": "{7062B1EE-2A8A-4E1D-8275-9DA1C5927FF0}" - }, - "Value": { - "Datum": { - "scriptCanvasType": { - "m_type": 3 - }, - "isNullPointer": false, - "$type": "double", - "value": 0.0 - }, - "VariableId": { - "m_id": "{7062B1EE-2A8A-4E1D-8275-9DA1C5927FF0}" - }, - "VariableName": "JoystickRight_X" - } - }, - { - "Key": { - "m_id": "{8E040B94-3374-4228-8020-577BB7C70EE7}" - }, - "Value": { - "Datum": { - "scriptCanvasType": { - "m_type": 3 - }, - "isNullPointer": false, - "$type": "double", - "value": 0.0 - }, - "VariableId": { - "m_id": "{8E040B94-3374-4228-8020-577BB7C70EE7}" - }, - "VariableName": "MoveX" - } - }, - { - "Key": { - "m_id": "{BF2919BD-19B4-4738-AC3A-81857D5204E4}" - }, - "Value": { - "Datum": { - "scriptCanvasType": { - "m_type": 3 - }, - "isNullPointer": false, - "$type": "double", - "value": 0.0 - }, - "VariableId": { - "m_id": "{BF2919BD-19B4-4738-AC3A-81857D5204E4}" - }, - "VariableName": "MoveY" - } } ] - }, - "CopiedVariableRemapping": [ - { - "Key": { - "m_id": "{5EB17E58-0B4E-451D-A1CE-0E7C272CBDEC}" - }, - "Value": { - "m_id": "{BF2919BD-19B4-4738-AC3A-81857D5204E4}" - } - }, - { - "Key": { - "m_id": "{B48E5726-A7FF-42A8-84D2-CF43ABBD1EDC}" - }, - "Value": { - "m_id": "{8E040B94-3374-4228-8020-577BB7C70EE7}" - } - } - ] + } } } } diff --git a/Gems/MotionMatching/Assets/MotionMatching.animgraph b/Gems/MotionMatching/Assets/MotionMatching.animgraph deleted file mode 100644 index e5656a3d05..0000000000 --- a/Gems/MotionMatching/Assets/MotionMatching.animgraph +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f974fa29f3542311ee6a4b6fbb92047186c3124b3bd6f88b728646bf9d686c45 -size 39099 diff --git a/Gems/MotionMatching/Code/CMakeLists.txt b/Gems/MotionMatching/Code/CMakeLists.txt index 275f8f2530..ae613f5d7f 100644 --- a/Gems/MotionMatching/Code/CMakeLists.txt +++ b/Gems/MotionMatching/Code/CMakeLists.txt @@ -99,57 +99,49 @@ endif() ################################################################################ # See if globally, tests are supported if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) - # We globally support tests, see if we support tests on this platform for MotionMatching.Static - if(PAL_TRAIT_MOTIONMATCHING_TEST_SUPPORTED) - # We support MotionMatching.Tests on this platform, add MotionMatching.Tests target which depends on MotionMatching.Static - ly_add_target( - NAME MotionMatching.Tests ${PAL_TRAIT_TEST_TARGET_TYPE} - NAMESPACE Gem - FILES_CMAKE - motionmatching_files.cmake - motionmatching_tests_files.cmake - INCLUDE_DIRECTORIES - PRIVATE - Tests - Source - BUILD_DEPENDENCIES - PRIVATE - AZ::AzTest - AZ::AzFramework - Gem::EMotionFX.Tests.Static - Gem::MotionMatching.Static - ) + ly_add_target( + NAME MotionMatching.Tests ${PAL_TRAIT_TEST_TARGET_TYPE} + NAMESPACE Gem + FILES_CMAKE + motionmatching_files.cmake + motionmatching_tests_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Tests + Source + BUILD_DEPENDENCIES + PRIVATE + AZ::AzTest + AZ::AzFramework + Gem::EMotionFX.Tests.Static + Gem::MotionMatching.Static + ) - # Add MotionMatching.Tests to googletest - ly_add_googletest( - NAME Gem::MotionMatching.Tests - ) - endif() + # Add MotionMatching.Tests to googletest + ly_add_googletest( + NAME Gem::MotionMatching.Tests + ) +endif() - # If we are a host platform we want to add tools test like editor tests here - if(PAL_TRAIT_BUILD_HOST_TOOLS) - # We are a host platform, see if Editor tests are supported on this platform - if(PAL_TRAIT_MOTIONMATCHING_EDITOR_TEST_SUPPORTED) - # We support MotionMatching.Editor.Tests on this platform, add MotionMatching.Editor.Tests target which depends on MotionMatching.Editor - ly_add_target( - NAME MotionMatching.Editor.Tests ${PAL_TRAIT_TEST_TARGET_TYPE} - NAMESPACE Gem - FILES_CMAKE - motionmatching_editor_tests_files.cmake - INCLUDE_DIRECTORIES - PRIVATE - Tests - Source - BUILD_DEPENDENCIES - PRIVATE - AZ::AzTest - Gem::MotionMatching.Editor - ) +# If we are a host platform we want to add tools test like editor tests here +if(PAL_TRAIT_BUILD_HOST_TOOLS) + ly_add_target( + NAME MotionMatching.Editor.Tests ${PAL_TRAIT_TEST_TARGET_TYPE} + NAMESPACE Gem + FILES_CMAKE + motionmatching_editor_tests_files.cmake + INCLUDE_DIRECTORIES + PRIVATE + Tests + Source + BUILD_DEPENDENCIES + PRIVATE + AZ::AzTest + Gem::MotionMatching.Editor + ) - # Add MotionMatching.Editor.Tests to googletest - ly_add_googletest( - NAME Gem::MotionMatching.Editor.Tests - ) - endif() - endif() + # Add MotionMatching.Editor.Tests to googletest + ly_add_googletest( + NAME Gem::MotionMatching.Editor.Tests + ) endif() diff --git a/Gems/MotionMatching/Code/Include/MotionMatching/MotionMatchingBus.h b/Gems/MotionMatching/Code/Include/MotionMatching/MotionMatchingBus.h index 5b2bc1847a..dbf38e802b 100644 --- a/Gems/MotionMatching/Code/Include/MotionMatching/MotionMatchingBus.h +++ b/Gems/MotionMatching/Code/Include/MotionMatching/MotionMatchingBus.h @@ -11,8 +11,20 @@ #include #include +#include + namespace EMotionFX::MotionMatching { + class DebugDrawRequests + : public AZ::EBusTraits + { + public: + AZ_RTTI(DebugDrawRequests, "{7BBA4249-EC00-445C-8A0C-4472841049C3}"); + + virtual void DebugDraw(AzFramework::DebugDisplayRequests& debugDisplay) = 0; + }; + using DebugDrawRequestBus = AZ::EBus; + class MotionMatchingRequests { public: diff --git a/Gems/MotionMatching/Code/Source/BlendTreeMotionMatchNode.cpp b/Gems/MotionMatching/Code/Source/BlendTreeMotionMatchNode.cpp index 6661233b66..1546be4669 100644 --- a/Gems/MotionMatching/Code/Source/BlendTreeMotionMatchNode.cpp +++ b/Gems/MotionMatching/Code/Source/BlendTreeMotionMatchNode.cpp @@ -297,8 +297,6 @@ namespace EMotionFX::MotionMatching ImGuiMonitorRequestBus::Broadcast(&ImGuiMonitorRequests::PushPerformanceHistogramValue, "Output", m_outputTimeInMs); #endif } - - instance->DebugDraw(); } AZ::Crc32 BlendTreeMotionMatchNode::GetTrajectoryPathSettingsVisibility() const diff --git a/Gems/MotionMatching/Code/Source/ImGuiMonitor.cpp b/Gems/MotionMatching/Code/Source/ImGuiMonitor.cpp index 97b666c693..158a4b0d23 100644 --- a/Gems/MotionMatching/Code/Source/ImGuiMonitor.cpp +++ b/Gems/MotionMatching/Code/Source/ImGuiMonitor.cpp @@ -16,10 +16,11 @@ namespace EMotionFX::MotionMatching ImGuiMonitor::ImGuiMonitor() { - m_performanceStats.m_name = "Performance Statistics"; + m_performanceStats.SetName("Performance Statistics"); + m_performanceStats.SetHistogramBinCount(500); - m_featureCosts.m_name = "Feature Costs"; - m_featureCosts.m_histogramContainerCount = 100; + m_featureCosts.SetName("Feature Costs"); + m_featureCosts.SetHistogramBinCount(100); ImGui::ImGuiUpdateListenerBus::Handler::BusConnect(); ImGuiMonitorRequestBus::Handler::BusConnect(); @@ -40,18 +41,40 @@ namespace EMotionFX::MotionMatching if (ImGui::Begin("Motion Matching")) { + if (ImGui::CollapsingHeader("Motion Database", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed)) + { + if (ImGui::BeginTable("MDB", 2)) + { + ImGui::TableNextColumn(); ImGui::Text("Memory Usage: %.2f MB", m_frameDatabaseInfo.m_memoryUsedInBytes / 1024.0f / 1024.0f); + ImGui::TableNextColumn(); ImGui::Text("Motion Data: %.0f minutes", m_frameDatabaseInfo.m_motionDataInSeconds / 60.0f); + ImGui::TableNextColumn(); ImGui::Text("Num Frames: %zu", m_frameDatabaseInfo.m_numFrames); + ImGui::TableNextColumn(); ImGui::Text("Num Motions: %zu", m_frameDatabaseInfo.m_numMotions); + ImGui::EndTable(); + } + } + if (ImGui::CollapsingHeader("Feature Matrix", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed)) { - ImGui::Text("Memory Usage: %.2f MB", m_featureMatrixMemoryUsageInBytes / 1024.0f / 1024.0f); - ImGui::Text("Num Frames: %zu", m_featureMatrixNumFrames); - ImGui::Text("Num Feature Components: %zu", m_featureMatrixNumComponents); + if (ImGui::BeginTable("FM", 2)) + { + ImGui::TableNextColumn(); ImGui::Text("Memory Usage: %.2f MB", m_featurMatrixInfo.m_memoryUsedInBytes / 1024.0f / 1024.0f); + ImGui::TableNextColumn(); + ImGui::TableNextColumn(); ImGui::Text("Num Frames: %zu", m_featurMatrixInfo.m_numFrames); + ImGui::TableNextColumn(); ImGui::Text("Num Feature Components: %zu", m_featurMatrixInfo.m_numDimensions); + ImGui::EndTable(); + } } if (ImGui::CollapsingHeader("Kd-Tree", ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed)) { - ImGui::Text("Memory Usage: %.2f MB", m_kdTreeMemoryUsageInBytes / 1024.0f / 1024.0f); - ImGui::Text("Num Nodes: %zu", m_kdTreeNumNodes); - ImGui::Text("Num Dimensions: %zu", m_kdTreeNumDimensions); + if (ImGui::BeginTable("KDT", 2)) + { + ImGui::TableNextColumn(); ImGui::Text("Memory Usage: %.2f MB", m_kdTreeInfo.m_memoryUsedInBytes / 1024.0f / 1024.0f); + ImGui::TableNextColumn(); + ImGui::TableNextColumn(); ImGui::Text("Num Nodes: %zu", m_kdTreeInfo.m_numNodes); + ImGui::TableNextColumn(); ImGui::Text("Num Dimensions: %zu", m_kdTreeInfo.m_numDimensions); + ImGui::EndTable(); + } } m_performanceStats.OnImGuiUpdate(); @@ -63,8 +86,8 @@ namespace EMotionFX::MotionMatching { if (ImGui::BeginMenu("Motion Matching")) { - ImGui::MenuItem(m_performanceStats.m_name.c_str(), "", &m_performanceStats.m_show); - ImGui::MenuItem(m_featureCosts.m_name.c_str(), "", &m_featureCosts.m_show); + ImGui::MenuItem(m_performanceStats.GetName(), "", &m_performanceStats.m_show); + ImGui::MenuItem(m_featureCosts.GetName(), "", &m_featureCosts.m_show); ImGui::EndMenu(); } } @@ -78,67 +101,6 @@ namespace EMotionFX::MotionMatching { m_featureCosts.PushHistogramValue(costName, value, color); } - - void ImGuiMonitor::HistogramGroup::PushHistogramValue(const char* valueName, float value, const AZ::Color& color) - { - auto iterator = m_histogramIndexByName.find(valueName); - if (iterator != m_histogramIndexByName.end()) - { - ImGui::LYImGuiUtils::HistogramContainer& histogramContiner = m_histograms[iterator->second]; - histogramContiner.PushValue(value); - histogramContiner.SetBarLineColor(ImColor(color.GetR(), color.GetG(), color.GetB(), color.GetA())); - } - else - { - ImGui::LYImGuiUtils::HistogramContainer newHistogram; - newHistogram.Init(/*histogramName=*/valueName, - /*containerCount=*/m_histogramContainerCount, - /*viewType=*/ImGui::LYImGuiUtils::HistogramContainer::ViewType::Histogram, - /*displayOverlays=*/true, - /*min=*/0.0f, - /*max=*/0.0f); - - newHistogram.SetMoveDirection(ImGui::LYImGuiUtils::HistogramContainer::PushRightMoveLeft); - newHistogram.PushValue(value); - - m_histogramIndexByName[valueName] = m_histograms.size(); - m_histograms.push_back(newHistogram); - } - } - - void ImGuiMonitor::HistogramGroup::OnImGuiUpdate() - { - if (!m_show) - { - return; - } - - if (ImGui::CollapsingHeader(m_name.c_str(), ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_Framed)) - { - for (auto& histogram : m_histograms) - { - ImGui::BeginGroup(); - { - histogram.Draw(ImGui::GetColumnWidth() - 70, s_histogramHeight); - - ImGui::SameLine(); - - ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(0,0,0,255)); - { - const ImColor color = histogram.GetBarLineColor(); - ImGui::PushStyleColor(ImGuiCol_Button, color.Value); - { - const AZStd::string valueString = AZStd::string::format("%.2f", histogram.GetLastValue()); - ImGui::Button(valueString.c_str()); - } - ImGui::PopStyleColor(); - } - ImGui::PopStyleColor(); - } - ImGui::EndGroup(); - } - } - } } // namespace EMotionFX::MotionMatching #endif // IMGUI_ENABLED diff --git a/Gems/MotionMatching/Code/Source/ImGuiMonitor.h b/Gems/MotionMatching/Code/Source/ImGuiMonitor.h index 0583d0ba41..a2af477987 100644 --- a/Gems/MotionMatching/Code/Source/ImGuiMonitor.h +++ b/Gems/MotionMatching/Code/Source/ImGuiMonitor.h @@ -20,7 +20,7 @@ #include #include #include -#include +#include namespace EMotionFX::MotionMatching { @@ -43,41 +43,17 @@ namespace EMotionFX::MotionMatching void PushPerformanceHistogramValue(const char* performanceMetricName, float value) override; void PushCostHistogramValue(const char* costName, float value, const AZ::Color& color) override; - void SetFeatureMatrixMemoryUsage(size_t sizeInBytes) override { m_featureMatrixMemoryUsageInBytes = sizeInBytes; } - void SetFeatureMatrixNumFrames(size_t numFrames) override { m_featureMatrixNumFrames = numFrames; } - void SetFeatureMatrixNumComponents(size_t numFeatureComponents) override { m_featureMatrixNumComponents = numFeatureComponents; } - - void SetKdTreeMemoryUsage(size_t sizeInBytes) override { m_kdTreeMemoryUsageInBytes = sizeInBytes; } - void SetKdTreeNumNodes(size_t numNodes) override { m_kdTreeNumNodes = numNodes; } - void SetKdTreeNumDimensions(size_t numDimensions) override { m_kdTreeNumDimensions = numDimensions; } + void SetFrameDatabaseInfo(const ImGuiMonitorRequests::FrameDatabaseInfo& info) override { m_frameDatabaseInfo = info; } + void SetFeatureMatrixInfo(const ImGuiMonitorRequests::FeatureMatrixInfo& info) override { m_featurMatrixInfo = info; } + void SetKdTreeInfo(const ImGuiMonitorRequests::KdTreeInfo& info) override { m_kdTreeInfo = info; } private: - //! Named and sub-divided group containing several histograms. - struct HistogramGroup - { - void OnImGuiUpdate(); - void PushHistogramValue(const char* valueName, float value, const AZ::Color& color); - - bool m_show = true; - AZStd::string m_name; - using HistogramIndexByNames = AZStd::unordered_map; - HistogramIndexByNames m_histogramIndexByName; - AZStd::vector m_histograms; - int m_histogramContainerCount = 500; - - static constexpr float s_histogramHeight = 95.0f; - }; - - HistogramGroup m_performanceStats; - HistogramGroup m_featureCosts; - - size_t m_featureMatrixMemoryUsageInBytes = 0; - size_t m_featureMatrixNumFrames = 0; - size_t m_featureMatrixNumComponents = 0; + ImGui::LYImGuiUtils::HistogramGroup m_performanceStats; + ImGui::LYImGuiUtils::HistogramGroup m_featureCosts; - size_t m_kdTreeMemoryUsageInBytes = 0; - size_t m_kdTreeNumNodes = 0; - size_t m_kdTreeNumDimensions = 0; + ImGuiMonitorRequests::FrameDatabaseInfo m_frameDatabaseInfo; + ImGuiMonitorRequests::FeatureMatrixInfo m_featurMatrixInfo; + ImGuiMonitorRequests::KdTreeInfo m_kdTreeInfo; }; } // namespace EMotionFX::MotionMatching diff --git a/Gems/MotionMatching/Code/Source/ImGuiMonitorBus.h b/Gems/MotionMatching/Code/Source/ImGuiMonitorBus.h index 7c50b317c5..faadd79681 100644 --- a/Gems/MotionMatching/Code/Source/ImGuiMonitorBus.h +++ b/Gems/MotionMatching/Code/Source/ImGuiMonitorBus.h @@ -25,13 +25,30 @@ namespace EMotionFX::MotionMatching virtual void PushPerformanceHistogramValue(const char* performanceMetricName, float value) = 0; virtual void PushCostHistogramValue(const char* costName, float value, const AZ::Color& color) = 0; - virtual void SetFeatureMatrixMemoryUsage(size_t sizeInBytes) = 0; - virtual void SetFeatureMatrixNumFrames(size_t numFrames) = 0; - virtual void SetFeatureMatrixNumComponents(size_t numFeatureComponents) = 0; + struct FrameDatabaseInfo + { + size_t m_memoryUsedInBytes = 0; + size_t m_numFrames; + size_t m_numMotions; + float m_motionDataInSeconds; + }; + virtual void SetFrameDatabaseInfo(const FrameDatabaseInfo& info) = 0; - virtual void SetKdTreeMemoryUsage(size_t sizeInBytes) = 0; - virtual void SetKdTreeNumNodes(size_t numNodes) = 0; - virtual void SetKdTreeNumDimensions(size_t numDimensions) = 0; + struct FeatureMatrixInfo + { + size_t m_memoryUsedInBytes = 0; + size_t m_numFrames = 0; + size_t m_numDimensions = 0; + }; + virtual void SetFeatureMatrixInfo(const FeatureMatrixInfo& info) = 0; + + struct KdTreeInfo + { + size_t m_memoryUsedInBytes = 0; + size_t m_numNodes = 0; + size_t m_numDimensions = 0; + }; + virtual void SetKdTreeInfo(const KdTreeInfo& info) = 0; }; using ImGuiMonitorRequestBus = AZ::EBus; } // namespace EMotionFX::MotionMatching diff --git a/Gems/MotionMatching/Code/Source/MotionMatchingInstance.cpp b/Gems/MotionMatching/Code/Source/MotionMatchingInstance.cpp index 54fc2918e6..36a51f2677 100644 --- a/Gems/MotionMatching/Code/Source/MotionMatchingInstance.cpp +++ b/Gems/MotionMatching/Code/Source/MotionMatchingInstance.cpp @@ -28,14 +28,14 @@ #include #include -#include - namespace EMotionFX::MotionMatching { AZ_CLASS_ALLOCATOR_IMPL(MotionMatchingInstance, MotionMatchAllocator, 0) MotionMatchingInstance::~MotionMatchingInstance() { + DebugDrawRequestBus::Handler::BusDisconnect(); + if (m_motionInstance) { GetMotionInstancePool().Free(m_motionInstance); @@ -58,6 +58,8 @@ namespace EMotionFX::MotionMatching AZ_Assert(settings.m_actorInstance, "The actor instance cannot be a nullptr."); AZ_Assert(settings.m_data, "The motion match data cannot be nullptr."); + DebugDrawRequestBus::Handler::BusConnect(); + // Update the cached pointer to the trajectory feature. const FeatureSchema& featureSchema = settings.m_data->GetFeatureSchema(); for (Feature* feature : featureSchema.GetFeatures()) @@ -69,29 +71,6 @@ namespace EMotionFX::MotionMatching } } - // Debug display initialization. - const auto AddDebugDisplay = [=](AZ::s32 debugDisplayId) - { - if (debugDisplayId == -1) - { - return; - } - - AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus; - AzFramework::DebugDisplayRequestBus::Bind(debugDisplayBus, debugDisplayId); - - AzFramework::DebugDisplayRequests* debugDisplay = AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus); - if (debugDisplay) - { - m_debugDisplays.emplace_back(debugDisplay); - } - }; - // Draw the debug visualizations to the Animation Editor as well as the LY Editor viewport. - AZ::s32 animationEditorViewportId = -1; - EMStudio::ViewportPluginRequestBus::BroadcastResult(animationEditorViewportId, &EMStudio::ViewportPluginRequestBus::Events::GetViewportId); - AddDebugDisplay(animationEditorViewportId); - AddDebugDisplay(AzFramework::g_defaultSceneEntityDebugDisplayId); - m_actorInstance = settings.m_actorInstance; m_data = settings.m_data; if (settings.m_data->GetFrameDatabase().GetNumFrames() == 0) @@ -123,30 +102,17 @@ namespace EMotionFX::MotionMatching m_queryFeatureValues.resize(numValuesInKdTree); // Initialize the trajectory history. - size_t rootJointIndex = m_actorInstance->GetActor()->GetMotionExtractionNodeIndex(); - if (rootJointIndex == InvalidIndex32) + if (m_cachedTrajectoryFeature) { - rootJointIndex = 0; - } - m_trajectoryHistory.Init(*m_actorInstance->GetTransformData()->GetCurrentPose(), - rootJointIndex, - m_cachedTrajectoryFeature->GetFacingAxisDir(), - m_trajectorySecsToTrack); - } - - void MotionMatchingInstance::DebugDraw() - { - if (m_data && !m_debugDisplays.empty()) - { - for (AzFramework::DebugDisplayRequests* debugDisplay : m_debugDisplays) + size_t rootJointIndex = m_actorInstance->GetActor()->GetMotionExtractionNodeIndex(); + if (rootJointIndex == InvalidIndex32) { - if (debugDisplay) - { - const AZ::u32 prevState = debugDisplay->GetState(); - DebugDraw(*debugDisplay); - debugDisplay->SetState(prevState); - } + rootJointIndex = 0; } + m_trajectoryHistory.Init(*m_actorInstance->GetTransformData()->GetCurrentPose(), + rootJointIndex, + m_cachedTrajectoryFeature->GetFacingAxisDir(), + m_trajectorySecsToTrack); } } @@ -306,7 +272,7 @@ namespace EMotionFX::MotionMatching { AZ_PROFILE_SCOPE(Animation, "MotionMatchingInstance::Update"); - if (!m_data) + if (!m_data || !m_motionInstance) { return; } @@ -322,7 +288,7 @@ namespace EMotionFX::MotionMatching // Update the time. After this there is no sample for the updated time in the history as we're about to prepare this with the current update. m_trajectoryHistory.Update(timePassedInSeconds); - // Register the current actor instance position to the history data of the spline. + // Update the trajectory query control points. m_trajectoryQuery.Update(m_actorInstance, m_cachedTrajectoryFeature, m_trajectoryHistory, @@ -371,8 +337,7 @@ namespace EMotionFX::MotionMatching SamplePose(m_motionInstance->GetMotion(), m_queryPose, newMotionTime); // Copy over the motion extraction joint transform from the current pose to the newly sampled pose. - // When sampling a motion, the motion extraction joint is in animation space, while we need the query pose to be in - // world space. + // When sampling a motion, the motion extraction joint is in animation space, while we need the query pose to be in world space. // Note: This does not yet take the extraction delta from the current tick into account. if (m_actorInstance->GetActor()->GetMotionExtractionNode()) { @@ -433,16 +398,17 @@ namespace EMotionFX::MotionMatching // ImGui monitor { #ifdef IMGUI_ENABLED - const KdTree& kdTree = m_data->GetKdTree(); - ImGuiMonitorRequestBus::Broadcast(&ImGuiMonitorRequests::SetKdTreeMemoryUsage, kdTree.CalcMemoryUsageInBytes()); - ImGuiMonitorRequestBus::Broadcast(&ImGuiMonitorRequests::SetKdTreeNumNodes, kdTree.GetNumNodes()); - ImGuiMonitorRequestBus::Broadcast(&ImGuiMonitorRequests::SetKdTreeNumDimensions, kdTree.GetNumDimensions()); - // TODO: add memory usage for frame database + const FrameDatabase& frameDatabase = m_data->GetFrameDatabase(); + ImGuiMonitorRequests::FrameDatabaseInfo frameDatabaseInfo{frameDatabase.CalcMemoryUsageInBytes(), frameDatabase.GetNumFrames(), frameDatabase.GetNumUsedMotions(), frameDatabase.GetNumFrames() / (float)frameDatabase.GetSampleRate()}; + ImGuiMonitorRequestBus::Broadcast(&ImGuiMonitorRequests::SetFrameDatabaseInfo, frameDatabaseInfo); + const KdTree& kdTree = m_data->GetKdTree(); + ImGuiMonitorRequests::KdTreeInfo kdTreeInfo{kdTree.CalcMemoryUsageInBytes(), kdTree.GetNumNodes(), kdTree.GetNumDimensions()}; + ImGuiMonitorRequestBus::Broadcast(&ImGuiMonitorRequests::SetKdTreeInfo, kdTreeInfo); + const FeatureMatrix& featureMatrix = m_data->GetFeatureMatrix(); - ImGuiMonitorRequestBus::Broadcast(&ImGuiMonitorRequests::SetFeatureMatrixMemoryUsage, featureMatrix.CalcMemoryUsageInBytes()); - ImGuiMonitorRequestBus::Broadcast(&ImGuiMonitorRequests::SetFeatureMatrixNumFrames, featureMatrix.rows()); - ImGuiMonitorRequestBus::Broadcast(&ImGuiMonitorRequests::SetFeatureMatrixNumComponents, featureMatrix.cols()); + ImGuiMonitorRequests::FeatureMatrixInfo featureMatrixInfo{featureMatrix.CalcMemoryUsageInBytes(), static_cast(featureMatrix.rows()), static_cast(featureMatrix.cols())}; + ImGuiMonitorRequestBus::Broadcast(&ImGuiMonitorRequests::SetFeatureMatrixInfo, featureMatrixInfo); #endif } } diff --git a/Gems/MotionMatching/Code/Source/MotionMatchingInstance.h b/Gems/MotionMatching/Code/Source/MotionMatchingInstance.h index 49c781162d..0969763809 100644 --- a/Gems/MotionMatching/Code/Source/MotionMatchingInstance.h +++ b/Gems/MotionMatching/Code/Source/MotionMatchingInstance.h @@ -19,6 +19,8 @@ #include #include +#include + namespace AZ { class ReflectContext; @@ -34,12 +36,17 @@ namespace EMotionFX::MotionMatching { class MotionMatchingData; + //! The instance is where everything comes together. It stores the trajectory history, the trajectory query along with the query vector, knows about the + //! last lowest cost frame frame index and stores the time of the animation that the instance is currently playing. It is responsible for motion extraction, + //! blending towards a new frame in the motion capture database in case the algorithm found a better matching frame and executes the actual search. class EMFX_API MotionMatchingInstance + : public DebugDrawRequestBus::Handler { public: AZ_RTTI(MotionMatchingInstance, "{1ED03AD8-0FB2-431B-AF01-02F7E930EB73}") AZ_CLASS_ALLOCATOR_DECL + MotionMatchingInstance() = default; virtual ~MotionMatchingInstance(); struct EMFX_API InitSettings @@ -49,8 +56,8 @@ namespace EMotionFX::MotionMatching }; void Init(const InitSettings& settings); - void DebugDraw(); - void DebugDraw(AzFramework::DebugDisplayRequests& debugDisplay); + // DebugDrawRequestBus::Handler overrides + void DebugDraw(AzFramework::DebugDisplayRequests& debugDisplay) override; void Update(float timePassedInSeconds, const AZ::Vector3& targetPos, const AZ::Vector3& targetFacingDir, TrajectoryQuery::EMode mode, float pathRadius, float pathSpeed); void PostUpdate(float timeDelta); @@ -64,10 +71,8 @@ namespace EMotionFX::MotionMatching void SetLowestCostSearchFrequency(float frequency) { m_lowestCostSearchFrequency = frequency; } float GetNewMotionTime() const { return m_newMotionTime; } - /** - * Get the cached trajectory feature. - * The trajectory feature is searched in the feature schema used in the current instance at init time. - */ + //! Get the cached trajectory feature. + //! The trajectory feature is searched in the feature schema used in the current instance at init time. FeatureTrajectory* GetTrajectoryFeature() const { return m_cachedTrajectoryFeature; } const TrajectoryQuery& GetTrajectoryQuery() const { return m_trajectoryQuery; } const TrajectoryHistory& GetTrajectoryHistory() const { return m_trajectoryHistory; } @@ -90,10 +95,10 @@ namespace EMotionFX::MotionMatching Transform m_motionExtractionDelta = Transform::CreateIdentity(); /// Buffers used for the broad-phase KD-tree search. - AZStd::vector m_queryFeatureValues; /** The input query features to be compared to every entry/row in the feature matrix with the motion matching search. */ - AZStd::vector m_nearestFrames; /** Stores the nearest matching frames / search result from the KD-tree. */ + AZStd::vector m_queryFeatureValues; //< The input query features to be compared to every entry/row in the feature matrix with the motion matching search. + AZStd::vector m_nearestFrames; //< Stores the nearest matching frames / search result from the KD-tree. - FeatureTrajectory* m_cachedTrajectoryFeature = nullptr; /** Cached pointer to the trajectory feature in the feature schema. */ + FeatureTrajectory* m_cachedTrajectoryFeature = nullptr; //< Cached pointer to the trajectory feature in the feature schema. TrajectoryQuery m_trajectoryQuery; TrajectoryHistory m_trajectoryHistory; static constexpr float m_trajectorySecsToTrack = 5.0f; @@ -105,7 +110,7 @@ namespace EMotionFX::MotionMatching bool m_blending = false; float m_blendWeight = 1.0f; - float m_blendProgressTime = 0.0f; // How long are we already blending? In seconds. + float m_blendProgressTime = 0.0f; //< How long are we already blending? In seconds. /// Buffers used for FindLowestCostFrameIndex(). AZStd::vector m_tempCosts; diff --git a/Gems/MotionMatching/Code/Source/MotionMatchingSystemComponent.cpp b/Gems/MotionMatching/Code/Source/MotionMatchingSystemComponent.cpp index 073362d741..9091c60c0a 100644 --- a/Gems/MotionMatching/Code/Source/MotionMatchingSystemComponent.cpp +++ b/Gems/MotionMatching/Code/Source/MotionMatchingSystemComponent.cpp @@ -16,6 +16,8 @@ #include +#include + #include #include #include @@ -39,7 +41,7 @@ namespace EMotionFX::MotionMatching { ec->Class("MotionMatching", "[Description of functionality provided by this System Component]") ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("System")) + ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC_CE("System")) ->Attribute(AZ::Edit::Attributes::AutoExpand, true) ; } @@ -69,9 +71,9 @@ namespace EMotionFX::MotionMatching incompatible.push_back(AZ_CRC_CE("MotionMatchingService")); } - void MotionMatchingSystemComponent::GetRequiredServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& required) + void MotionMatchingSystemComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required) { - required.push_back(AZ_CRC("EMotionFXAnimationService", 0x3f8a6369)); + required.push_back(AZ_CRC_CE("EMotionFXAnimationService")); } void MotionMatchingSystemComponent::GetDependentServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& dependent) @@ -122,7 +124,33 @@ namespace EMotionFX::MotionMatching MotionMatchingRequestBus::Handler::BusDisconnect(); } + void MotionMatchingSystemComponent::DebugDraw(AZ::s32 debugDisplayId) + { + AZ_PROFILE_SCOPE(Animation, "MotionMatchingSystemComponent::DebugDraw"); + + if (debugDisplayId == -1) + { + return; + } + + AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus; + AzFramework::DebugDisplayRequestBus::Bind(debugDisplayBus, debugDisplayId); + + AzFramework::DebugDisplayRequests* debugDisplay = AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus); + if (debugDisplay) + { + const AZ::u32 prevState = debugDisplay->GetState(); + EMotionFX::MotionMatching::DebugDrawRequestBus::Broadcast(&EMotionFX::MotionMatching::DebugDrawRequests::DebugDraw, *debugDisplay); + debugDisplay->SetState(prevState); + } + } + void MotionMatchingSystemComponent::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time) { + // Draw the debug visualizations to the Animation Editor as well as the LY Editor viewport. + AZ::s32 animationEditorViewportId = -1; + EMStudio::ViewportPluginRequestBus::BroadcastResult(animationEditorViewportId, &EMStudio::ViewportPluginRequestBus::Events::GetViewportId); + DebugDraw(animationEditorViewportId); + DebugDraw(AzFramework::g_defaultSceneEntityDebugDisplayId); } } // namespace EMotionFX::MotionMatching diff --git a/Gems/MotionMatching/Code/Source/MotionMatchingSystemComponent.h b/Gems/MotionMatching/Code/Source/MotionMatchingSystemComponent.h index 6a5b5a7b73..09d47b9dc3 100644 --- a/Gems/MotionMatching/Code/Source/MotionMatchingSystemComponent.h +++ b/Gems/MotionMatching/Code/Source/MotionMatchingSystemComponent.h @@ -33,8 +33,7 @@ namespace EMotionFX::MotionMatching ~MotionMatchingSystemComponent(); protected: - //////////////////////////////////////////////////////////////////////// - // MotionMatchingRequestBus interface implementation + void DebugDraw(AZ::s32 debugDisplayId); //////////////////////////////////////////////////////////////////////// // AZ::Component interface implementation @@ -45,6 +44,10 @@ namespace EMotionFX::MotionMatching //////////////////////////////////////////////////////////////////////// // AZTickBus interface implementation + int GetTickOrder() override + { + return AZ::TICK_PRE_RENDER; + } void OnTick(float deltaTime, AZ::ScriptTimePoint time) override; //////////////////////////////////////////////////////////////////////// }; diff --git a/Gems/SurfaceData/Code/Include/SurfaceData/SurfaceDataTypes.h b/Gems/SurfaceData/Code/Include/SurfaceData/SurfaceDataTypes.h index c892bc8c09..943c45bb6a 100644 --- a/Gems/SurfaceData/Code/Include/SurfaceData/SurfaceDataTypes.h +++ b/Gems/SurfaceData/Code/Include/SurfaceData/SurfaceDataTypes.h @@ -24,9 +24,17 @@ namespace SurfaceData using SurfaceTagVector = AZStd::vector; //! SurfaceTagWeights stores a collection of surface tags and weights. + //! A surface tag can only appear once in the collection. Attempting to add it multiple times will always preserve the + //! highest weight value. class SurfaceTagWeights { public: + //! The maximum number of surface weights that we can store. + //! For performance reasons, we want to limit this so that we can preallocate the max size in advance. + //! The current number is chosen to be higher than expected needs, but small enough to avoid being excessively wasteful. + //! (Dynamic structures would end up taking more memory than what we're preallocating) + static inline constexpr size_t MaxSurfaceWeights = 16; + SurfaceTagWeights() = default; //! Construct a collection of SurfaceTagWeights from the given SurfaceTagWeightList. @@ -45,42 +53,68 @@ namespace SurfaceData //! @param weight - The weight to assign to each tag. void AssignSurfaceTagWeights(const SurfaceTagVector& tags, float weight); - //! Add a surface tag weight to this collection. - //! @param tag - The surface tag. - //! @param weight - The surface tag weight. - void AddSurfaceTagWeight(const AZ::Crc32 tag, const float weight); - - //! Replace the surface tag weight with the new one if it's higher, or add it if the tag isn't found. + //! Add a surface tag weight to this collection. If the tag already exists, the higher weight will be preserved. //! (This method is intentionally inlined for its performance impact) //! @param tag - The surface tag. //! @param weight - The surface tag weight. - void AddSurfaceWeightIfGreater(const AZ::Crc32 tag, const float weight) + void AddSurfaceTagWeight(const AZ::Crc32 tag, const float weight) { - const auto maskItr = m_weights.find(tag); - const float previousValue = maskItr != m_weights.end() ? maskItr->second : 0.0f; - m_weights[tag] = AZ::GetMax(weight, previousValue); + for (auto weightItr = m_weights.begin(); weightItr != m_weights.end(); ++weightItr) + { + // Since we need to scan for duplicate surface types, store the entries sorted by surface type so that we can + // early-out once we pass the location for the entry instead of always searching every entry. + if (weightItr->m_surfaceType > tag) + { + if (m_weights.size() != MaxSurfaceWeights) + { + // We didn't find the surface type, so add the new entry in sorted order. + m_weights.insert(weightItr, { tag, weight }); + } + else + { + AZ_Assert(false, "SurfaceTagWeights has reached max capacity, it cannot add a new tag / weight."); + } + return; + } + else if (weightItr->m_surfaceType == tag) + { + // We found the surface type, so just keep the higher of the two weights. + weightItr->m_weight = AZ::GetMax(weight, weightItr->m_weight); + return; + } + } + + // We didn't find the surface weight, and the sort order for it is at the end, so add it to the back of the list. + if (m_weights.size() != MaxSurfaceWeights) + { + m_weights.emplace_back(tag, weight); + } + else + { + AZ_Assert(false, "SurfaceTagWeights has reached max capacity, it cannot add a new tag / weight."); + } } - //! Replace the surface tag weight with the new one if it's higher, or add it if the tag isn't found. + //! Add surface tags and weights to this collection. If a tag already exists, the higher weight will be preserved. //! (This method is intentionally inlined for its performance impact) //! @param tags - The surface tags to replace/add. //! @param weight - The surface tag weight to use for each tag. - void AddSurfaceWeightsIfGreater(const SurfaceTagVector& tags, const float weight) + void AddSurfaceTagWeights(const SurfaceTagVector& tags, const float weight) { for (const auto& tag : tags) { - AddSurfaceWeightIfGreater(tag, weight); + AddSurfaceTagWeight(tag, weight); } } - //! Replace the surface tag weight with the new one if it's higher, or add it if the tag isn't found. + //! Add surface tags and weights to this collection. If a tag already exists, the higher weight will be preserved. //! (This method is intentionally inlined for its performance impact) //! @param weights - The surface tags and weights to replace/add. - void AddSurfaceWeightsIfGreater(const SurfaceTagWeights& weights) + void AddSurfaceTagWeights(const SurfaceTagWeights& weights) { for (const auto& [tag, weight] : weights.m_weights) { - AddSurfaceWeightIfGreater(tag, weight); + AddSurfaceTagWeight(tag, weight); } } @@ -125,7 +159,7 @@ namespace SurfaceData //! Check to see if the collection contains the given tag. //! @param sampleTag - The tag to look for. //! @return True if the tag is found, false if it isn't. - bool HasMatchingTag(const AZ::Crc32& sampleTag) const; + bool HasMatchingTag(AZ::Crc32 sampleTag) const; //! Check to see if the collection contains the given tag with the given weight range. //! The range check is inclusive on both sides of the range: [weightMin, weightMax] @@ -133,7 +167,7 @@ namespace SurfaceData //! @param weightMin - The minimum weight for this tag. //! @param weightMax - The maximum weight for this tag. //! @return True if the tag is found, false if it isn't. - bool HasMatchingTag(const AZ::Crc32& sampleTag, float weightMin, float weightMax) const; + bool HasMatchingTag(AZ::Crc32 sampleTag, float weightMin, float weightMax) const; //! Check to see if the collection contains any of the given tags. //! @param sampleTags - The tags to look for. @@ -149,7 +183,12 @@ namespace SurfaceData bool HasAnyMatchingTags(const SurfaceTagVector& sampleTags, float weightMin, float weightMax) const; private: - AZStd::unordered_map m_weights; + //! Search for the given tag entry. + //! @param tag - The tag to search for. + //! @return The pointer to the tag that's found, or end() if it wasn't found. + const AzFramework::SurfaceData::SurfaceTagWeight* FindTag(AZ::Crc32 tag) const; + + AZStd::fixed_vector m_weights; }; //! SurfacePointList stores a collection of surface point data, which consists of positions, normals, and surface tag weights. diff --git a/Gems/SurfaceData/Code/Source/Components/SurfaceDataColliderComponent.cpp b/Gems/SurfaceData/Code/Source/Components/SurfaceDataColliderComponent.cpp index e51fbc09b2..86a165b7d8 100644 --- a/Gems/SurfaceData/Code/Source/Components/SurfaceDataColliderComponent.cpp +++ b/Gems/SurfaceData/Code/Source/Components/SurfaceDataColliderComponent.cpp @@ -259,7 +259,7 @@ namespace SurfaceData if (DoRayTrace(position, queryPointOnly, hitPosition, hitNormal)) { // If the query point collides with the volume, add all our modifier tags with a weight of 1.0f. - weights.AddSurfaceWeightsIfGreater(m_configuration.m_modifierTags, 1.0f); + weights.AddSurfaceTagWeights(m_configuration.m_modifierTags, 1.0f); } } }); diff --git a/Gems/SurfaceData/Code/Source/Components/SurfaceDataShapeComponent.cpp b/Gems/SurfaceData/Code/Source/Components/SurfaceDataShapeComponent.cpp index b84607782e..481372b7dc 100644 --- a/Gems/SurfaceData/Code/Source/Components/SurfaceDataShapeComponent.cpp +++ b/Gems/SurfaceData/Code/Source/Components/SurfaceDataShapeComponent.cpp @@ -179,7 +179,7 @@ namespace SurfaceData if (m_shapeBounds.Contains(position) && shape->IsPointInside(position)) { // If the point is inside our shape, add all our modifier tags with a weight of 1.0f. - weights.AddSurfaceWeightsIfGreater(m_configuration.m_modifierTags, 1.0f); + weights.AddSurfaceTagWeights(m_configuration.m_modifierTags, 1.0f); } }); }); diff --git a/Gems/SurfaceData/Code/Source/SurfaceDataTypes.cpp b/Gems/SurfaceData/Code/Source/SurfaceDataTypes.cpp index 3071fd02ee..04c1ada677 100644 --- a/Gems/SurfaceData/Code/Source/SurfaceDataTypes.cpp +++ b/Gems/SurfaceData/Code/Source/SurfaceDataTypes.cpp @@ -14,28 +14,21 @@ namespace SurfaceData void SurfaceTagWeights::AssignSurfaceTagWeights(const AzFramework::SurfaceData::SurfaceTagWeightList& weights) { m_weights.clear(); - m_weights.reserve(weights.size()); for (auto& weight : weights) { - m_weights.emplace(weight.m_surfaceType, weight.m_weight); + AddSurfaceTagWeight(weight.m_surfaceType, weight.m_weight); } } void SurfaceTagWeights::AssignSurfaceTagWeights(const SurfaceTagVector& tags, float weight) { m_weights.clear(); - m_weights.reserve(tags.size()); for (auto& tag : tags) { - m_weights[tag] = weight; + AddSurfaceTagWeight(tag.operator AZ::Crc32(), weight); } } - void SurfaceTagWeights::AddSurfaceTagWeight(const AZ::Crc32 tag, const float value) - { - m_weights[tag] = value; - } - void SurfaceTagWeights::Clear() { m_weights.clear(); @@ -52,7 +45,7 @@ namespace SurfaceData weights.reserve(m_weights.size()); for (auto& weight : m_weights) { - weights.emplace_back(weight.first, weight.second); + weights.emplace_back(weight); } return weights; } @@ -65,17 +58,8 @@ namespace SurfaceData return false; } - for (auto& weight : m_weights) - { - auto rhsWeight = rhs.m_weights.find(weight.first); - if ((rhsWeight == rhs.m_weights.end()) || (rhsWeight->second != weight.second)) - { - return false; - } - } - - // All the entries matched, and the lists are the same size, so they're equal. - return true; + // The lists are stored in sorted order, so we can compare every entry in order for equivalence. + return (m_weights == rhs.m_weights); } bool SurfaceTagWeights::SurfaceWeightsAreEqual(const AzFramework::SurfaceData::SurfaceTagWeightList& compareWeights) const @@ -92,7 +76,7 @@ namespace SurfaceData compareWeights.begin(), compareWeights.end(), [weight](const AzFramework::SurfaceData::SurfaceTagWeight& compareWeight) -> bool { - return (weight.first == compareWeight.m_surfaceType) && (weight.second == compareWeight.m_weight); + return (weight == compareWeight); }); // If we didn't find a match, they're not equal. @@ -119,9 +103,9 @@ namespace SurfaceData bool SurfaceTagWeights::HasValidTags() const { - for (const auto& sourceTag : m_weights) + for (const auto& weight : m_weights) { - if (sourceTag.first != Constants::s_unassignedTagCrc) + if (weight.m_surfaceType != Constants::s_unassignedTagCrc) { return true; } @@ -129,9 +113,9 @@ namespace SurfaceData return false; } - bool SurfaceTagWeights::HasMatchingTag(const AZ::Crc32& sampleTag) const + bool SurfaceTagWeights::HasMatchingTag(AZ::Crc32 sampleTag) const { - return m_weights.find(sampleTag) != m_weights.end(); + return FindTag(sampleTag) != m_weights.end(); } bool SurfaceTagWeights::HasAnyMatchingTags(const SurfaceTagVector& sampleTags) const @@ -147,10 +131,10 @@ namespace SurfaceData return false; } - bool SurfaceTagWeights::HasMatchingTag(const AZ::Crc32& sampleTag, float weightMin, float weightMax) const + bool SurfaceTagWeights::HasMatchingTag(AZ::Crc32 sampleTag, float weightMin, float weightMax) const { - auto maskItr = m_weights.find(sampleTag); - return maskItr != m_weights.end() && weightMin <= maskItr->second && weightMax >= maskItr->second; + auto weightEntry = FindTag(sampleTag); + return weightEntry != m_weights.end() && weightMin <= weightEntry->m_weight && weightMax >= weightEntry->m_weight; } bool SurfaceTagWeights::HasAnyMatchingTags(const SurfaceTagVector& sampleTags, float weightMin, float weightMax) const @@ -166,7 +150,25 @@ namespace SurfaceData return false; } + const AzFramework::SurfaceData::SurfaceTagWeight* SurfaceTagWeights::FindTag(AZ::Crc32 tag) const + { + for (auto weightItr = m_weights.begin(); weightItr != m_weights.end(); ++weightItr) + { + if (weightItr->m_surfaceType == tag) + { + // Found the tag, return a pointer to the entry. + return weightItr; + } + else if (weightItr->m_surfaceType > tag) + { + // Our list is stored in sorted order by surfaceType, so early-out if our values get too high. + break; + } + } + // The tag wasn't found, so return end(). + return m_weights.end(); + } SurfacePointList::SurfacePointList(AZStd::initializer_list surfacePoints) @@ -192,7 +194,7 @@ namespace SurfaceData if (m_surfacePositionList[index].IsClose(position) && m_surfaceNormalList[index].IsClose(normal)) { // consolidate points with similar attributes by adding masks/weights to the similar point instead of adding a new one. - m_surfaceWeightsList[index].AddSurfaceWeightsIfGreater(masks); + m_surfaceWeightsList[index].AddSurfaceTagWeights(masks); return; } else if (m_surfacePositionList[index].GetZ() < position.GetZ()) diff --git a/Gems/SurfaceData/Code/Tests/SurfaceDataBenchmarks.cpp b/Gems/SurfaceData/Code/Tests/SurfaceDataBenchmarks.cpp index 226a711cff..f8b4c675a5 100644 --- a/Gems/SurfaceData/Code/Tests/SurfaceDataBenchmarks.cpp +++ b/Gems/SurfaceData/Code/Tests/SurfaceDataBenchmarks.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -270,6 +271,88 @@ namespace UnitTest ->Arg( 2048 ) ->Unit(::benchmark::kMillisecond); + BENCHMARK_DEFINE_F(SurfaceDataBenchmark, BM_AddSurfaceTagWeight)(benchmark::State& state) + { + AZ_PROFILE_FUNCTION(Entity); + + AZ::Crc32 tags[SurfaceData::SurfaceTagWeights::MaxSurfaceWeights]; + AZ::SimpleLcgRandom randomGenerator(1234567); + + // Declare this outside the loop so that we aren't benchmarking creation and destruction. + SurfaceData::SurfaceTagWeights weights; + + bool clearEachTime = state.range(0) > 0; + + // Create a list of randomly-generated tag values. + for (auto& tag : tags) + { + tag = randomGenerator.GetRandom(); + } + + for (auto _ : state) + { + // We'll benchmark this two ways: + // 1. We clear each time, which means each AddSurfaceWeightIfGreater call will search the whole list then add. + // 2. We don't clear, which means that after the first run, AddSurfaceWeightIfGreater will always try to replace values. + if (clearEachTime) + { + weights.Clear(); + } + + // For each tag, try to add it with a random weight. + for (auto& tag : tags) + { + weights.AddSurfaceTagWeight(tag, randomGenerator.GetRandomFloat()); + } + } + } + + BENCHMARK_REGISTER_F(SurfaceDataBenchmark, BM_AddSurfaceTagWeight) + ->Arg(false) + ->Arg(true) + ->ArgName("ClearEachTime"); + + BENCHMARK_DEFINE_F(SurfaceDataBenchmark, BM_HasAnyMatchingTags_NoMatches)(benchmark::State& state) + { + AZ_PROFILE_FUNCTION(Entity); + + AZ::Crc32 tags[SurfaceData::SurfaceTagWeights::MaxSurfaceWeights]; + AZ::SimpleLcgRandom randomGenerator(1234567); + + // Declare this outside the loop so that we aren't benchmarking creation and destruction. + SurfaceData::SurfaceTagWeights weights; + + // Create a list of randomly-generated tag values. + for (auto& tag : tags) + { + // Specifically always set the last bit so that we can create comparison tags that won't match. + tag = randomGenerator.GetRandom() | 0x01; + + // Add the tag to our weights list with a random weight. + weights.AddSurfaceTagWeight(tag, randomGenerator.GetRandomFloat()); + } + + // Create a set of similar comparison tags that won't match. We still want a random distribution of values though, + // because the SurfaceTagWeights might behave differently with ordered lists. + SurfaceData::SurfaceTagVector comparisonTags; + for (auto& tag : tags) + { + comparisonTags.emplace_back(tag ^ 0x01); + } + + for (auto _ : state) + { + // Test to see if any of our tags match. + // All of comparison tags should get compared against all of the added tags. + bool result = weights.HasAnyMatchingTags(comparisonTags); + benchmark::DoNotOptimize(result); + } + } + + BENCHMARK_REGISTER_F(SurfaceDataBenchmark, BM_HasAnyMatchingTags_NoMatches); + + + #endif } diff --git a/Gems/SurfaceData/Code/Tests/SurfaceDataTest.cpp b/Gems/SurfaceData/Code/Tests/SurfaceDataTest.cpp index 39659313f5..f4ff0cb04c 100644 --- a/Gems/SurfaceData/Code/Tests/SurfaceDataTest.cpp +++ b/Gems/SurfaceData/Code/Tests/SurfaceDataTest.cpp @@ -169,7 +169,7 @@ class MockSurfaceProvider if (surfacePoints != m_GetSurfacePoints.end()) { - weights.AddSurfaceWeightsIfGreater(m_tags, 1.0f); + weights.AddSurfaceTagWeights(m_tags, 1.0f); } }); } diff --git a/Gems/Vegetation/Code/Source/AreaSystemComponent.cpp b/Gems/Vegetation/Code/Source/AreaSystemComponent.cpp index e575480ff4..f4ef3bd6f1 100644 --- a/Gems/Vegetation/Code/Source/AreaSystemComponent.cpp +++ b/Gems/Vegetation/Code/Source/AreaSystemComponent.cpp @@ -1137,7 +1137,7 @@ namespace Vegetation claimPoint.m_position = position; claimPoint.m_normal = normal; claimPoint.m_masks = masks; - sectorInfo.m_baseContext.m_masks.AddSurfaceWeightsIfGreater(masks); + sectorInfo.m_baseContext.m_masks.AddSurfaceTagWeights(masks); return true; }); } diff --git a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake index f20b67307b..5d30abfb4d 100644 --- a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake +++ b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake @@ -19,7 +19,7 @@ ly_associate_package(PACKAGE_NAME glad-2.0.0-beta-rev2-multiplatform ly_associate_package(PACKAGE_NAME xxhash-0.7.4-rev1-multiplatform TARGETS xxhash PACKAGE_HASH e81f3e6c4065975833996dd1fcffe46c3cf0f9e3a4207ec5f4a1b564ba75861e) # platform-specific: -ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev12-linux TARGETS assimplib PACKAGE_HASH 49d32e11c594e58a9079972ad63570dd895ac61e6148e428b9c39a62feb676ee) +ly_associate_package(PACKAGE_NAME assimp-5.1.6-rev1-linux TARGETS assimplib PACKAGE_HASH 40d64242d5d32a69af3a25690b76f051f3c1a573c1bafba0782cb771a53dfab7) ly_associate_package(PACKAGE_NAME AWSGameLiftServerSDK-3.4.1-rev1-linux TARGETS AWSGameLiftServerSDK PACKAGE_HASH a8149a95bd100384af6ade97e2b21a56173740d921e6c3da8188cd51554d39af) ly_associate_package(PACKAGE_NAME tiff-4.2.0.15-rev3-linux TARGETS TIFF PACKAGE_HASH 2377f48b2ebc2d1628d9f65186c881544c92891312abe478a20d10b85877409a) ly_associate_package(PACKAGE_NAME freetype-2.10.4.16-linux TARGETS freetype PACKAGE_HASH 3f10c703d9001ecd2bb51a3bd003d3237c02d8f947ad0161c0252fdc54cbcf97) diff --git a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake index fba8f73ba1..082cefee5d 100644 --- a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake +++ b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake @@ -19,7 +19,7 @@ ly_associate_package(PACKAGE_NAME glad-2.0.0-beta-rev2-multiplatform ly_associate_package(PACKAGE_NAME xxhash-0.7.4-rev1-multiplatform TARGETS xxhash PACKAGE_HASH e81f3e6c4065975833996dd1fcffe46c3cf0f9e3a4207ec5f4a1b564ba75861e) # platform-specific: -ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev12-mac TARGETS assimplib PACKAGE_HASH 12db03817553f607bee0d65b690bcaae748014f3ed9266b70384f463bc98c9d1) +ly_associate_package(PACKAGE_NAME assimp-5.1.6-rev1-mac TARGETS assimplib PACKAGE_HASH ad35c2e0efd0852021c84b9a454fdcba2fc8af8b7117e9a0dd7ea0a1915932e0) ly_associate_package(PACKAGE_NAME DirectXShaderCompilerDxc-1.6.2104-o3de-rev3-mac TARGETS DirectXShaderCompilerDxc PACKAGE_HASH 3f77367dbb0342136ec4ebbd44bc1fedf7198089a0f83c5631248530769b2be6) ly_associate_package(PACKAGE_NAME SPIRVCross-2021.04.29-rev1-mac TARGETS SPIRVCross PACKAGE_HASH 78c6376ed2fd195b9b1f5fb2b56e5267a32c3aa21fb399e905308de470eb4515) ly_associate_package(PACKAGE_NAME tiff-4.2.0.15-rev3-mac TARGETS TIFF PACKAGE_HASH c2615ccdadcc0e1d6c5ed61e5965c4d3a82193d206591b79b805c3b3ff35a4bf) diff --git a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake index e24582a453..dd4d158d1c 100644 --- a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake +++ b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake @@ -19,7 +19,7 @@ ly_associate_package(PACKAGE_NAME glad-2.0.0-beta-rev2-multiplatform ly_associate_package(PACKAGE_NAME xxhash-0.7.4-rev1-multiplatform TARGETS xxhash PACKAGE_HASH e81f3e6c4065975833996dd1fcffe46c3cf0f9e3a4207ec5f4a1b564ba75861e) # platform-specific: -ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev12-windows TARGETS assimplib PACKAGE_HASH 5273b7661a7a247bb18e8bc928d25c9cd1bd8ce9dfcc56c50742bac8fa02f0f2) +ly_associate_package(PACKAGE_NAME assimp-5.1.6-rev1-windows TARGETS assimplib PACKAGE_HASH 299d8a3c70657d74af8841650538e9d083fda9356f6782416edbec0ef5a0493e) ly_associate_package(PACKAGE_NAME AWSGameLiftServerSDK-3.4.1-rev1-windows TARGETS AWSGameLiftServerSDK PACKAGE_HASH a0586b006e4def65cc25f388de17dc475e417dc1e6f9d96749777c88aa8271b0) ly_associate_package(PACKAGE_NAME DirectXShaderCompilerDxc-1.6.2104-o3de-rev3-windows TARGETS DirectXShaderCompilerDxc PACKAGE_HASH 803e10b94006b834cbbdd30f562a8ddf04174c2cb6956c8399ec164ef8418d1f) ly_associate_package(PACKAGE_NAME SPIRVCross-2021.04.29-rev1-windows TARGETS SPIRVCross PACKAGE_HASH 7d601ea9d625b1d509d38bd132a1f433d7e895b16adab76bac6103567a7a6817) diff --git a/cmake/Platform/Common/Clang/Configurations_clang.cmake b/cmake/Platform/Common/Clang/Configurations_clang.cmake index 2a311d6079..a46ac6647d 100644 --- a/cmake/Platform/Common/Clang/Configurations_clang.cmake +++ b/cmake/Platform/Common/Clang/Configurations_clang.cmake @@ -9,6 +9,8 @@ include(cmake/Platform/Common/Configurations_common.cmake) ly_append_configurations_options( + DEFINES + _FORTIFY_SOURCE=2 COMPILATION -fno-exceptions -fvisibility=hidden @@ -16,6 +18,8 @@ ly_append_configurations_options( -Wall -Werror + -fpie # Position-Independent Executables + ################### # Disabled warnings (please do not disable any others without first consulting sig-build) ################### @@ -35,17 +39,22 @@ ly_append_configurations_options( ################### COMPILATION_DEBUG - -O0 # No optimization - -g # debug symbols - -fno-inline # don't inline functions - -fstack-protector # Add additional checks to catch stack corruption issues + -O0 # No optimization + -g # debug symbols + -fno-inline # don't inline functions + + -fstack-protector-all # Enable stack protectors for all functions + -fstack-check + COMPILATION_PROFILE -O2 - -g # debug symbols + -g # debug symbols + + -fstack-protector-all # Enable stack protectors for all functions + -fstack-check + COMPILATION_RELEASE -O2 - LINK_NON_STATIC - -Wl,-undefined,error ) include(cmake/Platform/Common/TargetIncludeSystemDirectories_supported.cmake) diff --git a/cmake/Platform/Common/GCC/Configurations_gcc.cmake b/cmake/Platform/Common/GCC/Configurations_gcc.cmake index 12dd4d7bdd..9ce6d2b405 100644 --- a/cmake/Platform/Common/GCC/Configurations_gcc.cmake +++ b/cmake/Platform/Common/GCC/Configurations_gcc.cmake @@ -20,6 +20,8 @@ endif() ly_append_configurations_options( + DEFINES + _FORTIFY_SOURCE=2 COMPILATION_C -fno-exceptions @@ -27,6 +29,9 @@ ly_append_configurations_options( -Wall -Werror + -fpie # Position-Independent Executables + -fstack-protector-all # Enable stack protectors for all functions + ${LY_GCC_GCOV_FLAGS} ${LY_GCC_GPROF_FLAGS} @@ -37,6 +42,9 @@ ly_append_configurations_options( -Wall -Werror + -fpie # Position-Independent Executables + -fstack-protector-all # Enable stack protectors for all functions + ${LY_GCC_GCOV_FLAGS} ${LY_GCC_GPROF_FLAGS} @@ -55,7 +63,6 @@ ly_append_configurations_options( -Wno-parentheses -Wno-reorder -Wno-restrict - -Wno-return-local-addr -Wno-sequence-point -Wno-sign-compare -Wno-strict-aliasing @@ -72,12 +79,23 @@ ly_append_configurations_options( -O0 # No optimization -g # debug symbols -fno-inline # don't inline functions - -fstack-protector # Add additional checks to catch stack corruption issues COMPILATION_PROFILE -O2 -g # debug symbols COMPILATION_RELEASE -O2 + + LINK_NON_STATIC + -Wl,-undefined,error + -fpie + -Wl,-z,relro,-z,now + -Wl,-z,noexecstack + LINK_EXE + -pie + -fpie + -Wl,-z,relro,-z,now + -Wl,-z,noexecstack + ) include(cmake/Platform/Common/TargetIncludeSystemDirectories_supported.cmake) diff --git a/cmake/Platform/Linux/Configurations_linux.cmake b/cmake/Platform/Linux/Configurations_linux.cmake index 98b946426d..300b7bee10 100644 --- a/cmake/Platform/Linux/Configurations_linux.cmake +++ b/cmake/Platform/Linux/Configurations_linux.cmake @@ -18,7 +18,18 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") COMPILATION -fPIC -msse4.1 + LINK_NON_STATIC + -Wl,-undefined,error + -fpie + -Wl,-z,relro,-z,now + -Wl,-z,noexecstack + LINK_EXE + -pie + -fpie + -Wl,-z,relro,-z,now + -Wl,-z,noexecstack ) + ly_set(CMAKE_CXX_EXTENSIONS OFF) elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")