Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Neuzuweisung von 3D-Skeletten

Animationen von mehreren Skeletten gemeinsam nutzen

Godot hat Positions/Rotations/Scalkalierungs-3D-Tracks (in diesem Dokument "Transform"-Tracks genannt) mit Nodepaths zu Knochen für Skelett-Knochen-Animation. Das bedeutet, dass Sie Animationen nicht von mehreren Skeletten nutzen können, indem Sie einfach die gleichen Knochen-Namen verwenden.

Godot erlaubt es jedem Knochen, eine Parent-Child-Beziehung zu haben und kann Rotation und Skalierung sowie Position haben, was bedeutet, dass Knochen, die den gleichen Namen haben, trotzdem unterschiedliche Transform-Werte haben können.

Das Skelett speichert die Transform-Werte, die für die Standard-Pose erforderlich sind, als Knochen-Standardpose. Wenn die Knochenpose gleich Knochen-Standardpose ist, bedeutet dies, dass sich das Skelett in der Standard-Pose befindet.

Bemerkung

Godot 3.x und Godot 4.0+ haben ein unterschiedliches Verhalten der Knochenpose. In Godot 3.x ist die Knochenpose relativ zur Knochen-Standardpose, aber in Godot 4.0+ umfasst sie die Knochen-Standardpose. Siehe diesen Artikel.

Skelettmodelle haben je nach der Umgebung, aus der sie exportiert wurden, unterschiedliche Knochen-Standardposen. Zum Beispiel haben die Knochen eines glTF-Modells, das aus Blender ausgegeben wurde, "Edit Bone Orientation" als Knochen-Standard-Rotation. Es gibt jedoch auch Skelettmodelle ohne Knochen-Standard-Rotation, wie z. B. die glTF-Modellausgabe aus Maya.

Um Animationen in Godot gemeinsam zu nutzen, ist es notwendig, sowohl Knochen-Standardpose als auch Knochen-Namen abzugleichen, um in einigen Fällen unerwünschte Tracks zu entfernen. In Godot 4.0+ können Sie dies mit dem Szenenimporter tun.

Optionen für Neuzuweisung

Knochen-Map

Wenn Sie den Skeleton3D-Node im erweiterten Szenenimportmenü auswählen, erscheint auf der rechten Seite ein Menü, das den Abschnitt "Neuzuweisen" enthält. Der Abschnitt "Neuzuweisen" hat eine einzige Property bone_map.

../../_images/retargeting1.webp

Wenn der Skeleton-Node ausgewählt ist, legen Sie zunächst eine neue BoneMap und SkeletonProfile an. Godot hat eine Vorgabe namens SkeletonProfileHumanoid für humanoide Modelle. Dieses Tutorial geht davon aus, dass Sie SkeletonProfileHumanoid verwenden.

Bemerkung

Wenn Sie ein Profil für ein Modell wie ein Tier oder eine Kreatur benötigen, können Sie ein SkeletonProfile aus SkeletonEditor mit einigen aus Skeleton konvertierten Informationen exportieren.

Wenn Sie SkeletonProfileHumanoid verwenden, wird ein automatisches Zuordnung durchgeführt, wenn das SkeletonProfile gesetzt ist. Wenn die automatische Zuordnung nicht gut funktioniert, können Sie Knochen manuell zuordnen.

../../_images/retargeting2.webp

Fehlende, doppelte oder falsche Zuordnungen von Parent-Child-Beziehungen werden durch eine magentafarbene/rote Schaltfläche angezeigt (je nach Editoreinstellung). Sie blockiert den Importvorgang nicht, warnt aber davor, dass Animationen möglicherweise nicht korrekt geteilt werden.

Bemerkung

Die automatische Zuordnung verwendet Pattern Matching für die Knochennamen. Wir empfehlen daher, gebräuchliche englische Namen für Knochen zu verwenden.

Nachdem Sie die bone_map eingerichtet haben, stehen Ihnen in den folgenden Abschnitten verschiedene Optionen zur Verfügung.

../../_images/retargeting3.webp

Tracks entfernen

Wenn Sie Ressourcen als AnimationLibrary importieren, die gemeinsam genutzt werden sollen, empfehlen wir, diese Optionen zu aktivieren. Wenn Sie jedoch Ressourcen als Szenen importieren, sollten diese Optionen in einigen Fällen deaktiviert werden. Wenn Sie zum Beispiel einen Charakter mit animierten Accessoires importieren, können diese Optionen dazu führen, dass die Accessoires nicht animiert werden.

Außer Knochen-Transform

Entfernt alle Tracks außer dem Knochen-Transform-Track aus den Animationen.

Unwichtige Positionen

Entfernt andere Positions-Tracks als root_bone und scale_base_bone, die in SkeletonProfile definiert sind, aus den Animationen. In SkeletonProfileHumanoid bedeutet dies, dass andere Positions-Tracks als "Root" und "Hips" entfernt werden sollen. Seit Godot 4.0+ schließen Animationen die Knochen-Standardpose in den Transform-Wert ein. Wenn Sie diese Option deaktivieren, kann die Animation die Körperform unvorhersehbar verändern.

Nicht-zugeordnete Knochen

Entfernt nicht zugeordnete Bone-Transform-Tracks aus den Animationen.

Knochen-Umbenenner

Knochen umbenennen

Umbenennen der zugeordneten Knochen.

Einzigartiger Node

Macht das Skelett zu einem eindeutigen Node mit dem in skeleton_name angegebenen Namen. Dies ermöglicht die Vereinheitlichung der Animationspfade unabhängig von der Szenenhierarchie.

Ruheposen-Fixer

Für die in SkeletonProfileHumanoid definierten Referenzposen gelten die folgenden Regeln:

  • Für Humanoide gilt die T-Pose

  • Der Humanoide ist im rechtshändigen Y-oben-Koordinatensystem nach +Z ausgerichtet

  • Der Humanoide sollte keinen Transform als Node haben

  • Richtet die +Y-Achse vom Parent-Gelenk zum Child-Gelenk

  • Die +X-Rotation beugt das Gelenk wie ein Muskel, der sich zusammenzieht

Diese Regeln sind praktische Definitionen für Blend-Animationen und Inverse Kinematik (IK). Wenn Ihr Modell nicht dieser Definition entspricht, müssen Sie es mit diesen Optionen korrigieren.

Node-Transform anwenden

Wenn das Asset nicht korrekt für die gemeinsame Nutzung exportiert wurde, kann das importierte Skelett einen Transform als Node haben. Ein aus Blender exportiertes glTF, bei dem kein "Apply Transform" ausgeführt wurde, ist beispielsweise ein solcher Fall. Es sieht so aus, als ob das Modell mit der Definition übereinstimmt, aber die internen Transforms unterscheiden sich von der Definition. Diese Option behebt solche Modelle, indem Transforms beim Import angewendet werden.

Bemerkung

Wenn die importierte Szene andere Objekte als Skelette enthält, kann sich diese Option nachteilig auswirken.

Positions-Tracks normalisieren

Der Positions-Track wird hauptsächlich für die Bewegung des Modells verwendet, aber die gemeinsame Nutzung der Bewegungsanimation durch Modelle mit unterschiedlichen Höhen kann aufgrund der unterschiedlichen Schrittlänge zu einem Verrutschen führen. Diese Option normalisiert die Werte des Positions-Tracks basierend auf der scale_base_bone-Höhe. Die scale_base_bone-Höhe wird im Skelett als motion_scale gespeichert, und die normalisierten Position-Track-Werte werden beim Abspielen mit diesem Wert multipliziert. Wenn diese Option deaktiviert ist, werden die Positions-Tracks nicht normalisiert und die motion_scale des Skeletts wird immer als 1.0 importiert.

Bei SkeletonProfileHumanoid ist scale_base_bone "Hips", daher wird die Höhe der Hüfte als motion_scale verwendet.

Achse überschreiben

Vereinheitlicht die Knochen-Standardposen der Modelle durch Überschreiben, damit sie mit den im SkeletonProfile definierten Referenzposen übereinstimmen.

Bemerkung

Dies ist die wichtigste Option für die gemeinsame Nutzung von Animationen in Godot 4.0+, aber seien Sie sich bewusst, dass diese Option zu schrecklichen Ergebnissen führen kann, wenn die ursprüngliche, extern gesetzte Knochen-Ruhepose wichtig ist. Wenn Sie Animationen unter Beibehaltung der ursprünglichen Knochen-Ruhepose teilen möchten, sollten Sie das Realtime Retarget Module verwenden.

Korrigieren der Silhouette

Versucht, die Silhouette des Modells an die in SkeletonProfile definierten Referenzposen, wie z. B. T-Pose, anzupassen. Dies kann keine Silhouetten korrigieren, die zu unterschiedlich sind, und es funktioniert möglicherweise nicht für die Korrektur von Knochen-Rollen.

Mit SkeletonProfileHumanoid muss diese Option für T-Pose-Modelle nicht aktiviert werden, sollte aber für A-Pose-Modelle aktiviert werden. In diesem Fall können die Ergebnisse für den fixierten Fuß jedoch schlecht sein, abhängig von der Fersenhöhe des Modells, so dass es notwendig sein kann, die SkeletonProfile Knochen-Namen, die nicht fixiert werden sollen, in das Filter-Array einzufügen, wie im folgenden Beispiel.

../../_images/retargeting4.webp

Außerdem kann es bei Modellen mit gebeugten Knien oder Füßen notwendig sein, die Höhe der scale_base_bone anzupassen. Hierfür können Sie die Option base_height_adjustment verwenden.