From 2b8ee17c4e78ec3c79b2815daeaad86e60625782 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Mon, 24 Oct 2022 18:11:06 +0900 Subject: [PATCH 1/6] add SpringBoneUpdateType.Manual --- Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs b/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs index e505b8914..e15c472e1 100644 --- a/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs +++ b/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs @@ -23,11 +23,11 @@ namespace VRM [Header("Settings")] public float m_stiffnessForce = 1.0f; - [SerializeField] [Range(0, 2)] public float m_gravityPower; + [SerializeField][Range(0, 2)] public float m_gravityPower; [SerializeField] public Vector3 m_gravityDir = new Vector3(0, -1.0f, 0); - [SerializeField] [Range(0, 1)] public float m_dragForce = 0.4f; + [SerializeField][Range(0, 1)] public float m_dragForce = 0.4f; [SerializeField] public Transform m_center; @@ -46,6 +46,7 @@ namespace VRM { LateUpdate, FixedUpdate, + Manual, } [SerializeField] public SpringBoneUpdateType m_updateType = SpringBoneUpdateType.LateUpdate; @@ -263,6 +264,15 @@ namespace VRM } } + public void ManualUpdate() + { + if (m_updateType != SpringBoneUpdateType.Manual) + { + throw new System.ArgumentException("require SpringBoneUpdateType.Manual"); + } + UpdateProcess(Time.deltaTime); + } + public struct SphereCollider { // public Transform Transform; From e1e4bfde78d6d3e1f43675775b255769dd2abda5 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Mon, 24 Oct 2022 19:12:52 +0900 Subject: [PATCH 2/6] FastSpringBoneService manual update --- .../System/FastSpringBoneService.cs | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneService.cs b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneService.cs index d3e103977..143b44d2b 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneService.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneService.cs @@ -3,8 +3,41 @@ using UnityEngine; namespace UniVRM10.FastSpringBones.System { [DefaultExecutionOrder(11000)] + /// + /// VRM-1.0 ではコンポーネントの処理順が規定されている + /// + /// 1. ヒューマノイドボーンを解決 + /// 2. 頭の位置が決まるのでLookAtを解決 + /// 3. ExpressionUpdate + /// 4. コンストレイントを解決 + /// 5. SpringBoneを解決 + /// + /// 1~4 は Vrm10Runtime が管理し LateUpdate で処理される。 + /// このクラスは DefaultExecutionOrder(11000) によりその後ろにまわる。 + /// + /// # [Manual update] + /// + /// foreach(var vrmInstance in allVrm) + /// { + /// vrmInstance.UpdateType = None; + /// vrmInstance.Runtime.Process(); + /// } + /// FastSpringBoneService.Instance.UpdateType = Manual; + /// FastSpringBoneService.Instance.ManualUpdate(); + /// + /// public sealed class FastSpringBoneService : MonoBehaviour { + public enum UpdateTypes + { + Manual, + LateUpdate, + } + + [SerializeField, Header("Runtime")] + public UpdateTypes UpdateType = UpdateTypes.LateUpdate; + + public FastSpringBoneBufferCombiner BufferCombiner { get; private set; } private FastSpringBoneScheduler _fastSpringBoneScheduler; @@ -50,6 +83,18 @@ namespace UniVRM10.FastSpringBones.System private void LateUpdate() { + if (UpdateType == UpdateTypes.LateUpdate) + { + _fastSpringBoneScheduler.Schedule().Complete(); + } + } + + public void ManualUpdate() + { + if (UpdateType != UpdateTypes.Manual) + { + throw new global::System.ArgumentException("require UpdateTypes.None"); + } _fastSpringBoneScheduler.Schedule().Complete(); } } From a334a78f21b3ea18c6e2d406bc6b923983669442 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 25 Oct 2022 16:17:20 +0900 Subject: [PATCH 3/6] deltaTime --- Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs b/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs index e15c472e1..06e5ad58f 100644 --- a/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs +++ b/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs @@ -264,13 +264,13 @@ namespace VRM } } - public void ManualUpdate() + public void ManualUpdate(float deltaTime) { if (m_updateType != SpringBoneUpdateType.Manual) { throw new System.ArgumentException("require SpringBoneUpdateType.Manual"); } - UpdateProcess(Time.deltaTime); + UpdateProcess(deltaTime); } public struct SphereCollider From 11b6689c01f8fdbe45d9b43f81b2ef53a5cfd3ad Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 25 Oct 2022 21:50:59 +0900 Subject: [PATCH 4/6] =?UTF-8?q?local=20=E5=A4=89=E6=95=B0=E3=81=AE?= =?UTF-8?q?=E4=BD=BF=E3=81=84=E3=81=BE=E3=82=8F=E3=81=97=E3=82=84=E3=82=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../System/FastSpringBoneScheduler.cs | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs index c5079cfc0..014de66b6 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs @@ -13,21 +13,29 @@ namespace UniVRM10.FastSpringBones.System _bufferCombiner = bufferCombiner; } + /// + /// SpringBone の依存関係のある Job を直列にスケジュールする + /// + /// 1. ReconstructIfDirty + /// 2. PullTransformJob + /// 3. UpdateFastSpringBoneJob + /// 4. PushTransformJob + /// + /// public JobHandle Schedule() { - var handle = default(JobHandle); - handle = _bufferCombiner.ReconstructIfDirty(handle); + var handle0 = _bufferCombiner.ReconstructIfDirty(default); if (!_bufferCombiner.HasBuffer) { - return handle; + return handle0; } - - handle = new PullTransformJob - { - Transforms = _bufferCombiner.Transforms - }.Schedule(_bufferCombiner.TransformAccessArray, handle); - - handle = new UpdateFastSpringBoneJob + + var handle1 = new PullTransformJob + { + Transforms = _bufferCombiner.Transforms + }.Schedule(_bufferCombiner.TransformAccessArray, handle0); + + var handle2 = new UpdateFastSpringBoneJob { Colliders = _bufferCombiner.Colliders, Joints = _bufferCombiner.Joints, @@ -35,14 +43,14 @@ namespace UniVRM10.FastSpringBones.System Springs = _bufferCombiner.Springs, Transforms = _bufferCombiner.Transforms, DeltaTime = Time.deltaTime, - }.Schedule(_bufferCombiner.Springs.Length, 1, handle); + }.Schedule(_bufferCombiner.Springs.Length, 1, handle1); - handle = new PushTransformJob - { - Transforms = _bufferCombiner.Transforms - }.Schedule(_bufferCombiner.TransformAccessArray, handle); + var handle3 = new PushTransformJob + { + Transforms = _bufferCombiner.Transforms + }.Schedule(_bufferCombiner.TransformAccessArray, handle2); - return handle; + return handle3; } public void Dispose() From f17bac5b036f9a66b7a83b1db8a2daad65f71f5f Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 25 Oct 2022 21:52:19 +0900 Subject: [PATCH 5/6] =?UTF-8?q?FastSpringBoneService.ManualUpdate=20?= =?UTF-8?q?=E3=81=AB=20deltaTime=20=E5=BC=95=E3=81=8D=E6=95=B0=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FastSpringBone/System/FastSpringBoneScheduler.cs | 4 ++-- .../Runtime/FastSpringBone/System/FastSpringBoneService.cs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs index 014de66b6..55f1f8316 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs @@ -22,7 +22,7 @@ namespace UniVRM10.FastSpringBones.System /// 4. PushTransformJob /// /// - public JobHandle Schedule() + public JobHandle Schedule(float deltaTime) { var handle0 = _bufferCombiner.ReconstructIfDirty(default); if (!_bufferCombiner.HasBuffer) @@ -42,7 +42,7 @@ namespace UniVRM10.FastSpringBones.System Logics = _bufferCombiner.Logics, Springs = _bufferCombiner.Springs, Transforms = _bufferCombiner.Transforms, - DeltaTime = Time.deltaTime, + DeltaTime = deltaTime, }.Schedule(_bufferCombiner.Springs.Length, 1, handle1); var handle3 = new PushTransformJob diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneService.cs b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneService.cs index 143b44d2b..993e786f9 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneService.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneService.cs @@ -85,17 +85,17 @@ namespace UniVRM10.FastSpringBones.System { if (UpdateType == UpdateTypes.LateUpdate) { - _fastSpringBoneScheduler.Schedule().Complete(); + _fastSpringBoneScheduler.Schedule(Time.deltaTime).Complete(); } } - public void ManualUpdate() + public void ManualUpdate(float deltaTime) { if (UpdateType != UpdateTypes.Manual) { throw new global::System.ArgumentException("require UpdateTypes.None"); } - _fastSpringBoneScheduler.Schedule().Complete(); + _fastSpringBoneScheduler.Schedule(deltaTime).Complete(); } } } \ No newline at end of file From b1a545f9870f3ed523d8587900b08b3f0af52d3d Mon Sep 17 00:00:00 2001 From: ousttrue Date: Wed, 26 Oct 2022 13:31:19 +0900 Subject: [PATCH 6/6] =?UTF-8?q?=E5=85=83=E3=81=AE=E3=82=B9=E3=82=BF?= =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=81=AB=E6=88=BB=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../System/FastSpringBoneScheduler.cs | 40 ++++++++----------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs index 55f1f8316..f3adb0bad 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs @@ -13,29 +13,21 @@ namespace UniVRM10.FastSpringBones.System _bufferCombiner = bufferCombiner; } - /// - /// SpringBone の依存関係のある Job を直列にスケジュールする - /// - /// 1. ReconstructIfDirty - /// 2. PullTransformJob - /// 3. UpdateFastSpringBoneJob - /// 4. PushTransformJob - /// - /// public JobHandle Schedule(float deltaTime) { - var handle0 = _bufferCombiner.ReconstructIfDirty(default); + var handle = default(JobHandle); + handle = _bufferCombiner.ReconstructIfDirty(handle); if (!_bufferCombiner.HasBuffer) { - return handle0; + return handle; } - - var handle1 = new PullTransformJob - { - Transforms = _bufferCombiner.Transforms - }.Schedule(_bufferCombiner.TransformAccessArray, handle0); - - var handle2 = new UpdateFastSpringBoneJob + + handle = new PullTransformJob + { + Transforms = _bufferCombiner.Transforms + }.Schedule(_bufferCombiner.TransformAccessArray, handle); + + handle = new UpdateFastSpringBoneJob { Colliders = _bufferCombiner.Colliders, Joints = _bufferCombiner.Joints, @@ -43,14 +35,14 @@ namespace UniVRM10.FastSpringBones.System Springs = _bufferCombiner.Springs, Transforms = _bufferCombiner.Transforms, DeltaTime = deltaTime, - }.Schedule(_bufferCombiner.Springs.Length, 1, handle1); + }.Schedule(_bufferCombiner.Springs.Length, 1, handle); - var handle3 = new PushTransformJob - { - Transforms = _bufferCombiner.Transforms - }.Schedule(_bufferCombiner.TransformAccessArray, handle2); + handle = new PushTransformJob + { + Transforms = _bufferCombiner.Transforms + }.Schedule(_bufferCombiner.TransformAccessArray, handle); - return handle3; + return handle; } public void Dispose()