Request for suggested alternatives to overlay materials for nanite objects, to avoid using the fallback mesh

Hi, there are a few different ways to set something like this up -- including the Overlay approach you’ve already tried. The complicating factor is the translucency, since Nanite isn’t compatible with translucent materials. Masked materials can be used on Nanite meshes, but they’re not as efficient as opaque materials.

If you’re open to changing your highlight to be masked/dithered or opaque instead, you could try:

  • Hot-swap between the regular material and a separate highlight material. This may or may not load quickly enough, though.
  • Create a Material Function with the highlight nodes, then implement it into the various regular materials. Use a material parameter to lerp between the asset being highlighted and not highlighted.
    • Variation: Have two versions of the regular material, one with the Material Function and a regular one without. Use the Material Function version on LOD0 and the regular version on LOD1+; Or, only use the Material Function version on assets within range of potentially being highlighted. This way, further-away assets would look the same but wouldn’t have the more complex material applied at all times.

However, you’d probably need a different approach if translucency is a must. Some ideas:

  • Use a more distinct Fresnel or some other sort of edge effect in the Overlay material, so that the difference in the mesh shape is easier to overlook or seems intentional/authored.
  • Obscure the pop in the fallback mesh transition with some material or particle VFX.
  • Swap to a different mesh with highlight applied as the primary material. Even if it’s not an exact match to the Nanite mesh, you may be able to author a version that matches the shape of the Nanite mesh more closely, or focuses the detail of the mesh in a way that reduces the visual pop more effectively than the fallback mesh.

The specific needs of your game and the visual priorities will shape which approach works best for your use case. I hope this helps.