Mesh Combine Studio 2 is an automatic cell based mesh combiner which can significantly to dramatically improve the performance of your game. It can be used on any type of game for any platform.
We use MCS technology in our game D.R.O.N.E. for our modular Arena Editor and without it we would only get 1 fps.
Instead of manually combining meshes, which is very tedious, MCS will do this automatically for you and the performance improvements it gives cannot be achieved with manual combining. Just simple drag and drop a MCS prefab in your Scene and tweak some values to your specific needs and you are ready to go.
MCS can give up to +20x better performance compared to Unity’s static batching. The smaller the to combining meshes are the more performance improvement it gives. It works great on systems that use modular meshes as well as static objects like buildings, props, rocks, etc.
Not only are the draw calls greatly reduced, but since MCS combines meshes into cells, it dramatically improves culling performance as well. Less objects need to be culled and z-sorted. On top of that MCS supports LOD meshes and the LOD Group components are replaced by a more performant octree based LOD switch system, which gives less LOD popping artifacts as a bonu s.
Supports all platforms (PC, Mac, Linux, Android, IOS, WebGL, etc).
Supports all mesh formats that Unity supports (.fbx, .obj, .dea, 3ds, .skp, etc).
Easy to use, simple and self explaining Inspector with tool-tips.
Advanced and performant multi-threaded combine job manager with low memory overhead and GC friendly.
Cell based mesh combining, which is optimal for culling, z-sorting and LOD switching.
Can be used as a faster alternative to Unity’s static batching and can give significant to drastic performance improvements.
Fully automated combining like Unity’s static batching (but with more options), no tedious manually combining and get results in a few clicks.
No vertex or triangle increase compared to original meshes.
Remove triangles and vertices that are under any surface (terrain and/or meshes). E.g. for rocks this can reduce +35% of the geometry.
Remove overlapping geometry with its extension MCS Caves and Overhangs, which can reduce 60-75% of the geometry together with below terrain removal.
Remove backface culling triangles and vertices on the background geometry (where the camera can never go). This can reduce +50% of the geometry by itself and +80% with the inside and below terrain removal.
Original GameObjects components keep working, e.g. scripts, colliders, etc.
Automatically switches between rendering combined or original GameObjects and can be easily reverted.
Combine in Editor and/or Runtime.
Combine dynamic meshes (Multiple meshes for one moving part can be combined into one mesh).
Automatic LOD compatibility. LODs are switched per cell which give better performance and less LOD popping.
Extensive lightmapping support for realtime and baked GI (copying of baked GI without the need for rebaking).
Supports negative scaling and double shadows.
Runtime console to test and find the fastest combining settings (a build is the way to test true performance gains, which are higher than in Unity Editor).
Multiple MCS prefabs can be used for different settings, e.g. different cell sizes, removal of geometry, etc.
Extensive search conditions which GameObjects with meshes to include. The right filtering can increase the performance boost and save memory.
Interesting!. Is there run time API to let us supply our own list of game objects to be combined? Does it come with source code so that if not, we can add one? The reason why I would like to supply our own list is that I can’t use the tags, or layers and don’t really want to force using naming convention.
I would like to see something like : Combine (GameObject[ ] objectsToCombine)
Also I wonder how quick is the process would be … cause I am going to use it for runtime. And if it can take a bit of time, then I wonder if there will be some async operation options or at least have coroutined version of the combine method. (only for runtime)
Can you add and subtract gameobjects on the fly and rerun the combiner?
In the next update this will be possible, also I will document the API for it.
Does it handle the 65k very limited gracefully?
Yes it does, if a cell goes over limit it creates multiple combined meshes.
Does it destroy the original gameobjects when it does the combiner and keep their uncombined collider active?
Yes this option is in the runtime combining, in the Editor you’d like to keep the original GameObjects…
Can you specify to combine colliders also(optionally)?
Yes you can choose to add Mesh colliders to the combined meshes. Although using original colliders are faster if they are primitive colliders.
Do I have to add objects to the combiner manually, or by tag or layer?
Based on a parent (will add the option for multiple parents in the next update), and then filter options like bounds, layer, tag and name (e.g. stones, would filter for anything with the word ‘stones’ in it).
How does this compare to mesh Baker?
It’s an automatic cell based combining as replacement for Unity’s static batching, while as far as I know Mesh Baker is a manual combiner. MCS you can combine meshes manual as well. What makes MCS it stand out is the cell based combining and it supports LODs. If your Objects have different LOD level of meshes, MCS will combine each LOD separately and it uses octree cell based LOD switching, which is super efficient on culling.
In the Editor you can rebake the combined meshes. For runtime combining I will look into copying the lightmapping from the original to the combined meshes.
Yes it’s possible. I will document this API in the next update which I will do within a few days, as I’m still working on it. Yes it comes with the source code.
Yes I will add this feature to do the combining itself on another thread and even multiple threads. I’m working on porting this from Drone and also with the job system to only assign a selectable amount of combined meshes per frame. Combining on another thread is only partly possible as the assigning of a new mesh needs to be done on the main thread since it’s Unity’s API (which so far doesn’t support multi-threading).
Yes it can especially if there’s many small meshes MCS can make a big difference. Also on LODGroup meshes it makes a big difference to do the LOD switching cell based.
Another vote for texture atlas to reduce drawcalls further. And I’ll purchase this asset today. After world composer and terrain composer it’s hard not to buy this author’s works.
@eagle555 can you please create a small showcase video for Mesh Combine Studio, showing it’s features, this will help everyone to understand Mesh Combine Studio capabilities.
It’s all about performance difference with Unity’s static batching v.s. MCS cell based batching. Optimal cellsize depends a lot on the scale of your world, it’s a balance between draw calls and culling. There’s a sweet spot for cellsize, but this is different for different world scales/projects, it’s a matter of trying out and checking which cellsize gives the best performance. For bigger scaled worlds you probably need a bigger cell size can test in a range of 16 - 128 (16 - 32 - 64 - 128).