mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-08-28 13:54:45 -05:00
BlittableSpringの最適化
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 =>
|
||||
|
||||
Reference in New Issue
Block a user