3D-Szenen importieren

Godot Szenen Importer

Beim Umgang mit 3D-Assets verfügt Godot über einen flexiblen und konfigurierbaren Importer.

Godot arbeitet mit Szenen. Das bedeutet, dass die gesamte Szene, die in Ihrem bevorzugten 3D-DCC bearbeitet wird, so nah wie möglich übertragen wird.

Godot unterstützt die folgenden 3D Szenen Datei Formate:

  • glTF 2.0 (empfohlen). Godot bietet volle Unterstützung für Text- (.gltf) und Binärformate (.glb).

  • DAE (COLLADA), ein älteres Format, das vollständig unterstützt wird.

  • OBJ (Wavefront)-Format + ihre MTL-Materialdateien. Dieses wird ebenfalls vollständig unterstützt, ist aber ziemlich eingeschränkt (keine Unterstützung für Pivots, Skelette, Animationen, PBR-Materialien, ...).

  • ESCN, ein Godot-spezifisches Format, das Blender mit einem Plugin exportieren kann.

  • FBX wird mit Open Asset ImportLlibrary unterstützt. Allerdigs ist es propritär, so dass wir empfehlen ein anderes Format aus der obigen Liste zu verwenden, wenn es für Ihren Workflow geeignet ist.

Kopieren Sie einfach die Szenendatei zusammen mit der Textur in das Projekt-Repository, und Godot führt einen vollständigen Import durch.

Es ist wichtig, dass das Mesh beim Export nicht durch Bones deformiert wird. Stellen Sie sicher, dass das Skelett vor dem Export mit Ihrem bevorzugten 3D-Editor auf seine T-Pose oder seine Standardposition zurückgesetzt wird.

Exportiere DAE Dateien von Maya und 3DS Max

Autodesk fügte Maya und 3DS Max eine integrierte COLLADA-Unterstützung hinzu, die jedoch standardmäßig deaktiviert ist und nicht verwendet werden sollte. Der beste Weg, dieses Format zu exportieren, ist die Verwendung der Plugins OpenCollada. Sie funktionieren gut, auch wenn sie nicht immer mit der neuesten Version der Software auf dem neuesten Stand sind.

Exportiere glTF 2.0 Dateien von Blender

Es gibt drei Möglichkeiten, glTF-Dateien aus Blender zu exportieren. Als glTF-Binärdatei (.glb Datei), in glTF eingebettet (.gltf Datei), und mit Texturen (gltf + .bin + Texturen).

glTF-Binärdateien sind die kleinste der drei Optionen. Sie enthalten das Mesh und die Texturen, die in Blender erstellt wurden. Wenn sie nach Godot gebracht werden, sind die Texturen Teil der Materialdatei des Objekts.

Eingebettete glTF-Dateien funktionieren auf dieselbe Weise wie Binärdateien. Sie bieten keine zusätzliche Funktionalität in Godot und sollten nicht verwendet werden, da sie eine größere Dateigröße haben.

Es gibt zwei Gründe, glTF mit getrennten Texturen zu verwenden. Einer ist, die Szenenbeschreibung in einem textbasierten Format und die Binärdaten in einer separaten Binärdatei zu haben. Dies kann für die Versionskontrolle nützlich sein, wenn Sie Änderungen in einem textbasierten Format überprüfen möchten. Das zweite ist, dass Sie die Texturdateien getrennt von der Materialdatei benötigen. Wenn Sie keine dieser beiden glTF-Binärdateien benötigen, sind sie in Ordnung.

Warnung

Blend shape animations cannot be imported - they require manual animation within Godot.

Bemerkung

Blender versions older than 3.2 do not export emissive textures with the glTF file. If your model uses one and you're using an older version of Blender, it must be brought in separately.

By default, Blender has backface culling disabled on materials and will export materials to match how they render in Blender. This means that materials in Godot will have their cull mode set to Disabled. This can decrease performance since backfaces will be rendered, even when they are being culled by other faces. To resolve this, enable Backface Culling in Blender's Materials tab, then export the scene to glTF again.

Exportiere DAE Dateien von Blender

Blender verfügt über eine eingebaute COLLADA-Unterstützung, funktioniert aber nicht richtig für die Anforderungen von Spiele-Engines und sollte nicht so verwendet werden, wie sie ist.

Godot stellt ein Blender-Plugin zur Verfügung, das COLLADA-Szenen zur Verwendung in Godot korrekt exportiert. Es funktioniert nicht in Blender 2.8 oder neuer, aber es gibt Pläne, es in Zukunft zu aktualisieren.

Exportiere ESCN Dateien von Blender

Der mächtigste, genannt Godot-blender-exporter. Er verwendet eine .escn-Datei, was eine Art anderer Name für eine .tscn-Datei (Godot-Szenen-Datei) ist; er behält so viele Informationen wie möglich aus einer Blender-Szene, ist allerdings noch experimentell.

Der ESCN-Exporter verfügt über ein detailliertes Dokument, das seine Funktionalität und Verwendung beschreibt.

Texturen separat exportieren

Während Texturen mit einem Modell in bestimmten Dateiformaten, wie glTF 2.0, exportiert werden, können sie auch separat exportiert werden. Godot verwendet PBR (Physically Based Rendering) für seine Materialien. Wenn also ein Texturierungsprogramm PBR-Texturen exportieren kann, können diese in Godot funktionieren. Dazu gehören die Substance-Suite, ArmorPaint (Open Source), und Material Maker (Open Source).

Bemerkung

Weitere Informationen zu den Materialien von Godot finden Sie unter 3D Materialien (Spatial).

Überlegungen zum Exportieren

Da GPUs nur Dreiecke rendern können, müssen Meshes, die Quads oder N-Gons enthalten, trianguliert werden, bevor sie gerendert werden können. Godot kann Meshes beim Importieren triangulieren, aber die Ergebnisse können unvorhersehbar oder falsch sein, insbesondere bei N-Gons. Unabhängig von der Zielanwendung führt das Triangulieren vor dem Exportieren der Szene zu konsistenteren Ergebnissen und sollte nach Möglichkeit durchgeführt werden.

Um Probleme mit falscher Triangulation nach dem Import in Godot zu vermeiden, wird empfohlen, die 3D DCC Objekte selbständig triangulieren zu lassen. In Blender können Sie dies tun, indem Sie Ihren Objekten einen Triangulate Modifikator hinzufügen und sicherstellen, dass Apply Modifiers im Exportdialog aktiviert ist. Alternativ können Sie je nach Exporter eine Option Triangulate Faces im Exportdialog finden und aktivieren.

Um Probleme mit der 3D-Auswahl im Editor zu vermeiden, wird empfohlen, die Objekttransformation im 3D-DCC anzuwenden, bevor die Szene exportiert wird.

Arbeitsabläufe importieren

Der Godot-Szenenimporter ermöglicht verschiedene Workflows hinsichtlich der Art und Weise, wie Daten importiert werden. Abhängig von vielen Optionen ist es möglich, eine Szene zu importieren mit:

  • Externe Materialien (Standard): Wo jedes Material in einer Dateiressource gespeichert wird. Änderungen an ihnen werden aufbewahrt.

  • Äußere Meshes: Wo jedes Mesh in einer anderen Datei gespeichert wird. Viele Benutzer ziehen es vor, mit Meshes direkt zu arbeiten.

  • Externe Animationen: Ermöglicht es, gespeicherte Animationen zu modifizieren und zusammenzuführen, wenn sich die Quellen ändern.

  • Externe Szenen: Speichern Sie jeden der Wurzelnodes der importierten Szenen als eine separate Szene.

  • Einzelne Szene: Eine einzige Szenendatei, in der alles eingebaut ist.

../../_images/scene_import1.png

Da verschiedene Entwickler unterschiedliche Bedürfnisse haben, ist dieser Importprozess in hohem Maße anpassbar.

Import-Optionen

Der Importer hat mehrere Optionen, die im Folgenden erläutert werden:

../../_images/scene_import2.png

Nodes

Wurzeltyp

Standardmäßig ist der Typ des Wurzelnodes in importierten Szenen "Räumlich", aber das kann geändert werden.

Wurzelname

Erlaubt einem erzeugtem Wurzel Node einen spezifischen Namen zu geben.

Wurzelskalierung

Die Rolle des Wurzel Node.

Eigenes Skript

Ein spezielles Skript zur Bearbeitung der gesamten Szene nach dem Import kann zur Verfügung gestellt werden. Dies eignet sich hervorragend zur Nachbearbeitung, zum Materialwechsel, für lustige Sachen mit der Geometrie usw.

Erstelle ein Skript wie folgt:

tool # Needed so it runs in the editor.
extends EditorScenePostImport


func post_import(scene):
    # Do your stuff here.
    return scene # remember to return the imported scene

Die Funktion post_import nimmt die importierte Szene als Argument (der Parameter ist eigentlich das Wurzelnode der Szene). Die Szene, die schließlich verwendet werden soll, muss zurückgegeben werden. Es kann eine andere Szene sein.

Speicher

Standardmäßig importiert Godot eine einzelne Szene. Mit dieser Option kann festgelegt werden, dass die Nodes unterhalb der Wurzel jeweils eine separate Szene darstellen und in die importierte Szene instanziert werden.

Natürlich funktioniert auch das manuelle Instanzieren solcher importierten Szenen an anderen Orten.

Materialien

Ort

Godot unterstützt Materialien in Meshes oder Nodes. Standardmäßig werden Materialien auf jeden Node gelegt.

Speicher

Materialien können innerhalb der Szene oder in externen Dateien gespeichert werden. Standardmäßig werden sie in externen Dateien gespeichert, so dass ihre Bearbeitung möglich ist. Dies liegt daran, dass die meisten 3D-DCCs nicht dieselben Materialoptionen wie die in Godot vorhandenen haben.

Wenn Materialien eingebaut sind, gehen sie jedes Mal verloren, wenn die Ausgangsszene geändert und wieder importiert wird.

Bemerkung

Godot wird Materialien, die in externen Dateien gespeichert sind, nicht reimportieren, es sei denn, Sie entfernen die zugehörige .material Datei vor dem Reimport.

Um das erneute Importieren von Materialien bei jedem erneuten Importieren der 3D-Szene zu erzwingen, ändern Sie den Materialspeichermodus in der 3D-Szene, indem Sie ihn im Dateisystem-Dock auswählen, zum Import-Dock wechseln und Material> Speicher auf Integriert* setzen, anstatt auf **Dateien.

Bei Neuimport behalten

Sobald Materialien bearbeitet wurden, um Godot-Funktionen zu verwenden, behält der Importer die bearbeiteten Materialien und ignoriert die aus der Ausgangsszene stammenden. Diese Option ist nur vorhanden, wenn Materialien als Dateien gespeichert werden.

Meshes

Komprimieren

Lässt Meshes weniger genaue Zahlen für mehrere Aspekte des Meshes verwenden, um Platz zu sparen.

Diese sind:
  • Transformationsmatrix (Position, Drehung und Skalierung): 32-Bit-Fließkommazahl in 16-Bit-Ganzzahl mit Vorzeichen.

  • Eckpunkte : 32-Bit-Fließkommazahl in 16-Bit-Ganzzahl mit Vorzeichen.

  • Normals: 32-Bit-Float in 32-Bit-Ganzzahl ohne Vorzeichen.

  • Tangenten : 32-Bit-Fließkommazahl in 32-Bit-Ganzzahl ohne Vorzeichen.

  • Vertex Farben : 32-Bit-Float in 32-Bit-Ganzzahl ohne Vorzeichen.

  • UV : 32-Bit-Fließkommazahl in 32-Bit-Ganzzahl ohne Vorzeichen.

  • UV2 : 32-Bit-Fließkommazahl in 32-Bit-Ganzzahl ohne Vorzeichen.

  • Vertex-Gewichtungen : 32-Bit-Fließkommazahl in 16-Bit-Ganzzahl ohne Vorzeichen.

  • Ankerknochen: 32-Bit-Fließkommazahl in 16-Bit-Ganzzahl ohne Vorzeichen.

  • Array-Index: 32-Bit- oder 16-Bit-Ganzzahl ohne Vorzeichen, basierend auf der Anzahl der Elemente.

Zusätzliche Info:
  • UV2 = Der zweite UV-Kanal für Detailtexturen und gebrannte LightMap-Texturen.

  • Array-Index = Ein Array von Zahlen, die jedes Element der obigen Arrays nummerieren. d.h. sie nummerieren die Eckpunkte und Normals.

In einigen Fällen kann dies zu einem Genauigkeitsverlust führen. Daher kann es erforderlich sein, diese Option zu deaktivieren. Wenn beispielsweise ein Netz sehr groß ist oder mehrere Netze importiert werden die einen großen Bereich abdecken, kann das Komprimieren des Imports dieser Netze dazu führen, dass Lücken in der Geometrie sind oder Eckpunkte sich nicht genau dort befinden, wo sie sein sollten.

Tangenten sicherstellen

If textures with normal mapping are to be used, meshes need to have tangent arrays. This option ensures that these are generated if not present in the source scene. Godot uses Mikktspace for this, but it's always better to have them generated in the exporter.

Speicher

Meshes können in separaten Dateien (Ressourcen) anstatt in integrierten Dateien gespeichert werden. Dies hat wenig praktischen Nutzen, es sei denn, man möchte Objekte direkt mit ihnen erstellen.

Diese Option hilft denjenigen, die lieber direkt mit Meshes als mit Szenen arbeiten.

Light Baking

Gibt an, ob das Mesh in gebrannten LightMaps verwendet wird.

  • Deaktiviert: Das Mesh wird in gebrannten LightMaps nicht verwendet.

  • Aktiviert: Das Mesh wird in gebrannten LightMaps verwendet.

  • Gen Lightmaps: Das Mesh wird in gebrannten LightMaps verwendet und entpackt einen zweiten UV-Schicht für LightMaps.

Bemerkung

Für weitere Informationen zum Brennen von Beleuchtung siehe Gebackene LightMaps.

Externe Dateien

Generierte Meshes und Materialien können optional in einem Unterverzeichnis mit dem Namen der Szene gespeichert werden.

Animationsoptionen

Godot bietet viele Optionen für den Umgang mit Animationsdaten. Einige Exporteure (z.B. Blender) können viele Animationen in einer einzigen Datei generieren. Andere wie 3DS Max oder Maya, benötigen viele Animationen, die in dieselbe Zeitleiste eingefügt werden oder im schlimmsten Fall jede Animation in einer separaten Datei.

../../_images/scene_import3.png

Import von Animationen ist standardmäßig aktiv.

Achtung

Um Animationen aus einer importierten 3D-Szene zu ändern, müssen Sie im Import-Dock die Option zum Speichern von Animationen von Built-In auf Dateien ändern. Andernfalls gehen Änderungen, die an Animationen aus Godot vorgenommen wurden, verloren, wenn das Projekt ausgeführt wird.

FPS

Die meisten 3D-Exportformate speichern die Animationszeitleiste in Sekunden anstelle von Frames. Um sicherzustellen, dass Animationen so originalgetreu wie möglich importiert werden, geben Sie bitte die Bilder pro Sekunde an, mit denen sie bearbeitet werden. Andernfalls kann es zu verwackelten Animationen kommen.

Skript filtern

Es ist möglich ein Filterskript in einer speziellen Syntax anzugeben, um zu entscheiden, welche Spuren von welchen Animationen beibehalten werden sollen.

Das Filterskript wird für jede importierte Animation ausgeführt. Die Syntax besteht aus zwei Arten von Anweisungen, die erste zur Auswahl der zu filternden Animationen und die zweite zum Filtern einzelner Spuren innerhalb der übereinstimmenden Animation. Alle Namensmuster werden unter Verwendung einer von Groß- und Kleinschreibung unabhängigen Ausdrucksübereinstimmung mit ? und * Platzhaltern ausgeführt (unter der Haube wird String.matchn() verwendet).

Das Skript muss mit einer Animationsfilteranweisung beginnen (wie durch die mit einem @ beginnende Zeile angegeben). Zum Beispiel, wenn wir Filter auf alle importierten Animationen anwenden möchten, deren Name auf "_Loop" endet:

@+*_Loop

In ähnlicher Weise können weitere Muster durch Kommas getrennt in derselben Zeile hinzugefügt werden. Hier ist ein geändertes Beispiel, das zusätzlich alle Animationen miteinbezieht, deren Namen mit "Arm_Left" beginnen, aber auch alle Animationen ausschließt, deren Namen mit "Attack" enden:

@+*_Loop, +Arm_Left*, -*Attack

Im Anschluss an die Erklärung zum Animationsauswahlfilter fügen wir Spurfilterungsmuster hinzu, um anzugeben, welche Animationsspuren beibehalten oder verworfen werden sollen. Wenn keine Spurfiltermuster angegeben wurden, werden alle Spuren innerhalb der übereinstimmenden Animationen verworfen!

Es ist wichtig zu beachten, dass die Anweisungen des Spurfilters für jede Spur innerhalb der Animation der Reihe nach angewendet werden, d.h. eine Zeile kann eine Spur enthalten, eine spätere Regel kann ihn immer noch verwerfen. In ähnlicher Weise kann eine durch eine frühe Regel ausgeschlossene Spur dann durch eine Filterregel weiter unten im Filterskript wieder aufgenommen werden.

Nehmen Sie zum Beispiel alle Spuren in Animationen mit Namen, die auf "_Loop" enden, aber verwerfen Sie alle Spuren, die ein "Skelett" betreffen, das auf "Control" endet, es sei denn, sie haben "Arm" in ihrem Namen:

@+*_Loop
+*
-Skeleton:*Control
+*Arm*

Im obigen Beispiel würden Spuren wie "Skeleton:Leg_Control" verworfen, während Spuren wie "Skeleton:Head" oder "Skeleton:Arm_Left_Control" beibehalten würden.

Alle Spurfilterlinien, die nicht mit einem + oder - beginnen, werden ignoriert.

Speicher

Standardmäßig werden Animationen als eingebaut gespeichert. Es ist möglich, sie stattdessen in einer Datei zu speichern. Dies erlaubt es, den Animationen benutzerdefinierte Spuren hinzuzufügen und sie nach einem Reimport beizubehalten.

Optimierer

Wenn Animationen importiert werden, wird ein Optimierer ausgeführt, der die Größe der Animation erheblich reduziert. Im Allgemeinen sollte dieser immer eingeschaltet sein, es sei denn, Sie vermuten, dass eine Animation aufgrund seiner Aktivierung beschädigt sein könnte.

Animationsausschnitte

Es ist möglich, mehrere Animationen aus einer einzigen Zeitleiste als Clips anzugeben. Damit dies funktioniert, muss das Model nur eine einzige Animation haben, die als default bezeichnet wird. Um Clips zu erstellen, ändern Sie die Clipmenge auf etwas größer als Null. Sie können dann einen Clip benennen, angeben, auf welchen Frames er startet und stoppt, und wählen, ob die Animation eine Schleife bildet oder nicht.

Szenenvererbung

In vielen Fällen kann es erwünscht sein, Änderungen an der importierten Szene vorzunehmen. Standardmäßig ist dies nicht möglich, denn wenn sich das Quell-Asset ändert (Datei .dae, .gltf, .obj, die aus einer 3D-Modellierungsanwendung reexportiert wurde), wird Godot die gesamte Szene wieder importieren.

Es ist jedoch möglich, mit Hilfe der Szenenvererbung lokale Änderungen vorzunehmen. Versuchen Sie, die importierte Szene zu öffnen, und der folgende Dialog erscheint:

../../_images/scene_import4.png

In geerbten Szenen sind die einzigen Einschränkungen für Modifikationen:

  • Nodes können nicht entfernt werden (können aber überall hinzugefügt werden).

  • Sub-Ressourcen können nicht bearbeitet werden (speichern Sie sie extern, wie oben dafür beschrieben)

Ansonsten ist alles erlaubt!

Tipps zum Import

Viele Male wenn eine Szene bearbeitet wird, sind häufig einige Aufgaben nach dem Exportieren zu erledigen:

  • Kollisionserkennung zu Objekten hinzufügen.

  • Objekte als Navigations-Meshes setzen.

  • Nodes löschen, die in der Spiele-Engine nicht genutzt werden (wie bestimmte Lichter die zum Modellieren genutzt wurden).

Um diesen Arbeitsablauf zu vereinfachen, bietet Godot mehrere Suffixe an, die den Namen der Objekte in Ihrer 3D-Modellierungssoftware hinzugefügt werden können. Beim Import erkennt Godot Suffixe in Objektnamen und führt automatisch Aktionen aus.

Bemerkung

Alle unten beschriebenen Suffixe sind case-sensitive.

Nodes entfernen (-noimp)

Objekte, die das Suffix -noimp haben, werden beim Import entfernt, unabhängig von ihrem Typ. Sie werden in der importierten Szene nicht erscheinen.

Kollisionen erzeugen (-col, -convcol, -colonly, -convcolonly)

Die Option -col funktioniert nur für Mesh-Objekte. Bei der Erkennung wird ein untergeordneter statischer Kollisionsnode hinzugefügt, das die gleiche Geometrie wie das Mesh verwendet. Dadurch wird eine Dreiecksmesh-Kollisionsform erzeugt, was eine langsame, aber genaue Option für die Kollisionserkennung ist. Diese Option ist normalerweise das, was Sie für ebene Geometrie wünschen (siehe aber auch -colonly weiter unten).

Die Option -convcol erzeugt eine ConvexPolygonShape statt einer ConcavePolygonShape. Im Gegensatz zu Dreiecksmeshes, die konkav sein können, kann eine konvexe Form nur eine Form genau darstellen, die keine konkaven Winkel hat (eine Pyramide ist konvex, aber ein Hohlkasten ist konkav). Aus diesem Grund sind konvexe Kollisionsformen im Allgemeinen nicht für ebene Geometrie geeignet. Bei der Darstellung von Meshes, die einfach genug sind, können konvexe Kollisionsformen im Vergleich zu einer dreieckigen Kollisionsform zu einer besseren Leistung führen. Diese Option ist ideal für einfache oder dynamische Objekte, die eine weitgehend genaue Kollisionserkennung erfordern.

However, in both cases, the visual geometry may be too complex or not smooth enough for collisions. This can create physics glitches and slow down the engine unnecessarily.

Um dies zu lösen, gibt es den -colonly Modifikator. Er entfernt das Mesh beim Importieren und erzeugt stattdessen eine :ref:class_staticbody Kollision. Dies hilft dabei, das visuelle Mesh und die tatsächliche Kollision zu trennen.

Die Option -convcolonly funktioniert auf ähnliche Weise, erzeugt aber stattdessen eine ConvexPolygonShape.

Die Option -colonly kann auch mit leeren Objekten von Blender verwendet werden. Beim Import wird ein :ref:``class_staticbody` mit einem Kollisionsnode als Kind erzeugt. Das Kollisionsnode wird eine von mehreren vordefinierten Formen haben, abhängig vom leeren Zeichnungstyp von Blender:

../../_images/3dimp_BlenderEmptyDrawTypes.png

Wenn möglich, versuchen Sie, einige wenige primitive Kollisionsformen anstelle von Dreiecksmesh oder konvexen Formen zu verwenden. Primitive Formen haben oft die beste Leistung und Zuverlässigkeit.

Bemerkung

Für eine bessere Sichtbarkeit im Editor von Blender können Sie die Option "X-Ray" für leere Kollisionen einstellen und in Blender's Benutzereinstellungen > Themen > 3D-Ansicht > Leer eine bestimmte Farbe für sie festlegen.

Siehe auch

Siehe Kollisionsformen (3D) für einen umfassenden Überblick über Kollisionsformen.

Navigation erzeugen (-navmesh)

Ein Mesh Node mit dem Suffix -navmesh wird in ein Navigations mesh umgewandelt. Das ursprüngliche Mesh-Objekt wird zum Zeitpunkt des Imports entfernt.

Ein Fahrzeug-Körper erzeugen (-vehicle)

Ein mesh node mit dem Suffix -vehicle wird als Kind eines VehicleBody -Nodes importiert.

Ein Fahrzeug-Rad erzeugen (-wheel)

Ein mesh node mit dem Suffix -wheel wird als Kind zu einem VehicleWheel Node importiert.

Starrer Körper (-rigid)

Ein mesh node mit dem Suffix -rigid wird als ein RigidBody importiert.

Animations-Schleife (-loop, -cycle)

Animationsclips im COLLADA-Dokument, die mit dem Token loop oder cycle beginnen oder enden, werden als Godot-Animation mit gesetztem Loop-Flag importiert. Im Gegensatz zu den anderen oben beschriebenen Suffixen ist hier kein Bindestrich erforderlich.

In Blender erfordert dies die Verwendung des NLA-Editors und die Benennung der Aktion mit dem Präfix oder Suffix loop oder cycle.