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 Vektormathematik 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

Besides editing a scene, it is often common to edit the environment. Godot provides a WorldEnvironment node that allows changing the background color, mode (as in, put a skybox), and applying several types of built-in post-processing effects. Environments can also be overridden in the Camera.

3D Ansichtsfenster

Editing 3D scenes is done in the 3D tab. This tab can be selected manually, but it will be automatically enabled when a Spatial node is selected.

../../_images/tuto_3d3.png

Default 3D scene navigation controls are similar to Blender (aiming to have some sort of consistency in the free software pipeline..), but options are included to customize mouse buttons and behavior to be similar to other tools in the Editor Settings:

../../_images/tuto_3d4.png

Koordinatensystem

Godot uses the metric system for everything. 3D Physics and other areas are tuned for this, so attempting to use a different scale is usually a bad idea (unless you know what you are doing).

When working with 3D assets, it's always best to work in the correct scale (set your DCC to metric). Godot allows scaling post-import and, while this works in most cases, in rare situations it may introduce floating-point precision issues (and thus, glitches or artifacts) in delicate areas, such as rendering or physics, so make sure your artists always work in the right scale!

The Y coordinate is used for "up", though for most objects that need alignment (like lights, cameras, capsule collider, vehicle, etc.), the Z axis is used as a "pointing towards" direction. This convention roughly means that:

  • X ist seitlich

  • Y ist hoch/runter

  • Z ist vorne/hinten

Raum- und Manipulations-Gizmos

Moving objects in the 3D view is done through the manipulator gizmos. Each axis is represented by a color: Red, Green, Blue represent X, Y, Z respectively. This convention applies to the grid and other gizmos too (and also to the shader language, ordering of components for Vector3, Color, etc.).

../../_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

To hide a specific type of gizmos, you can toggle them off in the "View" menu.

../../_images/tuto_3d6_2.png

Standard Umgebung

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

../../_images/tuto_3d8.png

Given how physically based rendering works, it is advised to always try to work with a default environment in order to provide indirect and reflected light to your objects.

Kameras

No matter how many objects are placed in the 3D space, nothing will be displayed unless a Camera is also added to the scene. Cameras can work in either orthogonal or perspective projections:

../../_images/tuto_3d10.png

Cameras are associated with (and only display to) a parent or grandparent viewport. Since the root of the scene tree is a viewport, cameras will display on it by default, but if sub-viewports (either as render target or picture-in-picture) are desired, they need their own children cameras to display.

../../_images/tuto_3d11.png

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

  • If no cameras are present in the scene tree, the first one that enters it will become the active camera. Further cameras entering the scene will be ignored (unless they are set as current).

  • If a camera has the "current" property set, it will be used regardless of any other camera in the scene. If the property is set, it will become active, replacing the previous camera.

  • If an active camera leaves the scene tree, the first camera in tree-order will take its place.

Beleuchtung

Godot has a limit of up to 8 lights per mesh. Aside from that, there is no limitation on the number of lights, nor of types of lights, in Godot. As many as desired can be added, as long as performance allows, and no more than 8 lights shine on a single mesh.