Navigation
| Name | NaniteUtilities |
| Type | Developer |
| Location | /Engine/Source/Developer/NaniteUtilities/ |
| Module Build Rules | NaniteUtilities.Build.cs |
Classes
| Name | Remarks |
|---|---|
| DisplacementPolicyFunctor | Same as above but use function references as original nanite code |
| FAdaptiveTessellator | |
| FDisplacementMap | |
| FEdgeHash | Find edge with opposite direction that shares these 2 verts. |
| FMinimalMesh | Mesh topology implementation for UE::Geometry::FAdaptiveTesselation. |
| FSettingsLayout |
Structs
| Name | Remarks |
|---|---|
| FAdjacency | |
| FLerpVert | Lerpable version of FStaticMeshBuildVertex. |
| FRange | |
| FTriangle | Fixed point rasterization. |
| FTriangle3f | Floating point rasterization. |
| TAffine | [ Thonat et al. 2021, "Tessellation-Free Displacement Mapping for Ray Tracing" ] [ de Figueiredo and Stolf 2004, "Affine Arithmetic: Concepts and Applications" ] [ Rump and Kashiwagi 2015, "Implementation and improvements of affine arithmetic" ] |
| TSGGX | Linearly filtering SGGX, which is the same as using the covariance matrix, directly is a decent fit. |
Typedefs
| Name | Type | Remarks | Include Path |
|---|---|---|---|
| FBoundsFunc | TFunctionRef< FVector2f( const FVector3f[3], const FLerpVert &, const FLerpVert &, const FLerpVert &, const FVector3f &, const FVector3f &, const FVector3f &, int32) > | AdaptiveTessellator.h | |
| FDispFunc | TFunctionRef< FVector3f( const FVector3f &, const FLerpVert &, const FLerpVert &, const FLerpVert &, int32) > | AdaptiveTessellator.h | |
| FNumFunc | TFunctionRef< int32( const FVector3f[3], const FLerpVert &, const FLerpVert &, const FLerpVert &, int32) > | AdaptiveTessellator.h |
Variables
Public
| Name | Type | Remarks | Include Path | Unreal Specifiers |
|---|---|---|---|---|
| SubpixelBits | int32 | Rasterizer.h | ||
| SubpixelSamples | int32 | Rasterizer.h |
Functions
Public
| Name | Remarks | Include Path | Unreal Specifiers |
|---|---|---|---|
float BrentRootFind
(
float y, |
Brent's method. | Optimize.h | |
| Affine.h | |||
float DownhillSimplex
(
FVector2f& x, |
Nelder-Mead optimization TODO This is only 2D, make any dimensions. | Optimize.h | |
uint32 EvolveSobolSeed
(
uint32& Seed |
All Sobol code adapted from PathTracingRandomSequence.ush. | MonteCarlo.h | |
uint32 FastOwenScrambling
(
uint32 Index, |
MonteCarlo.h | ||
FVector2f GaussianSampleDisk
(
FVector2f E, |
Exp( -0.5 * x^2 / Sigma^2 ) | MonteCarlo.h | |
float InverseLerp
(
float y, |
Optimize.h | ||
float InverseLerp
(
float y, |
Optimize.h | ||
| Affine.h | |||
void JacobiSVD::EigenSolver3
(
T*__restrict A, |
Diagonalize matrix A = V S V^T | MatrixUtil.h | |
void JacobiSVD::EigenSolver4
(
T*__restrict A, |
Diagonalize matrix A = V S V^T | MatrixUtil.h | |
T JacobiSVD::MaxOffDiagSymm
(
T*__restrict A, |
MatrixUtil.h | ||
bool JacobiSVD::Rotation3
(
T*__restrict A, |
MatrixUtil.h | ||
bool JacobiSVD::Rotation4
(
T*__restrict A, |
MatrixUtil.h | ||
void JacobiSVD::Update
(
T*__restrict A, |
Copyright (c) 2002-2012, Industrial Light & Magic, a division of Lucas Digital Ltd. | MatrixUtil.h | |
FVector4f LatticeSampler
(
uint32 SampleIndex, |
MonteCarlo.h | ||
bool LUPFactorize
(
T*__restrict A, |
LUP factorization using Doolittle's method with partial pivoting. | MatrixUtil.h | |
void LUPSolve
(
const T*__restrict LU, |
Solve system of equations A*x = b. | MatrixUtil.h | |
bool LUPSolveIterate
(
const T*__restrict A, |
Newton's method iterative refinement. | MatrixUtil.h | |
float Nanite::Barycentric::Cotangent
(
const FVector3f& Barycentrics0, |
Angle at corner 0. | TriangleUtil.h | |
float Nanite::Barycentric::DistanceToEdge
(
float Barycentric, |
https://math.stackexchange.com/questions/3748903/closest-point-to-triangle-edge-with-barycentric-coordinates | TriangleUtil.h | |
float Nanite::Barycentric::LengthSquared
(
const FVector3f& Barycentrics0, |
[ Schindler and Chen 2012, "Barycentric Coordinates in Olympiad Geometry" https://web.evanchen.cc/handouts/bary/bary-full.pdf ] | TriangleUtil.h | |
float Nanite::Barycentric::SubtriangleArea
(
const FVector3f& Barycentrics0, |
TriangleUtil.h | ||
| Affine.h | |||
| Affine.h | |||
| SGGX.h | |||
| Affine.h | |||
void PseudoInverse
(
T*__restrict S, |
Moore-Penrose pseudo inverse. | MatrixUtil.h | |
void PseudoSolve
(
const T*__restrict V, |
MatrixUtil.h | ||
bool PseudoSolveIterate
(
const T*__restrict A, |
Newton's method iterative refinement. | MatrixUtil.h | |
int32 Rasterizer::EdgeC
(
const FIntVector2& Edge, |
Rasterizer.h | ||
bool Rasterizer::IsCovered
(
const FVector2f& Edge, |
Rasterizer.h | ||
void RasterizeTri
(
const FVector3f Verts, |
Rasterizer.h | ||
FVector2f SobolSampler
(
uint32 SampleIndex, |
MonteCarlo.h | ||
float SurfaceAreaEllipsoid
(
float a, |
Approx surface area of ellipsoid. | SGGX.h | |
T UE::Math::Scalar::Abs
(
const T A |
VectorUtil.h | ||
int32 UE::Math::Scalar::CeilToInt
(
const T A |
VectorUtil.h | ||
int32 UE::Math::Scalar::FloorToInt
(
const T A |
VectorUtil.h | ||
T UE::Math::Scalar::Max
(
const T A, |
VectorUtil.h | ||
T UE::Math::Scalar::Max3
(
const T A, |
VectorUtil.h | ||
T UE::Math::Scalar::Min
(
const T A, |
VectorUtil.h | ||
T UE::Math::Scalar::Min3
(
const T A, |
VectorUtil.h | ||
int32 UE::Math::Scalar::RoundToInt
(
const T A |
VectorUtil.h | ||
FVector2f UniformSampleDisk
(
FVector2f E |
MonteCarlo.h | ||
FVector3f UniformSampleSphere
(
FVector2f E |
MonteCarlo.h | ||
void VoxelizeTri26
(
const Rasterizer::FTriangle3f& Tri, |
26-separating voxelization, conservative | Rasterizer.h | |
void VoxelizeTri6
(
const Rasterizer::FTriangle3f& Tri, |
6-separating voxelization | Rasterizer.h |