In Shipping build only the lowest LOD

Hi everyone!
We’ve encountered a strange problem: in the shipping builds of our game, every skeletal mesh is displayed with the lowest LOD. It doesn’t apply to static meshes - those are ok. But the skeletal ones appear as the most deformed, and detail-poor, lowest LODs.

We tried everything: overriding draw/view distance so that it’s always “far”, manually setting screen percentage for specific LOD levels, disabling mesh deformer, disabling auto benchmark in video settings, but the result is always the same. The lowest LODs.

Until recently, it appeared only on the weakest PCs (we test the game on RTX 1050). But then, when I switched from 3060 Ti (it worked fine on it) to (5060 Ti), the problem appears every time. Even though it’s strange considering the fact that 5060 Ti should be more powerful and have more resources than 3060 Ti.

If we want to get rid of this annoying bug, we have to discard all LODs, and use only the most detailed one - which has an impact on performance if there’s more detailed characters around the player.

Also, what’s strange is that in the editor everything looks fine. LODs are displayed correctly. But in the shipping builds, wham! the lowest LODs.

Nanite-ing those skeletal meshes could work (and it worked when we tested it), but Nanite on skeletal meshes kill the morphs, so the characters cease blinking, smiling, and showing any emotions whatsoever.

We’ve also tried forcing a given actor to display a specific LOD via blueprint (using tick and code that measures actor’s distance from the player and changing LOD accordingly), but the game ignores these prompts to change LOD.

I wonder if anyone has encountered a similar problem/bug and found a way to solve it.

Kind regards,
Martin

Hello there @PIXEL_THUNDER !

Following your summary, you do have tried almost everything with the LOD conflicts in your build. Please try the following, if it has been already tested:

  • Set all your skeletal meshes to use only LOD 0 and LOD 1
  • Remove LOD 2 and higher entirely from all problematic meshes
  • This should result in better quality than forced LODs, while keeping some control over scaling

Also, since this is mostly happening with specific setups/GPUs, you can try forcing specific rendering/streaming values, try adding the following to your DefaultEngine.ini:

[/Script/Engine.RendererSettings]
r.Streaming.PoolSize=2000
r.Streaming.MaxEffectiveScreenSize=0