Merge pull request #1663 from amamagi/refactor/fsb

refactor fast spring bone
This commit is contained in:
Yutaka Sato
2022-05-31 11:21:37 +09:00
committed by GitHub
6 changed files with 12 additions and 13 deletions

View File

@@ -9,7 +9,6 @@ namespace UniVRM10.FastSpringBones.Blittables
[Serializable]
public struct BlittableLogic
{
public int transformIndexOffset;
public int parentTransformIndex;
public int headTransformIndex;
public float length;

View File

@@ -12,5 +12,6 @@ namespace UniVRM10.FastSpringBones.Blittables
public BlittableSpan colliderSpan;
public BlittableSpan logicSpan;
public int centerTransformIndex;
public int transformIndexOffset;
}
}

View File

@@ -155,6 +155,7 @@ namespace UniVRM10.FastSpringBones.System
DestSprings = new NativeSlice<BlittableSpring>(_springs, springsOffset, buffer.Springs.Length),
CollidersOffset = collidersOffset,
LogicsOffset = logicsOffset,
TransformOffset = transformOffset
}.Schedule(buffer.Springs.Length, 1, handle);
handle = new LoadCollidersJob()
{
@@ -168,7 +169,6 @@ namespace UniVRM10.FastSpringBones.System
SrcJoints = buffer.Joints,
DestLogics = new NativeSlice<BlittableLogic>(_logics, logicsOffset, buffer.Logics.Length),
DestJoints = new NativeSlice<BlittableJoint>(_joints, logicsOffset, buffer.Logics.Length),
TransformOffset = transformOffset
}.Schedule(buffer.Logics.Length, 1, handle);
springsOffset += buffer.Springs.Length;
@@ -238,12 +238,14 @@ namespace UniVRM10.FastSpringBones.System
public int CollidersOffset;
public int LogicsOffset;
public int TransformOffset;
public void Execute(int index)
{
var spring = SrcSprings[index];
spring.colliderSpan.startIndex += CollidersOffset;
spring.logicSpan.startIndex += LogicsOffset;
spring.transformIndexOffset = TransformOffset;
DestSprings[index] = spring;
}
}
@@ -258,8 +260,7 @@ namespace UniVRM10.FastSpringBones.System
public void Execute(int index)
{
var collider = SrcColliders[index];
DestColliders[index] = collider;
DestColliders[index] = SrcColliders[index];
}
}
@@ -272,13 +273,10 @@ namespace UniVRM10.FastSpringBones.System
[ReadOnly] public NativeSlice<BlittableJoint> SrcJoints;
[WriteOnly] public NativeSlice<BlittableLogic> DestLogics;
[WriteOnly] public NativeSlice<BlittableJoint> DestJoints;
public int TransformOffset;
public void Execute(int index)
{
var logic = SrcLogics[index];
logic.transformIndexOffset = TransformOffset;
DestLogics[index] = logic;
DestLogics[index] = SrcLogics[index];
DestJoints[index] = SrcJoints[index];
}
}

View File

@@ -27,6 +27,7 @@ namespace UniVRM10.FastSpringBones.System
public void Execute(int index)
{
var spring = Springs[index];
var transformIndexOffset = spring.transformIndexOffset;
var colliderSpan = spring.colliderSpan;
var logicSpan = spring.logicSpan;
@@ -35,12 +36,12 @@ namespace UniVRM10.FastSpringBones.System
var logic = Logics[logicIndex];
var joint = Joints[logicIndex];
var headTransform = Transforms[logic.headTransformIndex + logic.transformIndexOffset];
var headTransform = Transforms[logic.headTransformIndex + transformIndexOffset];
var parentTransform = logic.parentTransformIndex >= 0
? Transforms[logic.parentTransformIndex + logic.transformIndexOffset]
? Transforms[logic.parentTransformIndex + transformIndexOffset]
: (BlittableTransform?)null;
var centerTransform = spring.centerTransformIndex >= 0
? Transforms[spring.centerTransformIndex + logic.transformIndexOffset]
? Transforms[spring.centerTransformIndex + transformIndexOffset]
: (BlittableTransform?)null;
@@ -76,7 +77,7 @@ namespace UniVRM10.FastSpringBones.System
for (var colliderIndex = colliderSpan.startIndex; colliderIndex < colliderSpan.startIndex + colliderSpan.count; ++colliderIndex)
{
var collider = Colliders[colliderIndex];
var colliderTransform = Transforms[collider.transformIndex + logic.transformIndexOffset];
var colliderTransform = Transforms[collider.transformIndex + transformIndexOffset];
var colliderScale = colliderTransform.localToWorldMatrix.lossyScale;
var absColliderScale = math.abs(colliderScale);
var maxColliderScale = math.max(math.max(absColliderScale.x, absColliderScale.y), absColliderScale.z);
@@ -134,7 +135,7 @@ namespace UniVRM10.FastSpringBones.System
}
// 値をバッファに戻す
Transforms[logic.headTransformIndex + logic.transformIndexOffset] = headTransform;
Transforms[logic.headTransformIndex + transformIndexOffset] = headTransform;
Logics[logicIndex] = logic;
}
}