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 einfache Versionen der gängigsten 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 integrierte Unterstützung für UV-Mapping oder das Bearbeiten von 3D-Polygonen (obwohl extrudierte 2D-Polygone mit dem CSGPolygon-Node verwendet werden können).

Wenn Sie nach einem benutzerfreundlichen Level-Design-Tool für ein Projekt suchen, können Sie stattdessen Qodot verwenden. Sie können Ebenen mit TrenchBroom entwerfen und in Godot importieren.

../../_images/csg.gif

Einführung in CSG nodes

Wie andere Funktionen 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.

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

  • Subtraktion: Die zweite Form wird von der ersten subtrahiert, wobei eine Delle mit ihrer Form zurückbleibt.

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

CSGPolygon

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

  • Tiefe: Extrudierte einen bestimmten Betrag zurück.

  • Schleudern: 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

The Path mode must be provided with a Path node to work. In the Path node, draw the path and the polygon in CSGPolygon will extrude along the given path.

Benutzerdefinierte Meshes

Any mesh can be used for CSGMesh; the mesh can be modelled in other software and imported into Godot. Multiple materials are supported. There are some restrictions for geometry:

  • es muss geschlossen sein,

  • es darf sich nicht selbst überschneiden,

  • es darf keine inneren Flächen enthalten,

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

../../_images/csg_custom_mesh.png

CSGCombiner

The CSGCombiner node is an empty shape used for organization. It will only combine children nodes.

Ablaufsteuerung

Every CSG node will first process its children nodes and their operations: union, intersection or subtraction, in tree order, and apply them to itself one after the other.

Bemerkung

In the interest of performance, make sure CSG geometry remains relatively simple, as complex meshes can take a while to process. If adding objects together (such as table and room objects), create them as separate CSG trees. Forcing too many objects in a single tree will eventually start affecting performance. Only use binary operations where you actually need them.

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 Spatial-Node als Wurzel.

Tipp

Die Standardbeleuchtung der Umgebung bietet in einigen Winkeln keine klare Schattierung. Ändern Sie den Anzeigemodus mit Display Overdraw 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 CSGBox und nennen Sie sie room, aktivieren Sie Gesichter umkehren und ändern Sie die Abmessungen Ihres Raums.

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

Erstellen Sie als Nächstes einen CSGCombiner und nennen Sie ihn desk.

Ein Schreibtisch hat eine Oberfläche und 4 Beine:

  • Erstellen Sie einen CSGBox-Unter-Node im Union-Modus für die Oberfläche und passen Sie die Abmessungen an.

  • Erstellen Sie 4 CSGBox-Unter-Nodes im Union-Modus für die Beine und passen Sie die Abmessungen an.

Passen Sie ihre Platzierung einem Schreibtisch an.

../../_images/csg_desk.png

Bemerkung

CSG-Nodes in einem CSGCombiner verarbeiten ihre Operation nur innerhalb des Kombinierers. Daher werden CSGCombiners verwendet, um CSG-Nodes zu organisieren.

Erstellen Sie einen CSGCombiner und nennen Sie ihn bed.

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

../../_images/csg_bed_mat.png

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

../../_images/csg_bed_tree.png

Wir werden 3 CSGSphere-Nodes im Union-Modus zu einem Kissen kombinieren. Skalieren Sie die Y-Achse der Kugeln und aktivieren Sie Glatte Gesichter.

../../_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 Wurzel-Node Spatial zuzuordnen. Das Loch wird verschwinden.

Bemerkung

Dies soll den Effekt der CSG-Verarbeitungsreihenfolge veranschaulichen. Da der Wurzel-Node kein CSG-Node ist, sind die CSGCombiner-Nodes das Ende der Operationen. Dies zeigt die Verwendung von CSGCombiner 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 CSGCombiner und nennen Sie ihn lamp.

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

../../_images/csg_lamp_pole_stand.png

Wir werden ein CSGPolygon für den Lampenschirm verwenden. Verwenden Sie den Spin-Modus für das CSGPolygon und zeichnen Sie ein Trapez in Vorderansicht (Ziffernblock 1); Diese 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 CSGCombiner und nennen Sie ihn bookshelf.

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

../../_images/csg_shelf_big.png

Duplizieren Sie die CSGBox, 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 das Regal fast gebaut. Erstellen Sie eine weitere CSGBo, 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 so 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 Level verwendet werden, z.B. eines Labyrinths oder einer Stadt. Erforschen Sie die Grenzen beim Entwerfen Ihres Spiels.

Verwenden von Prototyp-Texturen

Godots 3D Materialien (Spatial) unterstützt triplanare Zuordnung mit der automatisch eine Textur auf beliebige Objekte ohne Verzerrung angewendet werden kann. Dies ist praktisch wenn Sie CSG verwenden, da Godot das Bearbeiten von UV-Karten auf CSG-Nodes noch nicht unterstützt. Die triplanare Kartierung ist relativ langsam, was ihre Verwendung normalerweise auf organische Oberflächen wie Gelände beschränkt. Beim Prototyping können Texturen jedoch schnell auf CSG-basierte Ebenen angewendet werden.

Bemerkung

Wenn Sie einige Texturen für das Prototyping benötigen, hat Kenney eine Reihe von CC0-lizenzierten Prototyp-Texturen erstellt <https://kenney.nl/assets/prototype-textures> `__.

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

  • Anwenden auf einen CSGCombiner-Node als Materialüberschreibung (Geometrie> Materialüberschreibung im Inspektor). Dies wirkt sich automatisch auf die Kinder aus, macht es jedoch unmöglich, das Material bei einzelnen Kindern 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 "graben".

Um eine triplanare Zuordnung auf einen CSG-Node anzuwenden, wählen Sie sie aus, gehen Sie zum Inspektor und klicken Sie auf den Text [leer] neben Materialüberschreibung (oder Material für einzelne CSG-Nodes). Wählen Sie Neues SpatialMaterial. Klicken Sie auf das Symbol des neu erstellten Materials, um es zu bearbeiten. Entfalten Sie den Abschnitt Albedo und laden Sie eine Textur in die Eigenschaft Textur. Entfalten Sie nun den Abschnitt Uv1 und überprüfen Triplanar. Sie können den Texturversatz und die Skalierung auf jeder Achse ändern, indem Sie mit den Eigenschaften Skalieren und Versatz direkt darüber spielen. Höhere Werte in der Eigenschaft Scale führen dazu, dass sich die Textur häufiger wiederholt.

Tipp

Sie können ein SpatialMaterial kopieren, um es über CSG-Nodes hinweg wiederzuverwenden. Klicken Sie dazu im Inspektor auf den Dropdown-Pfeil neben einer Materialeigenschaft 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 Materialeigenschaft und wählen Sie dann Einfügen.