From db7be7107cffdd7e0f538362e407e87441be9275 Mon Sep 17 00:00:00 2001 From: bd_ Date: Sat, 25 Feb 2023 17:53:02 +0900 Subject: [PATCH] fix: high quality curve setting is not preserved properly (#225) This setting is set to _off_ on some imported animation files; in this case, tangent data is not used and the curve is interpolated linearly. Previously, we would sometimes set this to on as part of various animation manipulations we perform in MA processing; this broke some avatars, e.g. "Fluria". --- .../EditModeTests/MiscAnimationTests.meta | 8 + .../MiscAnimationTests/HQ_OFF.anim | 98 ++++++ .../MiscAnimationTests/HQ_OFF.anim.meta | 8 + .../MiscAnimationTests/HQ_ON.anim | 98 ++++++ .../MiscAnimationTests/HQ_ON.anim.meta | 8 + ...ghQualityCurvesSettingPreserved.controller | 101 ++++++ ...lityCurvesSettingPreserved.controller.meta | 8 + .../HighQualityCurvesSettingPreserved.prefab | 321 ++++++++++++++++++ ...hQualityCurvesSettingPreserved.prefab.meta | 7 + .../MiscAnimationTests/MiscAnimationTests.cs | 22 ++ .../MiscAnimationTests.cs.meta | 11 + .../Editor/AnimationDatabase.cs | 20 ++ ProjectSettings/GraphicsSettings.asset | 11 +- 13 files changed, 711 insertions(+), 10 deletions(-) create mode 100644 Assets/_ModularAvatar/EditModeTests/MiscAnimationTests.meta create mode 100644 Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_OFF.anim create mode 100644 Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_OFF.anim.meta create mode 100644 Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_ON.anim create mode 100644 Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_ON.anim.meta create mode 100644 Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.controller create mode 100644 Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.controller.meta create mode 100644 Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.prefab create mode 100644 Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.prefab.meta create mode 100644 Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/MiscAnimationTests.cs create mode 100644 Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/MiscAnimationTests.cs.meta diff --git a/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests.meta b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests.meta new file mode 100644 index 00000000..e8fbd617 --- /dev/null +++ b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b20e0414d98e0f249b0f464f38120ec1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_OFF.anim b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_OFF.anim new file mode 100644 index 00000000..2d9ed074 --- /dev/null +++ b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_OFF.anim @@ -0,0 +1,98 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: HQ_OFF + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 0 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Enabled + path: + classID: 114 + script: {fileID: -1427037861, guid: 4ecd63eff847044b68db9453ce219299, type: 3} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 3305885265 + script: {fileID: -1427037861, guid: 4ecd63eff847044b68db9453ce219299, type: 3} + typeID: 114 + customType: 24 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Enabled + path: + classID: 114 + script: {fileID: -1427037861, guid: 4ecd63eff847044b68db9453ce219299, type: 3} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_OFF.anim.meta b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_OFF.anim.meta new file mode 100644 index 00000000..f2ca8f6b --- /dev/null +++ b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_OFF.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2b8c7c81842b32e4784b316b71a631cb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_ON.anim b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_ON.anim new file mode 100644 index 00000000..930700f8 --- /dev/null +++ b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_ON.anim @@ -0,0 +1,98 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: HQ_ON + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Enabled + path: + classID: 114 + script: {fileID: -1427037861, guid: 4ecd63eff847044b68db9453ce219299, type: 3} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 3305885265 + script: {fileID: -1427037861, guid: 4ecd63eff847044b68db9453ce219299, type: 3} + typeID: 114 + customType: 24 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: Infinity + outSlope: Infinity + tangentMode: 103 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Enabled + path: + classID: 114 + script: {fileID: -1427037861, guid: 4ecd63eff847044b68db9453ce219299, type: 3} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_ON.anim.meta b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_ON.anim.meta new file mode 100644 index 00000000..254327e0 --- /dev/null +++ b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HQ_ON.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c089f66c9cfb58948a7b1bcd0e93db51 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.controller b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.controller new file mode 100644 index 00000000..ecd344cc --- /dev/null +++ b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.controller @@ -0,0 +1,101 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-1614219900459257297 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: HQ_ON + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: c089f66c9cfb58948a7b1bcd0e93db51, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: HighQualityCurvesSettingPreserved + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 5829098483273298939} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1102 &2527618587943162634 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: HQ_OFF + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 2b8c7c81842b32e4784b316b71a631cb, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &5829098483273298939 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 2527618587943162634} + m_Position: {x: 314, y: 287, z: 0} + - serializedVersion: 1 + m_State: {fileID: -1614219900459257297} + m_Position: {x: 538, y: 388, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 2527618587943162634} diff --git a/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.controller.meta b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.controller.meta new file mode 100644 index 00000000..1682b8c0 --- /dev/null +++ b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b1989794a49b3fa4298fe0bf3b25a4a5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.prefab b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.prefab new file mode 100644 index 00000000..20db619f --- /dev/null +++ b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.prefab @@ -0,0 +1,321 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1779618317021452234 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1779618317021451318} + - component: {fileID: 1779618317021451317} + - component: {fileID: 1779618317021451316} + - component: {fileID: 1779618317021452235} + m_Layer: 0 + m_Name: HighQualityCurvesSettingPreserved + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1779618317021451318 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779618317021452234} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.11551872, y: 0.23841906, z: -2.698598} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1779618317021451317 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779618317021452234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 542108242, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3} + m_Name: + m_EditorClassIdentifier: + Name: + ViewPosition: {x: 0, y: 1.6, z: 0.2} + Animations: 0 + ScaleIPD: 1 + lipSync: 0 + lipSyncJawBone: {fileID: 0} + lipSyncJawClosed: {x: 0, y: 0, z: 0, w: 1} + lipSyncJawOpen: {x: 0, y: 0, z: 0, w: 1} + VisemeSkinnedMesh: {fileID: 0} + MouthOpenBlendShapeName: Facial_Blends.Jaw_Down + VisemeBlendShapes: [] + unityVersion: + portraitCameraPositionOffset: {x: 0, y: 0, z: 0} + portraitCameraRotationOffset: {x: 0, y: 1, z: 0, w: -0.00000004371139} + customExpressions: 0 + expressionsMenu: {fileID: 0} + expressionParameters: {fileID: 0} + enableEyeLook: 0 + customEyeLookSettings: + eyeMovement: + confidence: 0.5 + excitement: 0.5 + leftEye: {fileID: 0} + rightEye: {fileID: 0} + eyesLookingStraight: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingUp: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingDown: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingLeft: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyesLookingRight: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidType: 0 + upperLeftEyelid: {fileID: 0} + upperRightEyelid: {fileID: 0} + lowerLeftEyelid: {fileID: 0} + lowerRightEyelid: {fileID: 0} + eyelidsDefault: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsClosed: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsLookingUp: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsLookingDown: + upper: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + lower: + linked: 1 + left: {x: 0, y: 0, z: 0, w: 0} + right: {x: 0, y: 0, z: 0, w: 0} + eyelidsSkinnedMesh: {fileID: 0} + eyelidsBlendshapes: + customizeAnimationLayers: 1 + baseAnimationLayers: + - isEnabled: 0 + type: 0 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 4 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 5 + animatorController: {fileID: 9100000, guid: b1989794a49b3fa4298fe0bf3b25a4a5, + type: 2} + mask: {fileID: 0} + isDefault: 0 + specialAnimationLayers: + - isEnabled: 0 + type: 6 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 7 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + - isEnabled: 0 + type: 8 + animatorController: {fileID: 0} + mask: {fileID: 0} + isDefault: 1 + AnimationPreset: {fileID: 0} + animationHashSet: [] + autoFootsteps: 1 + autoLocomotion: 1 + collider_head: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_torso: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_footR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_footL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_handR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_handL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerIndexL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerMiddleL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerRingL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerLittleL: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerIndexR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerMiddleR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerRingR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} + collider_fingerLittleR: + isMirrored: 1 + state: 0 + transform: {fileID: 0} + radius: 0 + height: 0 + position: {x: 0, y: 0, z: 0} + rotation: {x: 0, y: 0, z: 0, w: 1} +--- !u!114 &1779618317021451316 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779618317021452234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1427037861, guid: 4ecd63eff847044b68db9453ce219299, type: 3} + m_Name: + m_EditorClassIdentifier: + launchedFromSDKPipeline: 0 + completedSDKPipeline: 0 + blueprintId: + contentType: 0 + assetBundleUnityVersion: + fallbackStatus: 0 +--- !u!95 &1779618317021452235 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1779618317021452234} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: b1989794a49b3fa4298fe0bf3b25a4a5, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 diff --git a/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.prefab.meta b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.prefab.meta new file mode 100644 index 00000000..2630edbd --- /dev/null +++ b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/HighQualityCurvesSettingPreserved.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bac9945c3d490994a88ed2d0e9e07bdb +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/MiscAnimationTests.cs b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/MiscAnimationTests.cs new file mode 100644 index 00000000..94d2cafc --- /dev/null +++ b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/MiscAnimationTests.cs @@ -0,0 +1,22 @@ +using modular_avatar_tests; +using nadena.dev.modular_avatar.core.editor; +using NUnit.Framework; +using UnityEditor; + +public class MiscAnimationTests : TestBase +{ + [Test] + public void HighQualityCurvesSettingPreserved() + { + var prefab = CreatePrefab("HighQualityCurvesSettingPreserved.prefab"); + AvatarProcessor.ProcessAvatar(prefab); + + var layer = findFxLayer(prefab, "Base Layer"); + + var hq_on = FindStateInLayer(layer, "HQ_ON"); + var hq_off = FindStateInLayer(layer, "HQ_OFF"); + + Assert.True(new SerializedObject(hq_on.motion).FindProperty("m_UseHighQualityCurve").boolValue); + Assert.False(new SerializedObject(hq_off.motion).FindProperty("m_UseHighQualityCurve").boolValue); + } +} \ No newline at end of file diff --git a/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/MiscAnimationTests.cs.meta b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/MiscAnimationTests.cs.meta new file mode 100644 index 00000000..dbf114ea --- /dev/null +++ b/Assets/_ModularAvatar/EditModeTests/MiscAnimationTests/MiscAnimationTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 241e4873d7c9b49469a3d1000375407b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/nadena.dev.modular-avatar/Editor/AnimationDatabase.cs b/Packages/nadena.dev.modular-avatar/Editor/AnimationDatabase.cs index 66f1683c..6fee2b28 100644 --- a/Packages/nadena.dev.modular-avatar/Editor/AnimationDatabase.cs +++ b/Packages/nadena.dev.modular-avatar/Editor/AnimationDatabase.cs @@ -40,6 +40,26 @@ namespace nadena.dev.modular_avatar.core.editor if (clip.IsProxyAnimation) clip.CurrentClip = clip.OriginalClip; } + foreach (var clip in _clips) + { + // Changing the "high quality curve" setting can result in behavior changes (but can happen accidentally + // as we manipulate curves) + if (clip.CurrentClip != clip.OriginalClip && clip.CurrentClip != null && clip.OriginalClip != null) + { + SerializedObject before = new SerializedObject(clip.OriginalClip); + SerializedObject after = new SerializedObject(clip.CurrentClip); + + var before_prop = before.FindProperty("m_UseHighQualityCurve"); + var after_prop = after.FindProperty("m_UseHighQualityCurve"); + + if (after_prop.boolValue != before_prop.boolValue) + { + after_prop.boolValue = before_prop.boolValue; + after.ApplyModifiedPropertiesWithoutUndo(); + } + } + } + foreach (var action in _clipCommitActions) { action(); diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset index cfce0ab1..b6bb0ac5 100644 --- a/ProjectSettings/GraphicsSettings.asset +++ b/ProjectSettings/GraphicsSettings.asset @@ -28,16 +28,7 @@ GraphicsSettings: m_LensFlare: m_Mode: 1 m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} - m_AlwaysIncludedShaders: - - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 16001, guid: 0000000000000000f000000000000000, type: 0} - - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: [] m_PreloadedShaders: [] m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}