Skip to content

Commit

Permalink
Pose graph: fix apply transform node (#15719)
Browse files Browse the repository at this point in the history
* Pose graph: fix apply transform node

* Update
  • Loading branch information
shrinktofit authored Jul 13, 2023
1 parent fc3a6a5 commit e383b26
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 7 deletions.
14 changes: 10 additions & 4 deletions cocos/animation/marionette/animation-graph-context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -915,9 +915,12 @@ class AnimationGraphEvaluationContext {
break;
}
case TransformSpace.LOCAL: { // Local -> *
const nodeComponentTransform = pose.transforms.getTransform(poseTransformIndex, cacheParentTransform_spaceConversion);
const invNodeComponentTransform = Transform.invert(nodeComponentTransform, nodeComponentTransform);
Transform.multiply(transform, invNodeComponentTransform, transform);
// Bone_Local_Transform * result = input
// result = inv(Bone_Local_Transform) * input
assertIsTrue(poseSpace === PoseTransformSpace.COMPONENT || poseSpace === PoseTransformSpace.LOCAL);
const boneTransform = pose.transforms.getTransform(poseTransformIndex, cacheParentTransform_spaceConversion);
const invBoneTransform = Transform.invert(boneTransform, boneTransform);
Transform.multiply(transform, invBoneTransform, transform);
break;
}
}
Expand Down Expand Up @@ -975,6 +978,9 @@ class AnimationGraphEvaluationContext {
break;
}
case TransformSpace.LOCAL: {
assertIsTrue(poseSpace === PoseTransformSpace.COMPONENT || poseSpace === PoseTransformSpace.LOCAL);
// Bone_Local_Transform * result = input
// result = inv(Bone_Local_Transform) * input
const currentTransform = pose.transforms.getTransform(poseTransformIndex, cacheParentTransform_spaceConversion);
Transform.multiply(transform, currentTransform, transform);
break;
Expand Down Expand Up @@ -1005,7 +1011,7 @@ class AnimationGraphEvaluationContext {
const { _parentTable: parentTable } = this;

Transform.setIdentity(out);
for (let iTransform = transformIndex; iTransform >= 0; iTransform = parentTable[iTransform]) {
for (let iTransform = parentTable[transformIndex]; iTransform >= 0; iTransform = parentTable[iTransform]) {
const localTransform = pose.transforms.getTransform(iTransform, cacheTransform_spaceConversion);
Transform.multiply(out, localTransform, out);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import { PoseGraphType } from '../foundation/type-system';
import { TransformSpace } from './transform-space';
import { Transform } from '../../../core/transform';

enum TransformOperation {
export enum TransformOperation {
LEAVE_UNCHANGED,

REPLACE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ describe(`Pose transform space`, () => {
hierarchy.getComponentToWorldTransform(), // Component -> World
hierarchy.computeComponentSpaceTransform( // Local -> Component
localSpacePoseRecord,
nodeName,
hierarchy.getParentNodeName(nodeName),
),
);
}],
Expand All @@ -116,7 +116,7 @@ describe(`Pose transform space`, () => {
[PoseTransformSpace.LOCAL, TransformSpace.COMPONENT, (hierarchy, localSpacePoseRecord, nodeName) => {
return hierarchy.computeComponentSpaceTransform(
localSpacePoseRecord,
nodeName,
hierarchy.getParentNodeName(nodeName),
);
}],

Expand Down

0 comments on commit e383b26

Please sign in to comment.