mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-09-09 20:38:56 -05:00
Merge pull request #1663 from amamagi/refactor/fsb
refactor fast spring bone
This commit is contained in:
@@ -9,7 +9,6 @@ namespace UniVRM10.FastSpringBones.Blittables
|
||||
[Serializable]
|
||||
public struct BlittableLogic
|
||||
{
|
||||
public int transformIndexOffset;
|
||||
public int parentTransformIndex;
|
||||
public int headTransformIndex;
|
||||
public float length;
|
||||
|
||||
@@ -12,5 +12,6 @@ namespace UniVRM10.FastSpringBones.Blittables
|
||||
public BlittableSpan colliderSpan;
|
||||
public BlittableSpan logicSpan;
|
||||
public int centerTransformIndex;
|
||||
public int transformIndexOffset;
|
||||
}
|
||||
}
|
||||
@@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user