UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RBFSolver.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "Containers/Array.h"
8#include "CoreMinimal.h"
9#include "Curves/RichCurve.h"
10#include "Math/Quat.h"
11#include "Math/Rotator.h"
12#include "Math/UnrealMathSSE.h"
13#include "Math/Vector.h"
16
17#include "RBFSolver.generated.h"
18
19
21UENUM()
23{
29
38};
39
41UENUM()
43{
45
47
48 Linear,
49
50 Cubic,
51
52 Quintic,
53
56};
57
59UENUM()
61{
64
67
70
73
76};
77
79UENUM()
108
110USTRUCT()
112{
114
115
116 UPROPERTY(EditAnywhere, Category = RBFData)
117 TArray<float> Values;
118
120 ANIMGRAPHRUNTIME_API FRotator AsRotator(int32 Index) const;
121
124
125 ANIMGRAPHRUNTIME_API FVector AsVector(int32 Index) const;
126
127
129 ANIMGRAPHRUNTIME_API void AddFromRotator(const FRotator& InRot);
131 ANIMGRAPHRUNTIME_API void AddFromVector(const FVector& InVector);
132
134 int32 GetDimensions() const
135 {
136 return Values.Num();
137 }
138};
139
141USTRUCT()
143{
145
146
147 UPROPERTY(EditAnywhere, Category = RBFData)
148 float ScaleFactor;
149
153 UPROPERTY(EditAnywhere, Category = RBFData)
154 bool bApplyCustomCurve;
155
158 UPROPERTY(EditAnywhere, Category = RBFData)
160
163 UPROPERTY(EditAnywhere, Category = RBFData)
164 ERBFDistanceMethod DistanceMethod;
165
168 UPROPERTY(EditAnywhere, Category = RBFData)
169 ERBFFunctionType FunctionType;
170
172 : ScaleFactor(1.f)
173 , bApplyCustomCurve(false)
174 , DistanceMethod(ERBFDistanceMethod::DefaultMethod)
175 , FunctionType(ERBFFunctionType::DefaultFunction)
176 {}
177};
178
197
199USTRUCT(BlueprintType)
201{
203
204
205 UPROPERTY()
206 int32 TargetDimensions;
207
213 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RBFData)
214 ERBFSolverType SolverType;
215
218 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RBFData, meta = (EditCondition = "!bAutomaticRadius"))
219 float Radius;
220
221 /* Automatically pick the radius based on the average distance between targets */
222 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RBFData)
223 bool bAutomaticRadius;
224
225 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RBFData)
227
228 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RBFData)
229 ERBFDistanceMethod DistanceMethod;
230
232 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RBFData)
234
236 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RBFData)
237 float WeightThreshold;
238
240 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RBFData)
241 ERBFNormalizeMethod NormalizeMethod;
242
244 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RBFData, meta = (EditCondition = "NormalizeMethod == ERBFNormalizeMethod::NormalizeWithinMedian"))
245 FVector MedianReference;
246
248 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RBFData, meta = (UIMin = "0", UIMax = "90", EditCondition = "NormalizeMethod == ERBFNormalizeMethod::NormalizeWithinMedian"))
249 float MedianMin;
250
252 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RBFData, meta = (UIMin = "0", UIMax = "90", EditCondition = "NormalizeMethod == ERBFNormalizeMethod::NormalizeWithinMedian"))
253 float MedianMax;
254
256
258 ANIMGRAPHRUNTIME_API FVector GetTwistAxisVector() const;
259};
260
262
265{
268 static ANIMGRAPHRUNTIME_API bool ValidateTargets(const FRBFParams& Params, const TArray<FRBFTarget>& Targets, TArray<int>& InvalidTargets);
269
271 static ANIMGRAPHRUNTIME_API TSharedPtr<const FRBFSolverData> InitSolver(const FRBFParams& Params, const TArray<FRBFTarget>& Targets);
272
273 static ANIMGRAPHRUNTIME_API bool IsSolverDataValid(const FRBFSolverData& SolverData, const FRBFParams& Params, const TArray<FRBFTarget>& Targets);
274
276 static ANIMGRAPHRUNTIME_API void Solve(const FRBFSolverData& SolverData, const FRBFParams& Params, const TArray<FRBFTarget>& Targets, const FRBFEntry& Input, TArray<FRBFOutputWeight>& OutputWeights);
277
279 static ANIMGRAPHRUNTIME_API bool FindTargetNeighbourDistances(const FRBFParams& Params, const TArray<FRBFTarget>& Targets, TArray<float>& NeighbourDists);
280
282 static ANIMGRAPHRUNTIME_API float FindDistanceBetweenEntries(const FRBFEntry& A, const FRBFEntry& B, const FRBFParams& Params, ERBFDistanceMethod OverrideMethod = ERBFDistanceMethod::DefaultMethod);
283
285 static ANIMGRAPHRUNTIME_API float GetRadiusForTarget(const FRBFTarget& Target, const FRBFParams& Params);
286
288 static ANIMGRAPHRUNTIME_API float GetOptimalRadiusForTargets(const FRBFParams& Params, const TArray<FRBFTarget>& Targets);
289};
EBoneAxis
Definition AnimTypes.h:50
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
ERBFFunctionType
Definition RBFSolver.h:43
ERBFNormalizeMethod
Definition RBFSolver.h:81
ERBFSolverType
Definition RBFSolver.h:23
ERBFDistanceMethod
Definition RBFSolver.h:61
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Array.h:670
Definition EnumAsByte.h:22
Definition SharedPointer.h:692
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition RBFSolver.h:112
Definition RBFSolver.h:181
float TargetWeight
Definition RBFSolver.h:185
FRBFOutputWeight(int32 InTargetIndex, float InTargetWeight)
Definition RBFSolver.h:187
int32 TargetIndex
Definition RBFSolver.h:183
FRBFOutputWeight()
Definition RBFSolver.h:192
Definition RBFSolver.h:201
Definition RBFSolver.cpp:14
Definition RBFSolver.h:265
Definition RBFSolver.h:143
Definition RichCurve.h:200