Hello there, I’m working on a multiplayer game project where many, many objects will be interactable in the scene and some of them placed procedurally in the contruction script.
When we add a Static Mesh in the scene, we have the opportunity to convert it to a Blueprint-based Class Actor.
My question is the following - is it reallistically possible to change most of the actors in a scene from a Static Mesh to a Blueprint Class Actor instead? What are the drawbacks in terms of performance, culling and instancing?
Well, anytime you want to have more than 1 of the same interactable thing in the level, it should be a blueprint. Performance can only drop by by converting all of your meshes to actors. Actors can easily be instanced, I like to think of myself as someone who knows a lot about instances, and they are fantastic. I’m really not sure about culling with actors, but it should be doable. Why would you want to convert these to actors anyways?
I toyed with using data actor blueprints at one point. From my testing it depends on the memory load of all of the blueprints you are spawning. I could have hundreds of thousands of (un-rendered) blueprints in a scene, but at some point the engine starts stuttering from what appeared to be a memory related issue. If each blueprint were 10-20MB in size, then I could have significantly less blueprints than if they were each less than 1MB.
I did not experience any performance issues other than the memory thing.
Realistically, most projects will not run into the issue that I saw. Imagine your worst case scenario for actors in a scene along with the amount of data that those blueprints might contain, multiply it by 10, then spawn that many blueprints in your level and see how it goes.
To explain in a little more details the problem I’m facing is, let’s say, I want to create a semi-procedural supermarket. I have the building itself as a blueprint and inside I’ll spawn randomly several dozen of supermarket shelves. On each of those shelve I’ll spawn many products, each being interactible.
Now, I understand that when this construction script runs it’s gonna take some time - but I have no idea what kind of performances I can expect at runtime…