Which one is more proper for level creation?

Working with modular assets mean using lots of smaller pieces to create a whole which easily could choke down the performance in many cases if the level is huge and performance-wise, I am wondering which way I should take for a more efficient work-flow for level creation.

Is it wise to create levels entirely in a 3D application like Max and import them as FBX or building all the level inside of Unreal engine? Of course both have pros and cones but I really wonder which route is more performance efficient.

I assume Unreal engine uses instancing when duplication objects -I don’t know if it is the case- and if it does, it means instancing gives much more performance than a simple importing whole level from outside 3d apps.

I really appreciate if anyone can shed some lights on this question.

UE4 automatically instances objects, so if you have an object from the content browser and you place 100 copies of it in your level then it only keeps one of it in memory instead of 100. The problem though is that each one will still count as a draw call which slows down performance. Instancing only benefits memory use, so in some cases if the object is low poly already it’s better to take the memory hit than it would be to have all of those draw calls. It ultimately depends on the situation. What some people have been trying to do for example is create a wall out of multiple static mesh planes, and that’s a bad approach because the mesh is very low poly and even having lots of unique wall sizes doesn’t take up much memory.
Also, in UE4 if you’re using static lighting, then you can get issues where you get seams across meshes due to how the lighting gets processed on each object, so if you construct a flat surface out of multiple meshes it might look bad.

Counterpoint: building too-large chunks of the level out of single meshes prevents proper occlusion culling, though, and when baking lighting can lead to extremely large lightmap sizes. Maybe this doesn’t matter so much for planar walls but if you have lots of detail elements like moulding, etc., then building an entire hallway as a single mesh will often involve drawing lots of triangles for areas that can’t even be seen, such as around corners, and poor shadowing due to the need to decrease lightmap resolution for the object.

Unfortunately it’s a game of guess-and-check; if you enjoy desinging in a modular fashion, it would probably behoove you to create actors which generate instanced static meshes, since this enables you to manipulate and duplicate static mesh pieces in-engine while still treating them as a single mesh (for example, placing wall lights using an array of transforms with widgets exposed to the editor, so one Lamp actor can contain any arbitrary number of placed lamp meshes). Then if the occlusion bounds get too large or the lightmap resolution gets too high you can create a second instance of that actor to continue working.