What is the most optimized method for instancing objects in Blender 3.0?

My project requires:

  • Thousands of copies of 15 basic objects with 25 triangles on average.
  • Possibly all rendered simultaneously.
  • LODs are a consideration if they work in Blender renders.
  • Hundreds of other more complex objects, both single instances and with linked mesh data.

I have looked into:

  • Object Instancing.
  • Collection Instancing.
  • Group Instancing.
  • Array Modifier.

Is there anything else that would help a lot?
What method handles the most triangles / draw calls?

Thank you for your time and may your day today be a very good one.

Using the “Duplicate Linked” feature (Alt +D for duplicate) will drastically reduce the RAM memory usage.
In the viewport all will run smooth, I worked in a house model months ago and all bricks from all walls were duplicated with Alt + D and this help me a lot.

One thing you can search if you need more performance is minimun UV in your models, like making only one material, and all details in the texture. Trying reduce also the numbers of UV shells.

I hope this information help.


If you have objects with only 25 triangles each but there are thousands of them, then the number of objects is going to be a larger problem than the number of polygons. So I would suggest reducing the number of these objects, possibly by joining them. An other alternative you might be interested in, if it matches your scene’s needs, is particle systems. Yes, particles actually do use instances and you can deactivate their viewport visibility, but still have them at render.

Then, something else to verify if you are using object instancing: make sure any object that is instanced has no modifier on it, or else the performance benefit is cancelled and each object will be calculated separately.


That is very interesting. How far can we take it?
The model I am working with is a timber pallet, from super high poly PBR, to preferably just a scaled cube with fake 3D in the distance.
The pallets will be stacked, so it’s tempting to have one huge cube with tiny tiled textures.

The PBR version will be close to this:

And the low poly is currently like this:

Since writing this post, I’ve been Alt + D everything possible and trying out collection instances, parenting to main objects to move everything around in one go and so forth.
You are spot on about linked duplicates!
Thank you for sharing that method. Search engines now have one more valuable resource in their archives.

Now that is something worth looking into!
Two quick lazy questions:
How precise are the particle systems?
Is it possible to spawn the particles like a grid and have them not move around?

This might be very interesting for these animations where a block type world builds up over time, if it’s possible.

I will definitely look into that, or remodel the entire thing vertex by vertex. It’s easy to set it up with a script for very simple objects.

In general … think like a programmer or game developer. The more stuff, the more memory and CPU consumption.

Only for reference I am showing here one special technique. I wanted create a carpet hair by hair to be seen a distance like 1,5 meters from camera and I wanted in real-time in Eevee. But my computer not have the power to handle thousands of carpet hair. Then I replicate the technique from old games and I created levels of simple planes with textures organized pixel by pixel in the right place. And I like the result.
See here:

I hope this help inspire you create new workflows. :+1:

1 Like

The particle system does have a setting for grids, but it sounds like you need more precision than it can give (the grid setting always gives a grid with the same amount of particles in every axis, which could be a problem in you case). Still, here are some steps if you are curious:

1-Create a cube that will be filled with the instanced objects and give it a particle system.

2-Make the “frame start” and “end” both be at frame 1 so the particles are all present from the
beginning of the animation, give them a lifetime of 9999 so they don’t disappear.

3-In the particle settings, go to the “physics” tab and set the type to “none”, so they don’t fall

4-In the particle settings, go to: emission → source → distribution and set that to “grid”. There is also a setting for the grid’s resolution.

5-In the same tab, set “emit from” to “volume” if you want the grid to be filled solid.

6-In the particle’s “render” tab, set the type to “object” and pick the object you want to instance. Then, deactivate “show emitter”, so the emitter cube doesn’t render.

  1. don’t use array modifier
  2. take a look/search at ‘dupli Faces/verts’ for instancing in an array-Style.
    with this you can instance objects on faces or vertices of a grid
1 Like

Can I then place the vertices wherever I want and simply instance objects to where they are?

What is the exact method used for this? So far I’m getting good results with Alt + D and geometry nodes. Both methods are a bit limited or time consuming for irregular placements though.

This looks quite stunning tbh. Could have fooled me it was a texture from a carpet photo. I will set this aside for a while and come back and see what can be done with timber materials.

I prefer duplifaces, there you can scale or rotate the face and the instance will follow.
You parent the object i.e. to a grid, in the object-settings of the grid you find the instancing settings.

I’ve had too many cases where using duplifaces or dupliverts gave random undesired rotation of the object when I tried to move one of the parent faces or verts. Reproducing dupliverts via geometry nodes is much more stable and you can use the nodes for scaling or rotating instances to have more control if needed.

Geometry nodes also offers the ability to swap out the object being instanced based on distance from camera. I have no idea how to do it but over in the geometry nodes thread I’ve seen it done.

I once made stadium seating using alt+d and then again using collection instances. Viewport performance with collection instances was significantly better.

I ran a test yesterday and used a single face and then instanced it a few thousand times with geometry nodes. While thousands of objects all instanced only 4 vertices, the viewport performance was not so great. I would assume it being caused by all this real time math going on.

My project is likely to end up in FreeCAD since it’s mechanical engineering design.
Otherwise, it seems that the best method is extreme low poly meshes, using Alt + D and then manually place everything where it should be.

Or better yet, run a script using a for loop through all the linked duplicates in a specific collection and adjust scale, location and rotation picking values from an array of equal length to the number of objects.
The rotation is necessary when working with a single face to ensure the normals all face outwards.

The array can be setup in a spreadsheet with all calculations ready, appending some strings and then just copy paste all the rows from that sheet into the script.

collection instance and then manually place everything is what I was talking about

That is indeed a good method.
I marked your reply as solution for anyone coming here in the future.
All of the replies can be seen as solutions and your short reply pretty much consolidates it neatly.
Thank you for that.