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 17, 2024
1 parent c14d206 commit b2b403c
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions tutorials/3d/csg_tools.rst
Original file line number Diff line number Diff line change
Expand Up @@ -91,15 +91,26 @@ 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:
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. A manifold mesh has 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.

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

CSGCombiner3D
Expand Down

0 comments on commit b2b403c

Please sign in to comment.