diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableCollider.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableCollider.cs index f92ca4cdd..4e14e9eea 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableCollider.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableCollider.cs @@ -1,3 +1,4 @@ +using System; using UnityEngine; namespace UniVRM10.FastSpringBones.Blittables @@ -5,9 +6,12 @@ namespace UniVRM10.FastSpringBones.Blittables /// /// Blittableなコライダ /// + [Serializable] public struct BlittableCollider { - public Vector3 Offset; - public float Radius; + public BlittableColliderType colliderType; + public Vector3 offset; + public float radius; + public Vector3 tail; } } \ No newline at end of file diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderType.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderType.cs new file mode 100644 index 000000000..04f0b9f25 --- /dev/null +++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderType.cs @@ -0,0 +1,8 @@ +namespace UniVRM10.FastSpringBones.Blittables +{ + public enum BlittableColliderType + { + Sphere, + Capsule, + } +} \ No newline at end of file diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderType.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderType.cs.meta new file mode 100644 index 000000000..715a2df22 --- /dev/null +++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderType.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 27138554b75447d4b524f878abf0b107 +timeCreated: 1633081188 \ No newline at end of file diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableJoint.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableJoint.cs index 83c889667..3a670b0e0 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableJoint.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableJoint.cs @@ -1,4 +1,4 @@ -using Unity.Collections; +using System; using UnityEngine; namespace UniVRM10.FastSpringBones.Blittables @@ -6,12 +6,13 @@ namespace UniVRM10.FastSpringBones.Blittables /// /// SpringBoneの各関節を表すデータ型 /// + [Serializable] public struct BlittableJoint { - public float StiffnessForce; - public float GravityPower; - public Vector3 GravityDir; - public float DragForce; - public float Radius; + public float stiffnessForce; + public float gravityPower; + public Vector3 gravityDir; + public float dragForce; + public float radius; } } diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableLogic.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableLogic.cs index 09b351927..591f05308 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableLogic.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableLogic.cs @@ -1,3 +1,4 @@ +using System; using UnityEngine; namespace UniVRM10.FastSpringBones.Blittables @@ -5,13 +6,14 @@ namespace UniVRM10.FastSpringBones.Blittables /// /// SpringBoneの各関節を表すデータ型 /// + [Serializable] public struct BlittableLogic { - public float Length; - public Vector3 CurrentTail; - public Vector3 PrevTail; - public Vector3 LocalDir; - public Quaternion LocalRotation; - public Vector3 BoneAxis; + public float length; + public Vector3 currentTail; + public Vector3 prevTail; + public Vector3 localDir; + public Quaternion localRotation; + public Vector3 boneAxis; } } \ No newline at end of file diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpan.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpan.cs index 5cec66dd2..37a0f2962 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpan.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpan.cs @@ -1,8 +1,11 @@ +using System; + namespace UniVRM10.FastSpringBones.Blittables { + [Serializable] public struct BlittableSpan { - public int StartIndex; - public int Count; + public int startIndex; + public int count; } } \ No newline at end of file diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpring.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpring.cs index d5de54667..aa8830bcd 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpring.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpring.cs @@ -1,11 +1,14 @@ +using System; + namespace UniVRM10.FastSpringBones.Blittables { /// /// 1本の毛束を表すデータ型 /// + [Serializable] public struct BlittableSpring { - public BlittableSpan ColliderSpan; - public BlittableSpan JointSpan; + public BlittableSpan colliderSpan; + public BlittableSpan jointSpan; } } \ No newline at end of file diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableTransform.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableTransform.cs index 787f11d0e..2c3745d34 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableTransform.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableTransform.cs @@ -1,3 +1,4 @@ +using System; using UnityEngine; namespace UniVRM10.FastSpringBones.Blittables @@ -5,14 +6,15 @@ namespace UniVRM10.FastSpringBones.Blittables /// /// Transformの必要な機能だけを絞り、Blittableに対応させたクラス /// + [Serializable] public struct BlittableTransform { - public Vector3 Position; - public Quaternion Rotation; - public Vector3 LocalPosition; - public Quaternion LocalRotation; - public Vector3 LocalScale; - public Matrix4x4 LocalToWorldMatrix; - public Matrix4x4 WorldToLocalMatrix; + public Vector3 position; + public Quaternion rotation; + public Vector3 localPosition; + public Quaternion localRotation; + public Vector3 localScale; + public Matrix4x4 localToWorldMatrix; + public Matrix4x4 worldToLocalMatrix; } } \ No newline at end of file diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/CopyToNativeArrayTransformJob.cs b/Assets/VRM10/Runtime/FastSpringBone/System/CopyToNativeArrayTransformJob.cs index 1792f0ea7..9e1d8f8fa 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/System/CopyToNativeArrayTransformJob.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/System/CopyToNativeArrayTransformJob.cs @@ -14,13 +14,13 @@ namespace UniVRM10.FastSpringBones.System { Transforms[index] = new BlittableTransform { - Position = transform.position, - Rotation = transform.rotation, - LocalPosition = transform.localPosition, - LocalRotation = transform.localRotation, - LocalScale = transform.localScale, - LocalToWorldMatrix = transform.localToWorldMatrix, - WorldToLocalMatrix = transform.worldToLocalMatrix + position = transform.position, + rotation = transform.rotation, + localPosition = transform.localPosition, + localRotation = transform.localRotation, + localScale = transform.localScale, + localToWorldMatrix = transform.localToWorldMatrix, + worldToLocalMatrix = transform.worldToLocalMatrix }; } } diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBuffers.cs b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBuffers.cs index 3e0cef9ef..aae487095 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBuffers.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBuffers.cs @@ -85,10 +85,10 @@ namespace UniVRM10.FastSpringBones.System var spring = springs[i]; var blittableSpring = new BlittableSpring(); - blittableSpring.JointSpan.StartIndex = jointsCount; - blittableSpring.ColliderSpan.StartIndex = jointsCount; - blittableSpring.JointSpan.Count = spring.Joints.Length; - blittableSpring.ColliderSpan.Count = spring.Colliders.Length; + blittableSpring.jointSpan.startIndex = jointsCount; + blittableSpring.colliderSpan.startIndex = jointsCount; + blittableSpring.jointSpan.count = spring.Joints.Length; + blittableSpring.colliderSpan.count = spring.Colliders.Length; _springs[i] = blittableSpring; jointsCount += spring.Joints.Length; diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs index 1b1382ec3..737f67972 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs @@ -14,7 +14,7 @@ namespace UniVRM10.FastSpringBones.System _fastSpringBoneBuffers = new FastSpringBoneBuffers(springs); } - public void Schedule() + public JobHandle Schedule() { var handle = JobHandle.CombineDependencies( new PullTransformJob @@ -25,19 +25,27 @@ namespace UniVRM10.FastSpringBones.System { Transforms = _fastSpringBoneBuffers.JointTransforms }.Schedule(_fastSpringBoneBuffers.JointsTransformAccessArray)); + + handle = new UpdateFastSpringBoneJob + { + Colliders = _fastSpringBoneBuffers.Colliders, + Joints = _fastSpringBoneBuffers.Joints, + Springs = _fastSpringBoneBuffers.Springs, + ColliderTransforms = _fastSpringBoneBuffers.ColliderTransforms, + JointTransforms = _fastSpringBoneBuffers.JointTransforms + }.Schedule(_fastSpringBoneBuffers.Springs.Length, 1, handle); handle = JobHandle.CombineDependencies( - new PushTransformJob() + new PushTransformJob { Transforms = _fastSpringBoneBuffers.ColliderTransforms }.Schedule(_fastSpringBoneBuffers.ColliderTransformAccessArray, handle), - new PushTransformJob() + new PushTransformJob { Transforms = _fastSpringBoneBuffers.JointTransforms }.Schedule(_fastSpringBoneBuffers.JointsTransformAccessArray, handle)); - - handle.Complete(); + return handle; } public void Dispose() diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/PushTransformJob.cs b/Assets/VRM10/Runtime/FastSpringBone/System/PushTransformJob.cs index 078ec1f31..36c7776ae 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/System/PushTransformJob.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/System/PushTransformJob.cs @@ -13,7 +13,7 @@ namespace UniVRM10.FastSpringBones.System public void Execute(int index, TransformAccess transform) { - transform.localRotation = Transforms[index].LocalRotation; + transform.localRotation = Transforms[index].localRotation; } } } \ No newline at end of file diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/UpdateFastSpringBoneJob.cs b/Assets/VRM10/Runtime/FastSpringBone/System/UpdateFastSpringBoneJob.cs new file mode 100644 index 000000000..14816a3d6 --- /dev/null +++ b/Assets/VRM10/Runtime/FastSpringBone/System/UpdateFastSpringBoneJob.cs @@ -0,0 +1,22 @@ +using Unity.Collections; +using Unity.Jobs; +using UniVRM10.FastSpringBones.Blittables; + +namespace UniVRM10.FastSpringBones.System +{ + public struct UpdateFastSpringBoneJob : IJobParallelFor + { + [ReadOnly] public NativeArray Springs; + + [ReadOnly] public NativeArray Joints; + [NativeDisableParallelForRestriction] public NativeArray JointTransforms; + + [ReadOnly] public NativeArray Colliders; + [NativeDisableParallelForRestriction] public NativeArray ColliderTransforms; + + public void Execute(int index) + { + var spring = Springs[index]; + } + } +} \ No newline at end of file diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/UpdateFastSpringBoneJob.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/System/UpdateFastSpringBoneJob.cs.meta new file mode 100644 index 000000000..c74d73f74 --- /dev/null +++ b/Assets/VRM10/Runtime/FastSpringBone/System/UpdateFastSpringBoneJob.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 30ca968f0008470da9418cd48832709e +timeCreated: 1633077901 \ No newline at end of file