Skip to content

Commit

Permalink
Add technical definition for manifoldness
Browse files Browse the repository at this point in the history
  • Loading branch information
tetrapod00 committed Dec 19, 2024
1 parent c14d206 commit 948caba
Showing 1 changed file with 25 additions and 8 deletions.
33 changes: 25 additions & 8 deletions tutorials/3d/csg_tools.rst
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,31 @@ The :ref:`CSGPolygon3D <class_CSGPolygon3D>` node extrude along a Polygon drawn
Custom meshes
~~~~~~~~~~~~~

Any mesh can be used for :ref:`CSGMesh3D <class_CSGMesh3D>`; the mesh can be
modeled in other software and imported into Godot. Multiple materials are
supported. There are some restrictions for geometry:

- it must be closed,
- it must not self-intersect,
- it must not contain internal faces,
- every edge must connect to only two other faces.
Custom meshes can be used for :ref:`CSGMesh3D <class_CSGMesh3D>` as long as the
mesh is *manifold*. The mesh can be modeled in other software and imported into
Godot. Multiple materials are supported.

For a mesh to be used as a CSG mesh, it is required to:

- be closed
- have edge connect to only two other faces
- have volume

And it is recommended to avoid:

- negative volume
- self-intersection
- interior faces

Godot uses the `manifold <https://github.com/elalish/manifold>`__ library to
implement CSG meshes. The technical definition of "manifold" used by Godot is
the following, adapted from that library's `definition of "manifold"
<https://github.com/elalish/manifold/wiki/Manifold-Library#manifoldness-definition>`__:

Every edge of every triangle must contain the same two vertices (by index) as
exactly one other triangle edge, and the start and end vertices must switch
places between these two edges. The triangle vertices must appear in clockwise
order when viewed from the outside of the Godot Engine manifold mesh.

.. image:: img/csg_custom_mesh.png

Expand Down

0 comments on commit 948caba

Please sign in to comment.