3D Einführung

Das Erstellen eines 3D-Spiels kann eine Herausforderung sein. Durch diese zusätzliche Z-Koordinate funktionieren viele der gängigen Techniken nicht mehr, die dazu beigetragen haben, dass 2D-Spiele einfach zu erstellen sind. Um diesen Übergang zu erleichtern, ist es erwähnenswert, dass Godot ähnliche APIs für 2D und 3D verwendet. Die meisten Nodes sind gleich und stehen sowohl in 2D- als auch in 3D-Versionen zur Verfügung. In der Tat lohnt es sich, die 3D Plattformer Anleitung oder die 3D Anleitungen für kinematische Charaktere zu lesen, die fast identisch mit ihren 2D Gegenstücken sind.

In 3D ist Mathematik etwas komplexer als in 2D. Wenn Sie also den Eintrag Vektor-Mathematik im Wiki ansehen (der speziell für Spieleentwickler erstellt wurde, nicht für Mathematiker oder Ingenieure), ebnen Sie sich den Weg zur effizienten 3D-Spiele Entwicklung.

Spatial-Node (Raum-Node)

Node2D ist der Basis-Node für 2D und Control ist der Basis-Node für die gesamte grafische Benutzeroberfläche. Nach dieser Überlegung verwendet die 3D-Engine für alles in 3D den Node Spatial.

../../_images/tuto_3d1.png

Spatial-Nodes haben eine lokale Transformation, die relativ zum übergeordneten Node ist (solange der übergeordnete Node ebenfalls vom Typ Spatial ist oder von diesem erbt). Auf diese Transformation kann als 4×3 Transform oder als 3 Vector3 Elemente zugegriffen werden, die für Position, Euler-Rotation (X, Y und Z Winkel) und Skalierung stehen.

../../_images/tuto_3d2.png

3D Inhalt

Im Gegensatz zu 2D wo das Laden von Bildinhalten und Zeichnen einfach ist, ist 3D etwas schwieriger. Der Inhalt muss mit speziellen 3D-Werkzeugen (normalerweise als DCCs bezeichnet) erstellt und in ein Austauschdateiformat exportiert werden, um in Godot importiert zu werden (3D-Formate sind nicht so standardisiert wie Bilder).

DCC erzeugte Modelle

Es gibt zwei Möglichkeiten zum Importieren von 3D-Modellen in Godot. Die erste und häufigste ist 3D-Szenen importieren mit der Sie ganze Szenen (so wie sie im DCC aussehen) importieren können, einschließlich Animationen, Skelett-Rigs, Mischformen usw.

Die zweite Möglichkeit besteht aus dem Importieren einfacher .OBJ-Dateien als Mesh-Ressourcen, die dann zur Anzeige in einen MeshInstance Node eingefügt werden können.

Generierte Geometrie

Es ist möglich, benutzerdefinierte Geometrie mithilfe der Ressource ArrayMesh direkt zu erstellen. Erstellen Sie einfach Ihre Arrays und verwenden Sie die Funktion ArrayMesh.add_surface_from_arrays (). Es steht auch eine Hilfsklasse zur Verfügung SurfaceTool, die eine einfachere API und Hilfen zum Indizieren, Generieren von Normalen, Tangenten usw. bietet.

In jedem Fall ist diese Methode zum Generieren statischer Geometrie (Modelle, die nicht häufig aktualisiert werden) gedacht, da das Erstellen von Vertex-Arrays und deren Übermittlung an die 3D-API erhebliche Leistungskosten verursacht.

Unmittelbare Geometrie

Wenn stattdessen eine einfache Geometrie generiert werden muss, die häufig aktualisiert wird, stellt Godot einen speziellen Node bereit ImmediateGeometry, der eine OpenGL 1.x-API im Unmittelbar-Modus zum Erstellen von Punkten, Linien, Dreiecke usw. bereitstellt.

2D in 3D

Während Godot eine leistungsstarke 2D-Engine enthält, verwenden viele Arten von Spielen 2D in einer 3D-Umgebung. Durch die Verwendung einer festen Kamera (entweder orthogonal oder perspektivisch), die sich nicht dreht, können Nodes wie Sprite3D und AnimatedSprite3D verwendet werden, um 2D-Spiele zu erstellen, die das Mischen mit 3D-Hintergründen, realistische Parallax-Effekte, Licht- / Schatteneffekten usw. nutzen.

Der Nachteil ist natürlich, dass die Komplexität zunimmt und die Leistung im Vergleich zu einfachem 2D, sowie die fehlenden Anhaltspunkte für die Arbeit in Pixeln verringert wird.

Umgebung

Neben der Bearbeitung einer Szene ist es häufig üblich, die Umgebung zu bearbeiten. Godot bietet einen WorldEnvironment-Knoten, der es erlaubt, die Hintergrundfarbe, den Modus (z.B. wie setze ich eine Skybox) zu ändern und verschiedene Arten von eingebauten Nachbearbeitungseffekten anzuwenden. Umgebungen können auch in der Kamera überschrieben werden.

3D Ansichtsfenster

Die Bearbeitung von 3D-Szenen erfolgt in der 3D-Registerkarte. Diese Registerkarte kann manuell ausgewählt werden, wird jedoch automatisch aktiviert, wenn ein räumlicher Knoten ausgewählt wird.

../../_images/tuto_3d3.png

Die Standardsteuerelemente für die 3D-Szenennavigation ähneln Blender (mit dem Ziel, eine gewisse Konsistenz in der Pipeline freier Software zu haben...), aber es sind Optionen enthalten, um die Maustasten und das Verhalten so anzupassen, dass es anderen Werkzeugen in den Editor-Einstellungen ähnelt:

../../_images/tuto_3d4.png

Koordinatensystem

Godot verwendet für alles das metrische System, wobei eine Einheit einem Meter entspricht. 3D-Physik und andere Bereiche sind darauf abgestimmt, daher ist der Versuch, einen anderen Maßstab zu verwenden, normalerweise eine schlechte Idee (es sei denn, Sie wissen, was Sie tun).

Bei der Arbeit mit 3D-Assets ist es immer am besten, im richtigen Maßstab zu arbeiten (stellen Sie Ihr DCC auf metrisch ein). Godot ermöglicht die Skalierung nach dem Import und obwohl dies in den meisten Fällen funktioniert, kann es in seltenen Situationen zu Problemen mit der Fließkomma-Genauigkeit (und damit zu Störungen oder Artefakten) in heiklen Bereichen wie Rendering oder Physik kommen. Stellen Sie also sicher, dass Ihre Künstler immer im richtigen Maßstab arbeiten!

Die Y-Koordinate wird für "oben" verwendet, obwohl für die meisten Objekte, die ausgerichtet werden müssen (wie Lichter, Kameras, Kapselkollider, Fahrzeuge usw.), die Z-Achse als Richtungszeiger verwendet wird. Diese Konvention bedeutet grob:

  • X ist seitlich

  • Y ist hoch/runter

  • Z ist vorne/hinten

Raum- und Manipulations-Gizmos

Das Verschieben von Objekten in der 3D-Ansicht erfolgt über die Manipulator-Gizmos. Jede Achse wird durch eine Farbe dargestellt: Rot, Grün, Blau stehen für X, Y bzw. Z. Diese Konvention gilt auch für das Grid und andere Gizmos (und auch für die Shadersprache, die Reihenfolge der Komponenten für Vector3, Color usw.).

../../_images/tuto_3d5.png

Einige nützliche Tastenkürzel:

  • Um die Platzierung oder Drehung einzurasten, drücken Sie Strg während des Verschiebens, Skalierens oder Drehens.

  • Zum Zentrieren der Ansicht auf das ausgewählte Objekt, drücken Sie F.

Ansicht-Menü

Die Ansichtsoptionen werden über das Menü "Ansicht" in der Symbolleiste des Ansichtsfensters gesteuert.

../../_images/tuto_3d6.png

Sie können die Gizmos in der 3D-Ansicht des Editors über dieses Menü ausblenden:

../../_images/tuto_3d6_1.png

Um eine bestimmte Art von Gizmos auszublenden, können Sie sie im Menü "View" deaktivieren.

../../_images/tuto_3d6_2.png

Standard Umgebung

Beim Erstellen im Projektmanager hat die 3D-Umgebung einen Standardhimmel.

../../_images/tuto_3d8.png

In Anbetracht der Funktionsweise des physikalisch basierten Renderings ist es ratsam, immer mit einer Standardumgebung zu arbeiten, um indirektes und reflektiertes Licht auf Ihre Objekte zu werfen.

Kameras

Unabhängig davon, wie viele Objekte im 3D-Raum platziert sind, wird nichts angezeigt, wenn nicht auch eine Camera zur Szene hinzugefügt wird. Kameras können entweder in orthogonalen oder perspektivischen Projektionen arbeiten:

../../_images/tuto_3d10.png

Kameras sind mit einem übergeordneten Ansichtsfenster verbunden (und werden nur dort angezeigt). Da die Wurzel des Szenenbaums ein Ansichtsfenster ist, werden Kameras standardmäßig in diesem angezeigt. Wenn jedoch Unteransichtsfenster (entweder als Rendering-Ziel oder als Bild-im-Bild) gewünscht sind, müssen diese ihre eigenen untergeordneten Kameras anzeigen.

../../_images/tuto_3d11.png

Wenn man mit mehreren Kameras umgeht, werden folgende Regeln für jede Ansicht angewendet:

  • Wenn keine Kameras im Szenenbaum vorhanden sind, wird die erste Kamera, die in die Szene eintritt, die aktive Kamera. Weitere Kameras die der Szene betreten werden ignoriert (es sei denn, sie sind als aktuell eingestellt).

  • Wenn für eine Kamera die Eigenschaft "current" gesetzt ist, wird sie unabhängig von allen anderen Kameras in der Szene verwendet. Wenn die Eigenschaft gesetzt ist, wird sie aktiv und ersetzt die vorherige Kamera.

  • Wenn eine aktive Kamera den Szenenbaum verlässt, wird die erste Kamera in der Baumreihenfolge an ihre Stelle treten.

Lichter

Godot hat eine Begrenzung von bis zu 8 Lichtern pro Mesh. Abgesehen davon gibt es in Godot keine Begrenzung für die Anzahl der Lichter oder die Art der Lichter. Es können so viele Lichter wie gewünscht hinzugefügt werden, solange die Leistung dies zulässt und nicht mehr als 8 Lichter auf ein einziges Mesh scheinen.