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画像をビューポートに追加し、より整ったプレビューやプレゼン用ショットを作成できるようにします。
目的: このノードを使うと、画像をプレゼンテーションレイヤーや視覚補助としてビューポートに直接配置できます。シーンを装飾したいとき、補助グラフィックを追加したいとき、動画やデモを録画する前にプロジェクトのプレビューをより洗練された見た目にしたいときに便利です。
ワークフロー: 画像を1枚読み込み、その後ビューポートツールを使って拡大縮小、移動、z-indexの調整を行い、コンポジション内で正しく収まるようにします。これにより、Spineプロジェクトのメインデータに触れずに魅力的なショーケース用ショットを簡単に作成できます。
このノードはスタンドアロンで、グラフソケットは公開しません。
Output
最終結果を集約し、最適化されたデータを個別ファイル、グループ化されたファイルセット、またはアーカイブとしてダウンロードできるようにします。
目的: 最適化済みJSON、atlasデータ、テクスチャ、スプライトのエクスポートハブとして機能します。単一のJSON/atlas/テクスチャセット、複数のファイルセット、またはフルSpineプロジェクトを再構築せずに画像出力だけが必要な場合はスプライトのみから結果を組み立てられます。
エクスポートオプション:
- ファイルを個別に、または単一のアーカイブとしてダウンロード
- パック済み結果、または展開済みファイルを含むアーカイブをダウンロード
- JSONをコンパクト形式または読みやすい整形済み形式でエクスポート
- 完全なSpineプロジェクトデータ、またはスプライト/画像結果のみをエクスポート
チェーンワークフロー: OutputNodeは必ずしもグラフの絶対的な終点である必要はありません。出力を別のパイプライン段階に渡し、同じファイルに追加の最適化パスを実行できます。実運用では、keyとcurveの最適化は連続3回の反復までテストされています。
主な出力:
- **reconstructed_json_out**: 再構築されたSpine JSON
- **original_json_passthrough_out**: 元のJSONのパススルー
- **payload_out**: 追加チェーン用のpayload
- **changes**: 収集された最適化変更
- **atlas_assets**: エクスポート準備済みのatlasリソース
RDP
アニメーション曲線を簡略化します(RDP)。
目的: 直線またはほぼ直線のアニメーション区間で、2点を結ぶ直線上にある点を削除してキーフレーム数を減らします。
黄金ルール: 既定で無効です。形状が大きいカーブ(面積/曲率)を直線化から保護します。より強い圧縮が必要な場合のみ、目視確認のうえで無効化してください。
ソケットキー: payload_in, payload_out, changes
Spline
スプラインによる曲線最適化。
目的: 視覚品質を保ちながら滑らかな曲線フィッティングを行います。
ソケットキー: payload_in, payload_out, changes
Refit
Bezier へのリフィットでキーフレーム数を削減します。
目的: 許容差内でより少ない曲線にフィットします。
ソケットキー: payload_in, payload_out, changes
Quantizer
キーフレームとカーブの数値の精度を削減します。
目的: 指定された小数点以下の桁数に数値を丸めることによりファイルサイズを削減する簡単で効果的な方法です。
使用法: ほぼすべてのアニメーションデータに適用できます。キーフレーム数が多いほど効果的になります。
注意: 過度に攻撃的な量子化(低精度)は、アニメーションに震えや視覚的アーティファクトを引き起こす可能性があります。
Cleanup
冗長または不要なアニメーションデータを削除するためのさまざまなクリーンアップタスクを実行します。
目的: 他のオプティマイザでは見落とされがちな特定の冗長データを削除するための専用ツールです。
使い方: payload を 'payload_in' に接続し、結果を 'payload_out' から取得します。変更単位のレポートが欲しい場合は 'changes' も使用してください。
ソケットキー:
- 入力: payload_in
- 出力: payload_out, changes
現在サポートされているクリーンアップ:
1. **Remove Unused Color/Alpha Tracks**: アニメーション中に一度も表示されないスロットの color/alpha タイムラインを削除します。
2. **Remove Redundant IK Rotations**: mix が 100% の IK 制約で完全に制御されているボーンの回転キーフレームを削除します。
3. **Remove Path Constraint Keys**: パス制約(mix 100%)で完全に制御されているボーンの rotate/translate キーフレームを削除します。
4. **Sanitize Non-English Characters**: 後続ツールでの問題を避けるため、名前/識別子の非英数字文字を置換します。
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**(焼き込み)
- **changes**(任意の変更リスト)
コントロール:
- **Sample FPS**: シミュレーションのサンプリングレート。
- **Bake Rotation**: 回転キーフレームを書き込み。
- **Bake Translation**: 移動キーフレームを書き込み。
- **Bake Translation (Children)**: 物理モーションに依存する子ボーンにも移動の焼き込みを適用。
注記:
- シミュレーション再構築のために元のSpine JSONが必要です。
- PhysicsConstraintsを削除しつつ動きを保持したい場合に使用します。
Attachment Visibility
アルファがゼロの場合、スロットのアタッチメントをnullに設定してレンダリングを最適化します。
目的: ゲームエンジンが見えないアタッチメントを処理またはレンダリングする必要がないようにします。
使用法: アルファ/カラートラックを分析し、対応する'attachment'トラックでキーフレームを自動的に追加または変更します。
パラメータ:
- **Alpha Threshold**: アタッチメントが見えないと見なされるアルファ値。
- **Auto Restore**: 有効にすると、アルファ値がしきい値を超えたときに、ノードは自動的に最後に表示されたアタッチメントを復元します。
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
アトラスアセットを名前でフィルタリングし、2つのモードで動作:アンパック前(アトラステキストをフィルタリング)またはアンパック後(スプライトをフィルタリング)。
目的:ワークフローに含まれるアセットを制御 - アトラスからアンパックするアセットまたは再パックに含めるアンパックされたスプライトを制御。
モード:
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**: 標準化されたスプライト配列(viewer/repacker 用)
- **sprites_data_out**: 抽出されたスプライト画像/メタデータ(構造化バンドル)
- **atlas_out**: Atlas Project のパススルー
ソケットキー: atlas_project, atlas_project_in, skeleton_json_in, sprites_out, sprites_data_out, atlas_out
Atlas Repacker
個々のスプライトを1つ以上の新しい最適化されたテクスチャアトラスに再パッケージします。
目的: 効率的なスプライトシートを作成することにより、テクスチャメモリを最適化し、潜在的にドローコールを削減します。
使用法: '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'入力に接続し、領域の使用状況を解析します。
機能:
- 領域境界つきのアトラスページの可視プレビュー
- 領域の強調表示: 緑 = 使用中、赤 = スケルトン内で未使用
- ページ移動コントロール
- 総領域数と未使用領域数の統計
用途:
- 最適化前のアトラス検証
- 未使用領域(不要データ)の特定
- アトラスパッキング問題のデバッグ
- アセット構造の理解
ソケットキー: atlas_project, atlas_in, atlas, json
Atlas Merger
複数のアトラスソースを単一の統一されたアトラスに結合します。
目的: 複数のアトラスプロジェクトを1つにマージします。
入力:
- **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'を受け入れ、各抽出された画像を視覚化し、そのプロパティ(寸法、回転など)を調べ、解凍後の視覚的正確性を検証できるようにします。