diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableCollider.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableCollider.cs
index baa5920c2..f92ca4cdd 100644
--- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableCollider.cs
+++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableCollider.cs
@@ -3,18 +3,11 @@ using UnityEngine;
namespace UniVRM10.FastSpringBones.Blittables
{
///
- /// VRMSpringBoneのSphereColliderをBlittableにしたもの
- /// 位置情報は親であるColliderGroupが持つ
+ /// Blittableなコライダ
///
- public readonly struct BlittableCollider
- {
- public Vector3 Offset { get; }
- public float Radius { get; }
-
- public BlittableCollider(Vector3 offset, float radius)
- {
- Offset = offset;
- Radius = radius;
- }
+ public struct BlittableCollider
+ {
+ public Vector3 Offset;
+ public float Radius;
}
}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderGroup.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderGroup.cs
deleted file mode 100644
index 2bc6d1dc8..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderGroup.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Unity.Collections;
-using Unity.Collections.LowLevel.Unsafe;
-
-namespace UniVRM10.FastSpringBones.Blittables
-{
- ///
- /// VRMSpringBoneのColliderGroupをBlittableにしたもの
- ///
- public readonly struct BlittableColliderGroup
- {
- public BlittableColliders Colliders { get; }
- public unsafe BlittableTransform* Transform { get; }
-
- public unsafe BlittableColliderGroup(NativeArray colliders, BlittableTransform* transform)
- {
- Colliders = new BlittableColliders((BlittableCollider*)colliders.GetUnsafePtr(), colliders.Length);
- Transform = transform;
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderGroup.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderGroup.cs.meta
deleted file mode 100644
index 222c88810..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderGroup.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 478b0f68277d5a346a9e909e398451aa
-timeCreated: 1550223602
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderGroups.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderGroups.cs
deleted file mode 100644
index 8762d62ee..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderGroups.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using UnityEngine;
-
-namespace UniVRM10.FastSpringBones.Blittables
-{
- ///
- /// BlittableColliderGroupのポインタの配列
- ///
- public readonly unsafe struct BlittableColliderGroups
- {
- private readonly BlittableColliderGroup* _data;
- public int Length { get; }
-
- public BlittableColliderGroup this[int i] => _data[i];
-
- public void DrawGizmos()
- {
- for (var i = 0; i < Length; i++)
- {
- var group = this[i];
- var colliders = group.Colliders;
- for (var j = 0; j < colliders.Count; ++j)
- {
- Gizmos.DrawWireSphere(group.Transform->WorldPosition, colliders[j].Radius);
- }
- }
- }
-
- public BlittableColliderGroups(BlittableColliderGroup* data, int length)
- {
- _data = data;
- Length = length;
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderGroups.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderGroups.cs.meta
deleted file mode 100644
index d15dc6a18..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliderGroups.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: d8ecae557f477ff4fa60ef840e6b6167
-timeCreated: 1550563011
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliders.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliders.cs
deleted file mode 100644
index 137fc6ab9..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliders.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-namespace UniVRM10.FastSpringBones.Blittables
-{
- ///
- /// BlittableColliderのポインタの配列
- ///
- public unsafe struct BlittableColliders
- {
- private readonly BlittableCollider* _colliders;
- public int Count { get; }
-
- public BlittableCollider this[int i] => _colliders[i];
-
- public BlittableColliders(BlittableCollider* colliders, int count)
- {
- _colliders = colliders;
- Count = count;
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliders.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliders.cs.meta
deleted file mode 100644
index 2bdef092c..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableColliders.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 14be485b03404da4a9a5ba19211f9c1b
-timeCreated: 1550562383
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableJoint.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableJoint.cs
new file mode 100644
index 000000000..83c889667
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableJoint.cs
@@ -0,0 +1,17 @@
+using Unity.Collections;
+using UnityEngine;
+
+namespace UniVRM10.FastSpringBones.Blittables
+{
+ ///
+ /// SpringBoneの各関節を表すデータ型
+ ///
+ public struct BlittableJoint
+ {
+ public float StiffnessForce;
+ public float GravityPower;
+ public Vector3 GravityDir;
+ public float DragForce;
+ public float Radius;
+ }
+}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittablePoint.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableJoint.cs.meta
similarity index 100%
rename from Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittablePoint.cs.meta
rename to Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableJoint.cs.meta
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableLogic.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableLogic.cs
new file mode 100644
index 000000000..09b351927
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableLogic.cs
@@ -0,0 +1,17 @@
+using UnityEngine;
+
+namespace UniVRM10.FastSpringBones.Blittables
+{
+ ///
+ /// SpringBoneの各関節を表すデータ型
+ ///
+ public struct BlittableLogic
+ {
+ 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/BlittableLogic.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableLogic.cs.meta
new file mode 100644
index 000000000..c317dbb9b
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableLogic.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: e9731a165cdc47b5a6c9452cdab150a5
+timeCreated: 1633060275
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittablePoint.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittablePoint.cs
deleted file mode 100644
index 62fe3d9c0..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittablePoint.cs
+++ /dev/null
@@ -1,149 +0,0 @@
-using UnityEngine;
-
-namespace UniVRM10.FastSpringBones.Blittables
-{
- ///
- /// VRMSpringBoneLogicをBlittableにしたもの
- /// ベルレ積分など、コアな計算を行う
- ///
- public unsafe struct BlittablePoint
- {
- private readonly float _length;
- private readonly Quaternion _localRotation;
- private readonly Vector3 _boneAxis;
- private readonly float _radius;
- private Vector3 _prevPosition;
-
- private readonly BlittableColliderGroups* _blittableColliderGroups;
- private readonly BlittableTransform* _center;
-
- public Vector3 CurrentPosition { get; private set; }
-
- private readonly BlittableTransform* _transform;
-
- public BlittablePoint(
- Transform transform,
- float radius,
- BlittableTransform* center,
- BlittableColliderGroups* blittableColliderGroups,
- BlittableTransform* blittableTransform)
- {
- Vector3 localPosition;
- if (transform.childCount == 0)
- {
- var delta = transform.position - transform.parent.position;
- var childPosition = transform.position + delta.normalized * 0.07f;
- localPosition = transform.worldToLocalMatrix.MultiplyPoint(childPosition);
- }
- else
- {
- var firstChild = transform.GetChild(0);
- var scale = firstChild.lossyScale;
- localPosition = firstChild.localPosition;
- localPosition.x *= scale.x;
- localPosition.y *= scale.y;
- localPosition.z *= scale.z;
- }
-
- var worldChildPosition = (Vector3)transform.TransformPoint(localPosition);
- _prevPosition = CurrentPosition = center != null ? center->LocalToWorld.inverse.MultiplyPoint3x4(worldChildPosition) : worldChildPosition;
-
- _localRotation = transform.localRotation;
- _boneAxis = localPosition.normalized;
- _length = localPosition.magnitude;
- _radius = radius;
- _blittableColliderGroups = blittableColliderGroups;
- _transform = blittableTransform;
- _center = center;
- }
-
- public void Update(float stiffnessForce, float dragForce, Vector3 external)
- {
- // 親のRotationが変わっている可能性があるので更新する
- _transform->UpdateLocalToWorldMatrix();
-
- Vector3 currentPosition;
- Vector3 prevPosition;
-
- if (_center == null)
- {
- currentPosition = CurrentPosition;
- prevPosition = _prevPosition;
- }
- else
- {
- var centerLocalToWorld = _center->LocalToWorld;
- currentPosition = centerLocalToWorld.MultiplyPoint3x4(CurrentPosition);
- prevPosition = centerLocalToWorld.MultiplyPoint3x4(_prevPosition);
- }
-
- // verlet積分で次の位置を計算
- var nextPosition = currentPosition
- + (currentPosition - prevPosition) * (1.0f - dragForce) // 前フレームの移動を継続する(減衰もあるよ)
- + _transform->ParentWorldRotation * _localRotation * _boneAxis * stiffnessForce // 親の回転による子ボーンの移動目標
- + external; // 外力による移動量
-
- // 長さをboneLengthに強制
- var position = _transform->WorldPosition;
- nextPosition = position + (nextPosition - position).normalized * _length;
-
- nextPosition = Collision(nextPosition, position);
-
- if (_center == null)
- {
- _prevPosition = currentPosition;
- CurrentPosition = nextPosition;
- }
- else
- {
- var centerWorldToLocal = _center->LocalToWorld.inverse;
- _prevPosition = centerWorldToLocal.MultiplyPoint3x4(currentPosition);
- CurrentPosition = centerWorldToLocal.MultiplyPoint3x4(nextPosition);
- }
-
- //回転を適用
- _transform->SetWorldRotation(ApplyRotation(nextPosition));
- }
-
- private Vector3 Collision(Vector3 nextPosition, Vector3 position)
- {
- for (var i = 0; i < _blittableColliderGroups->Length; ++i)
- {
- var colliderGroup = (*_blittableColliderGroups)[i];
-
- for (var j = 0; j < colliderGroup.Colliders.Count; ++j)
- {
- var collider = colliderGroup.Colliders[j];
- var colliderPosition = colliderGroup.Transform->TransformPoint(collider.Offset);
- var r = _radius + collider.Radius;
-
- if (!((nextPosition - colliderPosition).sqrMagnitude <= (r * r))) continue;
-
- // ヒット。Colliderの半径方向に押し出す
- var normal = (nextPosition - colliderPosition).normalized;
- var posFromCollider = colliderPosition + normal * (_radius + collider.Radius);
-
- // 長さをboneLengthに強制
- nextPosition = position + (posFromCollider - position).normalized * _length;
- }
- }
- return nextPosition;
- }
-
- private static Quaternion FromToRotation(Vector3 from, Vector3 to)
- => Quaternion.AxisAngle(
- angle: Mathf.Acos(Mathf.Clamp(Vector3.Dot(from.normalized, to.normalized), -1f, 1f)),
- axis: Vector3.Cross(from, to).normalized
- );
-
- private Quaternion ApplyRotation(Vector3 nextTail)
- {
- var rotation = _transform->ParentWorldRotation * _localRotation;
- return
- FromToRotation(
- rotation * _boneAxis,
- nextTail - _transform->WorldPosition) *
- rotation;
- }
- }
-}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittablePoints.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittablePoints.cs
deleted file mode 100644
index 62c6f0e3e..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittablePoints.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-namespace UniVRM10.FastSpringBones.Blittables
-{
- ///
- /// BlittablePointのポインタの配列
- ///
- public unsafe struct BlittablePoints
- {
- private readonly BlittablePoint* _points;
- public int Count { get; }
-
- public BlittablePoint this[int i]
- {
- get => _points[i];
- set => _points[i] = value;
- }
-
- public BlittablePoints(BlittablePoint* points, int count)
- {
- _points = points;
- Count = count;
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittablePoints.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittablePoints.cs.meta
deleted file mode 100644
index 322e60643..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittablePoints.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 55f68ce7085cb7640a50cb133741361b
-timeCreated: 1550721598
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableRootBone.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableRootBone.cs
deleted file mode 100644
index 2bb270d17..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableRootBone.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using UnityEngine;
-
-namespace UniVRM10.FastSpringBones.Blittables
-{
- ///
- /// 1本の毛束を示すBlittable型
- ///
- public unsafe readonly struct BlittableRootBone
- {
- private readonly float _gravityPower;
- private readonly Vector3 _gravityDir;
- private readonly float _dragForce;
- private readonly float _stiffnessForce;
- private readonly BlittablePoints* _blittablePoints;
-
- public void DrawGizmos()
- {
- for (var i = 0; i < _blittablePoints->Count; i++)
- {
- var point = (*_blittablePoints)[i];
- Gizmos.DrawWireSphere(point.CurrentPosition, 0.05f);
- }
- for (var i = 0; i < _blittablePoints->Count - 1; i++)
- {
- var point1 = (*_blittablePoints)[i];
- var point2 = (*_blittablePoints)[i + 1];
- Gizmos.DrawLine(point1.CurrentPosition, point2.CurrentPosition);
- }
- }
-
- public BlittableRootBone(
- float gravityPower,
- Vector3 gravityDir,
- float dragForce,
- float stiffnessForce,
- BlittablePoints* blittablePoints)
- {
- _gravityPower = gravityPower;
- _gravityDir = gravityDir;
- _dragForce = dragForce;
- _stiffnessForce = stiffnessForce;
- _blittablePoints = blittablePoints;
- }
-
- public void Update(float deltaTime)
- {
- var stiffness = _stiffnessForce * deltaTime;
- var external = _gravityDir * (_gravityPower * deltaTime);
- for (var i = 0; i < _blittablePoints->Count; i++)
- {
- var point = (*_blittablePoints)[i];
-
- // Pointを更新
- point.Update(
- stiffness,
- _dragForce,
- external
- );
-
- (*_blittablePoints)[i] = point;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpan.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpan.cs
new file mode 100644
index 000000000..5cec66dd2
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpan.cs
@@ -0,0 +1,8 @@
+namespace UniVRM10.FastSpringBones.Blittables
+{
+ public struct BlittableSpan
+ {
+ public int StartIndex;
+ public int Count;
+ }
+}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpan.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpan.cs.meta
new file mode 100644
index 000000000..0a4f1b455
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpan.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 47daa1c068464f44987de43eba2210dc
+timeCreated: 1633067618
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpring.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpring.cs
new file mode 100644
index 000000000..d5de54667
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpring.cs
@@ -0,0 +1,11 @@
+namespace UniVRM10.FastSpringBones.Blittables
+{
+ ///
+ /// 1本の毛束を表すデータ型
+ ///
+ public struct BlittableSpring
+ {
+ public BlittableSpan ColliderSpan;
+ public BlittableSpan JointSpan;
+ }
+}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableRootBone.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpring.cs.meta
similarity index 100%
rename from Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableRootBone.cs.meta
rename to Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableSpring.cs.meta
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableTransform.cs b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableTransform.cs
index 04c4e393d..787f11d0e 100644
--- a/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableTransform.cs
+++ b/Assets/VRM10/Runtime/FastSpringBone/Blittables/BlittableTransform.cs
@@ -1,72 +1,18 @@
using UnityEngine;
-using UnityEngine.Jobs;
namespace UniVRM10.FastSpringBones.Blittables
{
///
/// Transformの必要な機能だけを絞り、Blittableに対応させたクラス
///
- public unsafe struct BlittableTransform
+ public struct BlittableTransform
{
- private readonly BlittableTransform* _parent;
- private Quaternion _worldRotation;
- private Vector3 _localPosition;
- private Vector3 _localScale;
- private Quaternion _localRotation;
- private Matrix4x4 _localToWorld;
-
- public Vector3 WorldPosition { get; private set; }
-
- public void SetWorldRotation(Quaternion rotation)
- {
- var parentWorldRotation = ParentWorldRotation;
- _localRotation = Quaternion.Inverse(parentWorldRotation) * rotation;
- UpdateLocalToWorldMatrix();
- }
-
- public Matrix4x4 LocalToWorld => _localToWorld;
-
- private Matrix4x4 LocalTransform => Matrix4x4.TRS(_localPosition, _localRotation, _localScale);
-
- public Quaternion ParentWorldRotation => _parent != null ? _parent->_worldRotation : Quaternion.identity;
-
- public BlittableTransform(BlittableTransform* parent, Transform transform)
- {
- _parent = parent;
-
- WorldPosition = transform.position;
- _worldRotation = transform.rotation;
- _localPosition = transform.localPosition;
- _localRotation = transform.localRotation;
- _localScale = transform.localScale;
-
- _localToWorld = transform.localToWorldMatrix;
- }
-
- public void PullFrom(TransformAccess transform)
- {
- WorldPosition = transform.position;
- _worldRotation = transform.rotation;
- _localPosition = transform.localPosition;
- _localRotation = transform.localRotation;
- _localScale = transform.localScale;
-
- _localToWorld = transform.localToWorldMatrix;
- }
-
- public void PushTo(TransformAccess transform)
- {
- transform.localPosition = _localPosition;
- transform.localRotation = _localRotation;
- }
-
- public Vector3 TransformPoint(Vector3 offset) => _localToWorld.MultiplyPoint3x4(offset);
-
- public void UpdateLocalToWorldMatrix()
- {
- _localToWorld = _parent == null ? LocalTransform : _parent->_localToWorld * LocalTransform;
- WorldPosition = _localToWorld.MultiplyPoint3x4(Vector3.zero);
- _worldRotation = _localToWorld.rotation;
- }
+ 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/Components/FastSpringBoneColliderGroup.cs b/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringBoneColliderGroup.cs
deleted file mode 100644
index 64ee4c6c1..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringBoneColliderGroup.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using UnityEngine;
-using UniVRM10.FastSpringBones.Blittables;
-using UniVRM10.FastSpringBones.NativeWrappers;
-using UniVRM10.FastSpringBones.Registries;
-
-namespace UniVRM10.FastSpringBones.Components
-{
- ///
- /// VRMSpringBoneColliderGroupに対応したクラス
- /// バッファの作成も行う
- ///
- public sealed unsafe class FastSpringBoneColliderGroup : MonoBehaviour
- {
- private NativeTransform _nativeTransform;
- private NativeColliderGroup _nativeColliderGroup;
-
- public BlittableColliderGroup* ColliderGroupPtr => _nativeColliderGroup.GetUnsafePtr();
-
- public void Initialize(TransformRegistry transformRegistry, BlittableCollider[] colliders)
- {
- _nativeTransform = new NativeTransform(transformRegistry, TransformSynchronizationType.PullOnly, transform);
- _nativeColliderGroup = new NativeColliderGroup(colliders, _nativeTransform);
- }
-
- private void OnDestroy()
- {
- _nativeTransform?.Dispose();
- _nativeColliderGroup?.Dispose();
- }
- }
-}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringBoneColliderGroup.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringBoneColliderGroup.cs.meta
deleted file mode 100644
index 2d20097b1..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringBoneColliderGroup.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: b5fe6672f5b7b1049bb9e1bed44ee015
-timeCreated: 1550213674
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringBoneScheduler.cs b/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringBoneScheduler.cs
deleted file mode 100644
index 6691e16da..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringBoneScheduler.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-using Unity.Jobs;
-using UnityEngine;
-using UnityEngine.Profiling;
-using UniVRM10.FastSpringBones.Registries;
-using UniVRM10.FastSpringBones.Schedulers;
-
-namespace UniVRM10.FastSpringBones.Components
-{
- ///
- /// Jobを連続して発火させるComponent
- /// シーンに1つだけあればいい
- ///
- [DefaultExecutionOrder(11000)]
- public sealed class FastSpringBoneScheduler : MonoBehaviour
- {
- [SerializeField] private bool showGizmos;
-
- private CustomSampler _updateSampler;
-
- private PullTransformJobScheduler _pullTransformJobScheduler;
- private PushTransformJobScheduler _pushTransformJobScheduler;
- private UpdateSpringBoneJobScheduler _updateSpringBoneJobScheduler;
-
- private RootBoneRegistry _rootBoneRegistry;
- private ColliderGroupRegistry _colliderGroupRegistry;
-
- private JobHandle _prevJobHandle;
-
- public bool ShowGizmos { get => showGizmos; set => showGizmos = value; }
-
- public void Initialize(
- RootBoneRegistry rootBoneRegistry,
- TransformRegistry transformRegistry,
- ColliderGroupRegistry colliderGroupRegistry)
- {
- _rootBoneRegistry = rootBoneRegistry;
- _colliderGroupRegistry = colliderGroupRegistry;
-
- _updateSampler = CustomSampler.Create("FastSpringBone(Update)");
-
- _pullTransformJobScheduler = new PullTransformJobScheduler(transformRegistry);
- _pushTransformJobScheduler = new PushTransformJobScheduler(transformRegistry);
- _updateSpringBoneJobScheduler = new UpdateSpringBoneJobScheduler(_rootBoneRegistry);
-
- _rootBoneRegistry.SubscribeOnValueChanged(OnRootBoneChanged);
- }
-
- private void OnDestroy()
- {
- _rootBoneRegistry.UnSubscribeOnValueChanged(OnRootBoneChanged);
- _prevJobHandle.Complete();
-
- _pullTransformJobScheduler.Dispose();
- _pushTransformJobScheduler.Dispose();
- _updateSpringBoneJobScheduler.Dispose();
- }
-
- private void OnRootBoneChanged()
- {
- _prevJobHandle.Complete();
- }
-
-#if UNITY_EDITOR
- private void OnDrawGizmos()
- {
- if (!ShowGizmos) return;
-
- _prevJobHandle.Complete();
-
- Gizmos.color = Color.blue;
- foreach (var rootBoneWrapper in _rootBoneRegistry.Items)
- {
- rootBoneWrapper.Value.DrawGizmos();
- }
-
- Gizmos.color = Color.yellow;
- foreach (var colliderGroup in _colliderGroupRegistry.Items)
- {
- colliderGroup.DrawGizmos();
- }
- }
-#endif
-
- private void LateUpdate()
- {
- _updateSampler.Begin();
-
- _prevJobHandle.Complete();
-
- var tempJobHandle = default(JobHandle);
- tempJobHandle = _pullTransformJobScheduler.Schedule(tempJobHandle);
- tempJobHandle = _updateSpringBoneJobScheduler.Schedule(tempJobHandle);
- tempJobHandle = _pushTransformJobScheduler.Schedule(tempJobHandle);
-
- _prevJobHandle = tempJobHandle;
-
- _updateSampler.End();
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringBoneScheduler.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringBoneScheduler.cs.meta
deleted file mode 100644
index 2f156ce92..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringBoneScheduler.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 3affa859639024f439b13d4cd4a9b0f6
-timeCreated: 1549521562
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringRootBone.cs b/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringRootBone.cs
deleted file mode 100644
index 704982a04..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringRootBone.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-using System;
-using System.Collections.Generic;
-using UnityEngine;
-using UniVRM10.FastSpringBones.Blittables;
-using UniVRM10.FastSpringBones.NativeWrappers;
-using UniVRM10.FastSpringBones.Registries;
-
-namespace UniVRM10.FastSpringBones.Components
-{
- ///
- /// SpringBoneの1本の毛束の処理を担当するクラス
- ///
- public sealed class FastSpringRootBone : IDisposable
- {
- private readonly TransformRegistry _transformRegistry;
- private readonly RootBoneRegistry _rootBoneRegistry;
- private readonly ColliderGroupRegistry _colliderGroupRegistry;
- private readonly Transform _transform;
-
- private float _radius;
- private NativeTransform _center;
-
- private IReadOnlyDictionary _transformIndexMap;
- private NativeColliderGroups _nativeColliderGroups;
-
- private NativePoints _nativePoints;
- private NativePointer _rootBoneWrapper;
-
- private readonly IList _transformWrappers = new List();
- private readonly IList> _points = new List>();
-
- public FastSpringRootBone(
- TransformRegistry transformRegistry,
- Transform transform,
- RootBoneRegistry rootBoneRegistry,
- ColliderGroupRegistry colliderGroupRegistry
- )
- {
- _transformRegistry = transformRegistry;
- _transform = transform;
- _rootBoneRegistry = rootBoneRegistry;
- _colliderGroupRegistry = colliderGroupRegistry;
- }
-
- public IReadOnlyList ColliderGroups
- {
- get => _nativeColliderGroups.ColliderGroups;
- set => _nativeColliderGroups.ColliderGroups = value;
- }
-
- public unsafe void Initialize(
- float gravityPower,
- Vector3 gravityDir,
- float dragForce,
- float stiffnessForce,
- IReadOnlyList colliderGroups,
- float radius,
- Transform center)
- {
- _radius = radius;
- if (center != null)
- {
- _center = new NativeTransform(_transformRegistry, TransformSynchronizationType.PullOnly, center);
- }
-
- _nativeColliderGroups = new NativeColliderGroups(colliderGroups);
-
- NativeTransform parent = null;
- if (_transform.parent)
- {
- parent = new NativeTransform(_transformRegistry, TransformSynchronizationType.PullOnly, _transform.parent);
- }
- SetupRecursive(_transform, parent);
-
- _nativePoints = new NativePoints(_points);
-
- _rootBoneWrapper = new NativePointer(new BlittableRootBone(gravityPower, gravityDir, dragForce, stiffnessForce, _nativePoints.GetUnsafePtr()));
- _rootBoneRegistry.Register(_rootBoneWrapper);
- _colliderGroupRegistry.Register(_nativeColliderGroups);
- }
-
- public void Dispose()
- {
- _colliderGroupRegistry.Unregister(_nativeColliderGroups);
- _rootBoneRegistry.Unregister(_rootBoneWrapper);
-
- foreach (var transformWrapper in _transformWrappers)
- {
- transformWrapper.Dispose();
- }
-
- foreach (var point in _points)
- {
- point.Dispose();
- }
-
- _center?.Dispose();
- _nativeColliderGroups?.Dispose();
- _nativePoints.Dispose();
- _rootBoneWrapper.Dispose();
- }
-
- private unsafe void SetupRecursive(Transform trs, NativeTransform parent = null)
- {
- var transformWrapper = new NativeTransform(_transformRegistry, TransformSynchronizationType.PushOnly, trs, parent);
- _transformWrappers.Add(transformWrapper);
-
- var point = new NativePointer(
- new BlittablePoint(
- trs,
- _radius,
- _center != null ? _center.GetUnsafePtr() : null,
- _nativeColliderGroups.GetUnsafePtr(),
- transformWrapper.GetUnsafePtr())
- );
- _points.Add(point);
-
- for (var i = 0; i < trs.childCount; ++i)
- {
- SetupRecursive(trs.GetChild(i), transformWrapper);
- }
- }
- }
-}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringRootBone.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringRootBone.cs.meta
deleted file mode 100644
index d92fb08fa..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Components/FastSpringRootBone.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 03e3a3dad32f6e64a9fd0327d74c8305
-timeCreated: 1550036996
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Components.meta b/Assets/VRM10/Runtime/FastSpringBone/InputPorts.meta
similarity index 77%
rename from Assets/VRM10/Runtime/FastSpringBone/Components.meta
rename to Assets/VRM10/Runtime/FastSpringBone/InputPorts.meta
index 93cfd9293..b894d56db 100644
--- a/Assets/VRM10/Runtime/FastSpringBone/Components.meta
+++ b/Assets/VRM10/Runtime/FastSpringBone/InputPorts.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 57b934d4e245cef49acc06524c3e1f7d
+guid: bc529d8de129fe44ca6bfa94972f8951
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneCollider.cs b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneCollider.cs
new file mode 100644
index 000000000..b8386924c
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneCollider.cs
@@ -0,0 +1,13 @@
+using System;
+using UnityEngine;
+using UniVRM10.FastSpringBones.Blittables;
+
+namespace UniVRM10.FastSpringBones.System
+{
+ [Serializable]
+ public struct FastSpringBoneCollider
+ {
+ public Transform Transform;
+ public BlittableCollider Collider;
+ }
+}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneCollider.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneCollider.cs.meta
new file mode 100644
index 000000000..8b31e8850
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneCollider.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: ffca416cb15a43239b73ed6067076458
+timeCreated: 1633066289
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneJoint.cs b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneJoint.cs
new file mode 100644
index 000000000..7aff7cf71
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneJoint.cs
@@ -0,0 +1,13 @@
+using System;
+using UnityEngine;
+using UniVRM10.FastSpringBones.Blittables;
+
+namespace UniVRM10.FastSpringBones.System
+{
+ [Serializable]
+ public struct FastSpringBoneJoint
+ {
+ public Transform Transform;
+ public BlittableJoint Joint;
+ }
+}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneJoint.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneJoint.cs.meta
new file mode 100644
index 000000000..d47bfbc18
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneJoint.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: b6742aa2a6a34bd395add629c17ab952
+timeCreated: 1633066253
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneSpring.cs b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneSpring.cs
new file mode 100644
index 000000000..e8af6da8e
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneSpring.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace UniVRM10.FastSpringBones.System
+{
+ [Serializable]
+ public struct FastSpringBoneSpring
+ {
+ public FastSpringBoneJoint[] Joints;
+ public FastSpringBoneCollider[] Colliders;
+ }
+}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneSpring.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneSpring.cs.meta
new file mode 100644
index 000000000..ea46ccb63
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneSpring.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: e0a972985499416e8e95acdf16fae6ba
+timeCreated: 1633066412
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeColliderGroup.cs b/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeColliderGroup.cs
deleted file mode 100644
index c0a3a566c..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeColliderGroup.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-using Unity.Collections;
-using UniVRM10.FastSpringBones.Blittables;
-
-namespace UniVRM10.FastSpringBones.NativeWrappers
-{
- ///
- /// BlittableColliderGroupのライフサイクルを管理するWrapper
- ///
- public sealed unsafe class NativeColliderGroup : IDisposable
- {
- private readonly NativePointer _nativePointer;
-
- private NativeArray Colliders { get; }
-
- public BlittableColliderGroup* GetUnsafePtr() => _nativePointer.GetUnsafePtr();
-
- public NativeColliderGroup(BlittableCollider[] colliders, NativeTransform nativeTransform)
- {
- Colliders = new NativeArray(colliders, Allocator.Persistent);
- _nativePointer = new NativePointer(new BlittableColliderGroup(Colliders, nativeTransform.GetUnsafePtr()));
- }
-
- public void Dispose()
- {
- if (Colliders.IsCreated) Colliders.Dispose();
-
- _nativePointer.Dispose();
- }
- }
-}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeColliderGroup.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeColliderGroup.cs.meta
deleted file mode 100644
index 3c88d6a2d..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeColliderGroup.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: a8d248be1ab9abe46abd06caa4758d6b
-timeCreated: 1550640666
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeColliderGroups.cs b/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeColliderGroups.cs
deleted file mode 100644
index cc97d5909..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeColliderGroups.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Unity.Collections;
-using Unity.Collections.LowLevel.Unsafe;
-using UniVRM10.FastSpringBones.Blittables;
-using UniVRM10.FastSpringBones.Components;
-
-namespace UniVRM10.FastSpringBones.NativeWrappers
-{
- ///
- /// BlittableColliderGroupsのライフサイクルを管理するWrapper
- ///
- public sealed unsafe class NativeColliderGroups : IDisposable
- {
- private readonly NativePointer _nativePointer = new NativePointer();
- private NativeArray _colliderGroupArray;
- private IReadOnlyList _colliderGroups;
-
- //Disposeされた後にUpdateColliderGroupsが呼ばれるのを防ぐためのフラグ
- private bool _isDisposed;
-
- public BlittableColliderGroups* GetUnsafePtr() => _nativePointer.GetUnsafePtr();
- public void DrawGizmos() => _nativePointer.Value.DrawGizmos();
-
- public IReadOnlyList ColliderGroups
- {
- get => _colliderGroups;
- set
- {
- _colliderGroups = value;
- UpdateColliderGroups();
- }
- }
-
- private void UpdateColliderGroups()
- {
- if (_isDisposed) return;
- if (_colliderGroupArray.IsCreated)
- {
- _colliderGroupArray.Dispose();
- }
- CreateColliderGroupArray(_colliderGroups);
- UpdateData();
- }
-
- public NativeColliderGroups(IReadOnlyList colliderGroups)
- {
- _colliderGroups = colliderGroups;
- UpdateColliderGroups();
- }
-
- public void Dispose()
- {
- if (_colliderGroupArray.IsCreated)
- {
- _colliderGroupArray.Dispose();
- _isDisposed = true;
- }
- _nativePointer.Dispose();
- }
-
- private void CreateColliderGroupArray(IReadOnlyList colliderGroups)
- {
- _colliderGroupArray = new NativeArray(colliderGroups.Count, Allocator.Persistent);
- for (var i = 0; i < _colliderGroupArray.Length; ++i)
- {
- _colliderGroupArray[i] = *colliderGroups[i].ColliderGroupPtr;
- }
- }
-
- private void UpdateData()
- {
- _nativePointer.Value = new BlittableColliderGroups(
- (BlittableColliderGroup*)_colliderGroupArray.GetUnsafePtr(),
- _colliderGroupArray.Length);
- }
- }
-}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeColliderGroups.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeColliderGroups.cs.meta
deleted file mode 100644
index 65493a207..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeColliderGroups.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 73c3eb940b180fc48a3e7cdacc621543
-timeCreated: 1550645184
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativePointer.cs b/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativePointer.cs
deleted file mode 100644
index 55640c242..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativePointer.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using Unity.Collections;
-using Unity.Collections.LowLevel.Unsafe;
-
-namespace UniVRM10.FastSpringBones.NativeWrappers
-{
- public sealed class NativePointer : IDisposable where T : unmanaged
- {
- private readonly unsafe T* _unsafePtr;
-
- public unsafe T* GetUnsafePtr() => _unsafePtr;
-
- public unsafe T Value
- {
- get => *_unsafePtr;
- set => *_unsafePtr = value;
- }
-
- public unsafe NativePointer()
- {
- _unsafePtr = (T*)UnsafeUtility.Malloc(sizeof(T), 16, Allocator.Persistent);
- }
-
- public unsafe NativePointer(T value)
- {
- _unsafePtr = (T*)UnsafeUtility.Malloc(sizeof(T), 16, Allocator.Persistent);
- Value = value;
- }
-
- public unsafe void Dispose()
- {
- UnsafeUtility.Free(_unsafePtr, Allocator.Persistent);
- }
- }
-}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativePointer.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativePointer.cs.meta
deleted file mode 100644
index 00bbc2603..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativePointer.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 7c4d1058273489b478b053eb13702d6e
-timeCreated: 1595316733
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativePoints.cs b/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativePoints.cs
deleted file mode 100644
index 31b1ef4dc..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativePoints.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Unity.Collections;
-using Unity.Collections.LowLevel.Unsafe;
-using UniVRM10.FastSpringBones.Blittables;
-
-namespace UniVRM10.FastSpringBones.NativeWrappers
-{
- ///
- /// BlittablePointsGroupのライフサイクルを管理するWrapper
- ///
- public sealed unsafe class NativePoints : IDisposable
- {
- private readonly NativePointer _nativePointer;
- private NativeArray _buffer;
-
- public BlittablePoints* GetUnsafePtr() => _nativePointer.GetUnsafePtr();
-
- public NativePoints(IList> points)
- {
- _buffer = new NativeArray(points.Count, Allocator.Persistent);
- for (var i = 0; i < _buffer.Length; ++i)
- {
- _buffer[i] = points[i].Value;
- }
-
- _nativePointer = new NativePointer(new BlittablePoints((BlittablePoint*) _buffer.GetUnsafePtr(), _buffer.Length));
- }
-
- public void Dispose()
- {
- if (_buffer.IsCreated)
- {
- _buffer.Dispose();
- }
- _nativePointer.Dispose();
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativePoints.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativePoints.cs.meta
deleted file mode 100644
index 9be582f2d..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativePoints.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 91cb239111add8342b25267432c53894
-timeCreated: 1550723674
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeTransform.cs b/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeTransform.cs
deleted file mode 100644
index bf7ed646f..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeTransform.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-using UnityEngine;
-using UniVRM10.FastSpringBones.Blittables;
-using UniVRM10.FastSpringBones.Registries;
-
-namespace UniVRM10.FastSpringBones.NativeWrappers
-{
- ///
- /// BlittableTransformのライフサイクルを管理するWrapper
- ///
- public sealed class NativeTransform : IDisposable
- {
- private readonly NativePointer _nativePointer;
- public Transform Transform { get; }
-
- private readonly TransformRegistry _transformRegistry;
-
- public unsafe BlittableTransform* GetUnsafePtr() => _nativePointer.GetUnsafePtr();
- public BlittableTransform Value => _nativePointer.Value;
-
- public unsafe NativeTransform(
- TransformRegistry transformRegistry,
- TransformSynchronizationType transformSynchronizationType,
- Transform transform,
- NativeTransform parent = null
- )
- {
- _nativePointer = new NativePointer(new BlittableTransform(parent != null ? parent.GetUnsafePtr() : null, transform));
-
- Transform = transform;
-
- _transformRegistry = transformRegistry;
- _transformRegistry.Register(this, transformSynchronizationType);
- }
-
- public void Dispose()
- {
- _transformRegistry.Unregister(this);
-
- _nativePointer.Dispose();
- }
- }
-}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeTransform.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeTransform.cs.meta
deleted file mode 100644
index 5b2c5ab2d..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers/NativeTransform.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 31fdb7a504d498242a3e459e3a63bf2d
-timeCreated: 1550545201
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Registries.meta b/Assets/VRM10/Runtime/FastSpringBone/Registries.meta
deleted file mode 100644
index eac274d9b..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Registries.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: a590127469e104049996cf9b123db183
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Registries/ColliderGroupRegistry.cs b/Assets/VRM10/Runtime/FastSpringBone/Registries/ColliderGroupRegistry.cs
deleted file mode 100644
index 8bc1fd0d2..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Registries/ColliderGroupRegistry.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using UniVRM10.FastSpringBones.NativeWrappers;
-
-namespace UniVRM10.FastSpringBones.Registries
-{
- public sealed class ColliderGroupRegistry : Registry
- {
- }
-}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Registries/ColliderGroupRegistry.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Registries/ColliderGroupRegistry.cs.meta
deleted file mode 100644
index 8be0a80f7..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Registries/ColliderGroupRegistry.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 9f5847b2d8bb16242aac76bda14b0202
-timeCreated: 1594963749
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Registries/Registry.cs b/Assets/VRM10/Runtime/FastSpringBone/Registries/Registry.cs
deleted file mode 100644
index 24efde31e..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Registries/Registry.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace UniVRM10.FastSpringBones.Registries
-{
- public class Registry
- {
- private readonly List _items = new List();
- private Action _onValueChanged;
-
- public IReadOnlyList Items => _items;
-
- public void Register(T value)
- {
- _items.Add(value);
- _onValueChanged?.Invoke();
- }
-
- public void Unregister(T value)
- {
- _items.Remove(value);
- _onValueChanged?.Invoke();
- }
-
- public void SubscribeOnValueChanged(Action action) => _onValueChanged += action;
- public void UnSubscribeOnValueChanged(Action action) => _onValueChanged -= action;
- }
-}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Registries/Registry.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Registries/Registry.cs.meta
deleted file mode 100644
index c16cd67d9..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Registries/Registry.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 9d127e4a4d5d05a46929eb3d3692d720
-timeCreated: 1595407071
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Registries/RootBoneRegistry.cs b/Assets/VRM10/Runtime/FastSpringBone/Registries/RootBoneRegistry.cs
deleted file mode 100644
index 29509be7f..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Registries/RootBoneRegistry.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using UniVRM10.FastSpringBones.Blittables;
-using UniVRM10.FastSpringBones.NativeWrappers;
-
-namespace UniVRM10.FastSpringBones.Registries
-{
- ///
- /// 今生きているRootBoneの一覧を返すクラス
- ///
- public sealed class RootBoneRegistry : Registry>
- {
- }
-}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Registries/RootBoneRegistry.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Registries/RootBoneRegistry.cs.meta
deleted file mode 100644
index 89ea5400e..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Registries/RootBoneRegistry.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 34da1f63315656e479315841b7112d7c
-timeCreated: 1550734399
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Registries/TransformRegistry.cs b/Assets/VRM10/Runtime/FastSpringBone/Registries/TransformRegistry.cs
deleted file mode 100644
index 8fc0d45cf..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Registries/TransformRegistry.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using System;
-using System.Collections.Generic;
-using UniVRM10.FastSpringBones.NativeWrappers;
-
-namespace UniVRM10.FastSpringBones.Registries
-{
- ///
- /// 今生きているTransformの一覧を返すクラス
- ///
- public sealed class TransformRegistry
- {
- private readonly List _transforms = new List();
- public IReadOnlyList Transforms => _transforms;
-
- private readonly List _pullTargets = new List();
- public IReadOnlyList PullTargets => _pullTargets;
-
- private readonly List _pushTargets = new List();
- public IReadOnlyList PushTargets => _pushTargets;
-
- private Action _onValueChanged;
-
- public void SubscribeOnValueChanged(Action action) => _onValueChanged += action;
-
- public void UnSubscribeOnValueChanged(Action action) => _onValueChanged -= action;
-
- public void Register(NativeTransform nativeTransform, TransformSynchronizationType synchronizationType)
- {
- _transforms.Add(nativeTransform);
- switch (synchronizationType)
- {
- case TransformSynchronizationType.PullOnly:
- _pullTargets.Add(nativeTransform);
- break;
- case TransformSynchronizationType.PushOnly:
- _pushTargets.Add(nativeTransform);
- break;
- default:
- throw new ArgumentOutOfRangeException(nameof(synchronizationType), synchronizationType, null);
- }
- _onValueChanged?.Invoke();
- }
-
- public void Unregister(NativeTransform nativeTransform)
- {
- _transforms.Remove(nativeTransform);
-
- if (_pullTargets.Contains(nativeTransform))
- {
- _pullTargets.Remove(nativeTransform);
- }
-
- if (_pushTargets.Contains(nativeTransform))
- {
- _pushTargets.Remove(nativeTransform);
- }
- _onValueChanged?.Invoke();
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Registries/TransformRegistry.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Registries/TransformRegistry.cs.meta
deleted file mode 100644
index d22ac48d1..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Registries/TransformRegistry.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 0603b4348a649df4fa966eeb3cd1011a
-timeCreated: 1550666913
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Registries/TransformSynchronizationType.cs b/Assets/VRM10/Runtime/FastSpringBone/Registries/TransformSynchronizationType.cs
deleted file mode 100644
index 1dccb0525..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Registries/TransformSynchronizationType.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace UniVRM10.FastSpringBones.Registries
-{
- public enum TransformSynchronizationType
- {
- PullOnly,
- PushOnly,
- }
-}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Registries/TransformSynchronizationType.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Registries/TransformSynchronizationType.cs.meta
deleted file mode 100644
index c3ef76238..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Registries/TransformSynchronizationType.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 03978423768dd5542875359a745a0d6d
-timeCreated: 1551169872
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Schedulers.meta b/Assets/VRM10/Runtime/FastSpringBone/Schedulers.meta
deleted file mode 100644
index 2a3440920..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Schedulers.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 160bc0dc84d022a48862d46add47a26c
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Schedulers/PullTransformJobScheduler.cs b/Assets/VRM10/Runtime/FastSpringBone/Schedulers/PullTransformJobScheduler.cs
deleted file mode 100644
index 450d26e26..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Schedulers/PullTransformJobScheduler.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-using System;
-using System.Collections.Generic;
-#if ENABLE_SPRINGBONE_BURST
-using Unity.Burst;
-#endif
-using Unity.Collections;
-using Unity.Collections.LowLevel.Unsafe;
-using Unity.Jobs;
-using UnityEngine.Jobs;
-using UnityEngine.Profiling;
-using UniVRM10.FastSpringBones.Blittables;
-using UniVRM10.FastSpringBones.NativeWrappers;
-using UniVRM10.FastSpringBones.Registries;
-
-namespace UniVRM10.FastSpringBones.Schedulers
-{
- ///
- /// GameObjectの世界からBlittableな世界へTransformを複製する処理を行うクラス
- ///
- public sealed unsafe class PullTransformJobScheduler : IDisposable
- {
- private BlittableTransform** _transformPointers;
- private TransformAccessArray _transformAccessArray;
-
- private readonly CustomSampler _sampler = CustomSampler.Create("Schedule CopyFromTransformJob");
- private readonly TransformRegistry _transformRegistry;
-
- private bool _dirty = true;
-
- private IReadOnlyList Targets => _transformRegistry.PullTargets;
-
- public PullTransformJobScheduler(TransformRegistry transformRegistry)
- {
- _transformRegistry = transformRegistry;
-
- _transformRegistry.SubscribeOnValueChanged(OnTransformChanged);
- }
-
- private void OnTransformChanged()
- {
- _dirty = true;
- }
-
- public JobHandle Schedule(JobHandle dependOn = default(JobHandle))
- {
- if (Targets.Count == 0)
- {
- return dependOn;
- }
-
- _sampler.Begin();
-
- // リストが変更されていたらバッファを再構築
- if (_dirty)
- {
- ReconstructBuffers();
-
- _dirty = false;
- }
-
- // ジョブを発火
- var job = new Job { TransformPointers = _transformPointers };
- var jobHandle = job.Schedule(_transformAccessArray, dependOn);
-
- _sampler.End();
-
- return jobHandle;
- }
-
- private void ReconstructBuffers()
- {
- ReleaseBuffers();
-
- var transforms = Targets;
- _transformPointers = (BlittableTransform**)UnsafeUtility.Malloc(
- sizeof(BlittableTransform*) * transforms.Count,
- 16,
- Allocator.Persistent
- );
-
- _transformAccessArray = new TransformAccessArray(transforms.Count);
-
- for (var i = 0; i < transforms.Count; i++)
- {
- _transformPointers[i] = transforms[i].GetUnsafePtr();
- _transformAccessArray.Add(transforms[i].Transform);
- }
- }
-
- public void Dispose()
- {
- ReleaseBuffers();
- _transformRegistry.UnSubscribeOnValueChanged(OnTransformChanged);
- }
-
- private void ReleaseBuffers()
- {
- if (_transformAccessArray.isCreated) _transformAccessArray.Dispose();
- if (_transformPointers != null)
- {
- UnsafeUtility.Free(_transformPointers, Allocator.Persistent);
- _transformPointers = null;
- }
- }
-
-#if ENABLE_SPRINGBONE_BURST
- [BurstCompile]
-#endif
- private struct Job : IJobParallelForTransform
- {
- [NativeDisableUnsafePtrRestriction] public BlittableTransform** TransformPointers;
-
- public void Execute(int index, TransformAccess transform)
- {
- TransformPointers[index]->PullFrom(transform);
- }
- }
- }
-}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Schedulers/PullTransformJobScheduler.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Schedulers/PullTransformJobScheduler.cs.meta
deleted file mode 100644
index 6443d9e8d..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Schedulers/PullTransformJobScheduler.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 4ac8728e24e9f5240aa45867878dcc10
-timeCreated: 1550547066
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Schedulers/PushTransformJobScheduler.cs b/Assets/VRM10/Runtime/FastSpringBone/Schedulers/PushTransformJobScheduler.cs
deleted file mode 100644
index 619d0e659..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Schedulers/PushTransformJobScheduler.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-using System;
-using System.Collections.Generic;
-#if ENABLE_SPRINGBONE_BURST
-using Unity.Burst;
-#endif
-using Unity.Collections;
-using Unity.Collections.LowLevel.Unsafe;
-using Unity.Jobs;
-using UnityEngine.Jobs;
-using UnityEngine.Profiling;
-using UniVRM10.FastSpringBones.Blittables;
-using UniVRM10.FastSpringBones.NativeWrappers;
-using UniVRM10.FastSpringBones.Registries;
-
-namespace UniVRM10.FastSpringBones.Schedulers
-{
- ///
- /// Blittableな世界からGameObjectの世界へTransformを送り込む処理を行うクラス
- ///
- public sealed unsafe class PushTransformJobScheduler : IDisposable
- {
- private BlittableTransform** _transformPointers;
- private TransformAccessArray _transformAccessArray;
-
- private readonly CustomSampler _sampler = CustomSampler.Create("Schedule CopyFromTransformJob");
- private readonly TransformRegistry _transformRegistry;
-
- private bool _dirty = true;
-
- private IReadOnlyList Targets => _transformRegistry.PushTargets;
-
- public PushTransformJobScheduler(TransformRegistry transformRegistry)
- {
- _transformRegistry = transformRegistry;
-
- _transformRegistry.SubscribeOnValueChanged(OnTransformChanged);
- }
-
- private void OnTransformChanged()
- {
- _dirty = true;
- }
-
- public JobHandle Schedule(JobHandle dependOn = default(JobHandle))
- {
- if (Targets.Count == 0)
- {
- return dependOn;
- }
-
- _sampler.Begin();
-
- // リストが変更されていたらバッファを再構築
- if (_dirty)
- {
- ReconstructBuffers();
-
- _dirty = false;
- }
-
- // Jobを発火
- var job = new Job { TransformPointers = _transformPointers };
- var jobHandle = job.Schedule(_transformAccessArray, dependOn);
-
- _sampler.End();
-
- return jobHandle;
- }
-
- private void ReconstructBuffers()
- {
- ReleaseBuffers();
-
- var transforms = Targets;
- _transformPointers = (BlittableTransform**)UnsafeUtility.Malloc(
- sizeof(BlittableTransform*) * transforms.Count,
- 16,
- Allocator.Persistent
- );
-
- _transformAccessArray = new TransformAccessArray(transforms.Count);
-
- for (var i = 0; i < transforms.Count; i++)
- {
- _transformPointers[i] = transforms[i].GetUnsafePtr();
- _transformAccessArray.Add(transforms[i].Transform);
- }
- }
-
- public void Dispose()
- {
- ReleaseBuffers();
- _transformRegistry.UnSubscribeOnValueChanged(OnTransformChanged);
- }
-
- private void ReleaseBuffers()
- {
- if (_transformAccessArray.isCreated) _transformAccessArray.Dispose();
- if (_transformPointers != null)
- {
- UnsafeUtility.Free(_transformPointers, Allocator.Persistent);
- _transformPointers = null;
- }
- }
-
-#if ENABLE_SPRINGBONE_BURST
- [BurstCompile]
-#endif
- private struct Job : IJobParallelForTransform
- {
- [NativeDisableUnsafePtrRestriction] public BlittableTransform** TransformPointers;
-
- public void Execute(int index, TransformAccess transform)
- {
- TransformPointers[index]->PushTo(transform);
- }
- }
- }
-}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Schedulers/PushTransformJobScheduler.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Schedulers/PushTransformJobScheduler.cs.meta
deleted file mode 100644
index cf42b82ad..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Schedulers/PushTransformJobScheduler.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 91e1bc2d3c93f1b4db3e08534237e6a0
-timeCreated: 1550717407
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Schedulers/UpdateSpringBoneJobScheduler.cs b/Assets/VRM10/Runtime/FastSpringBone/Schedulers/UpdateSpringBoneJobScheduler.cs
deleted file mode 100644
index 88e2dc96a..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Schedulers/UpdateSpringBoneJobScheduler.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-using System;
-using System.Collections.Generic;
-#if ENABLE_SPRINGBONE_BURST
-using Unity.Burst;
-#endif
-using Unity.Collections;
-using Unity.Collections.LowLevel.Unsafe;
-using Unity.Jobs;
-using UnityEngine;
-using UnityEngine.Profiling;
-using UniVRM10.FastSpringBones.Blittables;
-using UniVRM10.FastSpringBones.NativeWrappers;
-using UniVRM10.FastSpringBones.Registries;
-
-namespace UniVRM10.FastSpringBones.Schedulers
-{
- ///
- /// SpringBoneを更新する処理を行うクラス
- ///
- public sealed unsafe class UpdateSpringBoneJobScheduler : IDisposable
- {
- private BlittableRootBone** _rootBonePointers;
-
- private readonly RootBoneRegistry _rootBoneRegistry;
- private readonly CustomSampler _sampler = CustomSampler.Create("Schedule CopyFromTransformJob");
-
- private bool _dirty = true;
-
- private IReadOnlyList> Targets => _rootBoneRegistry.Items;
-
- public UpdateSpringBoneJobScheduler(RootBoneRegistry rootBoneRegistry)
- {
- _rootBoneRegistry = rootBoneRegistry;
-
- _rootBoneRegistry.SubscribeOnValueChanged(OnRootBoneChanged);
- }
-
- public void Dispose()
- {
- ReleaseBuffer();
- _rootBoneRegistry.UnSubscribeOnValueChanged(OnRootBoneChanged);
- }
-
- private void OnRootBoneChanged()
- {
- _dirty = true;
- }
-
- public JobHandle Schedule(JobHandle dependOn = default(JobHandle))
- {
- if (Targets.Count == 0)
- {
- return dependOn;
- }
-
- _sampler.Begin();
-
- // リストが変更されていたらバッファを再構築
- if (_dirty)
- {
- ReconstructBuffers();
-
- _dirty = false;
- }
-
- // Jobを発火
- var job = new Job { RootBonePointers = _rootBonePointers, DeltaTime = Time.deltaTime };
- var jobHandle = job.Schedule(Targets.Count, 0, dependOn);
-
- _sampler.End();
-
- return jobHandle;
- }
-
- private void ReconstructBuffers()
- {
- ReleaseBuffer();
-
- _rootBonePointers = (BlittableRootBone**)UnsafeUtility.Malloc(
- sizeof(BlittableTransform*) * Targets.Count,
- 16,
- Allocator.Persistent
- );
-
- for (var i = 0; i < Targets.Count; i++)
- {
- _rootBonePointers[i] = Targets[i].GetUnsafePtr();
- }
- }
-
- private void ReleaseBuffer()
- {
- if (_rootBonePointers == null) return;
- UnsafeUtility.Free(_rootBonePointers, Allocator.Persistent);
- _rootBonePointers = null;
- }
-
-#if ENABLE_SPRINGBONE_BURST
- [BurstCompile]
-#endif
- private struct Job : IJobParallelFor
- {
- [NativeDisableUnsafePtrRestriction] public BlittableRootBone** RootBonePointers;
- public float DeltaTime;
-
- public void Execute(int index)
- {
- // 各点を更新する
- RootBonePointers[index]->Update(DeltaTime);
- }
- }
- }
-}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/Schedulers/UpdateSpringBoneJobScheduler.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/Schedulers/UpdateSpringBoneJobScheduler.cs.meta
deleted file mode 100644
index 963580382..000000000
--- a/Assets/VRM10/Runtime/FastSpringBone/Schedulers/UpdateSpringBoneJobScheduler.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 39839e9c65fc7a54abacaadf2d519fbf
-timeCreated: 1549516763
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers.meta b/Assets/VRM10/Runtime/FastSpringBone/System.meta
similarity index 77%
rename from Assets/VRM10/Runtime/FastSpringBone/NativeWrappers.meta
rename to Assets/VRM10/Runtime/FastSpringBone/System.meta
index 5b4b75b94..47ac6e8e5 100644
--- a/Assets/VRM10/Runtime/FastSpringBone/NativeWrappers.meta
+++ b/Assets/VRM10/Runtime/FastSpringBone/System.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: b6633497ce721ce4c81d514187ef4407
+guid: af417d77d895bc84ba5d2c8f0542bdd8
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/CopyToNativeArrayTransformJob.cs b/Assets/VRM10/Runtime/FastSpringBone/System/CopyToNativeArrayTransformJob.cs
new file mode 100644
index 000000000..1792f0ea7
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/System/CopyToNativeArrayTransformJob.cs
@@ -0,0 +1,28 @@
+using Unity.Burst;
+using Unity.Collections;
+using UnityEngine.Jobs;
+using UniVRM10.FastSpringBones.Blittables;
+
+namespace UniVRM10.FastSpringBones.System
+{
+ [BurstCompile]
+ public struct PullTransformJob : IJobParallelForTransform
+ {
+ [WriteOnly] public NativeArray Transforms;
+
+ public void Execute(int index, TransformAccess transform)
+ {
+ 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
+ };
+ }
+ }
+}
+
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/CopyToNativeArrayTransformJob.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/System/CopyToNativeArrayTransformJob.cs.meta
new file mode 100644
index 000000000..78bdc82fe
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/System/CopyToNativeArrayTransformJob.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: b9fd53b4431b41909c1b1d882a2d446b
+timeCreated: 1633072084
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBuffers.cs b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBuffers.cs
new file mode 100644
index 000000000..3e0cef9ef
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBuffers.cs
@@ -0,0 +1,110 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Unity.Collections;
+using UnityEngine.Jobs;
+using UniVRM10.FastSpringBones.Blittables;
+
+namespace UniVRM10.FastSpringBones.System
+{
+ public sealed class FastSpringBoneBuffers : IDisposable
+ {
+ private NativeArray _springs;
+
+ private NativeArray _joints;
+ private NativeArray _jointTransforms;
+ private TransformAccessArray _jointsTransformAccessArray;
+
+ private NativeArray _colliders;
+ private NativeArray _colliderTransforms;
+ private TransformAccessArray _colliderTransformAccessArray;
+
+ public NativeArray Springs => _springs;
+
+ public NativeArray Joints => _joints;
+ public NativeArray JointTransforms => _jointTransforms;
+ public TransformAccessArray JointsTransformAccessArray => _jointsTransformAccessArray;
+
+ public NativeArray Colliders => _colliders;
+ public NativeArray ColliderTransforms => _colliderTransforms;
+ public TransformAccessArray ColliderTransformAccessArray => _colliderTransformAccessArray;
+
+ public FastSpringBoneBuffers(IReadOnlyList springs)
+ {
+ _springs = new NativeArray(springs.Count, Allocator.Persistent);
+
+ // _springsを構築しつつ、joints, collidersの総数を数える
+ ConstructBlittableSprings(springs, out var jointsCount, out var collidersCount);
+
+ // 各種bufferの初期化
+ _joints = new NativeArray(jointsCount, Allocator.Persistent);
+ _jointTransforms = new NativeArray(jointsCount, Allocator.Persistent);
+ _jointsTransformAccessArray = new TransformAccessArray(jointsCount);
+
+ _colliders = new NativeArray(collidersCount, Allocator.Persistent);
+ _colliderTransforms = new NativeArray(collidersCount, Allocator.Persistent);
+ _colliderTransformAccessArray = new TransformAccessArray(collidersCount);
+
+ // 各種bufferの構築
+ var jointIndex = 0;
+ var colliderIndex = 0;
+ foreach (var spring in springs)
+ {
+ foreach (var joint in spring.Joints)
+ {
+ var parent = joint.Transform.parent;
+
+ _joints[jointIndex] = joint.Joint;
+ _jointsTransformAccessArray.Add(joint.Transform);
+ _jointTransforms[jointIndex] = new BlittableTransform();
+ ++jointIndex;
+ }
+
+ foreach (var collider in spring.Colliders)
+ {
+ var parent = collider.Transform.parent;
+
+ _colliders[colliderIndex] = collider.Collider;
+ _colliderTransformAccessArray.Add(collider.Transform);
+ _colliderTransforms[colliderIndex] = new BlittableTransform();
+ ++colliderIndex;
+ }
+ }
+ }
+
+ ///
+ /// _springsを構築しつつ、joints, collidersの総数を数える
+ ///
+ private void ConstructBlittableSprings(IReadOnlyList springs, out int jointsCount,
+ out int collidersCount)
+ {
+ jointsCount = 0;
+ collidersCount = 0;
+ for (var i = 0; i < springs.Count; i++)
+ {
+ 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;
+ _springs[i] = blittableSpring;
+
+ jointsCount += spring.Joints.Length;
+ collidersCount += spring.Colliders.Length;
+ }
+ }
+
+ public void Dispose()
+ {
+ _springs.Dispose();
+ _joints.Dispose();
+ _jointTransforms.Dispose();
+ _jointsTransformAccessArray.Dispose();
+ _colliders.Dispose();
+ _colliderTransforms.Dispose();
+ _colliderTransformAccessArray.Dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBuffers.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBuffers.cs.meta
new file mode 100644
index 000000000..ce9f4ec5a
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneBuffers.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 2b0299bf5bfe431e8e18a9b033b719a3
+timeCreated: 1633072502
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs
new file mode 100644
index 000000000..1b1382ec3
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using Unity.Jobs;
+using UnityEngine.Jobs;
+
+namespace UniVRM10.FastSpringBones.System
+{
+ public sealed class FastSpringBoneScheduler : IDisposable
+ {
+ private readonly FastSpringBoneBuffers _fastSpringBoneBuffers;
+
+ public FastSpringBoneScheduler(IReadOnlyList springs)
+ {
+ _fastSpringBoneBuffers = new FastSpringBoneBuffers(springs);
+ }
+
+ public void Schedule()
+ {
+ var handle = JobHandle.CombineDependencies(
+ new PullTransformJob
+ {
+ Transforms = _fastSpringBoneBuffers.ColliderTransforms
+ }.Schedule(_fastSpringBoneBuffers.ColliderTransformAccessArray),
+ new PullTransformJob
+ {
+ Transforms = _fastSpringBoneBuffers.JointTransforms
+ }.Schedule(_fastSpringBoneBuffers.JointsTransformAccessArray));
+
+ handle = JobHandle.CombineDependencies(
+ new PushTransformJob()
+ {
+ Transforms = _fastSpringBoneBuffers.ColliderTransforms
+ }.Schedule(_fastSpringBoneBuffers.ColliderTransformAccessArray, handle),
+ new PushTransformJob()
+ {
+ Transforms = _fastSpringBoneBuffers.JointTransforms
+ }.Schedule(_fastSpringBoneBuffers.JointsTransformAccessArray, handle));
+
+
+ handle.Complete();
+ }
+
+ public void Dispose()
+ {
+ _fastSpringBoneBuffers.Dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs.meta
new file mode 100644
index 000000000..3ebe6c1c4
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneScheduler.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 897b4e814c0b5dc4d8d1f8a859ef746b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneTest.cs b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneTest.cs
new file mode 100644
index 000000000..dfac14149
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneTest.cs
@@ -0,0 +1,26 @@
+using UnityEngine;
+
+namespace UniVRM10.FastSpringBones.System
+{
+ public sealed class FastSpringBoneTest : MonoBehaviour
+ {
+ [SerializeField] private FastSpringBoneSpring[] springs;
+
+ private FastSpringBoneScheduler _scheduler;
+
+ private void Start()
+ {
+ _scheduler = new FastSpringBoneScheduler(springs);
+ }
+
+ private void LateUpdate()
+ {
+ _scheduler.Schedule();
+ }
+
+ private void OnDestroy()
+ {
+ _scheduler.Dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneTest.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneTest.cs.meta
new file mode 100644
index 000000000..eb6020064
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/System/FastSpringBoneTest.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 13e3ed9705fb4aca9601f6dc764830d9
+timeCreated: 1633073221
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/PushTransformJob.cs b/Assets/VRM10/Runtime/FastSpringBone/System/PushTransformJob.cs
new file mode 100644
index 000000000..078ec1f31
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/System/PushTransformJob.cs
@@ -0,0 +1,19 @@
+using Unity.Burst;
+using Unity.Collections;
+using UnityEngine.Jobs;
+using UniVRM10.FastSpringBones.Blittables;
+
+namespace UniVRM10.FastSpringBones.System
+{
+ [BurstCompile]
+ public struct PushTransformJob : IJobParallelForTransform
+ {
+ [ReadOnly]
+ public NativeArray Transforms;
+
+ public void Execute(int index, TransformAccess transform)
+ {
+ transform.localRotation = Transforms[index].LocalRotation;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/PushTransformJob.cs.meta b/Assets/VRM10/Runtime/FastSpringBone/System/PushTransformJob.cs.meta
new file mode 100644
index 000000000..dea0f1598
--- /dev/null
+++ b/Assets/VRM10/Runtime/FastSpringBone/System/PushTransformJob.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: fd0a0bfba0ec4bc6b050527b92d4decf
+timeCreated: 1633075989
\ No newline at end of file