As I read somewhere on the Blender home page, that Blender 2.5 could optimise rendering where objects were duplicated. I wanted to see this effect myself, and at the same time see of what kind of object duplication it would work.

A quick way to make Blender use a lot of memory and work hard rendering is via reflections, so I made a simple high box with 3x3 faces on each side, added a UV-sphere on top (6 rings, 6 divisions), and then put a level 4 subdivision modifier on it. I used mirror (0.8) surface and pushed the number of reflections to 6.

I used a 50x50 vertex plane as ground with a cloud texture as a displacement map, where I wanted the box placed at each vertex to get some variation of the height. The method this was done was my different test-scenarios.

Test 1 Parent-Child where child object is displayed for each of parent's 2500 vertexes. I expected this should optimise the render. Memory usage: 490MB
Render time: 07:06.07
Test 2 Particle-system where object is placed on each vertex (2500) on emitter object. I thought this might optimise rendering too. Memory usage: 491MB
Render time: 07:16.69
Test 3 2500 objetcs use the same mesh ("make objects real" on the boxes from test 2). I did not expect rendering to be optimised here. Memory usage: 36025MB
Render time: 07:51:19.24 (*1)
Test 4 2500 objetcs with its own mesh (each object from test 3 made single-user). Render can not be optimised. Memory usage: 36135MB
Render time: 08:15:37.86 (*1)

Note: For test 3 and 4, most of the time used was disk IO for swap. My computer has only 16GB of memory and have to put the rest on swap space.

I may have gone a bit over the top with complexity for this test, and since I hit the memory wall quite fast, this test did not in fact say anything about render time, but it does say quite a bit about memory optimisation for duplicated objects.

As a conclusion, I've found that to minimise memory usage when rendering the same object multiple times, you can use either a particle system, or, for a bit more control, use a parent object with one vertex on each point you want the child object to be.


Add new comment