LOD transitions on skinned meshes: why does cross-fade look so bad and what are people actually doing

392 views 3 replies

been fighting this for a week and I can't find a good answer anywhere so throwing it to the forum.

static mesh LOD transitions are fine, Unity's cross-fade dither works, UE's dithered LOD works, whatever. but the moment you're talking about skinned meshes with skeletons, characters, creatures, anything animated, it all falls apart. the dither pattern is applied in screen space and doesn't account for vertex motion between frames, so on a running character you get this horrible shimmering artifact where the two LOD levels are fighting each other. looks worse than a hard pop in a lot of cases.

the options I've explored so far:

  • hard cut when off-screen: works okay for distant background characters, completely useless for anything the player might be watching
  • render both LODs for N frames: technically correct cross-fade but you're paying double skinning cost during transition, which is exactly when you can't afford it (lots of characters onscreen = lots of LOD transitions happening at once)
  • hand-authored LOD meshes that share topology at key silhouette points: reduces the pop noticeably but god it's a lot of manual work per character
  • just... not doing LOD on characters: obviously not viable past a certain scene density

I've heard people mention using SkinnedMeshRenderer.BakeMesh to snapshot a frame and blend to the new LOD from a static capture, which is interesting but feels janky and probably has its own artifacts.

UE seems to handle this slightly better out of the box but I can't tell if that's actual tech or if Epic just tunes the transition distances so it's less noticeable.

what are people actually shipping with? is there a pattern here I'm completely missing or is everyone just quietly eating the pop and hoping players don't notice?

One thing that helped on a project I worked on: instead of cross-fading between separate LOD meshes, we baked the LOD behavior into the rig itself. Higher LOD levels progressively disabled bone chains and used blend shapes to maintain silhouette volume. The transitions become invisible because you're not swapping geometry at all, just simplifying the deformation over distance.

The catch is it only works if the character is authored with this in mind from the start. Retrofitting it onto an existing rig is painful. But for new characters it's worth it if you're shipping on a platform where LOD pop is genuinely unacceptable.

Replying to OnyxMist: One thing that helped on a project I worked on: instead of cross-fading between ...

Interesting approach. Did you run into issues with skinning weights when the disabled bones snap back to their parent? We tried something similar and had real problems around shoulders and wrists, areas where the mesh was weighted heavily to bones that would just pop when disabled, because the deformation contribution dropped to zero instantly rather than gracefully redistributing.

Ended up needing a cleanup pass to redistribute problem weights to always-active bones before the LOD cutoff point, which was doable but added non-trivial work per character. Curious whether you hit that or whether your rig topology was forgiving enough to avoid it.

Replying to ApexWing: Interesting approach. Did you run into issues with skinning weights when the dis...

the shoulder/wrist snapping thing is exactly why we gave up on hard bone disabling. what ended up working was a progressive blend toward parent transform instead of a binary off switch, so at LOD2 that shoulder bone is maybe 70% its own pose and 30% parent, at LOD3 it's 95% parent, by LOD4 it's basically just following the parent with a tiny bit of lag removed. no hard cutoff, no frame where it snaps.

still had to tweak the blend percentages per-character and the wrists needed different curves than the shoulders, but the snapping problem went away completely. the downside is it's a custom bone blending step in the update loop so there's a small overhead, but it's negligible compared to the skinning cost anyway.

Moonjump
Forum Search Shader Sandbox
Sign In Register