Duplicating instances of mesh in Unity vs in modelling application - which is more efficient?

I have a series of say lamp post, which all are the same. Is there a performance difference between importing a single mesh into Unity and then duplicating it in the scene, vs duplicating instances in my modelling application and then exporting a mesh with submeshes? In both cases the polygon and material count is the same, but is there any performance difference for say batching or something else?


It has both advantages and disadvantages these few are in my mind:


Fast workflow:

You only need to edit this one particular mesh in your 3D modeling program to apply changes on all other gameObjects with this mesh referenced.

Smaller Build size:

You import the object only once in your Assets Folder, therefore keeping the size of the build small, because of removed redundant polygons.


Scene Organisation:

It might get a little messy with all the duplicated GameObjects, so parent them in the hierarchy. Also the scene size gets bigger because of doubled gameObjects which have technically the same informations (but their transforms usually can differ)

Grapics Rendering

As per MeshRenderer the Drawcall gets higher, so use this carefully and check on static for static batching (combines not moving GameObjects into big Meshes, and renders them in a faster way).

All in all as SunnyCow pointed out I would prefer to give the advantages a try but it is up to your game and the targeting hardware restrictions. For example on mobile it is very important to keep the size as small as possible but also the amount of objects to render since rendering has a big impact to performance.

if (helpedYou || helpedSomebody)
    return true;

in the first method, Unity only load one Mesh and use it in two GameObject. In the second method, it’s actually two individual Mesh for Unity. So I prefer the first one

Import a single lamp and duplicate it inside the Unity scene. The mesh and materials will automatically be shared, and batched if you have static batching turned on.

If all the meshes are in a single file, Unity can’t batch them as it doesn’t know that they are all exactly the same, as that would require it to process every object inside the model file and then compare them against all the other objects inside the same file to see if any of them are the same.

Even if they were all in a single model file, you won’t save on draw-calls unless they are all part of the same mesh inside the modelling program, however the individual lamps won’t be occlusion culled, meaning they will all have to be drawn if any part of the multi-lamp mesh is visible. Draw calls are expensive, but so is rendering tens of thousands of polygons you can’t see.