diff --git a/Assets/UniGLTF/Editor/MeshUtility/MeshUtilityDialog.cs b/Assets/UniGLTF/Editor/MeshUtility/MeshUtilityDialog.cs index c2a923b83..c2feca8ff 100644 --- a/Assets/UniGLTF/Editor/MeshUtility/MeshUtilityDialog.cs +++ b/Assets/UniGLTF/Editor/MeshUtility/MeshUtilityDialog.cs @@ -300,10 +300,7 @@ namespace UniGLTF.MeshUtility bool MeshFreezeGui() { - var blendShape = ToggleIsModified("BlendShape", ref MeshUtility.FreezeBlendShape); - var scale = ToggleIsModified("Scale", ref MeshUtility.FreezeScaling); - var rotation = ToggleIsModified("Rotation", ref MeshUtility.FreezeRotation); - return blendShape || scale || rotation; + return ToggleIsModified("BlendShapeRotationScaling", ref MeshUtility.FreezeBlendShapeRotationAndScaling); } protected virtual bool MeshIntegrateGui() diff --git a/Assets/UniGLTF/Runtime/MeshUtility/BoneNormalizer.cs b/Assets/UniGLTF/Runtime/MeshUtility/BoneNormalizer.cs index 637abf24e..191d3f522 100644 --- a/Assets/UniGLTF/Runtime/MeshUtility/BoneNormalizer.cs +++ b/Assets/UniGLTF/Runtime/MeshUtility/BoneNormalizer.cs @@ -49,13 +49,8 @@ namespace UniGLTF.MeshUtility /// 回転とスケールを除去し、BlendShape の現状を焼き付けた版を作成する(まだ、アタッチしない) /// public static Dictionary NormalizeHierarchyFreezeMesh( - GameObject go, bool freezeRotation) + GameObject go) { - if (!freezeRotation) - { - throw new NotImplementedException("WIP"); - } - var result = new Dictionary(); foreach (var src in go.transform.Traverse()) { @@ -108,4 +103,4 @@ namespace UniGLTF.MeshUtility } } } -} \ No newline at end of file +} diff --git a/Assets/UniGLTF/Runtime/MeshUtility/GltfMeshUtility.cs b/Assets/UniGLTF/Runtime/MeshUtility/GltfMeshUtility.cs index 8c1323655..32b5d30cc 100644 --- a/Assets/UniGLTF/Runtime/MeshUtility/GltfMeshUtility.cs +++ b/Assets/UniGLTF/Runtime/MeshUtility/GltfMeshUtility.cs @@ -23,23 +23,7 @@ namespace UniGLTF.MeshUtility /// - Node /// - InverseBindMatrices /// - public bool FreezeBlendShape = false; - - /// - /// Same as VRM-0 normalization - /// - Mesh - /// - Node - /// - InverseBindMatrices - /// - public bool FreezeScaling = true; - - /// - /// Same as VRM-0 normalization - /// - Mesh - /// - Node - /// - InverseBindMatrices - /// - public bool FreezeRotation = false; + public bool FreezeBlendShapeRotationAndScaling = false; public List MeshIntegrationGroups = new List(); @@ -172,15 +156,15 @@ namespace UniGLTF.MeshUtility public virtual (List, List) Process( GameObject target, IEnumerable groupCopy) { - if (FreezeBlendShape || FreezeRotation || FreezeScaling) + if (FreezeBlendShapeRotationAndScaling) { // MeshをBakeする - var meshMap = BoneNormalizer.NormalizeHierarchyFreezeMesh(target, FreezeRotation); + var meshMap = BoneNormalizer.NormalizeHierarchyFreezeMesh(target); // - ヒエラルキーから回転・拡縮を除去する // - BakeされたMeshで置き換える // - bindPoses を再計算する - BoneNormalizer.Replace(target, meshMap, FreezeRotation, FreezeScaling); + BoneNormalizer.Replace(target, meshMap, true, true); } var newList = new List(); diff --git a/Assets/VRM/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs b/Assets/VRM/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs index 7f1a25d14..f7b19239d 100644 --- a/Assets/VRM/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs +++ b/Assets/VRM/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs @@ -76,9 +76,10 @@ namespace VRM } // Transform の回転とスケールを Mesh に適用します。 + // - BlendShape は現状がbakeされます // - 回転とスケールが反映された新しい Mesh が作成されます - // - Transform の回転とスケールはクリアされます。world position を維持します。 - var newMeshMap = BoneNormalizer.NormalizeHierarchyFreezeMesh(go, true); + // - Transform の回転とスケールはクリアされます。world position を維持します + var newMeshMap = BoneNormalizer.NormalizeHierarchyFreezeMesh(go); // SkinnedMeshRenderer.sharedMesh と MeshFilter.sharedMesh を新しいMeshで置き換える BoneNormalizer.Replace(go, newMeshMap, true, true); diff --git a/Assets/VRM/Runtime/SkinnedMeshUtility/VrmMeshUtility.cs b/Assets/VRM/Runtime/SkinnedMeshUtility/VrmMeshUtility.cs index e559f453b..49c8d020d 100644 --- a/Assets/VRM/Runtime/SkinnedMeshUtility/VrmMeshUtility.cs +++ b/Assets/VRM/Runtime/SkinnedMeshUtility/VrmMeshUtility.cs @@ -108,7 +108,7 @@ namespace VRM // TODO: update: firstPerson offset var (list, newList) = base.Process(target, copyGroup); - if (FreezeBlendShape || FreezeRotation || FreezeScaling) + if (FreezeBlendShapeRotationAndScaling) { var animator = target.GetComponent(); var newAvatar = AvatarDescription.RecreateAvatar(animator); diff --git a/Assets/VRM10/Runtime/MeshUtility/Vrm10MeshUtility.cs b/Assets/VRM10/Runtime/MeshUtility/Vrm10MeshUtility.cs index 2fb0a2748..cafb06db5 100644 --- a/Assets/VRM10/Runtime/MeshUtility/Vrm10MeshUtility.cs +++ b/Assets/VRM10/Runtime/MeshUtility/Vrm10MeshUtility.cs @@ -11,7 +11,7 @@ namespace UniVRM10 { public Vrm10MeshUtility() { - FreezeRotation = true; + FreezeBlendShapeRotationAndScaling = true; } bool _generateFirstPerson = false; @@ -115,7 +115,7 @@ namespace UniVRM10 // TODO: update: firstPerson offset var (list, newList) = base.Process(target, groupCopy); - if (FreezeBlendShape || FreezeRotation || FreezeScaling) + if (FreezeBlendShapeRotationAndScaling) { var animator = target.GetComponent(); var newAvatar = AvatarDescription.RecreateAvatar(animator);