Roughly each city block can be merged (or cut) into one mesh, with LOD's for each. If you do it on a per-building basis, you could essentially re-use buildings (which will reduce draw-calls city-wide if it's used more than once, and shown in the same LOD phase as others - different levels of LOD's won't batch together like identical ones will). This will however be less-optimal to create a direct port or a city that does NOT repeat stuff. I try not to repeat too much in mine, but make use of like-model-like-LOD batching where I can. Roads/streets/terrain. Honestly, it may be best to keep this in large (several blocks by several blocks) chunks because it's mostly the same texture here. You want to have as much connected concrete and asphalt as possible. It's possible to copy and paste UV data in most modeling software, do this for roofs and other buildings where-possible (common doors, roofs, if used more than once in a model, it will batch VS be a new draw call). Draw calls are best kept light, obviously, so if you have 'empty space' (inside buildings, under the map etc) not visible to the player, you can connect various parts of the building UV's (invisibly to the player) in the void-space inside the building with an extra poly-surface or two (or five). When the CPU does a draw call, in that time, the GPU can render THOUSANDS if not TENS OF THOUSANDS (or more!) triangles (everything is made of triangles, they're usually half or less of a four-or-more-sided surface unless it's a triangular surface). It doesn't matter if the draw call is to render 10,000 connected faces of concrete, or ONE connected face. It's still pulling the same amount of the budget. While you don't want too much copy-paste going on to where it's evident to the player, it can very well help draw calls. I use the void-space connected surfaces trick in some of my objects to save draw calls here or there (such as connecting window overlays, or connecting the brick walls elevator 'house' at the top of the building to the rest of the building's brick). Telephone poles, mail boxes, power wires, street striping and road/sidewalk textures can all be bulk-rendered like I mentioned. Mosaics can be useful on small objects where lower-resolution textures won't detract from immersion (small objects, mailboxes, interiors, garage doors & overhead housing for automatic garage doors, LOD's - even tree stumps can be mosaic. I even used a screenshot of my model in the editor as an LOD in more than one instance (this can really save you!) - that saved ten or even DOZENS of draw calls per-object when you have lots of complicated stuff. Do not overlook the usefulness of LOD mosaic textures, they will solve most of the performance issues related to draw calls in your map. Low enough resolution will enable you to not use too much more VRAM (Video card RAM), but keep an eye on your usage. Too much on the textures and you will lose folks due to high VRAM requirements. Going over 4gb (not likely here on an old game port!) would alienate lots of users. Mosaic textures only help if you connect all the UV's it uses (or at-least almost all of them). If you take in one thing today - know that disconnected UV faces and faces using a different texture both generate a new draw calls. You likely won't have normal / specular map textures in a game this old (as GTA3, not BeamNG!), but those also call additional draw calls when invoked. Strip textures off furthest LOD's. You may wish to assign a single texture to the model before deleting the UV's from the lowest LOD. This is very drastic and is last-case resort ONLY, but for smaller objects that you still want visible, or land-mark buildings across the map, this can work. Usually a billboard texture (works for buildings, props like poles and trees, but NOT for roads/sidewalks!) will drop the render to about one draw call per building. This is where it can be handy to have buildings separate from one another. Billboard props don't look good from very high or low angles, but they really can save you. Use BB_Autobillboard_50 will invoke an object's game-engine produced (at run-time / map-load) billboard sprite when it fills 50 pixels or less on the screen. this is an empty class. Null rendering will make the object disappear at the set amount. Use Nulldetail12 to cause the game engine not to render this at 12 pixels of screen fill. For this and the above, set the numbers as desired, but it's useful for immersion not to go higher. The higher the number, the closer it is. Obviously a huge skyscraper at a block away might fill more than a tiny 1000 sq/ft house up close will. Highest detail levels get set around 600~800 or so for single-family or twin homes. Use ECA or Italy objects as your guide. For collision objects, avoid narrow long faces such as curbs, stairs, eves of roofs and so-forth. These will eat the car. Signs are a big culprit, too. For curb-faces, extend them down through the road level, sloping them a bit as curb-faces normally are in the process (obviously, not changing the visible model, but the collision model). While my curbing is normal height (6~8 inches) in the map, the collision for them extends down another foot or two, without breaking at the road surface, to enable wider triangles on it for proper collision, otherwise touching the curbing eats the tires/rips the car apart. This is also a very good reason to make stairs into ramps, and removing any unneeded vertices / face splits from your model. Use the collision debug in the BeamNG game to view how objects are broken up. This is especially useful if the floor / ground eats the car near pillars, poles, or anything else that breaks up a large surface. Triangulate collision meshes that prove problematic manually before finishing your object for the best result. Baking textures is something you could try, but with that comes extreme increase in space used on the user's drive, user's RAM and VRAM (models are stored in video ram too, to my best knowledge). You will have to test this out. This is exacerbated when lots of models share textures - it gets repeated in each model then. Weigh draw call impacts with baked model texture weight (in MB/GB size) and see what works best for you, for someone with an old computer, and for someone with a new computer. You can make a city that still runs 60FPS or close on a 3ghz first-generation i7 without too much trouble, if you don't exceed draw call limits or video RAM. I hope some of this is helpful!