如何為網頁與遊戲引擎匯出 3D 動畫
要為網頁或遊戲引擎匯出 3D 動畫,請使用 glTF——GLB 是它的單檔二進位形式——或 FBX。兩者都儲存節點階層、骨架、蒙皮權重與關鍵影格片段。glTF 是瀏覽器與多數引擎原生讀取的開放標準;FBX 則是 Maya、3ds Max、Unity 與 Unreal 管線長期建立的交換格式。轉換後能保留什麼取決於匯出器,因此約束、IK 與程序化動作要先烘焙成關鍵影格。
作者: Mixos
簡短回答
把格式無法儲存的任何東西——IK、約束、驅動器與模擬——烘焙成關鍵影格,檢查片段的名稱與長度,然後為網頁與多數現代引擎匯出 GLB,或在管線預期時匯出 FBX。變換、骨架動畫與形狀關鍵影格權重會保留;綁定控制、自訂曲線與設定關鍵影格的材質數值通常不會。在你依賴檔案之前,先在目標中開啟它。
逐步說明
- 1
烘焙格式無法儲存的東西
檔案格式儲存的是關鍵影格,而不是產生它們的系統。IK 解算器、約束、驅動器、表達式與模擬,必須在匯出前取樣成一般關鍵影格,否則檔案抵達時,它們原本的位置就沒有動作。在 Studio 中,Rigging 面板中的 Bake IK,以及驅動器用的 Animate ▸ Bake motion to keyframes…,各自都能做到這件事。
- 2
命名並修剪片段
引擎會把檔案中的每個動畫依名稱匯入為獨立片段。請給片段程式設計師看得懂的名稱——Walk、Idle、Open——並檢查每個片段的長度,因為有個關鍵影格孤零零地落在結尾後二十格的片段,會播放二十格的空白。
- 3
選擇格式
GLB 適用於網頁,以及原生讀取 glTF 的 Godot、Blender、three.js 與 Babylon.js;Unity 透過 glTFast 等套件讀取它,Unreal 也能匯入。FBX 用於圍繞它建立的管線——Maya、3ds Max,以及許多 Unity 與 Unreal 專案。
- 4
匯出
在 Studio 中,選擇 File ▸ Export 3D model… 並選 GLB 或 glTF——或 FBX,它能攜帶物件與骨架動畫及蒙皮權重,但不含形狀關鍵影格或貼圖。場景中的每個片段都會寫入,你正在處理的片段排在最前面。Export for the web… 則產生可播放動畫的網頁、嵌入、React 元件或 three.js 模組。
- 5
在目標中檢查
把檔案匯入它要使用的引擎或檢視器,並播放每個片段。檢查縮放、面向、循環,以及有緩動的動作是否仍有緩動——下列問題會在這裡顯現,否則根本不會顯現。
動畫用的 glTF 與 GLB
glTF 2.0 以通道儲存動畫,每個通道針對單一節點的平移、旋轉或縮放,或網格的形變目標(形狀關鍵影格)權重。每個通道以 LINEAR、STEP 或 CUBICSPLINE 內插取樣關鍵影格,時間以秒而非影格儲存,旋轉則為四元數。蒙皮網格帶有其關節、逆綁定矩陣,以及每組每個頂點最多四個權重。
這是刻意設計得很窄,所以 glTF 幾乎在任何地方都不需轉換就能載入。超出此範圍的任何東西——設定關鍵影格的材質顏色、燈光強度、攝影機焦距——都需要擴充功能,例如 KHR_animation_pointer,而各引擎對擴充功能的支援不一。glTF 依定義是公尺與 Y 軸向上,所以很少以錯誤的尺寸到達。
動畫用的 FBX
FBX 是 Autodesk 專有的格式,二十年來一直是在 DCC 與遊戲引擎之間移動已綁定骨架、帶動畫角色的預設格式。它儲存骨架、蒙皮、混合形狀、多個 take 與影格率,Mixamo、Unity 與 Unreal 都能流暢讀取它。
它的弱點與讓它靈活的原因相同:單位與軸向慣例因匯出器而異,所以來自某個工具的 FBX 可能大了一百倍,或躺在地上,不同 SDK 版本的細節也不同。許多來自 Maya 與 Mixamo 的檔案使用公分,而 glTF 使用公尺。
哪些會保留,哪些不會
可靠保留:物件變換、骨骼上的骨架動畫、形狀關鍵影格權重,以及片段結構。通常遺失:IK 與約束、驅動器與表達式、自訂綁定控制,以及設定關鍵影格的材質、燈光與攝影機鏡頭數值。第一類損失要烘焙成關鍵影格;第二類則要檢查目標是否支援擴充功能,或需要重建該效果。
曲線是較細微的部分。匯出器對於保留貝茲切線、寫入三次雲形線資料,或將曲線取樣成關鍵影格,做法各異。只寫入你設定的關鍵影格、並在其間以線性內插的匯出器,會把相距甚遠的關鍵影格之間強烈的緩動壓平。如果引擎中的精確緩動很重要,請在緩動內部加入關鍵影格,或以影格率烘焙動作。
從 Mixos Studio 匯出動畫
Studio 的 GLB 與 glTF 匯出會攜帶設定關鍵影格的物件變換與形狀關鍵影格權重,保留場景階層,讓每個物件在自己的區域空間中動畫,並寫入場景中的每個片段。已綁定骨架的角色以蒙皮網格匯出——其關節、逆綁定矩陣,以及每個頂點最多四個骨骼權重——因此身體會在目標中變形,而不是在骨骼移動時僵立不動。Studio 的 FBX 匯出同樣保留階層——每個物件的軸心、骨架的關節、蒙皮權重以及每個片段,逐格取樣——但材質只攜帶基礎色,不含貼圖,也不攜帶形狀關鍵影格。OBJ、STL 與 USDZ 目標不攜帶動畫,匯出對話框會在下載前說明這一點。
有兩個限制值得知道。在 GLB 與 glTF 中,關鍵影格寫入你設定的時間,並在檔案中以線性方式在其間內插——曲線編輯器的緩動不會被烘焙進去——因此若引擎必須精確重現,請在長的緩動內部加入關鍵影格;FBX 是逐格取樣,所以其緩動會保留。而設定關鍵影格的材質、燈光與攝影機數值會留在場景中,因為核心 glTF 沒有對應的通道。.mxs 場景檔則保留模型格式無法承載的一切——生成器、修改器、動畫與算圖設定——適用於目的地就是 Studio 本身時。匯出屬於付費方案;製作動畫與預覽免費。
常見問題
動畫用 GLB 還是 FBX 比較好?
GLB 適用於網頁,以及原生讀取 glTF 的引擎,例如 Godot 與 three.js——它是開放標準、採公制,並在各工具之間一致。FBX 則用於圍繞它建立的管線,特別是 Maya、3ds Max 以及許多 Unity 與 Unreal 專案。兩者都能承載骨架動畫與形狀關鍵影格。
glTF 支援動畫嗎?
支援。glTF 2.0 可為節點的平移、旋轉、縮放與形變目標權重製作動畫,支援線性、階梯或三次雲形線內插,並支援蒙皮網格。為其他屬性製作動畫,例如材質數值,需要擴充功能。
為什麼我匯出的動畫沒有動?
通常是因為動作來自格式無法儲存的東西——IK 解算器、約束、驅動器或模擬——而且在匯出前沒有烘焙成關鍵影格。另一個常見原因是引擎沒有播放該片段:多數引擎需要指派片段或設為自動播放。
為什麼我的動畫在引擎中尺寸錯誤或被旋轉?
單位與軸向慣例。glTF 一律是公尺與 Y 軸向上;FBX 則視匯出器而定,常是公分。請在匯出時設定單位與軸向選項,或在匯入時套用單一縮放,而不是逐片段修正。
能從瀏覽器匯出動畫嗎?
可以。Mixos Studio 能將動畫場景匯出為含所有片段的 GLB 或 glTF,或匯出為播放它們的網頁或 three.js 模組。製作動畫免費;匯出屬於付費方案。