Additional Geometry Best Practices
Tutorial
·
intermediate
·
+0XP
·
15 mins
·
(154)
Unity Technologies
This tutorial examines additional best practices when prioritizing optimization while working with geometry in your mobile application.
Languages available:
1. Overview
Along with suggestions from the previous tutorials, there are several things to keep in mind when creating your models. The following recommendations aren’t specific to any one 3D content creation tool and can be used across projects.
2. Smoothing Groups
Use smoothing groups, or custom vertex normals, to define an edge’s hardness and alter the look of a model. Smoothing groups help create better shading when the art direction intentionally uses a tiny polygon count.
Take extra care, as smoothing groups affect a model’s UV islands — basically chunks of the model — and the quality of a normal map when you do baking.
If smoothing is implemented on a 3D model, then it must be exported from the 3D software and imported into Unity.
The following image shows how smoothing works when applied to an object:

3. Mesh Topology
Remember these tips when using Mesh topology:
- When creating a 3D Asset, keep the topology reasonably tidy and clean.
- Clean topology is essential for characters and objects that are deforming or animated.
- Don’t obsess over having perfect topology. The player, or end user, won’t see the wireframe of a 3D model once you’ve applied a Texture and Material.
The following image shows a wireframe of a rocky cliff Mesh that uses simple geometry and topology. The cliff looks much better once a Material has been applied.

4. Shape Exaggeration
Shape exaggeration involves making certain parts of an object bigger than normal to help with readability. Whether this is the right approach for your game depends on the style of game you are creating.
A mobile device screen is small, meaning it can be difficult to capture certain shapes if they’re tiny. Exaggerating a shape helps to overcome this. For example, make a character’s hands larger so they’re easier to see on a small screen.
The following image shows how an exaggerated hand might look. The hand, sword, and body proportions are all emphasized in different ways. This was done to improve the visibility while taking the lower polygon count into consideration:

5. Combining Meshes
To reduce the number of draw calls required for rendering, you can combine several Meshes into one with the Mesh.CombineMeshes() method. If the Meshes all share the same Material, set the mergeSubMeshes argument to true so that it generates a single sub-Mesh from each Mesh in the combined group.
Combining several Meshes into one larger mesh helps:
- Create more effective occluders.
- Turn tile-based Assets into a large, seamless solid Asset.
To apply this technique:
- Create an empty GameObject in the Hierarchy and make it the parent of the Meshes that you want to combine.
- Attach a script implementing Mesh.CombineMeshes() onto the parent GameObject.
Depending on the makeup of your Scene, implementing this method can be useful for performance optimization. Large Meshes tend to stay in view longer than smaller Meshes, so experiment to get the correct size.
6. Model Settings
- Don’t import animation data on FBX Mesh models that do not animate: When importing an FBX Mesh that doesn’t contain any animation data, set Animation Type to None in the Rig tab of the Import Settings. When you place your Mesh into the Hierarchy, this setting will ensure Unity doesn’t generate an unused Animator component.
- Avoid Read/Write Meshes: If your model is modified at runtime, Unity keeps a copy of the Mesh data in memory to modify while preserving the original. If your model is not modified at runtime, disable the Read/Write Enabled option from the Model tab of the Import Settings to prevent a copy from being created.
- Static/Dynamic Batching: Static Batching is a common optimization technique that reduces the number of draw calls. It’s ideal for objects made up of a large number of vertices that don’t move, rotate, or scale during rendering. To enable Static Batching, check Static in the Inspector containing the Mesh Renderer of your target model. Built-in Dynamic Batching occurs for objects with fewer but similar vertices sharing the same Material. Refer to the documentation to learn more about further criteria necessary for meshes to implement Dynamic Batching.
7. Conclusion
Optimizing Mesh topology, combining Meshes, exaggerating shapes and configuring model settings are all techniques that can be used to increase application performance. In the next tutorial, we’ll explore LOD techniques in an example Unity project.