From e1bded5bd00f75dab8fecaf5b1921a0d1965e7e0 Mon Sep 17 00:00:00 2001 From: AoiKamishiro Date: Mon, 30 Jun 2025 00:53:51 +0900 Subject: [PATCH] =?UTF-8?q?BlittableJointImmutable=E3=81=AE=E6=9C=80?= =?UTF-8?q?=E9=81=A9=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Blittables/BlittableJointImmutable.cs | 31 ++++++++++++++----- .../InputPorts/FastSpringBoneBuffer.cs | 16 +++++----- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableJointImmutable.cs b/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableJointImmutable.cs index a4d0b9233..137bb083c 100644 --- a/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableJointImmutable.cs +++ b/Assets/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableJointImmutable.cs @@ -1,4 +1,5 @@ using System; +using Unity.Mathematics; using UnityEngine; namespace UniGLTF.SpringBoneJobs.Blittables @@ -9,15 +10,31 @@ namespace UniGLTF.SpringBoneJobs.Blittables /// 変わりにくいスコープ。 /// [Serializable] - public struct BlittableJointImmutable + public readonly struct BlittableJointImmutable { - public int parentTransformIndex; - public int headTransformIndex; - public int tailTransformIndex; - public float length; - public Quaternion localRotation; - public Vector3 boneAxis; + private readonly float4x3 _data; + + public int parentTransformIndex => (int)_data.c2.x; + public int headTransformIndex => (int)_data.c2.y; + public int tailTransformIndex => (int)_data.c2.z; + public float length => _data.c2.w; + public quaternion localRotation => _data.c0; + public float3 boneAxis => _data.c1.xyz; + public BlittableJointImmutable( + int parentTransformIndex = 0, + int headTransformIndex = 0, + int tailTransformIndex = 0, + float length = 0, + quaternion localRotation = default, + float3 boneAxis = default) + { + var c0 = localRotation.value; + var c1 = new float4(boneAxis, 0); + var c2 = new float4(parentTransformIndex, headTransformIndex, tailTransformIndex, length); + _data = new float4x3(c0, c1, c2); + } + public void DrawGizmo(BlittableTransform t, BlittableJointMutable m) { Gizmos.matrix = t.localToWorldMatrix; diff --git a/Assets/UniGLTF/Runtime/SpringBoneJobs/InputPorts/FastSpringBoneBuffer.cs b/Assets/UniGLTF/Runtime/SpringBoneJobs/InputPorts/FastSpringBoneBuffer.cs index 5822c248f..a87346731 100644 --- a/Assets/UniGLTF/Runtime/SpringBoneJobs/InputPorts/FastSpringBoneBuffer.cs +++ b/Assets/UniGLTF/Runtime/SpringBoneJobs/InputPorts/FastSpringBoneBuffer.cs @@ -129,15 +129,13 @@ namespace UniGLTF.SpringBoneJobs.InputPorts localPosition.z * scale.z ); - yield return new BlittableJointImmutable - { - headTransformIndex = Array.IndexOf(Transforms, joint.Transform), - parentTransformIndex = Array.IndexOf(Transforms, joint.Transform.parent), - tailTransformIndex = Array.IndexOf(Transforms, tailJoint.Transform), - localRotation = joint.DefaultLocalRotation, - boneAxis = localChildPosition.normalized, - length = localChildPosition.magnitude - }; + yield return new BlittableJointImmutable( + headTransformIndex: Array.IndexOf(Transforms, joint.Transform), + parentTransformIndex: Array.IndexOf(Transforms, joint.Transform.parent), + tailTransformIndex: Array.IndexOf(Transforms, tailJoint.Transform), + localRotation: joint.DefaultLocalRotation, + boneAxis: localChildPosition.normalized, + length: localChildPosition.magnitude); } }