Work in progress

The content of this page was not yet updated for Godot 4.2 and may be outdated. If you know how to improve this page or you can confirm that it's up to date, feel free to open a pull request.

Level-Prototypen mittels CSG erstellen

CSG steht für Constructive Solid Geometry (konstruktive Festkörpergeometrie), und ist ein Werkzeug zum Kombinieren von Grundformen oder benutzerdefinierten Meshes, um komplexere Formen zu erstellen. In 3D-Modellierungssoftware wird CSG hauptsächlich als "Boolesche Operatoren" bezeichnet.

Level-Prototyping ist eine der Hauptanwendungen von CSG in Godot. Mit dieser Technik können Benutzer die gängigsten geometrischen Formen erstellen, indem sie Grundelemente kombinieren. Innenumgebungen können mithilfe invertierter Grundelemente erstellt werden.

Bemerkung

Die CSG-Nodes in Godot sind hauptsächlich für das Prototyping vorgesehen. Es gibt keine Built-in-Unterstützung für UV-Mapping oder das Bearbeiten von 3D-Polygonen (obwohl extrudierte 2D-Polygone mit dem CSGPolygon3D-Node verwendet werden können).

If you're looking for an easy to use level design tool for a project, you may want to use Qodot instead. It lets you design levels using TrenchBroom and import them in Godot.

../../_images/csg.gif

Siehe auch

Wie Sie CSG-Nodes verwenden, um verschiedene geometrische Formen (wie Treppen oder Straßen) zu bauen, können Sie anhand des Constructive Solid Geometry-Demoprojekts sehen.

Einführung in CSG-Nodes

Wie andere Features von Godot wird CSG in Form von Nodes unterstützt. Dies sind die CSG-Nodes:

../../_images/csg_nodes.png ../../_images/csg_mesh.png

Eigenschaften der CSG-Tools

Jeder CSG-Node unterstützt drei Arten von booleschen Operationen:

  • Vereinigung: Die Geometrie beider Grundelemente wird zusammengeführt, die sich überschneidende Geometrie wird entfernt.

  • Schnittmenge: Es bleibt nur die Schnittgeometrie übrig, der Rest wird entfernt.

  • Subtraktion: Die zweite Geometrie-Form wird von der ersten subtrahiert, wobei eine Einbuchtung in ihrer Form zurückbleibt.

../../_images/csg_operation_menu.png ../../_images/csg_operation.png

CSGPolygon

Der CSGPolygon3D-Node wird entlang eines in 2D gezeichneten Polygons (in X, Y Koordinaten) auf folgende Weise extrudiert:

  • Tiefe: Extrudiert um einen bestimmten Betrag heraus.

  • Spin: Extrudiert beim Drehen um seinen Ursprung.

  • Pfad: Extrudiert entlang eines Pfad-Nodes. Diese Operation wird üblicherweise als Lofting bezeichnet.

../../_images/csg_poly_mode.png ../../_images/csg_poly.png

Bemerkung

Der Pfad-Modus muss mit einem Path3D-Node versehen sein, um zu funktionieren. Im Path-Node zeichnen Sie den Pfad, und das Polygon in CSGPolygon3D wird entlang des angegebenen Pfades extrudiert.

Benutzerdefinierte Meshes

Jedes Mesh kann für CSGMesh3D verwendet werden; das Mesh kann in anderer Software modelliert und in Godot importiert werden. Es werden mehrere Materialien unterstützt. Es gibt einige Einschränkungen für die Geometrie:

  • sie muss geschlossen sein,

  • sie darf sich nicht selbst überschneiden,

  • sie darf keine inneren Flächen enthalten,

  • jede Kante darf nur mit zwei anderen Flächen verbunden werden.

../../_images/csg_custom_mesh.png

CSGCombiner3D

Der CSGCombiner3D-Node ist eine leere Geometrie-Form, die zur Organisation verwendet wird. Er kombiniert nur Child-Nodes.

Bearbeitungsreihenfolge

Jeder CSG-Node verarbeitet zunächst seine Child-Nodes und deren Operationen: Vereinigung, Schnittmenge oder Subtraktion, in der Reihenfolge der Baumstruktur, und wendet sie nacheinander auf sich selbst an.

Bemerkung

Im Interesse der Performance sollten Sie darauf achten, dass die CSG-Geometrie relativ einfach bleibt, da die Verarbeitung komplexer Meshes eine Weile dauern kann. Wenn Sie Objekte zusammenfügen (z.B. Tisch- und Raumobjekte), erstellen Sie sie als separate CSG-Bäume. Wenn Sie zu viele Objekte in einen einzigen Baum zwingen, wird sich das auf die Performance auswirken. Verwenden Sie binäre Operationen nur dort, wo Sie sie tatsächlich benötigen.

Einen Level-Prototyp erstellen

Als Übung zur Verwendung von CSG-Tools werden wir einen Raum als Prototyp erstellen.

Tipp

Das Arbeiten in der orthogonalen Projektion bietet eine bessere Sicht beim Kombinieren der CSG-Formen.

Unser Level wird folgende Objekte enthalten:

  • einen Raum,

  • ein Bett,

  • eine Lampe,

  • einen Schreibtisch,

  • ein Bücherregal.

Erstellen Sie eine Szene mit einem Node3D-Node als Root.

Tipp

Die Default-Beleuchtung der Environment bietet in einigen Winkeln kein klares Shading. Ändern Sie den Anzeigemodus mit Overdraw-Ansicht im 3D-Ansichtsfenster-Menü oder fügen Sie einen DirectionalLight-Node hinzu, damit Sie klar sehen können.

../../_images/csg_overdraw.png

Erstellen Sie eine CSGBox3D und nennen Sie sie room, aktivieren Sie Flächen invertieren und ändern Sie die Abmessungen Ihres Raums.

../../_images/csg_room.png ../../_images/csg_room_invert.png

Erstellen Sie als nächstes einen CSGCombiner3D und nennen Sie ihn desk.

Ein Schreibtisch hat eine Oberfläche und 4 Beine:

  • Erstellen Sie einen CSGBox3D-Child-Node im Vereinigung-Modus für die Oberfläche und passen Sie die Abmessungen an.

  • Erstellen Sie 4 CSGBox3D -Child-Nodes im Vereinigung-Modus für die Beine und passen Sie die Abmessungen an.

Passen Sie ihre Position so an, dass sie einem Schreibtisch ähneln.

../../_images/csg_desk.png

Bemerkung

CSG-Nodes innerhalb eines CSGCombiner3D werden nur innerhalb des Combiners verarbeitet. Daher werden CSGCombiner3Ds verwendet, um CSG-Nodes zu organisieren.

Erstellen Sie einen CSGCombiner3D und nennen Sie ihn bed.

Unser Bett besteht aus 3 Teilen: dem Bett, der Matratze und einem Kissen. Erstellen Sie eine CSGBox3D und passen Sie ihre Abmessungen für das Bett an. Erstellen Sie eine weitere CSGBox3D und passen Sie deren Abmessungen für die Matratze an.

../../_images/csg_bed_mat.png

Wir werden einen weiteren CSGCombiner3D namens pillow als Child-Node von bed erstellen. Der Szenenbaum sollte folgendermaßen aussehen:

../../_images/csg_bed_tree.png

Wir werden 3 CSGSphere3D-Nodes im Vereinigung-Modus zu einem Kissen kombinieren. Skalieren Sie die Y-Achse der Kugeln und aktivieren Sie Flächen glätten.

../../_images/csg_pillow_smooth.png

Wählen Sie den pillow-Node und schalten Sie den Modus auf Subtraktion; Die kombinierten Kugeln schneiden ein Loch in die Matratze.

../../_images/csg_pillow_hole.png

Versuchen Sie, den pillow-Node wieder dem Root-Node Spatial zuzuordnen. Das Loch wird verschwinden.

Bemerkung

Dies soll den Effekt der CSG-Verarbeitungsreihenfolge veranschaulichen. Da der Root-Node kein CSG-Node ist, stellen die CSGCombiner3D-Nodes das Ende der Operationen dar. Dies zeigt die Verwendung von CSGCombiner3D zum Organisieren der CSG-Szene.

Machen Sie die vorhin gemachte Änderung wieder rückgängig, nachdem Sie den Effekt beobachtet haben. Das fertig gebaute Bett sollte nun so aussehen:

../../_images/csg_bed.png

Erstellen Sie einen CSGCombiner3D und nennen Sie ihn lamp.

Eine Lampe besteht aus 3 Teilen: dem Ständer, der Stange und dem Lampenschirm. Erstellen Sie einen CSGCylinder3D, aktivieren Sie die Option Zylinder und machen Sie ihn zum Ständer. Erstellen Sie einen weiteren CSGCylinder3D und passen Sie die Abmessungen an, um ihn als Stange zu verwenden.

../../_images/csg_lamp_pole_stand.png

Wir werden ein CSGPolygon3D für den Lampenschirm verwenden. Verwenden Sie den Spin-Modus für das CSGPolygon und zeichnen Sie ein Trapez in Sicht von vorne (Ziffernblock 1); Diese Geometrie-Form wird um den Ursprung herum extrudiert und bildet den Lampenschirm.

../../_images/csg_lamp_spin.png ../../_images/csg_lamp_polygon.png ../../_images/csg_lamp_extrude.png

Passen Sie die Platzierung der 3 Teile so an, dass sie wie eine Lampe aussehen.

../../_images/csg_lamp.png

Erstellen Sie einen CSGCombiner3D und nennen Sie ihn bookshelf.

Wir werden 3 CSGBox3D-Nodes für das Bücherregal verwenden. Erstellen Sie eine CSGBox3D und passen Sie ihre Abmessungen an. Dies ist die Größe des Bücherregals.

../../_images/csg_shelf_big.png

Duplizieren Sie die CSGBox3D, kürzen Sie die Abmessungen jeder Achse und ändern Sie den Modus in Subtraktion.

../../_images/csg_shelf_subtract.png ../../_images/csg_shelf_subtract_menu.png

Sie haben fast ein Regal gebaut. Erstellen Sie eine weitere CSGBox3D, um das Regal in zwei Ebenen zu unterteilen.

../../_images/csg_shelf.png

Positionieren Sie die Möbel im Raum wie Sie möchten und die Szene sollte wie folgt aussehen:

../../_images/csg_room_result.png

Sie haben mit den CSG-Tools in Godot erfolgreich einen Raum-Level als Prototyp erstellt. CSG-Tools können zum Entwerfen aller Arten von Leveln verwendet werden, z.B. eines Labyrinths oder einer Stadt. Erkunden Sie die Grenzen dieser Methode beim Entwerfen Ihres Spiels.

Verwenden von Prototyp-Texturen

Godot's Standardmaterial 3D und ORM-Material 3D unterstützt Triplanares Mapping, welches verwendet werden kann, um automatisch eine Textur auf beliebige Objekte ohne Verzerrung anzuwenden. Dies ist praktisch, wenn man CSG benutzt, da Godot noch nicht die Bearbeitung von UV-Maps auf CSG-Nodes unterstützt. Triplanares Mapping ist relativ langsam, was seine Verwendung normalerweise auf organische Oberflächen wie Gelände beschränkt. Dennoch kann es beim Prototyping verwendet werden, um schnell Texturen auf CSG-basierte Ebenen anzuwenden.

Bemerkung

Wenn Sie einige Texturen für das Prototyping benötigen, hat Kenney eine Reihe von CC0-lizenzierten Prototyp-Texturen erstellt.

Es gibt zwei Möglichkeiten, ein Material auf einen CSG-Node anzuwenden:

  • Anwenden auf einen CSGCombiner3D-Node als Materialüberschreibung (Geometrie > Materialüberschreibung im Inspektor). Dies wirkt sich automatisch auf die Child-Nodes aus, macht es jedoch unmöglich, das Material bei einzelnen Child-Nodes zu ändern.

  • Anwenden eines Materials auf einzelne Nodes (Material im Inspektor). Auf diese Weise kann jeder CSG-Node sein eigenes Erscheinungsbild haben. Subtraktive CSG-Nodes wenden ihr Material auf die Nodes an, in die sie eindringen.

Um triplanares Mapping auf einen CSG-Node anzuwenden, wählen Sie ihn aus, gehen Sie zum Inspektor und klicken Sie auf den [leer] Text neben Materialüberschreibung (oder Material für einzelne CSG-Nodes). Wählen Sie Neues StandardMaterial3D. Klicken Sie auf das Symbol des neu erstellten Materials, um es zu bearbeiten. Klappen Sie den Abschnitt Albedo aus und laden Sie eine Textur in die Textur-Property. Klappen Sie nun den Abschnitt Uv1 aus und aktivieren Sie Triplanar. Sie können den Versatz und die Skalierung der Textur entlang jeder Achse ändern, indem Sie mit den Propertys Skalierung und Versatz herumspielen (siehe oben). Höhere Werte in der Property Skalierung führen dazu, dass die Textur häufiger wiederholt wird.

Tipp

Sie können ein StandardMaterial3D kopieren, um es über CSG-Nodes hinweg wiederzuverwenden. Klicken Sie dazu im Inspektor auf den Dropdown-Pfeil neben einer Material-Property und wählen Sie Kopieren. Um es einzufügen wählen Sie den Node aus, auf den Sie das Material anwenden möchten, klicken Sie auf den Dropdown-Pfeil neben seiner Material-Property und wählen Sie dann Einfügen.

Exportieren als glTF

Es kann nützlich sein, einen Level mit CSG grob zu beschreiben und ihn dann als 3D-Modell zu exportieren, um ihn in eine 3D-Modellierungssoftware zu importieren. Sie können dies tun, indem Sie Szene > Exportieren als... > glTF 2.0-Szene.

../../_images/export_as_gltf.webp