void FComponentSpacePoseLink::EvaluateComponentSpace(FComponentSpacePoseContext& Output) { #if DO_CHECK checkf( !bProcessed, TEXT( "EvaluateComponentSpace already in progress, circular link for AnimInstance [%s] Blueprint [%s]" ), \ *Output.AnimInstanceProxy->GetAnimInstanceName(), *GetFullNameSafe(IAnimClassInterface::GetActualAnimClass(Output.AnimInstanceProxy->GetAnimClassInterface()))); TGuardValue<bool> CircularGuard(bProcessed, true); #endif #if ENABLE_ANIMGRAPH_TRAVERSAL_DEBUG checkf(InitializationCounter.IsSynchronizedWith(Output.AnimInstanceProxy->GetInitializationCounter()), TEXT("Calling EvaluateComponentSpace without initialization!")); checkf(CachedBonesCounter.IsSynchronizedWith(Output.AnimInstanceProxy->GetCachedBonesCounter()), TEXT("Calling EvaluateComponentSpace without CachedBones!")); checkf(UpdateCounter.IsSynchronizedWith(Output.AnimInstanceProxy->GetUpdateCounter()), TEXT("Calling EvaluateComponentSpace without Update for this node!")); EvaluationCounter.SynchronizeWith(Output.AnimInstanceProxy->GetEvaluationCounter()); #endif if (LinkedNode != NULL) { LinkedNode->EvaluateComponentSpace(Output); #if WITH_EDITOR Output.AnimInstanceProxy->RegisterWatchedPose(Output.Pose, LinkID); #endif } else { //@TODO: Warning here? Output.ResetToRefPose(); } // Detect non valid output #if !(UE_BUILD_SHIPPING || UE_BUILD_TEST) if (Output.ContainsNaN()) { // Show bone transform with some useful debug info for (const FTransform& Bone : Output.Pose.GetPose().GetBones()) { if (Bone.ContainsNaN()) { ensureMsgf(!Bone.ContainsNaN(), TEXT("Bone transform contains NaN from AnimInstance:[%s] Node:[%s] Value:[%s]") , *Output.AnimInstanceProxy->GetAnimInstanceName(), LinkedNode ? *LinkedNode->StaticStruct()->GetName() : TEXT("NULL"), *Bone.ToString()); } } } if (!Output.IsNormalized()) { // Show bone transform with some useful debug info for (const FTransform& Bone : Output.Pose.GetPose().GetBones()) { if (!Bone.IsRotationNormalized()) { ensureMsgf(Bone.IsRotationNormalized(), TEXT("Bone Rotation not normalized from AnimInstance:[%s] Node:[%s] Value:[%s]") , *Output.AnimInstanceProxy->GetAnimInstanceName(), LinkedNode ? *LinkedNode->StaticStruct()->GetName() : TEXT("NULL"), *Bone.ToString()); } } } #endif }
void FAnimNode_MeshSpaceRefPose::EvaluateComponentSpace(FComponentSpacePoseContext& Output) { Output.ResetToRefPose(); }