BlittableColliderの最適化

This commit is contained in:
AoiKamishiro
2025-06-30 00:47:43 +09:00
parent 8ff75be0f5
commit 24f5b10a63
5 changed files with 45 additions and 31 deletions

View File

@@ -1,4 +1,5 @@
using System;
using Unity.Mathematics;
using UnityEngine;
namespace UniGLTF.SpringBoneJobs.Blittables
@@ -7,15 +8,35 @@ namespace UniGLTF.SpringBoneJobs.Blittables
/// Blittableなコライダ
/// </summary>
[Serializable]
public struct BlittableCollider
public readonly struct BlittableCollider
{
public BlittableColliderType colliderType;
public Vector3 offset;
public float radius;
// capsule tail or plane normal
public Vector3 tailOrNormal;
public int transformIndex;
private readonly float3x3 _data;
public BlittableColliderType colliderType => (BlittableColliderType)(int)_data.c2.y;
public float3 offset => _data.c0;
public float radius => _data.c2.x;
// capsule tail or plane normal
public float3 tailOrNormal => _data.c1;
public int transformIndex => (int)_data.c2.z;
public BlittableCollider(
float3 offset = default,
float radius = 0,
float3 tailOrNormal = default,
BlittableColliderType colliderType = default,
int colliderTransformIndex = 0)
{
var c0 = offset;
var c1 = tailOrNormal;
var c2 = new float3(radius,(int)colliderType, colliderTransformIndex);
_data = new float3x3(c0, c1, c2);
}
public BlittableCollider SetTransformIndex(int index)
{
return new BlittableCollider(offset, radius, tailOrNormal, colliderType, index);
}
public void DrawGizmo(BlittableTransform t)
{
Gizmos.matrix = t.localToWorldMatrix;

View File

@@ -86,8 +86,8 @@ namespace UniGLTF.SpringBoneJobs.InputPorts
blittableColliders.AddRange(spring.colliders.Select(collider =>
{
var blittable = collider.Collider;
blittable.transformIndex = Array.IndexOf(Transforms, collider.Transform);
return blittable;
var transformIndex = Array.IndexOf(Transforms, collider.Transform);
return blittable.SetTransformIndex(transformIndex);
}));
blittableJoints.AddRange(spring.joints
.Take(spring.joints.Length - 1).Select(joint =>

View File

@@ -40,13 +40,10 @@ namespace VRM.SpringBoneJobs
var c = new FastSpringBoneCollider
{
Transform = group.transform,
Collider = new BlittableCollider
{
offset = collider.Offset,
radius = collider.Radius,
tailOrNormal = default,
colliderType = BlittableColliderType.Sphere
}
Collider = new BlittableCollider(
offset: collider.Offset,
radius: collider.Radius,
colliderType: BlittableColliderType.Sphere)
};
colliders.Add(c);
}

View File

@@ -49,13 +49,11 @@ namespace UniVRM10
.Select(collider => new FastSpringBoneCollider
{
Transform = collider.transform,
Collider = new BlittableCollider
{
offset = collider.Offset,
radius = collider.Radius,
tailOrNormal = collider.TailOrNormal,
colliderType = TranslateColliderType(collider.ColliderType)
}
Collider = new BlittableCollider(
offset: collider.Offset,
radius: collider.Radius,
tailOrNormal: collider.TailOrNormal,
colliderType: TranslateColliderType(collider.ColliderType))
}).ToArray(),
joints = spring.Joints
.Select(joint => new FastSpringBoneJoint

View File

@@ -193,14 +193,12 @@ namespace UniVRM10.ClothWarp.Jobs
var colliderTransformIndex = GetOrAddColliderTransform(collider.transform);
colliderRef.Add(colliderInfo.Count);
colliderInfo.Add(new BlittableCollider
{
offset = collider.Offset,
radius = collider.Radius,
tailOrNormal = collider.TailOrNormal,
colliderType = TranslateColliderType(collider.ColliderType),
transformIndex = colliderTransformIndex,
});
colliderInfo.Add(new BlittableCollider(
offset: collider.Offset,
radius: collider.Radius,
tailOrNormal: collider.TailOrNormal,
colliderType: TranslateColliderType(collider.ColliderType),
colliderTransformIndex: colliderTransformIndex));
_colliders.Add(collider);
}