Nathaniel, I use streaming levels too, but for example the city has 1 * 1.5 Km and its very dense. Most buildings are placing using the foliage tool, but I expect to have almost 200 houses with interior and I don’t want to hide/unhide sectors of the city using stream levels. I want to have good views of the city…
, in my case the static meshes has some impact in the performance, for example 1000 houses (only the static mesh) with a maxdrawdistance of 50000, without collision, and the player very far of them, takes 0.4 ms in the cpu thread. If I have 200 dynamic houses with 100 static meshes each, I have 20000 static meshes, 1 ms…
The thing is worse yet, the houses also contains dynamic actors: kactors, lights, bots, pickable objetcts, usable items… and those have a big impact in the performance.
Also I did some tests time ago with the script for the foliage. I deactivated the function to remove the far grass meshes, and that meshes had maxdrawdistance, no collision, no shadows… So when the player was moving, more grass, without limit. Only the near grass was visible. But the performance was worse when increase the grass count. With 50000 meshes was very slow, and only about 1500 were visible. And the performance was checked with player without moving, so the script does nothing, no spawn new grass. The performance was only due the large number of static meshes with maxdrawdistance.
About the question from perhaps the problem is the maxdrawdistance. Asuming that the actor has no tick, no shadows, no collision, I think the engine is checking in every tick what actors are in range to display or hide. That can be the problem.
The actor hidden with maxdrawdistance is not equal that the actor with a sethidden(true).
I learn that with the foliage tool clusters. There are a very big improvement if you hide the far clusters with sethidden(true), instead leave this task to the maxdradistance.
Perhaps the actors with sethidden are placed in a different array, and the engine only check the maxdrawdistance of the sethidden(false) actors. Perhaps instead distributing the check along several ticks, the engine checks all in every tick. I don’t know.
You can make a simple function to test that, apply a setthiden(true) for every actor for the building actors and see if there are any difference with maxdrawdistance. And tell us the result.