Input
將 Spine 專案檔、純 JSON 輸入、示範素材與 ZIP 套件載入至圖表。
用途:這是大多數工作流程的主要入口節點。它會讀取 JSON、atlas 與貼圖,並將其正規化為下游節點可處理的內部資料。
支援模式:
1. 完整專案:JSON + atlas + 貼圖
2. 僅 JSON:在沒有 atlas 的情況下處理 skeleton/animation 資料
3. ZIP 套件:包含完整專案的封裝 zip
4. 示範素材:內建範例資料,便於快速測試
主要輸出:
- **payload_out**:供最佳化節點使用的正規化資料
- **original_json_out**:用於比較或重建的原始 JSON
- **atlas_project_out**:在提供貼圖時解析後的 atlas 專案
Picture Input
將獨立的 PNG/JPEG 圖片加入 viewport,讓你能建立更乾淨的預覽與展示畫面。
用途:使用此節點可將圖片直接放入 viewport,作為展示圖層或視覺輔助。當你想裝飾場景、加入輔助圖像,並在錄製影片或示範前讓專案預覽看起來更精緻時,它會很有幫助。
工作流程:載入一張圖片後,使用 viewport 工具來縮放、移動,並調整其 z-index,讓它在你的構圖中位於正確位置。這讓你可以在不碰觸主要 Spine 專案資料的情況下,方便地建立吸引人的展示畫面。
此節點為獨立節點,不會公開 graph sockets。
Output
收集最終結果,並讓你可將最佳化後的資料下載為個別檔案、分組檔案集或封存檔。
用途:它是最佳化 JSON、atlas 資料、貼圖與 sprites 的匯出中樞。它可以從單一 JSON/atlas/貼圖組合、多組檔案集合,或僅 sprites 來組裝結果,適合在你想輸出圖片而不重建完整 Spine 專案時使用。
匯出選項:
- 個別下載檔案,或下載成單一封存檔
- 下載已封裝結果,或下載包含未封裝檔案的封存檔
- 以精簡格式或易讀的 pretty-print 格式匯出 JSON
- 匯出完整 Spine 專案資料,或僅匯出 sprite/image 結果
串接工作流程:OutputNode 不必一定是圖表的絕對終點。你可以把它的輸出傳到另一個 pipeline 階段,讓相同檔案再跑額外的最佳化流程。實務上,key 與 curve 最佳化已測試到最多連續 3 次迭代。
主要輸出:
- **reconstructed_json_out**:重建後的 Spine JSON
- **original_json_passthrough_out**:原始 JSON 的直通輸出
- **payload_out**:供進一步串接的 payload
- **changes**:收集到的最佳化變更
- **atlas_assets**:可直接匯出的 atlas 資源
RDP
簡化動畫曲線(RDP)。
目的:移除位於兩點之間直線上的點,以減少線性或近線性動畫段落的關鍵幀數量。
黃金法則:預設停用。可保護形狀明顯的曲線(面積/曲率),避免被過度拉直為線性。僅在完成目視檢查後、需要更激進壓縮時再關閉。
Socket 鍵:payload_in, payload_out, changes
Spline
使用樣條曲線進行曲線最佳化。
目的:在維持視覺品質的情況下進行平滑曲線擬合。
Socket 鍵:payload_in, payload_out, changes
Refit
以 Bezier 重新擬合以減少關鍵影格數。
目的:在容差範圍內以較少的曲線進行擬合。
Socket 鍵:payload_in, payload_out, changes
Quantizer
降低關鍵影格和曲線中數值的精度。
目的: 通過將數字四捨五入到指定的小數位數來減少檔案大小的簡單但有效的方法。
使用方法: 可應用於幾乎所有動畫資料。關鍵影格計數越高越有效。
注意: 過於激進的量化(低精度)可能會在動畫中引起抖動或視覺偽影。
Cleanup
執行各種清理任務以刪除冗余或不必要的動畫資料。
用途:專門用來移除其他最佳化器可能漏掉的特定冗餘資料。
用法:把 payload 接到 'payload_in',從 'payload_out' 取得結果。若你需要逐項變更報告,也可使用 'changes'。
Socket 鍵:
- 輸入: payload_in
- 輸出: payload_out, changes
目前支援的清理項目:
1. **移除未使用的顏色/alpha 軌道**:移除動畫中從未可見的 slot 之顏色/alpha timeline。
2. **移除冗餘 IK 旋轉**:當骨骼完全由 IK constraint 控制且 mix 為 100% 時,移除其旋轉關鍵影格。
3. **移除路徑約束關鍵影格**:當骨骼完全由 path constraint 控制(mix 為 100%)時,移除旋轉/位移關鍵影格。
4. **清理非英文字符**:替換名稱/識別字中的非英文字符,以避免下游工具出問題。
Scale
按指定係數縮放動畫關鍵影格中的所有數值。
目的: 均勻縮放動畫資料,適用於按比例調整骨架大小或調整動畫強度。
使用方法: 連接到有效負載並設定縮放係數。大於1.0的值放大,小於1.0的值縮小。
參數:
- **Scale Factor**: 應用於所有位置和大小值的乘數。
- **Include Rotations**: 是否也縮放旋轉值(通常禁用)。
使用案例:
- 調整導入動畫的大小以匹配新骨架尺寸
- 創建動畫的誇張或微妙變體
- 批量縮放多個動畫以適應不同角色大小
Schneider
使用施奈德曲線擬合演算法將平滑的貝茲曲線擬合到動畫關鍵影格。
目的: 高級曲線擬合,可從密集的關鍵影格序列生成自然外觀的貝茲曲線。
可用性:**僅 Plus 節點**。
工作原理: 施奈德演算法分析關鍵影格位置和切線,生成與原始運動緊密匹配的最佳貝茲控制點。
參數:
- **Error Tolerance**: 與原始關鍵影格的最大允許偏差。越低=越準確,越高=曲線越平滑。
- **Corner Angle**: 將曲線分割成段的閾值角度(度)。
最適合:
- 具有許多關鍵影格的手繪或導入動畫
- 將線性插值轉換為平滑的貝茲曲線
- 在保持曲線品質的同時減少關鍵影格數量
注意: 比 RDP 等更簡單的演算法計算量更大,但產生更優質的曲線。
Physics Constraint Bake
Bake Physics Constraints to Keys:將 PhysicsConstraint 動作轉為旋轉/位移關鍵影格並移除物理時間軸。
目的: 將執行期物理模擬轉為明確的關鍵影格,使動畫可確定且可在無 PhysicsConstraints 的情況下編輯。Bake 後會從 payload 移除 PhysicsConstraints 與物理時間軸。
可用性:**僅 Plus 節點**。
輸入/輸出:
- **payload_in** → **payload_out**(baked)
- **changes**(可選變更清單)
控制項:
- **Sample FPS**: 模擬取樣率。
- **Bake Rotation**: 寫入旋轉關鍵影格。
- **Bake Translation**: 寫入位移關鍵影格。
- **Bake Translation (Children)**: 對依賴物理動作的子骨骼套用位移 bake。
備註:
- 需要原始 Spine JSON 以重建模擬資料。
- 當需要移除 PhysicsConstraints 但保留動作時使用。
Attachment Visibility
通過在 alpha 為零時將插槽的附件設為 null 來優化渲染。
目的: 防止遊戲引擎必須處理或渲染不可見的附件。
使用方法: 分析 alpha/顏色軌道並自動在對應的 'attachment' 軌道上添加或修改關鍵影格。
參數:
- **Alpha Threshold**: 將附件視為不可見的 alpha 值。
- **Auto Restore**: 如果啟用,當 alpha 值超過閾值時,節點將自動恢復最後可見的附件。
Payload Merger
將多個處理過的動畫有效負載合併回單個統一有效負載。
目的: 對於並行處理管線至關重要,其中不同的動畫或骨骼組被分別優化並需要重新組合。
合併策略:
1. **基礎輸入**: 提供骨架結構(骨骼、插槽、皮膚等)
2. **覆蓋輸入**: 提供替換基礎軌道的處理過軌道
3. **最後寫入優先**: 當多個覆蓋提供相同軌道時,最後一個優先
衝突檢測:
- 覆蓋輸入之間的衝突被檢測並報告
- 基礎 → 覆蓋替換是正常行為(不是衝突)
- 軌道衝突時顯示警告提示
管線範例:
```
Input → AnimFilter('run') → Cleanup ───────┐
→ AnimFilter('idle') → Quantizer ────┤
→ (base) ────────────────────────────→ Merger → Output
```
使用案例:
- 不同動畫使用不同優化器
- 單獨的骨骼/插槽處理後重新組合
- A/B 測試不同的優化策略Animation Viewer
用於在優化前後檢查和比較動畫曲線的視覺化工具。
目的: 為所選軌道提供關鍵影格和曲線的圖形表示。
使用方法: 通過連接 'payload_before' 和 'payload_after' 兩個輸入,它將覆蓋原始和優化的曲線,使您的優化影響更容易視覺化。
Animation Filter
根據動畫名稱(例如 'run'、'idle')篩選動畫軌道。
目的: 對不同動畫應用不同優化策略很有用。
使用方法: 例如,您可以對背景角色動畫應用激進的有損優化(如 DCT),同時對主角動作使用無損優化(如 Spline)。
Asset Filter
按名稱過濾圖集資產,以兩種模式工作:解包前(過濾圖集文本)或解包後(過濾精靈)。
目的:控制工作流程中包含哪些資產 - 從圖集解包哪些資產或重新打包中包含哪些已解包的精靈。
模式:
1. 預解包模式(AtlasUnpacker之前):
- 輸入:atlas_in (atlas_project)
- 輸出:atlas_out (已過濾的atlas_project)
- 工作流程:InputNode → AssetFilter → AtlasUnpacker
- 使用案例:過濾從圖集解包哪些資產(節省處理時間)
2. 後解包模式(AtlasUnpacker之後):
- 輸入:sprites_in (sprites)
- 輸出:sprites_out (已過濾的sprites)
- 工作流程:AtlasUnpacker → AssetFilter → AtlasRepacker
- 使用案例:過濾最終圖集中包含哪些已解包的精靈
UI行為:
- 在預解包模式中:解析圖集文本以發現資產名稱
- 在後解包模式中:從精靈陣列中發現資產名稱
- '允許全部'切換:選中時,通過所有資產(列表顯示但禁用)
- 複選框:選擇要包含的特定資產(當'允許全部'未選中時)
範例:
- 預解包:僅選擇'char_*'資產以僅解包角色精靈
- 後解包:從最終重新打包的圖集中排除'background_*'精靈
- 通過選擇'weapon_*'模式創建僅武器圖集
Bone Filter
根據骨骼名稱篩選骨骼動畫軌道。
目的: 允許從優化過程中定位或排除特定骨骼。
使用方法: 您可能希望排除敏感骨骼,例如用於面部表情的骨骼,使其免受激進優化的影響以保留每個細節,同時大量優化不太重要的骨骼。
Skin Filter
根據皮膚名稱篩選動畫和資產資料。
目的: 僅處理多皮膚 Spine 專案中的特定皮膚。
使用方法: 當 Spine 專案有多個皮膚(例如 'default'、'armor'、'casual')時,此節點可讓您篩選要包含在處理中的皮膚。
參數:
- **Skins List**: 每個可用皮膚的複選框
- **Allow All**: 包含所有皮膚的切換(預設)
使用案例:
- 為每個皮膚創建單獨的圖集
- 對不同皮膚應用不同的優化
- 從優化的建構中排除很少使用的皮膚
注意: 皮膚共享骨架結構,但可能有不同的附件。
Slot Filter
根據插槽名稱篩選插槽動畫軌道。
目的: 對於定位或排除可能具有特殊時序或可見性要求的特定插槽很有用。
使用方法: 您可以使用它來排除通過代碼切換的武器或效果插槽,使其不受附件可見性優化的影響。
Parameter Filter
根據屬性類型(例如 rotation、scale、color)篩選動畫軌道。
目的: 允許僅對特定類型的動畫資料應用後續優化。
使用方法: 將此節點放在優化器之前以限制其範圍。例如,您可以僅對 'translation' 和 'scale' 軌道應用 RDP 優化。
Atlas Unpacker
從 Spine 紋理圖集中提取單個精靈。
目的:將圖集檔案分解為其組成精靈,允許個別分析或重新打包。
用法:將 InputNode 的 'atlas_project' 輸出連接到此節點的 'atlas_project_in' 輸入。輸出可以發送到 AssetViewer 進行檢查或發送到 AtlasRepacker 進行優化。
⭐ 網格裁剪:將 InputNode 的 'Original JSON' 輸出連接到 'Skeleton JSON' 輸入,以啟用自動將精靈裁剪到其網格邊界(而不是矩形邊界)。通過移除網格船體外部的透明像素,這可以顯著減少具有網格附件的精靈的紋理記憶體使用量。
輸出:
- **sprites_out**: 標準化的 sprites 陣列(供 viewer/repacker 使用)
- **sprites_data_out**: 提取出的 sprite 圖片/中繼資料(結構化 bundle)
- **atlas_out**: Atlas Project 直通
Socket 鍵: atlas_project, atlas_project_in, skeleton_json_in, sprites_out, sprites_data_out, atlas_out
Atlas Repacker
將單個精靈重新打包到一個或多個新的優化紋理圖集中。
目的: 通過建立高效的精靈表來優化紋理記憶體並可能減少繪製呼叫。
使用方法: 接受 'sprites_data'(通常來自 AtlasUnpacker)並生成新的圖集佈局。
參數:
- **Max Texture Size**: 輸出圖集頁面的最大寬度/高度。
- **Padding**: 每個精靈之間的像素距離。
- **Scale**: 在打包之前縮放所有精靈。
- **Power of Two**: 強制輸出圖集尺寸為 2 的冪(例如 1024、2048),某些平台需要。
- **Allow Rotation**: 允許精靈旋轉 90 度以獲得更好的打包效率。
Atlas Viewer
用於在解包前檢查圖集結構的輕量視覺化與分析工具。
目的:提供快速預覽圖集頁面與區域的方法,而無需執行耗時的解包操作。可用於驗證圖集結構並找出未使用的區域。
使用方法:將 InputNode 的 'atlas_project' 輸出連接到 'atlas' 輸入。可選擇將 'original_json_out' 連接到 'json' 輸入以分析區域使用情況。
功能:
- 視覺化預覽圖集頁面與區域邊界
- 區域高亮:綠色=使用中,紅色=在 skeleton 中未使用
- 頁面切換控制
- 顯示總區域數與未使用區域數的統計
使用情境:
- 優化前快速驗證圖集
- 找出多餘資源(未使用區域)
- 除錯圖集打包問題
- 理解資產結構
Socket 鍵: atlas_project, atlas_in, atlas, json
Atlas Merger
將多個圖集來源合併為單個統一圖集。
目的: 將多個圖集專案合併為一個。
輸入:
- **atlas_inputs**: 圖集專案的多重輸入陣列
輸出:
- **atlas_out**: 合併後的圖集專案
- **merged_out**: 舊版合併輸出
- **merged_atlas_out**: 舊版合併輸出
使用案例:
- 合併角色圖集和武器圖集
- 合併基礎精靈和 DLC 內容
- 並行圖集處理後重新合併
典型管線:
```
InputA → Unpacker → Repacker ─┐
├→ Atlas Merger → Unpacker → Repacker → Output
InputB → Unpacker → Repacker ─┘
```
Repacker 之前的資料是個別精靈;Repacker 之後成為圖集專案。Atlas Merger 合併圖集專案,然後最終的 Unpacker → Repacker 步驟將所有內容更緊密地打包成單一統一圖集。Asset Viewer
顯示從解包圖集中提取的單個精靈。
目的: 用於圖集操作的視覺化除錯工具。
使用方法: 接受來自 Atlas Unpacker 節點的 'sprites_data',並允許您視覺化每個提取的圖像、檢查其屬性(尺寸、旋轉等)並驗證解包後的視覺準確性。