Merging //UE4/Dev-Main to Dev-Editor (//UE4/Dev-Editor) at CL 7473521

#rb none
#fyi Max.Chen, Tim.Gautier

[CL 7614721 by Chris Gagnon in Dev-Editor branch]
This commit is contained in:
Chris Gagnon
2019-07-24 15:05:52 -04:00
4757 changed files with 389065 additions and 809260 deletions
@@ -18,6 +18,7 @@ TAutoConsoleVariable<int32> CVarAimOffsetLookAtDebug(TEXT("a.AnimNode.AimOffsetL
void FAnimNode_AimOffsetLookAt::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_BlendSpacePlayer::Initialize_AnyThread(Context);
BasePose.Initialize(Context);
}
@@ -66,6 +67,7 @@ void FAnimNode_AimOffsetLookAt::UpdateAssetPlayer(const FAnimationUpdateContext&
void FAnimNode_AimOffsetLookAt::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
FAnimNode_BlendSpacePlayer::CacheBones_AnyThread(Context);
BasePose.CacheBones(Context);
@@ -168,6 +170,7 @@ void FAnimNode_AimOffsetLookAt::UpdateFromLookAtTarget(FPoseContext& LocalPoseCo
void FAnimNode_AimOffsetLookAt::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this);
DebugLine += FString::Printf(TEXT("(Play Time: %.3f)"), InternalTimeAccumulator);
@@ -9,6 +9,7 @@
void FAnimNode_ApplyAdditive::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_Base::Initialize_AnyThread(Context);
Base.Initialize(Context);
@@ -18,14 +19,16 @@ void FAnimNode_ApplyAdditive::Initialize_AnyThread(const FAnimationInitializeCon
AlphaScaleBiasClamp.Reinitialize();
}
void FAnimNode_ApplyAdditive::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
void FAnimNode_ApplyAdditive::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
Base.CacheBones(Context);
Additive.CacheBones(Context);
}
void FAnimNode_ApplyAdditive::Update_AnyThread(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Update_AnyThread)
Base.Update(Context);
ActualAlpha = 0.f;
@@ -60,6 +63,7 @@ void FAnimNode_ApplyAdditive::Update_AnyThread(const FAnimationUpdateContext& Co
void FAnimNode_ApplyAdditive::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
//@TODO: Could evaluate Base into Output and save a copy
if (FAnimWeight::IsRelevant(ActualAlpha))
{
@@ -90,6 +94,7 @@ FAnimNode_ApplyAdditive::FAnimNode_ApplyAdditive()
void FAnimNode_ApplyAdditive::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this);
DebugLine += FString::Printf(TEXT("(Alpha: %.1f%%)"), ActualAlpha*100.f);
@@ -9,6 +9,7 @@
void FAnimNode_BlendBoneByChannel::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_Base::Initialize_AnyThread(Context);
A.Initialize(Context);
@@ -17,6 +18,7 @@ void FAnimNode_BlendBoneByChannel::Initialize_AnyThread(const FAnimationInitiali
void FAnimNode_BlendBoneByChannel::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
A.CacheBones(Context);
B.CacheBones(Context);
@@ -38,6 +40,7 @@ void FAnimNode_BlendBoneByChannel::CacheBones_AnyThread(const FAnimationCacheBon
void FAnimNode_BlendBoneByChannel::Update_AnyThread(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Update_AnyThread)
QUICK_SCOPE_CYCLE_COUNTER(STAT_FAnimNode_BlendBoneByChannel_Update);
GetEvaluateGraphExposedInputs().Execute(Context);
@@ -53,6 +56,7 @@ void FAnimNode_BlendBoneByChannel::Update_AnyThread(const FAnimationUpdateContex
void FAnimNode_BlendBoneByChannel::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
A.Evaluate(Output);
if (bBIsRelevant)
@@ -171,6 +175,7 @@ void FAnimNode_BlendBoneByChannel::Evaluate_AnyThread(FPoseContext& Output)
void FAnimNode_BlendBoneByChannel::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this);
DebugLine += FString::Printf(TEXT("(Alpha: %.1f%%)"), InternalBlendAlpha * 100);
DebugData.AddDebugItem(DebugLine);
@@ -9,6 +9,7 @@
void FAnimNode_BlendListBase::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_Base::Initialize_AnyThread(Context);
const int NumPoses = BlendPose.Num();
@@ -63,8 +64,9 @@ void FAnimNode_BlendListBase::Initialize_AnyThread(const FAnimationInitializeCon
}
}
void FAnimNode_BlendListBase::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
void FAnimNode_BlendListBase::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
for(int32 ChildIndex=0; ChildIndex<BlendPose.Num(); ChildIndex++)
{
BlendPose[ChildIndex].CacheBones(Context);
@@ -73,6 +75,7 @@ void FAnimNode_BlendListBase::CacheBones_AnyThread(const FAnimationCacheBonesCon
void FAnimNode_BlendListBase::Update_AnyThread(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Update_AnyThread)
GetEvaluateGraphExposedInputs().Execute(Context);
const int NumPoses = BlendPose.Num();
@@ -203,6 +206,7 @@ void FAnimNode_BlendListBase::Update_AnyThread(const FAnimationUpdateContext& Co
void FAnimNode_BlendListBase::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
ANIM_MT_SCOPE_CYCLE_COUNTER(BlendPosesInGraph, !IsInGameThread());
const int32 NumPoses = PosesToEvaluate.Num();
@@ -247,6 +251,7 @@ void FAnimNode_BlendListBase::Evaluate_AnyThread(FPoseContext& Output)
void FAnimNode_BlendListBase::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
const int NumPoses = BlendPose.Num();
const int32 ChildIndex = GetActiveChildIndex();
@@ -24,6 +24,7 @@ void FAnimNode_BlendSpaceEvaluator::UpdateAssetPlayer(const FAnimationUpdateCont
void FAnimNode_BlendSpaceEvaluator::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this);
DebugLine += FString::Printf(TEXT("('%s' Play Time: %.3f)"), *BlendSpace->GetName(), InternalTimeAccumulator);
@@ -55,6 +55,7 @@ float FAnimNode_BlendSpacePlayer::GetCurrentAssetLength()
void FAnimNode_BlendSpacePlayer::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_AssetPlayerBase::Initialize_AnyThread(Context);
GetEvaluateGraphExposedInputs().Execute(Context);
@@ -64,8 +65,9 @@ void FAnimNode_BlendSpacePlayer::Initialize_AnyThread(const FAnimationInitialize
PreviousBlendSpace = BlendSpace;
}
void FAnimNode_BlendSpacePlayer::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
void FAnimNode_BlendSpacePlayer::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
}
void FAnimNode_BlendSpacePlayer::UpdateAssetPlayer(const FAnimationUpdateContext& Context)
@@ -77,6 +79,7 @@ void FAnimNode_BlendSpacePlayer::UpdateAssetPlayer(const FAnimationUpdateContext
void FAnimNode_BlendSpacePlayer::UpdateInternal(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(UpdateInternal)
if ((BlendSpace != NULL) && (Context.AnimInstanceProxy->IsSkeletonCompatible(BlendSpace->GetSkeleton())))
{
// Create a tick record and fill it out
@@ -104,6 +107,7 @@ void FAnimNode_BlendSpacePlayer::UpdateInternal(const FAnimationUpdateContext& C
void FAnimNode_BlendSpacePlayer::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
if ((BlendSpace != NULL) && (Output.AnimInstanceProxy->IsSkeletonCompatible(BlendSpace->GetSkeleton())))
{
BlendSpace->GetAnimationPose(BlendSampleDataCache, Output.Pose, Output.Curve);
@@ -124,6 +128,7 @@ void FAnimNode_BlendSpacePlayer::OverrideAsset(UAnimationAsset* NewAsset)
void FAnimNode_BlendSpacePlayer::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this);
if (BlendSpace)
{
@@ -15,6 +15,7 @@ FAnimNode_CopyPoseFromMesh::FAnimNode_CopyPoseFromMesh()
void FAnimNode_CopyPoseFromMesh::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_Base::Initialize_AnyThread(Context);
// Initial update of the node, so we dont have a frame-delay on setup
@@ -26,6 +27,7 @@ void FAnimNode_CopyPoseFromMesh::Initialize_AnyThread(const FAnimationInitialize
void FAnimNode_CopyPoseFromMesh::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
}
@@ -147,6 +149,7 @@ void FAnimNode_CopyPoseFromMesh::PreUpdate(const UAnimInstance* InAnimInstance)
void FAnimNode_CopyPoseFromMesh::Update_AnyThread(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Update_AnyThread)
// This introduces a frame of latency in setting the pin-driven source component,
// but we cannot do the work to extract transforms on a worker thread as it is not thread safe.
GetEvaluateGraphExposedInputs().Execute(Context);
@@ -154,6 +157,7 @@ void FAnimNode_CopyPoseFromMesh::Update_AnyThread(const FAnimationUpdateContext&
void FAnimNode_CopyPoseFromMesh::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
FCompactPose& OutPose = Output.Pose;
OutPose.ResetToRefPose();
USkeletalMesh* CurrentMesh = CurrentlyUsedMesh.IsValid() ? CurrentlyUsedMesh.Get() : nullptr;
@@ -202,6 +206,7 @@ void FAnimNode_CopyPoseFromMesh::Evaluate_AnyThread(FPoseContext& Output)
void FAnimNode_CopyPoseFromMesh::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this);
DebugLine += FString::Printf(TEXT("('%s')"), *GetNameSafe(CurrentlyUsedSourceMeshComponent.IsValid() ? CurrentlyUsedSourceMeshComponent.Get()->SkeletalMesh : nullptr));
@@ -72,6 +72,7 @@ public:
void FAnimNode_CurveSource::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
SourcePose.Evaluate(Output);
if (CurveSource.GetInterface() != nullptr)
@@ -97,6 +98,7 @@ void FAnimNode_CurveSource::Evaluate_AnyThread(FPoseContext& Output)
void FAnimNode_CurveSource::Update_AnyThread(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Update_AnyThread)
// Evaluate any BP logic plugged into this node
GetEvaluateGraphExposedInputs().Execute(Context);
SourcePose.Update(Context);
@@ -104,18 +106,21 @@ void FAnimNode_CurveSource::Update_AnyThread(const FAnimationUpdateContext& Cont
void FAnimNode_CurveSource::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_Base::Initialize_AnyThread(Context);
SourcePose.Initialize(Context);
}
void FAnimNode_CurveSource::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
FAnimNode_Base::CacheBones_AnyThread(Context);
SourcePose.CacheBones(Context);
}
void FAnimNode_CurveSource::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FAnimNode_Base::GatherDebugData(DebugData);
SourcePose.GatherDebugData(DebugData.BranchFlow(1.f));
}
@@ -10,6 +10,7 @@
void FAnimNode_LayeredBoneBlend::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_Base::Initialize_AnyThread(Context);
const int NumPoses = BlendPoses.Num();
@@ -113,8 +114,9 @@ void FAnimNode_LayeredBoneBlend::ReinitializeBoneBlendWeights(const FBoneContain
}
}
void FAnimNode_LayeredBoneBlend::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
void FAnimNode_LayeredBoneBlend::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
BasePose.CacheBones(Context);
int32 NumPoses = BlendPoses.Num();
for(int32 ChildIndex=0; ChildIndex<NumPoses; ChildIndex++)
@@ -130,6 +132,7 @@ void FAnimNode_LayeredBoneBlend::CacheBones_AnyThread(const FAnimationCacheBones
void FAnimNode_LayeredBoneBlend::Update_AnyThread(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Update_AnyThread)
bHasRelevantPoses = false;
int32 RootMotionBlendPose = -1;
float RootMotionWeight = 0.f;
@@ -202,6 +205,7 @@ void FAnimNode_LayeredBoneBlend::Update_AnyThread(const FAnimationUpdateContext&
void FAnimNode_LayeredBoneBlend::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
ANIM_MT_SCOPE_CYCLE_COUNTER(BlendPosesInGraph, !IsInGameThread());
const int NumPoses = BlendPoses.Num();
@@ -281,6 +285,7 @@ void FAnimNode_LayeredBoneBlend::Evaluate_AnyThread(FPoseContext& Output)
void FAnimNode_LayeredBoneBlend::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
const int NumPoses = BlendPoses.Num();
FString DebugLine = DebugData.GetNodeName(this);
@@ -13,6 +13,7 @@ FAnimNode_MakeDynamicAdditive::FAnimNode_MakeDynamicAdditive()
void FAnimNode_MakeDynamicAdditive::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_Base::Initialize_AnyThread(Context);
Base.Initialize(Context);
@@ -21,18 +22,21 @@ void FAnimNode_MakeDynamicAdditive::Initialize_AnyThread(const FAnimationInitial
void FAnimNode_MakeDynamicAdditive::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
Base.CacheBones(Context);
Additive.CacheBones(Context);
}
void FAnimNode_MakeDynamicAdditive::Update_AnyThread(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Update_AnyThread)
Base.Update(Context.FractionalWeight(1.f));
Additive.Update(Context.FractionalWeight(1.f));
}
void FAnimNode_MakeDynamicAdditive::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
FPoseContext BaseEvalContext(Output);
Base.Evaluate(BaseEvalContext);
@@ -50,6 +54,7 @@ void FAnimNode_MakeDynamicAdditive::Evaluate_AnyThread(FPoseContext& Output)
void FAnimNode_MakeDynamicAdditive::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this);
DebugLine += FString::Printf(TEXT("(Mesh Space Additive: %s)"), bMeshSpaceAdditive ? TEXT("true") : TEXT("false"));
@@ -12,6 +12,7 @@ FAnimNode_ModifyCurve::FAnimNode_ModifyCurve()
void FAnimNode_ModifyCurve::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
Super::Initialize_AnyThread(Context);
SourcePose.Initialize(Context);
@@ -25,12 +26,14 @@ void FAnimNode_ModifyCurve::Initialize_AnyThread(const FAnimationInitializeConte
void FAnimNode_ModifyCurve::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
Super::CacheBones_AnyThread(Context);
SourcePose.CacheBones(Context);
}
void FAnimNode_ModifyCurve::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
FPoseContext SourceData(Output);
SourcePose.Evaluate(SourceData);
@@ -87,6 +90,7 @@ void FAnimNode_ModifyCurve::Evaluate_AnyThread(FPoseContext& Output)
void FAnimNode_ModifyCurve::Update_AnyThread(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Update_AnyThread)
// Run update on input pose nodes
SourcePose.Update(Context);
@@ -16,6 +16,7 @@ struct FMultiBlendData : public TThreadSingleton<FMultiBlendData>
void FAnimNode_MultiWayBlend::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_Base::Initialize_AnyThread(Context);
// this should be consistent all the time by editor node
@@ -32,8 +33,9 @@ void FAnimNode_MultiWayBlend::Initialize_AnyThread(const FAnimationInitializeCon
}
}
void FAnimNode_MultiWayBlend::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
void FAnimNode_MultiWayBlend::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
for (FPoseLink& Pose : Poses)
{
Pose.CacheBones(Context);
@@ -85,6 +87,7 @@ void FAnimNode_MultiWayBlend::UpdateCachedAlphas()
void FAnimNode_MultiWayBlend::Update_AnyThread(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Update_AnyThread)
QUICK_SCOPE_CYCLE_COUNTER(STAT_FAnimationNode_MultiWayBlend_Update);
GetEvaluateGraphExposedInputs().Execute(Context);
UpdateCachedAlphas();
@@ -102,15 +105,17 @@ void FAnimNode_MultiWayBlend::Update_AnyThread(const FAnimationUpdateContext& Co
void FAnimNode_MultiWayBlend::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
// this function may be reentrant when multiple MultiWayBlend nodes are chained together
// these scratch arrays are treated as stacks below
FMultiBlendData& BlendData = FMultiBlendData::Get();
TArray<FCompactPose, TInlineAllocator<8>>& SourcePoses = BlendData.SourcePoses;
TArray<float, TInlineAllocator<8>>& SourceWeights = BlendData.SourceWeights;
TArray<FBlendedCurve, TInlineAllocator<8>>& SourceCurves = BlendData.SourceCurves;
TArray<float, TInlineAllocator<8>>& SourceWeights = BlendData.SourceWeights;
SourcePoses.Reset();
SourceWeights.Reset();
SourceCurves.Reset();
const int32 SourcePosesInitialNum = SourcePoses.Num();
int32 SourcePosesAdded = 0;
if (ensure(Poses.Num() == CachedAlphas.Num()))
{
for (int32 PoseIndex = 0; PoseIndex < Poses.Num(); ++PoseIndex)
@@ -118,10 +123,11 @@ void FAnimNode_MultiWayBlend::Evaluate_AnyThread(FPoseContext& Output)
const float CurrentAlpha = CachedAlphas[PoseIndex];
if (CurrentAlpha > ZERO_ANIMWEIGHT_THRESH)
{
// evaluate input pose, potentially reentering this function and pushing/popping more poses
FPoseContext PoseContext(Output);
// total alpha shouldn't be zero
Poses[PoseIndex].Evaluate(PoseContext);
// push source pose data
FCompactPose& SourcePose = SourcePoses.AddDefaulted_GetRef();
SourcePose.MoveBonesFrom(PoseContext.Pose);
@@ -129,15 +135,28 @@ void FAnimNode_MultiWayBlend::Evaluate_AnyThread(FPoseContext& Output)
SourceCurve.MoveFrom(PoseContext.Curve);
SourceWeights.Add(CurrentAlpha);
++SourcePosesAdded;
}
}
}
if (SourcePoses.Num() > 0)
if (SourcePosesAdded > 0)
{
FAnimationRuntime::BlendPosesTogether(SourcePoses, SourceCurves, SourceWeights, Output.Pose, Output.Curve);
// obtain views onto the ends of our stacks
TArrayView<FCompactPose> SourcePosesView = MakeArrayView(&SourcePoses[SourcePosesInitialNum], SourcePosesAdded);
TArrayView<FBlendedCurve> SourceCurvesView = MakeArrayView(&SourceCurves[SourcePosesInitialNum], SourcePosesAdded);
TArrayView<float> SourceWeightsView = MakeArrayView(&SourceWeights[SourcePosesInitialNum], SourcePosesAdded);
FAnimationRuntime::BlendPosesTogether(SourcePosesView, SourceCurvesView, SourceWeightsView, Output.Pose, Output.Curve);
// normalize rotation - some cases, where additive is applied less than 1, it will use non normalized rotation
Output.Pose.NormalizeRotations();
// pop the poses we added
SourcePoses.SetNum(SourcePosesInitialNum, false);
SourceCurves.SetNum(SourcePosesInitialNum, false);
SourceWeights.SetNum(SourcePosesInitialNum, false);
}
else
{
@@ -154,6 +173,7 @@ void FAnimNode_MultiWayBlend::Evaluate_AnyThread(FPoseContext& Output)
void FAnimNode_MultiWayBlend::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this);
DebugData.AddDebugItem(DebugLine);
@@ -15,13 +15,15 @@ FAnimNode_PoseBlendNode::FAnimNode_PoseBlendNode()
void FAnimNode_PoseBlendNode::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_PoseHandler::Initialize_AnyThread(Context);
SourcePose.Initialize(Context);
}
void FAnimNode_PoseBlendNode::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
void FAnimNode_PoseBlendNode::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
FAnimNode_PoseHandler::CacheBones_AnyThread(Context);
SourcePose.CacheBones(Context);
}
@@ -34,6 +36,7 @@ void FAnimNode_PoseBlendNode::UpdateAssetPlayer(const FAnimationUpdateContext& C
void FAnimNode_PoseBlendNode::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
ANIM_MT_SCOPE_CYCLE_COUNTER(PoseBlendNodeEvaluate, !IsInGameThread());
FPoseContext SourceData(Output);
@@ -83,6 +86,7 @@ void FAnimNode_PoseBlendNode::Evaluate_AnyThread(FPoseContext& Output)
void FAnimNode_PoseBlendNode::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FAnimNode_PoseHandler::GatherDebugData(DebugData);
SourcePose.GatherDebugData(DebugData.BranchFlow(1.f));
}
@@ -8,6 +8,7 @@
void FAnimNode_PoseByName::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_PoseHandler::Initialize_AnyThread(Context);
}
@@ -38,6 +39,7 @@ void FAnimNode_PoseByName::UpdateAssetPlayer(const FAnimationUpdateContext& Cont
void FAnimNode_PoseByName::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
// make sure we have curve to eval
if ((CurrentPoseAsset.IsValid()) && (PoseExtractContext.PoseCurves.Num() > 0) && (Output.AnimInstanceProxy->IsSkeletonCompatible(CurrentPoseAsset->GetSkeleton())))
{
@@ -54,6 +56,7 @@ void FAnimNode_PoseByName::Evaluate_AnyThread(FPoseContext& Output)
void FAnimNode_PoseByName::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this);
DebugLine += FString::Printf(TEXT("('%s' Pose: %s)"), CurrentPoseAsset.IsValid()? *CurrentPoseAsset.Get()->GetName() : TEXT("None"), *PoseName.ToString());
@@ -23,6 +23,7 @@ FAnimNode_PoseDriver::FAnimNode_PoseDriver()
void FAnimNode_PoseDriver::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_PoseHandler::Initialize_AnyThread(Context);
SourcePose.Initialize(Context);
@@ -71,6 +72,7 @@ void FAnimNode_PoseDriver::RebuildPoseList(const FBoneContainer& InBoneContainer
void FAnimNode_PoseDriver::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
FAnimNode_PoseHandler::CacheBones_AnyThread(Context);
// Init pose input
SourcePose.CacheBones(Context);
@@ -140,6 +142,7 @@ void FAnimNode_PoseDriver::UpdateAssetPlayer(const FAnimationUpdateContext& Cont
void FAnimNode_PoseDriver::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FAnimNode_PoseHandler::GatherDebugData(DebugData);
SourcePose.GatherDebugData(DebugData.BranchFlow(1.f));
}
@@ -215,6 +218,7 @@ void FAnimNode_PoseDriver::GetRBFTargets(TArray<FRBFTarget>& OutTargets) const
void FAnimNode_PoseDriver::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
QUICK_SCOPE_CYCLE_COUNTER(STAT_PoseDriver_Eval);
// Udpate DrivenIDs if needed
@@ -8,13 +8,15 @@
void FAnimNode_PoseHandler::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_AssetPlayerBase::Initialize_AnyThread(Context);
UpdatePoseAssetProperty(Context.AnimInstanceProxy);
}
void FAnimNode_PoseHandler::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
void FAnimNode_PoseHandler::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
FAnimNode_AssetPlayerBase::CacheBones_AnyThread(Context);
BoneBlendWeights.Reset();
@@ -87,6 +89,7 @@ void FAnimNode_PoseHandler::OverrideAsset(UAnimationAsset* NewAsset)
void FAnimNode_PoseHandler::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this);
DebugLine += FString::Printf(TEXT("('%s')"), *GetNameSafe(PoseAsset));
@@ -48,12 +48,14 @@ void FAnimNode_PoseSnapshot::PreUpdate(const UAnimInstance* InAnimInstance)
void FAnimNode_PoseSnapshot::Update_AnyThread(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Update_AnyThread)
// Evaluate any BP logic plugged into this node
GetEvaluateGraphExposedInputs().Execute(Context);
}
void FAnimNode_PoseSnapshot::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
FCompactPose& OutPose = Output.Pose;
OutPose.ResetToRefPose();
@@ -117,6 +119,7 @@ void FAnimNode_PoseSnapshot::ApplyPose(const FPoseSnapshot& PoseSnapshot, FCompa
void FAnimNode_PoseSnapshot::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this) + " Snapshot Name:" + SnapshotName.ToString();
DebugData.AddDebugItem(DebugLine, true);
}
@@ -16,6 +16,7 @@ FAnimNode_RandomPlayer::FAnimNode_RandomPlayer()
void FAnimNode_RandomPlayer::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_Base::Initialize_AnyThread(Context);
GetEvaluateGraphExposedInputs().Execute(Context);
@@ -76,6 +77,7 @@ void FAnimNode_RandomPlayer::Initialize_AnyThread(const FAnimationInitializeCont
void FAnimNode_RandomPlayer::Update_AnyThread(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Update_AnyThread)
GetEvaluateGraphExposedInputs().Execute(Context);
if(Entries.Num() == 0)
@@ -168,6 +170,7 @@ void FAnimNode_RandomPlayer::Update_AnyThread(const FAnimationUpdateContext& Con
void FAnimNode_RandomPlayer::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
if(Entries.Num() > 0)
{
UAnimSequence* CurrentSequence = Entries[CurrentEntry].Sequence;
@@ -227,6 +230,7 @@ void FAnimNode_RandomPlayer::Evaluate_AnyThread(FPoseContext& Output)
void FAnimNode_RandomPlayer::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this);
DebugData.AddDebugItem(DebugLine, true);
@@ -7,6 +7,7 @@
void FAnimNode_RefPose::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
// I don't have anything to evaluate. Should this be even here?
// EvaluateGraphExposedInputs.Execute(Context);
@@ -25,6 +26,7 @@ void FAnimNode_RefPose::Evaluate_AnyThread(FPoseContext& Output)
void FAnimNode_MeshSpaceRefPose::EvaluateComponentSpace_AnyThread(FComponentSpacePoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(EvaluateComponentSpace_AnyThread)
Output.ResetToRefPose();
}
@@ -44,6 +46,7 @@ const TCHAR* GetRefPostTypeText(ERefPoseType RefPose)
void FAnimNode_RefPose::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this);
DebugLine += FString::Printf(TEXT("(Ref Pose Type: %s)"), GetRefPostTypeText(RefPoseType));
DebugData.AddDebugItem(DebugLine, true);
@@ -7,6 +7,7 @@
void FAnimNode_RotateRootBone::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Initialize_AnyThread)
FAnimNode_Base::Initialize_AnyThread(Context);
BasePose.Initialize(Context);
@@ -15,13 +16,15 @@ void FAnimNode_RotateRootBone::Initialize_AnyThread(const FAnimationInitializeCo
YawScaleBiasClamp.Reinitialize();
}
void FAnimNode_RotateRootBone::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
void FAnimNode_RotateRootBone::CacheBones_AnyThread(const FAnimationCacheBonesContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(CacheBones_AnyThread)
BasePose.CacheBones(Context);
}
void FAnimNode_RotateRootBone::Update_AnyThread(const FAnimationUpdateContext& Context)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Update_AnyThread)
GetEvaluateGraphExposedInputs().Execute(Context);
BasePose.Update(Context);
@@ -31,6 +34,7 @@ void FAnimNode_RotateRootBone::Update_AnyThread(const FAnimationUpdateContext& C
void FAnimNode_RotateRootBone::Evaluate_AnyThread(FPoseContext& Output)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(Evaluate_AnyThread)
// Evaluate the input
BasePose.Evaluate(Output);
@@ -57,6 +61,7 @@ void FAnimNode_RotateRootBone::Evaluate_AnyThread(FPoseContext& Output)
void FAnimNode_RotateRootBone::GatherDebugData(FNodeDebugData& DebugData)
{
DECLARE_SCOPE_HIERARCHICAL_COUNTER_ANIMNODE(GatherDebugData)
FString DebugLine = DebugData.GetNodeName(this);
DebugLine += FString::Printf(TEXT("Pitch(%.2f) Yaw(%.2f)"), ActualPitch, ActualYaw);

Some files were not shown because too many files have changed in this diff Show More