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