Hi team
I have searched for a definitive answer on this across various forums (including this one) and have never really found an answer that is definitive and certain. There appears to be a lot of internet opinion, but I would love to see if there is a professional unreal level designer or developer that might be able to answer this.
I was wondering if there is any measurable performance difference between having a level full of static meshes and a level with blueprint actors with just a static mesh in them. I have a 400x400 meter dungeon that is fully modular with tiles and in the interest of creating “prefabs” for the assets, I would like to make all the tiles blueprint actors but there will be over 10,000 of these tiles in the level.
Outside of normal performance considerations and optimization, is there any difference in using a blueprint actor with just a static mesh in to over using a static mesh.
I believe they are all “actors” in the end, but does the engine compile them down to the same thing if there is no logic in the blueprint when packaged.
Looking forward to hearing from anyone that knows for certain whether this makes and measurable difference in performance at all.
NOTE: The game is PC and not mobile and targeting mid-range hardware and higher.
Theoretically, just static meshes is better than blueprint actors, because there is less overhead. And then instances of those meshes is better again.
Having said that, the best thing you can do is test.
Write a short script to procedurally fill your level with an example structure made from meshes. Then do it again with blueprints. You can place quite a ridiculous amount, 10,000 or so.
Do you see a performance hit? If not, then why worry?
Things don’t always work out the way you assume they will. I had a maze made out of fairly complex hedge meshes and pillars. I went to the trouble of instancing everything and performance was ok.
But, then I built the level again, using blueprints for objects, and it was MUCH BETTER.
I really appreicate you taking the time to answer @ClockworkOcean
It seems a definitive answer is going to be hard to get without lots of testing.
So very intereresting you found blueprint actors was faster in your maze.
Were these blueprints just a “static mesh container”?
I have read many places all sorts of responses, some saying there is no material difference between the two and some that say using static mesh blueprints is slower.
I was hoping that there would be a clear cut answer such as “they are the same thing once the game is packaged” without having to run through multiple tests to prove the point one way or the other to myself LOL… a bit of wishful thinking on my behalf.
I really appreciate you taking the time to respond.
It was my understanding that static meshes are automatically instanced to reduce draw calls, whereas Blueprints are not.
When I tested it using, there was noticeable performance differences between instancing static meshes vs blueprint “containers”. Whereas the blueprint versions could not be instanced.
@jeffmeyer3d , thanks for adding your thoughts. That is a pain if true, could be why in general there doesn’t seem to be much performance difference but with tens of thousands of “modular” meshes, it would probably be a larger issue.
I wonder if 5.0-5.2 has changed that as you mentioned.
When I get home from my day job today I might look at putting together a test as @ClockworkOcean suggested.
I am using 5.2 so it could be “hopefully” static mesh blueprint actors are instanced now.
Ok so I have found something interesting, looks like 5.0 had a nice feature slipped in for instancing blueprints.
Have a look at the following YouTube video to see how it works.
This could be exactly what I am hoping for, in the cases where I have 1,000’s of tiles that are blueprint actors I could use this, and all individual unique blueprint actors could just be added as normal.
This could be a game changer for me!
Hope it might help everyone else on this thread as well.