Mesh Paint Textures appear Different in Paint Mode

We noticed recently that mesh paint textures appear differently in Paint mode than they do in Select mode or in game. After some investigation my rendering department informed me: “the Select mode is drawing with the texture as would be seen in game that’s compressed using Oodle’s encoding to BC7. The paint mode has the live texture on the GPU and so uses an Unreal compute shader to encode into BC7”

The effect can be quite noticeable with lower resolution mesh paint textures and makes it difficult to know what the final result will look like. Is there anything we can do to fix or mitigate the issue?

[Attachment Removed]

Steps to Reproduce

  1. Create and open a new First Person project
  2. Select a nanite static mesh actor in the level
  3. Override its mesh paint resolution to be 128
  4. Go into Mesh Paint Mode and Add mesh paint to the actor
  5. Set the Color View Mode to RGB Channels
  6. Paint on the mesh
  7. Swap back and forth between Select and Paint mode
    [Attachment Removed]

Your rendering department is correct. The better quality version of the texture requires a slow CPU compression pass which is too expensive to run when painting.

A common workaround is to increase the resolution of mesh paint textures where this is a problem.

You can also choose to use non BC compressed textures for mesh painting, but that has memory and shader sampling overheads.

Best regards,

Jeremy

[Attachment Removed]