From 6f67676fe9e734d803a37632d3f4a7d1e6a880f9 Mon Sep 17 00:00:00 2001 From: Masataka SUMI Date: Tue, 6 Sep 2022 18:22:25 +0900 Subject: [PATCH] rename class name --- .../Components/Vrm10Runtime/ControlRig.meta | 3 ++ .../Vrm10ControlBone.cs} | 14 +++--- .../Vrm10ControlBone.cs.meta} | 0 .../Vrm10Runtime/Vrm10FkRetarget.cs | 39 ---------------- .../Components/Vrm10Runtime/Vrm10Runtime.cs | 30 ++++++------- .../Vrm10Runtime/Vrm10RuntimeControlRig.cs | 45 +++++++++++++++++++ ...cs.meta => Vrm10RuntimeControlRig.cs.meta} | 0 .../VRM10Viewer/VRM10ViewerUI.cs | 4 +- 8 files changed, 71 insertions(+), 64 deletions(-) create mode 100644 Assets/VRM10/Runtime/Components/Vrm10Runtime/ControlRig.meta rename Assets/VRM10/Runtime/Components/Vrm10Runtime/{Vrm10BoneWithAxis.cs => ControlRig/Vrm10ControlBone.cs} (84%) rename Assets/VRM10/Runtime/Components/Vrm10Runtime/{Vrm10BoneWithAxis.cs.meta => ControlRig/Vrm10ControlBone.cs.meta} (100%) delete mode 100644 Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FkRetarget.cs create mode 100644 Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeControlRig.cs rename Assets/VRM10/Runtime/Components/Vrm10Runtime/{Vrm10FkRetarget.cs.meta => Vrm10RuntimeControlRig.cs.meta} (100%) diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/ControlRig.meta b/Assets/VRM10/Runtime/Components/Vrm10Runtime/ControlRig.meta new file mode 100644 index 000000000..389dc424f --- /dev/null +++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/ControlRig.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2e8a3d812e744fb68c6469d96d57380d +timeCreated: 1662455048 \ No newline at end of file diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10BoneWithAxis.cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/ControlRig/Vrm10ControlBone.cs similarity index 84% rename from Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10BoneWithAxis.cs rename to Assets/VRM10/Runtime/Components/Vrm10Runtime/ControlRig/Vrm10ControlBone.cs index da931757a..7c022fc3a 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10BoneWithAxis.cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/ControlRig/Vrm10ControlBone.cs @@ -9,7 +9,7 @@ namespace UniVRM10 /// 同時に、元のヒエラルキーの初期回転を保持する。 /// Apply 関数で、再帰的に正規化済みのローカル回転から初期回転を加味したローカル回転を作って適用する。 /// - public class Vrm10BoneWithAxis + public class Vrm10ControlBone { public readonly HumanBodyBones Bone; @@ -31,9 +31,9 @@ namespace UniVRM10 public readonly Quaternion ToLocal; - public List Children = new List(); + public List Children = new List(); - public Vrm10BoneWithAxis(Transform current, Quaternion parentInverse, HumanBodyBones bone) + public Vrm10ControlBone(Transform current, Quaternion parentInverse, HumanBodyBones bone) { if (bone == HumanBodyBones.LastBone) { @@ -53,9 +53,9 @@ namespace UniVRM10 ToLocal = current.rotation; } - public static Vrm10BoneWithAxis Build(UniHumanoid.Humanoid humanoid, Dictionary boneMap) + public static Vrm10ControlBone Build(UniHumanoid.Humanoid humanoid, Dictionary boneMap) { - var hips = new Vrm10BoneWithAxis(humanoid.Hips, Quaternion.identity, HumanBodyBones.Hips); + var hips = new Vrm10ControlBone(humanoid.Hips, Quaternion.identity, HumanBodyBones.Hips); boneMap.Add(HumanBodyBones.Hips, hips); foreach (Transform child in humanoid.Hips) @@ -66,7 +66,7 @@ namespace UniVRM10 return hips; } - private static void Traverse(UniHumanoid.Humanoid humanoid, Transform current, Vrm10BoneWithAxis parent, Dictionary boneMap) + private static void Traverse(UniHumanoid.Humanoid humanoid, Transform current, Vrm10ControlBone parent, Dictionary boneMap) { if (humanoid.TryGetBoneForTransform(current, out var bone)) { @@ -76,7 +76,7 @@ namespace UniVRM10 // ワールド回転 parent^-1 * current からローカル回転を算出する。 var parentInverse = Quaternion.Inverse(parent.Target.rotation); - var newBone = new Vrm10BoneWithAxis(current, parentInverse, bone); + var newBone = new Vrm10ControlBone(current, parentInverse, bone); newBone.Normalized.SetParent(parent.Normalized, true); parent.Children.Add(newBone); parent = newBone; diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10BoneWithAxis.cs.meta b/Assets/VRM10/Runtime/Components/Vrm10Runtime/ControlRig/Vrm10ControlBone.cs.meta similarity index 100% rename from Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10BoneWithAxis.cs.meta rename to Assets/VRM10/Runtime/Components/Vrm10Runtime/ControlRig/Vrm10ControlBone.cs.meta diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FkRetarget.cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FkRetarget.cs deleted file mode 100644 index f91d4bcda..000000000 --- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FkRetarget.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace UniVRM10 -{ - public class Vrm10FkRetarget - { - Vrm10BoneWithAxis m_root; - - Dictionary m_boneMap = new Dictionary(); - - public readonly float InitialHipsHeight; - - public Vrm10FkRetarget(UniHumanoid.Humanoid humanoid) - { - m_root = Vrm10BoneWithAxis.Build(humanoid, m_boneMap); - InitialHipsHeight = m_root.Target.position.y; - Debug.Log($"InitialHipsHeight: {InitialHipsHeight}"); - } - - public void Apply() - { - m_root.Target.position = m_root.Normalized.position; - m_root.ApplyRecursive(Quaternion.identity); - } - - public Transform GetBoneTransform(HumanBodyBones bone) - { - if (m_boneMap.TryGetValue(bone, out var value)) - { - return value.Normalized; - } - else - { - return null; - } - } - } -} diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10Runtime.cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10Runtime.cs index ddace679e..8f555e2c0 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10Runtime.cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10Runtime.cs @@ -14,28 +14,17 @@ namespace UniVRM10 public class Vrm10Runtime : IDisposable { private readonly Vrm10Instance m_target; - - Vrm10FkRetarget m_fkRetarget; - public Vrm10FkRetarget GetOrCreateFkRetarget() - { - if (m_fkRetarget == null) - { - m_fkRetarget = new Vrm10FkRetarget(m_target.Humanoid); - } - return m_fkRetarget; - } - private readonly IVrm10Constraint[] m_constraints; private readonly Transform m_head; private readonly FastSpringBoneService m_fastSpringBoneService; private readonly IReadOnlyDictionary m_defaultTransformStates; + private Vrm10RuntimeControlRig m_controlRig; private FastSpringBoneBuffer m_fastSpringBoneBuffer; - private Vrm10RuntimeExpression m_expression; - public Vrm10RuntimeExpression Expression => m_expression; - private Vrm10RuntimeLookAt m_lookat; + + public Vrm10RuntimeExpression Expression => m_expression; public Vrm10RuntimeLookAt LookAt => m_lookat; public Vrm10Runtime(Vrm10Instance target) @@ -92,6 +81,15 @@ namespace UniVRM10 m_fastSpringBoneService.BufferCombiner.Register(m_fastSpringBoneBuffer); } + public Vrm10RuntimeControlRig GetOrCreateControlRig() + { + if (m_controlRig == null) + { + m_controlRig = new Vrm10RuntimeControlRig(m_target.Humanoid); + } + return m_controlRig; + } + private FastSpringBoneBuffer CreateFastSpringBoneBuffer(Vrm10InstanceSpringBone springBone) { return new FastSpringBoneBuffer( @@ -163,9 +161,9 @@ namespace UniVRM10 /// public void Process() { - if (m_fkRetarget != null) + if (m_controlRig != null) { - m_fkRetarget.Apply(); + m_controlRig.Process(); } // diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeControlRig.cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeControlRig.cs new file mode 100644 index 000000000..65224f4f2 --- /dev/null +++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeControlRig.cs @@ -0,0 +1,45 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace UniVRM10 +{ + /// + /// VRM 1.0 モデルインスタンスに対して、コントロールリグを生成します。 + /// これは VRM 0.x のような、正規化されたボーン操作を提供します。 + /// + /// Create a control rig for the VRM 1.0 model instance. + /// This provides the normalized operation of bones, like VRM 0.x. + /// + public class Vrm10RuntimeControlRig + { + private readonly Vrm10ControlBone _rootBone; + private readonly Dictionary _bones = new Dictionary(); + + public readonly float InitialHipsHeight; + + public Vrm10RuntimeControlRig(UniHumanoid.Humanoid humanoid) + { + _rootBone = Vrm10ControlBone.Build(humanoid, _bones); + InitialHipsHeight = _rootBone.Target.position.y; + Debug.Log($"InitialHipsHeight: {InitialHipsHeight}"); + } + + public void Process() + { + _rootBone.Target.position = _rootBone.Normalized.position; + _rootBone.ApplyRecursive(Quaternion.identity); + } + + public Transform GetBoneTransform(HumanBodyBones bone) + { + if (_bones.TryGetValue(bone, out var value)) + { + return value.Normalized; + } + else + { + return null; + } + } + } +} diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FkRetarget.cs.meta b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeControlRig.cs.meta similarity index 100% rename from Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10FkRetarget.cs.meta rename to Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeControlRig.cs.meta diff --git a/Assets/VRM10_Samples/VRM10Viewer/VRM10ViewerUI.cs b/Assets/VRM10_Samples/VRM10Viewer/VRM10ViewerUI.cs index 00ca86a68..c2968ca3c 100644 --- a/Assets/VRM10_Samples/VRM10Viewer/VRM10ViewerUI.cs +++ b/Assets/VRM10_Samples/VRM10Viewer/VRM10ViewerUI.cs @@ -301,7 +301,7 @@ namespace UniVRM10.VRM10Viewer public void UpdatePose(Animator pose) { - var fkRetarget = m_controller.Runtime.GetOrCreateFkRetarget(); + var fkRetarget = m_controller.Runtime.GetOrCreateControlRig(); foreach (HumanBodyBones bone in Enum.GetValues(typeof(HumanBodyBones))) { if (bone == HumanBodyBones.LastBone) @@ -339,7 +339,7 @@ namespace UniVRM10.VRM10Viewer } } } - fkRetarget.Apply(); + fkRetarget.Process(); } } Loaded m_loaded;