BlittableSpringの最適化

This commit is contained in:
AoiKamishiro
2025-06-30 01:14:07 +09:00
parent a447433f5c
commit e5f6819b6d
3 changed files with 25 additions and 17 deletions

View File

@@ -7,12 +7,21 @@ namespace UniGLTF.SpringBoneJobs.Blittables
/// FastSpringBoneではこれを起点として並列化し、処理を行う
/// </summary>
[Serializable]
public struct BlittableSpring
public readonly struct BlittableSpring
{
public BlittableSpan colliderSpan;
public BlittableSpan logicSpan;
public int centerTransformIndex;
public int transformIndexOffset;
public int modelIndex;
public readonly BlittableSpan colliderSpan;
public readonly BlittableSpan logicSpan;
public readonly int centerTransformIndex;
public readonly int transformIndexOffset;
public readonly int modelIndex;
public BlittableSpring(BlittableSpan colliderSpan = default, BlittableSpan logicSpan = default, int centerTransformIndex = 0, int transformIndexOffset = 0, int modelIndex = 0)
{
this.colliderSpan = colliderSpan;
this.logicSpan = logicSpan;
this.centerTransformIndex = centerTransformIndex;
this.transformIndexOffset = transformIndexOffset;
this.modelIndex = modelIndex;
}
}
}

View File

@@ -248,11 +248,12 @@ namespace UniGLTF.SpringBoneJobs
public void Execute(int index)
{
var spring = SrcSprings[index];
spring.modelIndex = ModelIndex;
spring.colliderSpan = new BlittableSpan(spring.colliderSpan.startIndex + CollidersOffset, spring.colliderSpan.count);
spring.logicSpan = new BlittableSpan(spring.logicSpan.startIndex + LogicsOffset, spring.logicSpan.count);
spring.transformIndexOffset = TransformOffset;
DestSprings[index] = spring;
DestSprings[index] = new BlittableSpring(
modelIndex: ModelIndex,
colliderSpan: new BlittableSpan(spring.colliderSpan.startIndex + CollidersOffset, spring.colliderSpan.count),
logicSpan: new BlittableSpan(spring.logicSpan.startIndex + LogicsOffset, spring.logicSpan.count),
transformIndexOffset: TransformOffset,
centerTransformIndex: spring.centerTransformIndex);
}
}

View File

@@ -67,12 +67,10 @@ namespace UniGLTF.SpringBoneJobs.InputPorts
List<BlittableJointImmutable> blittableLogics = new();
foreach (var spring in springs)
{
var blittableSpring = new BlittableSpring
{
colliderSpan = new BlittableSpan(blittableColliders.Count,spring.colliders.Length),
logicSpan = new BlittableSpan(blittableJoints.Count, spring.joints.Length - 1),
centerTransformIndex = Array.IndexOf(Transforms, spring.center),
};
var blittableSpring = new BlittableSpring(
centerTransformIndex: Array.IndexOf(Transforms, spring.center),
colliderSpan: new BlittableSpan(blittableColliders.Count, spring.colliders.Length),
logicSpan: new BlittableSpan(blittableJoints.Count, spring.joints.Length - 1));
blittableSprings.Add(blittableSpring);
blittableColliders.AddRange(spring.colliders.Select(collider =>