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.
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.
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.
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: https://www.artstation.com/artwork/lxg1ya
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.
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.
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.