Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

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 and Godot 4 have different Bone Pose behaviors. In Godot 3, Bone Pose is relative to Bone Rest, but in Godot 4, it includes Bone Rest. See this article for more information.

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.

To share animations in Godot, it is necessary to match Bone Rests as well as Bone Names to remove unwanted tracks in some cases. You can do that using the scene importer.

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 anderes Profil als SkeletonProfileHumanoid benötigen, können Sie ein SkeletonProfile aus dem Editor exportieren, indem Sie ein Skeleton3D auswählen und das Menü Skeleton3D in der Toolbar des 3D-Viewports verwenden.

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 einen magentafarbenen/roten Button 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

Removes Position tracks other than root_bone and scale_base_bone defined in SkeletonProfile from the animations. In SkeletonProfileHumanoid, this means that to remove Position tracks other than "Root" and "Hips". Since Godot 4, animations include Bone Rest in the Transform value. If you disable this option, the animation may change the body shape unpredictably.

Nicht-zugeordnete Knochen

Entfernt nicht zugeordnete Knochen-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

This is the most important option for sharing animations in Godot 4, but be aware that this option can produce horrible results if the original Bone Rest set externally is important. If you want to share animations with keeping the original Bone Rest, consider to use the Realtime Retarget Module.

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.