Files
UnrealEngineUWP/Engine/Source/Runtime/AnimGraphRuntime/Private/AnimNodes/AnimNode_SaveCachedPose.cpp

76 lines
2.1 KiB
C++
Raw Normal View History

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#include "AnimGraphRuntimePrivatePCH.h"
#include "AnimNodes/AnimNode_SaveCachedPose.h"
/////////////////////////////////////////////////////
// FAnimNode_SaveCachedPose
FAnimNode_SaveCachedPose::FAnimNode_SaveCachedPose()
: LastInitializedContextCounter(INDEX_NONE)
, LastCacheBonesContextCounter(INDEX_NONE)
, LastUpdatedContextCounter(INDEX_NONE)
, LastEvaluatedContextCounter(INDEX_NONE)
{
}
void FAnimNode_SaveCachedPose::Initialize(const FAnimationInitializeContext& Context)
{
FAnimNode_Base::Initialize(Context);
if (LastInitializedContextCounter != Context.AnimInstance->GetGraphTraversalCounter())
{
LastInitializedContextCounter = Context.AnimInstance->GetGraphTraversalCounter();
// Initialize the subgraph
Pose.Initialize(Context);
}
}
void FAnimNode_SaveCachedPose::CacheBones(const FAnimationCacheBonesContext& Context)
{
if (LastCacheBonesContextCounter != Context.AnimInstance->GetGraphTraversalCounter())
{
LastCacheBonesContextCounter = Context.AnimInstance->GetGraphTraversalCounter();
// Initialize the subgraph
Pose.CacheBones(Context);
}
}
void FAnimNode_SaveCachedPose::Update(const FAnimationUpdateContext& Context)
{
if (LastUpdatedContextCounter != Context.AnimInstance->GetGraphTraversalCounter())
{
LastUpdatedContextCounter = Context.AnimInstance->GetGraphTraversalCounter();
// Update the subgraph
Pose.Update(Context);
}
}
void FAnimNode_SaveCachedPose::Evaluate(FPoseContext& Output)
{
if (LastEvaluatedContextCounter != Output.AnimInstance->GetGraphTraversalCounter())
{
LastEvaluatedContextCounter = Output.AnimInstance->GetGraphTraversalCounter();
FPoseContext CachingContext(Output);
Pose.Evaluate(CachingContext);
Added FCompactPose, contains only the bone transforms needed by RequiredBones. Allows us to do animation evaluation without having to refer to required bones array all the time API Breaking Changes Removed Functions: FA2CSPose::SafeSetCSBoneTransforms FA2CSPose::LocalBlendCSBoneTransforms Member Type Changes: - int32 -> FCompactPoseBoneIndex --- FBoneTransform::BoneIndex --- FABRIKChainLink::BoneIndex - FA2CSPose -> FCSPose<FCompactPose> --- FAnimNode_SkeletalControlBase::ForwardedPose --- FComponentSpacePoseContext::Pose - FA2Pose -> FCompactPose --- FSlotEvaluationPose::Pose --- FAnimNode_TransitionPoseEvaluator::CachedPose --- FAnimNode_SaveCachedPose::CachedPose --- FPoseContext::Pose Paramater Changes: - FA2Pose& -> FCompactPose& --- UAnimSingleNodeInstance::InternalBlendSpaceEvaluatePose (FA2Pose& Pose -> FCompactPose&) --- UAnimInstance::SequenceEvaluatePose --- UAnimInstance::BlendSequences --- UAnimInstance::CopyPose --- UAnimInstance::ApplyAdditiveSequence --- UAnimInstance::BlendSpaceEvaluatePose --- UAnimInstance::BlendRotationOffset --- UAnimInstance::GetSlotWeight --- UAnimInstance::SlotEvaluatePose - FA2CSPose& -> FCSPose<FCompactPose>& --- FAnimNode_SkeletalControlBase::EvaluateBoneTransforms --- UAnimGraphNode_SkeletalControlBase::ConvertCSVectorToBoneSpace --- UAnimGraphNode_SkeletalControlBase::ConvertCSRotationToBoneSpace --- UAnimGraphNode_SkeletalControlBase::ConvertWidgetLocation --- UAnimPreviewInstance::ApplyBoneControllers - TArray<FTransform> -> FCompactPose --- UAnimPreviewInstance::SetKeyImplementation --- UAnimSequence::GetAnimationPose --- UAnimSequence::GetBonePose --- UAnimSequence::GetBonePose_Additive --- UAnimSequence::GetAdditiveBasePose --- UAnimSequence::GetBonePose_AdditiveMeshRotationOnly --- FAnimationRuntime::BlendPosesTogether ( + Removed NumPoses and RequiredBones ) --- FAnimationRuntime::BlendPosesTogetherPerBone ( + Removed NumPoses and RequiredBones ) --- FAnimationRuntime::BlendPosesTogetherPerBoneInMeshSpace ( + Removed NumPoses and RequiredBones ) --- FAnimationRuntime::BlendPosesPerBoneFilter ( + Removed Skeleton and RequiredBones ) --- FAnimationRuntime::GetPoseFromSequence ( + Removed RequiredBones ) --- FAnimationRuntime::GetPoseFromAnimTrack ( + Removed RequiredBones ) --- FAnimationRuntime::FillWithRetargetBaseRefPose ( + Removed RequiredBones ) --- FAnimationRuntime::ConvertPoseToAdditive ( + Removed RequiredBones ) --- FAnimationRuntime::ConvertPoseToMeshRotation ( + Removed RequiredBones ) --- FAnimationRuntime::BlendPosesAccumulate ( + Removed RequiredBones ) --- FAnimationRuntime::BlendAdditivePose ( + Removed RequiredBones ) --- FAnimationRuntime::GetPoseFromBlendSpace ( + Removed RequiredBones ) --- FAnimationRuntime::ConvertCSTransformToBoneSpace --- FAnimationRuntime::ConvertBoneSpaceTransformToCS --- FAnimationRuntime::BlendMeshPosesPerBoneWeights ( + Removed Skeleton and RequiredBones ) --- FAnimationRuntime::BlendLocalPosesPerBoneWeights ( + Removed Skeleton and RequiredBones ) - TArray<FTransform> -> FTransform --- UAnimSequence::ResetRootBoneForRootMotion - int32 -> FCompactPoseBoneIndex --- UAnimSequence::RetargetBoneTransform FAnimationRuntime: Many changes to animation operation functions, removal of NumPoses and RequiredBones, conversion of TArray<FTransform> to FCompactPose Removed USTRUCT markup from FBoneTransform Removed UPROPERTY markup from FAnimNode_TransitionPoseEvaluator::CachedPose [CL 2556671 by Martin Wilson in Main branch]
2015-05-19 06:19:22 -04:00
CachedPose.MoveBonesFrom(CachingContext.Pose);
CachedCurve.MoveFrom(CachingContext.Curve);
}
// Return the cached result
Output.Pose.CopyBonesFrom(CachedPose);
Output.Curve.CopyFrom(CachedCurve);
}
void FAnimNode_SaveCachedPose::GatherDebugData(FNodeDebugData& DebugData)
{
FString DebugLine = DebugData.GetNodeName(this);
DebugData.AddDebugItem(DebugLine);
Pose.GatherDebugData(DebugData);
}