Can someone confirm me that the UV on the UProceduralMeshComponent are 32 bits?

The more I try to be ‘precise’ (really small UV values) the less they seem precise as if my 32 bit float value is compress into a 16 bit and then the interpolation is done in 32 bit between two numbers that are the same, this loosing the 32 precision.

Does somebody knows if the UV are stored in 32 bits or 16 bits in the Procedural Mesh Component ?
Thanks :slight_smile:

1 Like

I traced through code and In UpdateSection_RenderThread when converting to a static mesh the flag bUseFullPrecisionUVs on StaticMeshVertexBuffer is set to false, therefore forcing the uv value to a 16 bits in the SetVertexUV method. Any way to set this flag to true ?

Still true (June 2022). :frowning:
Epic, please expose a high-precision flag on the UProceduralMeshComponent that propagates into the scene proxy vertex buffers. :pray:

UVs are stored in TArrays of FVector2D variables.

FVector2D is a Struct of two floats.

single floats in Unreal are 32-bits

This is true. Unfortunately, on platforms that support them, the scene proxy for the UProceduralMeshComponent passes them in as half precision Float16 values, losing accuracy. This can’t be overridden without engine changes (or copying and customising the proxy used and overriding the CreateSceneProxy method of the UPMC).

1 Like