Dynamically build one static mesh from multiple meshes

How can I dynamically build one single static mesh out of a number (thousands) of other static meshes?

For my project I have a procedurally generated object that is effectively a point cloud with several thousand points. This point cloud is built based on information stored in a DataTable.

I initially set this up by making an Point actor (representing one point in the point cloud using a simple three-sided pyramic static mesh), and a Point Cloud actor which looped through the data table, spawned a Point actor for each entry and attached them with the correct transform to the Point Cloud base component. This works in that it generates the correct looking point cloud, but when I try to change the transform of the Point Cloud actor (to zoom it or rotate it for example) my framerate goes from 120fps to 30fps. This makes sense I guess because it not only needs to apply the transform to the Point Cloud actor base component, but also to the thousands of Point actors that have been attached to it, and then send the updated transforms to the GPU.

To solve this I would need to convert the entire point cloud into one single actor with one single static mesh, instead of one base actor with thousands of point actors attached to it. I read about the Merge Actor tool (on here, in fact), and used that to convert my Point Cloud actor meshes to one single static mesh. Using this mesh I get no framerate drops, zooming or rotating the point cloud happens at a steady 120+ fps.

The problem here is that Merge Actor seems to be an entirely manual process. This means that every time the data in my DataTable changes, I also need to first build the mesh dynamically in the old Point Cloud method I described, then manually use Merge Actors to combine them into a single static mesh, then assign the newly generated static mesh to my Point Cloud actor and rebuild the project.

Is there some way to automate all these steps with blueprints? Can I somehow do Merge Actors through blueprints, or otherwise obtain the combined static mesh?

I wasn’t aware of Instanced Static Meshes. I’ve read up on them and it might be a solution, though I see they also have some disadvantages. I’ll need to look into them more to see if they’re suitable. Thanks for the tip though!

The best solution to this would be to use instancing, () has an excellent tutorial on this: