[RELEASED] Mesh Combine Studio 2 (Boost Performance)

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.

Get Mesh Combine Studio 2 at the Asset Store

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.

Documention

Demos:
Here is a demo build of an example Scene from a popular modular Asset called Dungeon Architect. MCS boosts performance about 2170%! (from 37 to 805 fps) on my Nvidia 980TI compared to Unity’s batching:
https://www.dropbox.com/s/0y0zgnbolbytpbt/MeshCombineStudioTest.rar?dl=0

Features:

  • Supports >Unity 5.1, 2017.x, 2018.x and 2019.x .
  • 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.
  • Source code included.
  • Runtime API.

6 Likes

This looks great. I have a couple of questions mostly about runtime support.
Can you add and subtract gameobjects on the fly and rerun the combiner?

Does it handle the 65k very limited gracefully?

Does it destroy the original gameobjects when it does the combiner and keep their uncombined collider active?

Can you specify to combine colliders also(optionally)?

Do I have to add objects to the combiner manually, or by tag or layer?

How does this compare to mesh Baker?

This looks great I especially love the cell based combiner aspects of it.

It seems that MCS does not support lightmapping. Is there anything I am missing?

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)

from the website
http://www.terraincomposer.com/mcs-documentation/#how-does-it-work

Runtime
Combine in Runtime
Combine meshes that meet the Search Option conditions in runtime.

Combine on Start
Combine meshes automatically on Start or call the Combine method yourself from another script.

Use Combine swap key
Switch between MCS and original GameObjects to see performance difference.

Original Objects
What needs to be done with the original objects in runtime? (Disable Renderers, GameObject, Parent GameObject, etc).

Original Objects LOD Group
What needs to be done with the orginal LOD Groups? (Disable or Delete).

In the GUI was also a combine by tag

The asset got accepted by unity faster than expected so nathaniel is working hard catching up :wink:

wow look great
my project includes many building, street and houses (50 FPS)
do you really thinks can improve the performances?

Good questions:

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.

Nathaniel

3 Likes

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.

Nathaniel

Does MCS automatically create texture atlasses? I suppose it does, but I can’t find any info about it.

Excellent, looking forward to hear the news. How long is the sale BTW? Hopefully, API doc is updated before the sale ends so I can fork this! :smile:

At the moment it doesn’t have this feature. I will look into this…

The sale will last at least until a bit after the API doc.

Nathaniel

1 Like

Hi i Just buyed

Error
Mesh.uv3 is out of bounds. The supplied array needs to be the same size as the Mesh.vertices array.

and this log (before)
No matching GameObjects with LOD 0 ‘Search Options’ are found for combining.

where disable Unity’s static batching?

Thanks for the purchase. The error is a bug, will have a new update with fix today and will post it here.

You can disable Unity static batching in Unity Menu → Edit → Project Settings → Player Settings. Then in the inspector disable ‘Static Batching’.

Nathaniel

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.

1 Like

Here’s a quick fix for it. An update with more features is coming later today.

Nathaniel

3267165–257114–MeshCombineStudio_Update1.16b.unitypackage (70 KB)

1 Like

Thanks.
There is a difference (in performance) when MeshCombineStudio in scale is more big?
and Cell Size is more big?

@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.

Thanks

2 Likes

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).

Yes I will make a video for it.

Nathaniel

1 Like

How does it handle unitys’ terrain system with trees, grass and vegetation all around?

That would be splendid. Please tell me if you plan to implement this, as I would look for a different solution if you don’t.