Static Mesh vs. Foliage Painter vs. Blueprint Actor


If we place a ton of meshes i.e 100 meshes using either of these methods:

A) Individual Static Meshes
B) Foliage Painter
C) Load all the 100 Meshes in a single BP Actor and place that in a level

Which method is going to give better performance?


Foliage painter(provided, that you mean 100 instances of the same mesh).

Thanks for the answer. May I ask how much difference we’re talking about?

Also another question, is there a difference between placing 100 meshes as 100 BP actors in a level vs. placing a single BP actor containing 100 meshes?

Are you referring to just a regular BP of the Actor/Static Mesh class? To my knowledge, there is no benefit in terms of performance. Each mesh is still treated individually in terms of shadows, LODs, mesh draw calls, occlusion culling, etc. However, within a BP, you can place your meshes as Hierarchical Instanced Static Meshes that treats them similar to foliage(1 mesh drawcall, individual shadows and LODs). Native Unreal doesn’t cull the foliage HISMs that well though(per landscape component chunk, which can be wasteful) so I want to say it’ll be a little better as a BP HISM.

You can use a BP using instancestaticmeshes which batches draw calls and could add controls as such how your objects spawn. Foliage tool is also fine but can act funky sometimes. You can also combine both methods for e.g. using BP to quickly scatter bigger or important objects and foliage tool for more generic scatter. Using BP you will have slight extra room to control things.

If it is static mesh components in question, there will be no measurable difference.

However, if instanced static mesh is in question, single blueprint with 100 instances of instanced static meshes would be faster than 100 blueprints with 1 instance of instanced static mesh.

I don’t know the exactly code of the FoliageType,but when I used Nsight to analysis It seemly to be a dynamic instanced mesh which means they calculate the instanced group each frame.The closed meshes each in a single draw,distant meshes grouped together as one or few instance.And they do support frustum culling but occlusion culling not work.And anybody know that why Hierarchicial instanced mesh don’t calculate LOD each unless the TAADither is on?