How is a level built from 3d tiles best built/optimized?

A few years ago I built a 3d voxel engine proof of concept akin to minecraft that generated a large mesh (a chunk) by iterating over 3d voxel data (dirt, grass, etc) and creating a vertex/UV list to build the mesh from. This happened on a seperate thread for speed. With cubes, this process is simple, however I want to make a top down game with more complex 3d tiles. I often wondered if I even needed to combine them into a single mesh or if I could leave them as separate meshes under one gameobject with multiple renderers.

Here is an example of something similar to the levels I want to build (from the game Starmancer):

Here’s my main question:

Is it necessary to combine the individual tile meshes (a wall tile, a floor tile, etc) into a single mesh (or series of larger mesh “chunks”)? Why or why not?

I don’t want to prematurely optimize and make my level system more complex than need be. Tiles will be getting changed throughout gameplay so the geometry is not static throughout the game. Advice or examples of how this can be done would also help!

This kind of thing always depends on your specific game. There is no rule for what to optimise and when. The general advice you hear on optimisation is to not waste time optimising things that aren’t causing you performance issues. I would suggest you make some test examples with lots of separate tile meshes, and use the profiler to see what effect it has on performance. If you have issues, then you can think about options for optimisation such as combining the meshes.