- Home /
Manual Batching
We do a lot of custom stuff with GL.Matrix, stencil buffers and geometry in our game. So we don't use standart MeshRenderers at all but call DrawMeshNow() manualy.
Single frame is as follows:
RootGameObject.Update():
Traverse the hierarchy to update logic and regenerate geometry if it changed (e.g. my custom text meshes or ninegrids).
Camera.OnPreRender():
Traverse the hierarchy to generate commands;
Sorting commands;
Batching commands;
Execute commands for all RenderTextures.
camera.Render():
actually draw nothing
Camera.OnPostRender():
Execute commands for BackBuffer.
Batching step is just detecting sequence of DrawMeshNow-commands with identical material and use mesh.CombineMesh() on their meshes. It work well on groups of quads: draw calls dramatically decreased and we have performance boost. But in case of more complex models such as gem it work too slow on iPad and it only gets worse.
There are about 80 gems on scene (some meshes are shared — there are only 7 types of gems). All gems rotates randomly. Each one has ~300 vertex with colors and normals and ~150 Triangles. Each one drawn with 3 passes: shadow-fake, back faces pass and front faces pass.
Is there any faster way to combine meshes? Maybe I need move batching step from OnPreRender() to Update() or something?
Your answer
Follow this Question
Related Questions
Combining Objects for Performance 0 Answers
Re-meshing Static Objects as one mesh? 1 Answer
Set an object to invisible? 2 Answers
Best way of creation custom object 2 Answers
Is there any way I can statically batch procedurally generated objects? 0 Answers