Moving thousands of Static Meshes

I have a space ship consisting of 1000 static meshes in a BP. Because they become physical as soon as hit, I don’t see a way around have that many meshes. Chaos doesn’t give me enough control over the separate pieces. When moving, the performance drops by 5-10 ms per BP/ship - even without physics and overlap generation.

The best solution I’ve found so far is: “Faking” the movement via World Position Offset in the material (btw: Does this have crucial downsides in comparison to Set Actor Location in a BP?).

What I tried:

  • creating a C++ Actor: no real performance difference
  • 0.25 sec. Tick: very abrupt movements
  • different methods of changing Location in BP: nothing noticeable.

Other ideas I have:

  • changing every other Actor Location to create the illusion of movement (doesn’t work with more than 2 ships).
  • static mesh merge in UE4
  • Niagara?

Interesting is: About half of the performance loss comes from “Draw”, even if the camera doesn’t see the Actor. If I make the BP invisible, I can move around without any performance loss. Can somebody explain this to me?

I’m glad for more ideas.

Do they all need to be separate pieces all the time?

Reason I’m asking, is you could have a ‘fake’ ship all the time except when they need to actually come apart. The fake ship only having a few meshes ( or just one ), and a single collision.

I forgot to mention: Those pieces can break away, so replacing them by one “fake” mesh seems impossible - I thought about that too. If it’d be possible to merge those static meshes in real time, like it was in UE4, it might be possible to merge them once in a while. But probably that’s horrible performancewise too.

1 Like