The "Import Vertex Colors" feature in mesh paint mode only works if the instance had vertex color overrides enabled.
This is especially problematic for Nanite meshes since usually you can't add actual vertex colors to the mesh.
The only known workaround is:
The code responsible for transferring the vertex colors (UMeshPaintModeSubsystem::ImportMeshPaintTextureFromVertexColors) only considers per instance vertex colors, but can be modified as follows to check for the Nanite proxy to return the colors if possible:
//#BFG_CHANGE Begin NANITE_VERTEX_COLORFIX
const FColorVertexBuffer* BaseColorBuffer = nullptr;
if (StaticMesh->GetRenderData()->LODResources.IsValidIndex(LodIndex))
{
const FStaticMeshLODResources& LODModel = StaticMesh->GetRenderData()->LODResources[LodIndex];
BaseColorBuffer = &LODModel.VertexBuffers.ColorVertexBuffer;
}
UE::Geometry::FStaticMeshLODResourcesToDynamicMesh::ConversionOptions ConversionOptions;
ConversionOptions.bWantTangents = false;
ConversionOptions.bWantMaterialIDs = false;
UE::Geometry::FDynamicMesh3 DynamicMesh;
UE::Geometry::FStaticMeshLODResourcesToDynamicMesh Converter;
Converter.Convert(
&StaticMesh->GetRenderData()->LODResources[LodIndex],
ConversionOptions,
DynamicMesh,
bHasPerInstanceVertexColors || (BaseColorBuffer != nullptr),
[bHasPerInstanceVertexColors,InstanceMeshLODInfo, BaseColorBuffer](int32 Index)
{
if ( bHasPerInstanceVertexColors )
{
return InstanceMeshLODInfo->OverrideVertexColors->VertexColor(Index);
}
// fallback to the base vertex buffer
if ( BaseColorBuffer )
{
return BaseColorBuffer->VertexColor( Index );
}
return FColor::White;
});
//#BFG_CHANGE End
Workaround:
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-391452 in the post.
| 0 |
| Component | UE - Editor |
|---|---|
| Affects Versions | 5.7, 5.8 |
| Created | Aug 11, 2026 |
|---|---|
| Updated | Aug 17, 2026 |