UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ImplicitFunctions.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3// Port of geometry3Sharp's CachingMeshSDFImplicit
4
5#pragma once
6
7#include "MathUtil.h"
8#include "SegmentTypes.h"
9#include "BoxTypes.h"
10
11namespace UE
12{
13namespace Geometry
14{
15
16using namespace UE::Math;
17
18template<typename RealType>
23
24template<typename RealType>
30
31
32
36template<typename RealType>
38{
40 RealType Radius;
41
42 RealType Value(const TVector<RealType>& Point) const
43 {
44 return Position.Distance(Point) - Radius;
45 }
46
51};
54
55
56
60template<typename RealType>
79
80
81
82
83
84
85
90template<typename RealType>
92{
94 RealType Scale = 1.0;
95
100
101 float GetRadius(double DefaultIsoValue = 0.5) const
102 {
103 return Scale * DefaultIsoValue;
104 }
105
106 RealType Value(const TVector<RealType>& Point) const
107 {
109 DistanceSqr /= (Scale * Scale);
110
111 RealType T = FMathd::Max(1.0 - DistanceSqr, 0.0);
112 return T*T*T; // (1-x^2)^3
113 }
114
119};
122
123
124
125
133template<typename InputBoundedImplicitType, typename RealType>
135{
137 RealType FalloffDistance = 10;
138
143
144 static constexpr RealType ZeroIsocontour = (RealType)0.421875; // (1-.5^2)^3
145
147 {
148 checkSlow(DistanceField != nullptr);
150 B.Expand(FalloffDistance);
151 return B;
152 }
153
154 RealType Value(const TVector<RealType> Pt)
155 {
156 checkSlow(DistanceField != nullptr);
157 RealType Dist = DistanceField->Value(Pt);
158 if (Dist > FalloffDistance)
159 return 0;
160 else if (Dist < -FalloffDistance)
161 return 1.0;
162 RealType t = (Dist + FalloffDistance) / (2 * FalloffDistance);
163 RealType expr = 1 - (t * t);
164 return expr * expr * expr; // == (1-t^2)^3
165 }
166};
167
168
175template<typename InputBoundedImplicitType, typename RealType>
177{
179 RealType BlendPower = 2.0;
180 bool bSubtract = false;
181
182 RealType Value(const TVector<RealType> Pt)
183 {
184 int N = Children.Num();
185 checkSlow(N > 0);
186 RealType f = Children[0]->Value(Pt);
187 RealType Scale = bSubtract ? -1 : 1;
188 if (BlendPower == 1.0)
189 {
190 for (int k = 1; k < N; ++k)
191 {
192 f += Children[k]->Value(Pt) * Scale;
193 }
194 f = TMathUtil<RealType>::Max(0, f);
195 }
196 else if (BlendPower == 2.0)
197 {
198 f = f * f;
199 for (int k = 1; k < N; ++k)
200 {
201 RealType v = Children[k]->Value(Pt);
202 f += v * v * Scale;
203 }
205 }
206 else
207 {
209 for (int k = 1; k < N; ++k)
210 {
211 RealType v = Children[k]->Value(Pt);
213 }
215 }
216 return f;
217 }
218
220 {
222 for (int k = 1, N = Children.Num(); k < N; ++k)
223 {
224 Box.Contain(Children[k]->Bounds());
225 }
226 return Box;
227 }
228};
229
230
231} // end namespace UE::Geometry
232} // end namespace UE
#define checkSlow(expr)
Definition AssertionMacros.h:332
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition MathUtil.h:150
static RealType Max(const RealType A, const RealType B)
Definition MathUtil.h:246
static RealType Sqrt(const RealType Value)
Definition MathUtil.h:342
static RealType Pow(const RealType Value, const RealType Power)
Definition MathUtil.h:402
Definition FunctionFwd.h:19
Definition DistanceFieldAtlas.h:36
TImplicitPoint3< float > FImplicitPoint3f
Definition ImplicitFunctions.h:52
TImplicitLine3< float > FImplicitLine3f
Definition ImplicitFunctions.h:77
TImplicitLine3< double > FImplicitLine3d
Definition ImplicitFunctions.h:78
TSkeletalImplicitLine3< double > FSkeletalImplicitLine3d
Definition ImplicitFunctions.h:121
TSkeletalImplicitLine3< float > FSkeletalImplicitLine3f
Definition ImplicitFunctions.h:120
TImplicitPoint3< double > FImplicitPoint3d
Definition ImplicitFunctions.h:53
Definition Sphere.cpp:10
Definition AdvancedWidgetsModule.cpp:13
float v
Definition radaudio_mdct.cpp:62
Definition BoxTypes.h:247
Definition ImplicitFunctions.h:26
TUniqueFunction< RealType(TVector< RealType >)> Value()
TUniqueFunction< TAxisAlignedBox3< RealType > > Bounds()
Definition ImplicitFunctions.h:135
RealType Value(const TVector< RealType > Pt)
Definition ImplicitFunctions.h:154
TAxisAlignedBox3< RealType > Bounds()
Definition ImplicitFunctions.h:146
RealType FalloffDistance
Definition ImplicitFunctions.h:137
TDistanceFieldToSkeletalField(InputBoundedImplicitType *DistanceField=nullptr, RealType FalloffDistance=10)
Definition ImplicitFunctions.h:139
static constexpr RealType ZeroIsocontour
Definition ImplicitFunctions.h:144
Definition ImplicitFunctions.h:20
TUniqueFunction< RealType(TVector< RealType >)> Value()
Definition ImplicitFunctions.h:62
RealType Value(const TVector< RealType > &Point) const
Definition ImplicitFunctions.h:66
RealType Radius
Definition ImplicitFunctions.h:64
TSegment3< RealType > Segment
Definition ImplicitFunctions.h:63
TAxisAlignedBox3< RealType > Bounds() const
Definition ImplicitFunctions.h:72
Definition ImplicitFunctions.h:38
RealType Radius
Definition ImplicitFunctions.h:40
RealType Value(const TVector< RealType > &Point) const
Definition ImplicitFunctions.h:42
TVector< RealType > Position
Definition ImplicitFunctions.h:39
TAxisAlignedBox3< RealType > Bounds() const
Definition ImplicitFunctions.h:47
Definition SegmentTypes.h:447
T DistanceSquared(const TVector< T > &Point) const
Definition SegmentTypes.h:556
TAxisAlignedBox3< T > GetBounds() const
Definition SegmentTypes.h:627
Definition ImplicitFunctions.h:92
void SetScaleFromRadius(double TargetRadius, double DefaultIsoValue=0.5)
Definition ImplicitFunctions.h:96
RealType Scale
Definition ImplicitFunctions.h:94
TAxisAlignedBox3< RealType > Bounds(double DefaultIsoValue=0.5) const
Definition ImplicitFunctions.h:115
TSegment3< RealType > Segment
Definition ImplicitFunctions.h:93
RealType Value(const TVector< RealType > &Point) const
Definition ImplicitFunctions.h:106
float GetRadius(double DefaultIsoValue=0.5) const
Definition ImplicitFunctions.h:101
Definition ImplicitFunctions.h:177
TAxisAlignedBox3< RealType > Bounds()
Definition ImplicitFunctions.h:219
RealType Value(const TVector< RealType > Pt)
Definition ImplicitFunctions.h:182
bool bSubtract
Definition ImplicitFunctions.h:180
RealType BlendPower
Definition ImplicitFunctions.h:179
TArray< InputBoundedImplicitType * > Children
Definition ImplicitFunctions.h:178
Definition Vector.h:51
static UE_FORCEINLINE_HINT T Distance(const TVector< T > &V1, const TVector< T > &V2)
Definition Vector.h:1018