Level optimisation advice request

Hey guys!
I’m a 3d arstist, recently joined work on 3rd person action game which is partially done. I’m working with UE for around a three months so it might be a nooby queastion, but still… I stuck at one thing I need help of more experienced guys. And this is a level optimisation.

Short preamble:

What we have now - few standard square medieval style maps around 400m long. Bunch of foliage placed using foliage tools, one shadow casting light, static meshes placed as static mesh actors. Totally around 4-8k SM actors on the map.
First of all i’ve started making LOD models for everything expensive and tweak foliage render distance - performance boost was quite noticable. Cool.

Then I read about instanced and hierarchical static mesh actors. For a test I’ve placed everything at one level as HISMAs, got draw calls drop from 5k to around 800, fps on my PC from 40 to 60 average. Twice as cool! Lets use the same on the other maps I thought.

So it worked great on one level, worked great one second, but on third I got negative result - drop from 55fps (5k draw calls average) to 45fps (1,5k draw calls average). I’ve tryed to use HLOD system and like how it looks ingame, but still got same negative result. Combination of both HLOD+HISMA workflows got me same performance drop.

As I understood there should be “base pass” time reduction, but there is not. That’s a bit weird when 5k draw calls work faster then 1,5k. Or there is ambiguous desigion - less drawcalls with big mesh/textures versus higher drawcalls number with small meshes and textures.

So here is two things I ask for info:

  1. Why converting SM to ISM/HISM can give you a fps drop? We don’t have a tech artist or render engineer to make magic with scripts yet, so I’m trying to understang ideal workflow to achieve the best level performance I can. I will be glad for any advices or tips what else to check. I cannot provide map or detailed level screenshots, but statisctics and profiler logs are available.

  2. Is there is any point to instance every asset if it appears more than ones per level?

Which works faster - staircase where every step is the same instanced plank or staircase where all planks combined into one mesh?

Saying shorter - what is the ideal way to use instanced static mesh actors and HLOD system? What should be instanced, what not, what kind of actors’d be better to leave as it is etc.

If there is a manuals/articles about AAA game level optimisation you can share - that would be great.

Thanks in advance.