Convex decomposition
Splitting a concave mesh into a set of convex pieces so a physics engine can collide with it cheaply. How V-HACD, CoACD and the Unreal, Unity and Godot tools do it, which settings matter, and when to build the pieces by hand.
Convex decomposition splits a concave mesh into several convex pieces that together approximate its shape. Physics engines collide convex shapes far more cheaply than arbitrary triangle meshes, so decomposition is how an archway, a chair or a broken wall gets collision that is both fast and fairly accurate.
The V-HACD library describes the problem: one convex hull approximates a concave shape poorly and causes false collisions, while a set of "near" convex parts gives a much better fit and stays fast enough for real time (GitHub: V-HACD: Volumetric Hierarchical Approximate…).
#How it works
Every method follows the same idea: cut the mesh into parts, wrap each part in a convex hull, and stop when the hulls fit closely enough. The settings decide how many parts you get and how tightly each one fits.
The arch shows the trade-off. One hull blocks the doorway. Three hulls open it, but each still bulges a little into the opening. Seven hulls follow the curve closely, at more than twice the cost of three. Most automatic tools let you choose a point on this curve with two kinds of setting: a limit on the number of hulls and a tolerance for how concave a piece may be before it is split again.
#The tools
| Tool | Where | Main settings | Notes |
|---|---|---|---|
| V-HACD | Open-source library (GitHub) | Maximum hull count (default 32) | Its author calls the default 32 hulls "often way too high"; the project is archived and recommends CoACD |
| CoACD | Open-source (MIT), Python via pip install coacd, C++ and a Unity package (GitHub) |
Concavity threshold (default 0.05, range 0.01–1), optional maximum hull count, preprocessing resolution, optional vertex limit per hull | SIGGRAPH 2022 research; aims to keep the input's collision behaviour with fewer parts |
| Unreal Engine | Static Mesh Editor, Auto Convex Collision (Epic Developer Community documentation) | Hull Count, Max Hull Verts, Hull Precision (number of voxels) | "The higher these values, the more precise your collision mesh will be, but also the more complex" |
| Godot | Import dock, Physics, Shape Type: Decompose Convex (Godot Engine documentation); or the -convcolonly suffix (Godot Engine documentation) |
A Precision preset, or Advanced options | Higher precision means slower generation and more CPU cost during simulation |
| Unity | Mesh Collider with Convex ticked (Unity Manual); CoACD's Unity package for multiple pieces (GitHub) | — | Convex mesh colliders are "limited to 255 triangles" |
CoACD's threshold works the other way round from a hull count: a higher threshold gives a coarser result (GitHub: CoACD: Approximate Convex Decomposition for…). Since April 2026 it can also read the threshold in metres, which makes values easier to reason about across assets of different sizes (GitHub: CoACD: Approximate Convex Decomposition for…).
#Common mistakes
- Accepting the default hull count. Start low and raise it only where the fit fails (GitHub: V-HACD: Volumetric Hierarchical Approximate…).
- Decomposing what a box would cover. A crate or a wall needs one box, not twelve hulls; see collision meshes.
- Feeding in broken meshes. CoACD preprocesses meshes to make them manifold before decomposing (GitHub: CoACD: Approximate Convex Decomposition for…), a hint that holes and loose parts confuse these tools. Clean the input first; see manifold and non-manifold geometry.
- Ignoring engine limits. Unity's convex colliders stop at 255 triangles (Unity Manual: Mesh collider component reference), so simplify dense pieces.
- Never looking at the result. Always open the collision view and walk the player capsule through.
#Related terms
convex hull · collision meshes · player collision capsule · manifold and non-manifold geometry · decimation
#Further reading and watching
References
- · V-HACD: Volumetric Hierarchical Approximate Convex Decomposition · GitHub · tool · accessed 2026-10-21
- · CoACD: Approximate Convex Decomposition for 3D Meshes with Collision-Aware Concavity and Tree Search · GitHub (paper in ACM Transactions on Graphics 41(4), 2022), 2022 · tool · accessed 2026-10-21
- · Setting Up Collisions With Static Meshes in Unreal Engine · Epic Developer Community documentation, 2026 · docs · accessed 2026-10-21
- · Advanced Import Settings · Godot Engine documentation (source on GitHub), 2026 · docs · accessed 2026-10-21
- · Node type customization using name suffixes · Godot Engine documentation (source on GitHub), 2026 · docs · accessed 2026-10-21
- · Mesh collider component reference · Unity Manual, 2026 · docs · accessed 2026-10-21
- · FBX Static Mesh Pipeline in Unreal Engine · Epic Developer Community documentation, 2026 · docs · accessed 2026-10-21
Also consulted
- · Add a Collision Hull to a Static Mesh Using the Auto Convex Collision Tool in Unreal Engine · Epic Developer Community documentation · docs · accessed 2026-10-22
Pages that link here
- Collision meshes Topic
- Convex hull Key term
Last updated 2026-10-22