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 (recommended). Godot has full support for both text (.gltf) and binary (.glb) formats.

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

  • OBJ (Wavefront) format + their MTL material files. This is also fully supported, but pretty limited (no support for pivots, skeletons, animations, PBR materials, ...).

  • ESCN, a Godot-specific format that Blender can export with a plugin.

  • 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.

Bemerkung

Blender exportiert keine emissiven Texturen mit der glTF-Datei. Wenn Ihr Model eine solche verwendet, muss sie separat eingebracht werden.

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.

Exporting textures separately

While textures can be exported with a model in certain file formats, such as glTF 2.0, you can also export them separately. Godot uses PBR (physically based rendering) for its materials, so if a texturing program can export PBR textures, they can work in Godot. This includes the Substance suite, ArmorPaint (open source), and Material Maker (open source).

Bemerkung

For more information on Godot's materials, see 3D Materialien (Spatial).

Exporting considerations

Since GPUs can only render triangles, meshes that contain quads or N-gons have to be triangulated before they can be rendered. Godot can triangulate meshes on import, but results may be unpredictable or incorrect, especially with N-gons. Regardless of the target application, triangulating before exporting the scene will lead to more consistent results and should be done whenever possible.

To avoid issues with incorrect triangulation after importing in Godot, it is recommended to make the 3D DCC triangulate objects on its own. In Blender, this can be done by adding a Triangulate modifier to your objects and making sure Apply Modifiers is checked in the export dialog. Alternatively, depending on the exporter, you may be able to find and enable a Triangulate Faces option in the export dialog.

To avoid issues with 3D selection in the editor, it is recommended to apply the object transform in the 3D DCC before exporting the scene.

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 ("Knoten")

Wurzel-Typ

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

Wurzel-Name

Erlaubt einem erzeugtem Wurzel Node einen spezifischen Namen zu geben.

Wurzel-Umfang

Die Rolle des Wurzel Node.

benutzerdefiniertes 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.

Weiter reimportieren

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

komprimiert

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

Wenn Texturen mit normaler Zuordnung verwendet werden sollen, müssen Netze Tangentenarrays haben. Diese Option stellt sicher, dass diese generiert werden, wenn sie nicht in der Quellenszene vorhanden sind. Godot verwendet dafür Mikktspace, aber es ist immer besser, sie im Exporteur generieren zu lassen.

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.

Beleuchtung brennen

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

To modify animations from an imported 3D scene, you need to change the animation storage option from Built-In to Files in the Import dock. Otherwise, changes made to animations from Godot will be lost when the project is run.

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.

Filter Skript

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.

Clips

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.

In beiden Fällen kann die visuelle Geometrie jedoch zu komplex oder nicht glatt genug für Kollisionen sein. Dies kann zu physikalischen Störungen führen und die Engine unnötig verlangsamen.

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.