Thousands of transformed duplicates: Optimizing render time and memory usage

I have a bit of a unique setup here.
I’m populating a terrain with thousands (up to 10k actually sometimes) trees and more stuff. They are basically copies of one base mesh that I varied in width-scale (xy) and height-scale (z).

What I want to do is a) render envmaps and b) render specific snapshots of the terrain for me to preview.

Currently I’m duplicating the objects and giving them a different object location and scale. Render times and memory usage are through the roof (the entire process takes about 15-20 minutes and I use up all of my 8gb of memory).

In games I would “simply” use instancing to render these objects much much faster (and of course some other trickery).

I’m wondering what options I have here to optimize this in any way.

Thanks in advance!

You can use intances in Blender also. Either create them manually using Alt+D command or automatically create them as dupliobjects or particles. Search thr manual and forum for instancing and dupli.

So I tried a test scene with 5 susannes and the highest subsurf level.
One setup was with shift-d duplicates and the other one with alt-d. I monitored fps output and memory usage. No difference between both cases.
When I use dupli-faces I cannot scale one instance without scaling the other.
I don’t know how to use particles in a way that I can manually spawn each child and set its position, angles and scales.

you could use group instancing !
see video tut

happy bl

I tried the test scene with group instancing and managed to cut down memory usage by 66%.
Last question for me is if there is any way I can improve render times apart from the usual settings, due to the specific scene setup.

Something that may clear stuff up (as to why I started this question), there is somewhat of a difference between what “instancing” is and what blender (or rather its users, because the ui specifically refers to “group instances”) says it is:
I was initially hoping that something like this might be possible in blender somehow.

So I stumbled upon this, which seems to be what I was looking for:

But I have no idea how to set this up. Apparently this uses particles. But how is he achieving the controlled placement of the trees? And can I adapt this to make each tree have its own transformation matrix? (Not only location, but rotation and scale?)

group instancing has objects in other file and use 0 verts

which is not the same then instancing in the blender file itself

happy bl