Download

How to convert world-space FRotator to bone-space within an animnode

I’ve got an FAnimNode_SkeletalControlBase where I am manipulating some bones. I am taking a bone and rotating it to face the world origin (0,0,0). However, this doesn’t seem to be working properly as the bone is just spinning like a giant fan blade in the same direction as the player is facing.


        
// Rotation that is facing world origin from CurrentBoneLocation(0,0,0)
FRotator CurrentBoneRotation = UKismetMathLibrary::FindLookAtRotation(CurrentBoneLocation, FVector(0.f, 0.f, 0.f);

// Convert CurrentBoneRotation from world-space to component-space
CurrentBoneRotation = UKismetMathLibrary::InverseTransformRotation(
     Output.AnimInstanceProxy->GetComponentTransform(), CurrentBoneRotation
);

// Convert CurrentBoneRotation from component-space to bone-space, wrapping the rotation in an FTransform
FTransform BoneTransform = FTransform(CurrentBoneRotation, FVector(0.f), FVector(0.f));
FAnimationRuntime::ConvertCSTransformToBoneSpace(Output.AnimInstanceProxy->GetSkelMeshComponent(), Output.Pose, BoneTransform, CurrentBoneIndex, EBoneControlSpace::BCS_BoneSpace);

OutBoneTransforms.Add(FBoneTransform(CurrentBoneIndex, FTransform(BoneTransform.GetRotation(), CurrentBoneLocation, FVector(1.f)));

Is this correct? I’ve looked over this at least a few dozen times. I’ve also tried switching around the values for CurrentBoneRotation’s axes, however that does not work as well.

I have the exact same issue. Did you end up finding a solution?