Skip to content

Commit ea9fad5

Browse files
committed
Add technical definition for manifoldness
1 parent c14d206 commit ea9fad5

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

tutorials/3d/csg_tools.rst

+25-8
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,31 @@ The :ref:`CSGPolygon3D <class_CSGPolygon3D>` node extrude along a Polygon drawn
9191
Custom meshes
9292
~~~~~~~~~~~~~
9393

94-
Any mesh can be used for :ref:`CSGMesh3D <class_CSGMesh3D>`; the mesh can be
95-
modeled in other software and imported into Godot. Multiple materials are
96-
supported. There are some restrictions for geometry:
97-
98-
- it must be closed,
99-
- it must not self-intersect,
100-
- it must not contain internal faces,
101-
- every edge must connect to only two other faces.
94+
Custom meshes can be used for :ref:`CSGMesh3D <class_CSGMesh3D>` as long as the
95+
mesh is *manifold*. The mesh can be modeled in other software and imported into
96+
Godot. Multiple materials are supported.
97+
98+
For a mesh to be used as a CSG mesh, it is required to:
99+
100+
- be closed
101+
- have each edge connect to only two faces
102+
- have volume
103+
104+
And it is recommended to avoid:
105+
106+
- negative volume
107+
- self-intersection
108+
- interior faces
109+
110+
Godot uses the `manifold <https://github.com/elalish/manifold>`__ library to
111+
implement CSG meshes. The technical definition of "manifold" used by Godot is
112+
the following, adapted from that library's `definition of "manifold"
113+
<https://github.com/elalish/manifold/wiki/Manifold-Library#manifoldness-definition>`__:
114+
115+
Every edge of every triangle must contain the same two vertices (by index) as
116+
exactly one other triangle edge, and the start and end vertices must switch
117+
places between these two edges. The triangle vertices must appear in clockwise
118+
order when viewed from the outside of the Godot Engine manifold mesh.
102119

103120
.. image:: img/csg_custom_mesh.png
104121

0 commit comments

Comments
 (0)