UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UE::Geometry::TMeshTangents< RealType > Class Template Reference

#include <MeshTangents.h>

Public Member Functions

 TMeshTangents ()
 
 TMeshTangents (const FDynamicMesh3 *Mesh)
 
void SetMesh (const FDynamicMesh3 *MeshIn)
 
const TArray< TVector< RealType > > & GetTangents () const
 
const TArray< TVector< RealType > > & GetBitangents () const
 
const TArray< int32 > & GetDegenerateTris () const
 
const FDynamicMesh3GetMesh () const
 
void InitializeTriVertexTangents (bool bClearToZero)
 
template<typename OtherRealType >
void CopyTriVertexTangents (const TMeshTangents< OtherRealType > &OtherTangents)
 
GEOMETRYCORE_API bool CopyTriVertexTangents (const FDynamicMesh3 &SourceMesh)
 
GEOMETRYCORE_API void ComputeTriVertexTangents (const FDynamicMeshNormalOverlay *NormalOverlay, const FDynamicMeshUVOverlay *UVOverlay, const FComputeTangentsOptions &Options)
 
void GetPerTriangleTangent (int32 TriangleID, int32 TriVertIdx, UE::Math::TVector< RealType > &TangentOut, UE::Math::TVector< RealType > &BitangentOut) const
 
template<typename VectorType , typename OtherRealType >
void GetPerTriangleTangent (int32 TriangleID, int32 TriVertIdx, VectorType &TangentOut, VectorType &BitangentOut) const
 
void GetInterpolatedTriangleTangent (int32 TriangleID, const UE::Math::TVector< RealType > &BaryCoords, UE::Math::TVector< RealType > &TangentOut, UE::Math::TVector< RealType > &BitangentOut) const
 
void SetPerTriangleTangent (int TriangleID, int TriVertIdx, const TVector< RealType > &Tangent, const TVector< RealType > &Bitangent)
 
template<typename OtherVectorType >
void GetTriangleVertexTangentVectors (int32 TriangleID, int32 TriVertexIndex, OtherVectorType &TangentOut, OtherVectorType &BitangentOut) const
 
void InitializeTriangleTangents (bool bClearToZero)
 
GEOMETRYCORE_API void ComputeTriangleTangents (const FDynamicMeshUVOverlay *UVOverlay, bool bOrthogonalize=true)
 
GEOMETRYCORE_API bool CopyToOverlays (FDynamicMesh3 &MeshToSet) const
 

Static Public Member Functions

static bool ComputeDefaultOverlayTangents (FDynamicMesh3 &Mesh)
 

Protected Member Functions

GEOMETRYCORE_API void SetTangentCount (int Count, bool bClearToZero)
 
void ComputeSeparatePerTriangleTangents (const FDynamicMeshNormalOverlay *NormalOverlay, const FDynamicMeshUVOverlay *UVOverlay, const FComputeTangentsOptions &Options)
 
void ComputeMikkTStyleTangents (const FDynamicMeshNormalOverlay *NormalOverlay, const FDynamicMeshUVOverlay *UVOverlay, const FComputeTangentsOptions &Options)
 

Protected Attributes

const FDynamicMesh3Mesh
 
TArray< TVector< RealType > > Tangents
 
TArray< TVector< RealType > > Bitangents
 
TArray< int32AllDegenerateTris
 

Detailed Description

template<typename RealType>
class UE::Geometry::TMeshTangents< RealType >

TMeshTangents is a utility class that can calculate and store various types of tangent vectors for a FDynamicMesh.

Constructor & Destructor Documentation

◆ TMeshTangents() [1/2]

template<typename RealType >
UE::Geometry::TMeshTangents< RealType >::TMeshTangents ( )
inline

◆ TMeshTangents() [2/2]

template<typename RealType >
UE::Geometry::TMeshTangents< RealType >::TMeshTangents ( const FDynamicMesh3 Mesh)
inline

Member Function Documentation

◆ ComputeDefaultOverlayTangents()

template<typename RealType >
static bool UE::Geometry::TMeshTangents< RealType >::ComputeDefaultOverlayTangents ( FDynamicMesh3 Mesh)
inlinestatic

Convenience function to compute tangents from the mesh attribute set's primary UVs and normals

Returns
true if tangents were computed, false otherwise

◆ ComputeMikkTStyleTangents()

template<typename RealType >
void TMeshTangents::ComputeMikkTStyleTangents ( const FDynamicMeshNormalOverlay NormalOverlay,
const FDynamicMeshUVOverlay UVOverlay,
const FComputeTangentsOptions Options 
)
protected

◆ ComputeSeparatePerTriangleTangents()

template<typename RealType >
void TMeshTangents::ComputeSeparatePerTriangleTangents ( const FDynamicMeshNormalOverlay NormalOverlay,
const FDynamicMeshUVOverlay UVOverlay,
const FComputeTangentsOptions Options 
)
protected

◆ ComputeTriangleTangents()

template<typename RealType >
void TMeshTangents::ComputeTriangleTangents ( const FDynamicMeshUVOverlay UVOverlay,
bool  bOrthogonalize = true 
)

Compute per-triangle tangents for the given UV Overlay

Parameters
bOrthogonalizeif true, we orthogonalize the tangents by computing the Bitangent sign and regenerating it. Otherwise the tangents are left non-orthogonal.

◆ ComputeTriVertexTangents()

template<typename RealType >
void TMeshTangents::ComputeTriVertexTangents ( const FDynamicMeshNormalOverlay NormalOverlay,
const FDynamicMeshUVOverlay UVOverlay,
const FComputeTangentsOptions Options 
)

Calculate per-triangle tangent spaces based on the given per-triangle normal and UV overlays. In this mode there is no averaging of tangents across triangles. So if we have N triangles in the mesh, then 3*N tangents are generated. These tangents are computed in parallel.

◆ CopyToOverlays()

template<typename RealType >
bool TMeshTangents::CopyToOverlays ( FDynamicMesh3 MeshToSet) const

Set Tangents on mesh overlays

Parameters
MeshToSetMesh to copy overlays to; does not need to be the same as the Mesh member of this class

◆ CopyTriVertexTangents() [1/2]

template<typename RealType >
bool TMeshTangents::CopyTriVertexTangents ( const FDynamicMesh3 SourceMesh)

Initialize Tangents from the FDynamicMeshAttributeSet of SourceMesh

Returns
false if tangent attributes do not exist

◆ CopyTriVertexTangents() [2/2]

template<typename RealType >
template<typename OtherRealType >
void UE::Geometry::TMeshTangents< RealType >::CopyTriVertexTangents ( const TMeshTangents< OtherRealType > &  OtherTangents)

Initialize Tangents from other Tangents set

◆ GetBitangents()

template<typename RealType >
const TArray< TVector< RealType > > & UE::Geometry::TMeshTangents< RealType >::GetBitangents ( ) const
inline

◆ GetDegenerateTris()

template<typename RealType >
const TArray< int32 > & UE::Geometry::TMeshTangents< RealType >::GetDegenerateTris ( ) const
inline

◆ GetInterpolatedTriangleTangent()

template<typename RealType >
void UE::Geometry::TMeshTangents< RealType >::GetInterpolatedTriangleTangent ( int32  TriangleID,
const UE::Math::TVector< RealType > &  BaryCoords,
UE::Math::TVector< RealType > &  TangentOut,
UE::Math::TVector< RealType > &  BitangentOut 
) const
inline
Returns
Interpolated tangent and bitangent at barycentric coordinates inside a triangle, for per-triangle computed tangents
Parameters
TriangleIDtriangle index in mesh
BaryCoordsbarycentric coordinates in triangle
TangentOutinterpolated tangent
BitangentOutinterpolated bitangent

◆ GetMesh()

template<typename RealType >
const FDynamicMesh3 * UE::Geometry::TMeshTangents< RealType >::GetMesh ( ) const
inline

◆ GetPerTriangleTangent() [1/2]

template<typename RealType >
void UE::Geometry::TMeshTangents< RealType >::GetPerTriangleTangent ( int32  TriangleID,
int32  TriVertIdx,
UE::Math::TVector< RealType > &  TangentOut,
UE::Math::TVector< RealType > &  BitangentOut 
) const
inline

Return tangent and bitangent at a vertex of triangle for per-triangle computed tangents

Parameters
TriangleIDtriangle index in mesh
TriVertIdxvertex index in range 0,1,2

◆ GetPerTriangleTangent() [2/2]

template<typename RealType >
template<typename VectorType , typename OtherRealType >
void UE::Geometry::TMeshTangents< RealType >::GetPerTriangleTangent ( int32  TriangleID,
int32  TriVertIdx,
VectorType &  TangentOut,
VectorType &  BitangentOut 
) const
inline

Return tangent and bitangent at a vertex of triangle for per-triangle computed tangents

Parameters
TriangleIDtriangle index in mesh
TriVertIdxvertex index in range 0,1,2

◆ GetTangents()

template<typename RealType >
const TArray< TVector< RealType > > & UE::Geometry::TMeshTangents< RealType >::GetTangents ( ) const
inline

◆ GetTriangleVertexTangentVectors()

template<typename RealType >
void UE::Geometry::TMeshTangents< RealType >::GetTriangleVertexTangentVectors ( int32  TriangleID,
int32  TriVertexIndex,
OtherVectorType TangentOut,
OtherVectorType BitangentOut 
) const
inline

Get tangent and bitangent at a vertex of a triangle for per-triangle computed tangents

Parameters
TriangleIDtriangle index in mesh
TriVertIdxvertex index in range 0,1,2

◆ InitializeTriangleTangents()

template<typename RealType >
void UE::Geometry::TMeshTangents< RealType >::InitializeTriangleTangents ( bool  bClearToZero)
inline

Initialize buffer sizes to one tangent/bitangent per mesh triangle

◆ InitializeTriVertexTangents()

template<typename RealType >
void UE::Geometry::TMeshTangents< RealType >::InitializeTriVertexTangents ( bool  bClearToZero)
inline

Set internal buffer sizes suitable for calculating per-triangle tangents. This is intended to be used if you wish to calculate your own tangents and use SetPerTriangleTangent()

◆ SetMesh()

template<typename RealType >
void UE::Geometry::TMeshTangents< RealType >::SetMesh ( const FDynamicMesh3 MeshIn)
inline

◆ SetPerTriangleTangent()

template<typename RealType >
void UE::Geometry::TMeshTangents< RealType >::SetPerTriangleTangent ( int  TriangleID,
int  TriVertIdx,
const TVector< RealType > &  Tangent,
const TVector< RealType > &  Bitangent 
)
inline

Set tangent and bitangent at a vertex of triangle for per-triangle computed tangents.

Parameters
TriangleIDtriangle index in mesh
TriVertIdxvertex index in range 0,1,2

◆ SetTangentCount()

template<typename RealType >
void TMeshTangents::SetTangentCount ( int  Count,
bool  bClearToZero 
)
protected

Set the size of the Tangents array to Count, and optionally clear all values to (0,0,0)

Member Data Documentation

◆ AllDegenerateTris

template<typename RealType >
TArray<int32> UE::Geometry::TMeshTangents< RealType >::AllDegenerateTris
protected

Indices of degenerate triangles. This may be useful to know externally, as those tangets are often meaningless

◆ Bitangents

template<typename RealType >
TArray<TVector<RealType> > UE::Geometry::TMeshTangents< RealType >::Bitangents
protected

Set of computed bitangents

◆ Mesh

template<typename RealType >
const FDynamicMesh3* UE::Geometry::TMeshTangents< RealType >::Mesh
protected

Target Mesh

◆ Tangents

template<typename RealType >
TArray<TVector<RealType> > UE::Geometry::TMeshTangents< RealType >::Tangents
protected

Set of computed tangents


The documentation for this class was generated from the following files: