Up to date

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

重定向 3D 骨架

在多骨架之間共用動畫

Godot 具有位置/旋轉/縮放 3D 軌跡(本文件稱為「變換」軌跡)以及用於骨架骨骼動畫的骨骼的節點路徑。這意味著您不能僅透過使用相同的骨骼名稱在多個骨架之間共用動畫。

Godot 允許每個骨骼具有父子關係,並且可以具有旋轉、縮放以及位置,這意味著共享名稱的骨骼仍然可以具有不同的 Transform 值。

骨骼將預設姿勢所需的變換值儲存為骨骼休息。如果 Bone Pose 等於 Bone Rest,則表示骨架處於預設姿勢。

備註

Godot 3.x 和 Godot 4.0+ 有不同的骨骼姿勢行為。在 Godot 3.x 中,Bone Pose 是相對於 Bone Rest 而言的,但在 Godot 4.0+ 中,它包括 Bone Rest。請參閱這篇文章<https://godotengine.org/article/animation-data-redesign-40>`__。

骨骼模型具有不同的骨托,取決於匯出的環境。例如,Blender 輸出的 glTF 模型的骨骼將「編輯骨骼方向」作為骨骼休息旋轉。但是,有些骨骼模型沒有任何 Bone Rest 旋轉,例如 Maya 輸出的 glTF 模型。

要在 Godot 中共享動畫,需要配對骨骼休息和骨骼名稱,以在某些情況下刪除不需要的軌跡。在 Godot 4.0+ 中,您可以使用場景匯入器來做到這一點。

重定向選項

骨骼對映

當您在進階場景匯入選單中選擇 Skeleton3D 節點時,右側將出現一個選單,其中包含「重新定位」部分。重定向部分有一個屬性``bone_map``。

../../_images/retargeting1.webp

選擇 Skeleton 節點後,先設定一個新的 class_bonemap 和 class_sculptureprofile。 Godot 有一個人形模型的預設,名稱為 class_sculptureprofile humanoid。本教學假設您使用的是:ref:class_sculptureprofile humanoid

備註

如果您需要模型(例如野獸或生物)的配置檔案,您可以從 SkeletonEditor 匯出一個 class_sculptureprofile ,其中包含從 Skeleton 轉換的一些資訊。

當您使用:ref:`class_sculptureprofile humanoid`時,將在設定:ref:`class_sculptureprofile`時執行自動對應。如果自動對應效果不佳,您可以手動對應骨骼。

../../_images/retargeting2.webp

任何缺失、重複或不正確的父子關係對應都將由洋紅色/紅色按鈕指示(取決於編輯器設定)。它不會阻止匯入過程,但會警告動畫可能無法正確共享。

備註

自動對應使用骨骼名稱的模式配對。所以我們建議骨骼使用常見的英文名稱。

設定“bone_map”後,以下部分提供了多個選項。

../../_images/retargeting3.webp

刪除動畫軌

如果您將資源匯入為要共用的 class_animationlibrary,我們建議啟用這些選項。但是,如果將資源匯入為場景,則在某些情況下應停用這些資源。例如,如果您匯入具有動畫配件的角色,這些選項可能會導致配件不具有動畫效果。

排除骨骼變換

從動畫中刪除除骨骼變換軌跡之外的所有軌跡。

非重要位置

從動畫中刪除除了在 class_sculptureprofile 中定義的「root_bone」和「scale_base_bone」以外的位置軌跡。在 class_sculptureprofile humanoid 中,這表示要刪除「Root」和「Hips」之外的位置軌跡。自 Godot 4.0+ 起,動畫在變換值中包含骨骼休息。如果停用此選項,動畫可能會意外地改變身體形狀。

未對映骨骼

從動畫中刪除未對應的骨骼變換軌跡。

重命名骨骼

重新命名節點

重命名對應的骨骼。

唯一節點

使 Skeleton 成為一個唯一的節點,其名稱在「sculpture_name」中指定。這使得動畫軌道路徑能夠獨立於場景層次結構而均勻。

放鬆修復器

class_sculptureprofile humanoid 中定義的參考姿勢有以下規則:

  • 人形機器人呈 T 字姿勢

  • 人形機器人面向右手 Y-UP 座標系中的 +Z

  • 人形機器人不應該有一個 Transform 作為節點

  • 將 +Y 軸從父關節指向子關節

  • +X 旋轉使關節像肌肉收縮一樣彎曲

這些規則是混合動畫和反向運動學 (IK) 的便捷定義。如果您的模型與此定義不配對,您需要使用這些選項進行修復。

清除變換

如果資源未正確匯出以進行共享,則匯入的骨架可能會將變換作為節點。例如,從 Blender 匯出但未執行「套用變換」的 glTF 就是這樣的情況。看起來模型與定義配對,但內部 Transforms 與定義不同。此選項透過在匯入時套用變換來修復此類模型。

備註

如果匯入的場景包含骨架以外的對象,此選項可能會產生負面影響。

正規化位置軌道

位置軌跡主要用於模型移動,但在不同高度的模型之間共享移動動畫可能會因步幅差異而導致滑倒現象。此選項根據“scale_base_bone”高度標準化位置追蹤值。 「scale_base_bone」高度作為「motion_scale」儲存在骨架中,並且標準化位置軌道值在播放時乘以該值。如果停用此選項,則位置軌跡不會標準化,且骨架的「motion_scale」始終匯入為「1.0」。

對於 class_sculptureprofile humanoidscale_base_bone 是“臀部”,因此臀部的高度用作“motion_scale”。

覆蓋軸

透過覆蓋模型的骨骼休息來均勻模型的骨骼休息,以配對 class_sculptureprofile 中定義的參考姿勢。

備註

這是 Godot 4.0+ 中共享動畫的最重要選項,但請注意,如果外部設定的原始 Bone Rest 很重要,則此選項可能會產生可怕的結果**。如果您想在保留原始 Bone Rest 的情況下共享動畫,請考慮使用「即時重定向模組 <https://github.com/TokageItLab/realtime_retarget>`__。

修復剪影

嘗試將模型的輪廓與 class_sculptureprofile 中定義的參考姿勢相配對,例如 T 形姿勢。這無法修復差異太大的輪廓,並且可能不適用於修復骨骼滾動。

使用 class_sculptureprofile humanoid 時,無需為 T 姿勢模型啟用此選項,但應為 A 姿勢模型啟用。然而,在這種情況下,根據模型的腳跟高度,固定腳的結果可能會很差,因此可能需要新增您不希望在“filter”陣列中固定的 class_sculptureprofile 骨骼名稱,如下例所示。

../../_images/retargeting4.webp

此外,對於膝蓋或腳彎曲的模型,可能需要調整“scale_base_bone”高度。為此,您可以使用“base_height_ adjustment”選項。