Skip to main content
Go to Editor

ウィキ

Learn how to optimize your Spine 2D animations, reduce file size, and improve performance

FPSUIYouTubeanimationexportguideplaybackrecorderrecordingtimelinevideoviewerガイドコントロールサブスクリプションソケットタイプチャートテーブルデータパイプラインパフォーマンスビューアプラスプレミアムメトリクスメモリワークフロー価格初心者動画接続損失あり損失なし最適化概念結果統計

はじめに: 基本的なワークフロー

初心者ワークフローガイド

このガイドでは、JSON Optimizer をすぐに使い始めるための基本手順を説明します。

  1. プロジェクトを読み込む: InputNode を使って .json / .atlas / .png を読み込みます。
  2. プリセットを選ぶ(Plus モード): Plus モードでは、右パネルから組み込みプリセット(例: "Basic Fallback")を選択します。これにより最適化グラフが自動で構築されます。Free モードでは、最小構成の手動グラフを作成します: InputNodeQuantizerNodeOutputNode.
  3. グラフを実行: 「グラフ実行」ボタンをクリックします。
  4. 結果を比較: 「表示」タブに切り替えて、元データと最適化後のアニメーションを視覚的に比較します。
  5. 変更内容を確認: 「結果」と「統計」タブで、どのキーが変更/削除されたかの詳細を確認できます。

ソケットの種類とデータフロー

ソケットタイプデータ接続

この記事では、ノードグラフのソケットで使われるデータ型と、どこに接続できるかを説明します。

簡単なルール

多くの処理ノードは Spine Payload を扱います。アトラス関連ノードは Atlas Project または Sprites を扱います。ソケットが何を期待しているか不明な場合は ValidatorNode を使ってください。

ソケット型

  • Spine Payload — ランタイム向けに整形された Spine プロジェクト表現。ほとんどの処理ノードが使用します。
  • Atlas Project — アトラスのメタデータ + ページ画像。アトラス系ノードが使用します。
  • Sprites — 展開されたスプライト/リージョン(Atlas Unpacker → アセット表示 / Atlas Repacker)。
  • JSON — 診断/検証/差分のための、元または再構築された Spine JSON。
  • 変更 — 一部の最適化ノードが生成する差分(diff)のリスト/ストリーム。表示/レポート用ノードで使用されます。

キー → 型 → 接続先

ソケットキー(例)データ型生成元接続先
payload, payload_in, payload_outSpine PayloadInputNode, ほとんどの処理ノード処理ノード(RDP/Spline/Refit/Quantizer/Cleanup/etc.)→ OutputNode.payload
original_jsonJSONInputNodeDiagnosticNode, JSONDiffNode.json_before, OutputNode.original_json, 一部のアトラス系ノード(例: repacker alpha mode)
reconstructed_json_outJSONOutputNodeJSONDiffNode.json_after, バリデータ/デバッグ
changes変更リスト一部の処理ノード + OutputNodeAnimationViewerNode(任意), レポート/デバッグ
atlas_projectAtlas ProjectInputNode / アトラス表示AtlasUnpackerNode.atlas_project, OutputNode.atlas_project, アトラスフィルター
atlas_in, atlas_outAtlas Project(または atlas 関連ストリーム)Atlas ノード / フィルターAtlas ノード, AtlasViewerNode, AtlasMergerNode(multi-input 経由)
sprites_out, sprites_in, sprites_data_inSpritesAtlasUnpackerNode, フィルターAssetViewerNode.sprites_in, AtlasRepackerNode.sprites_data_in
atlas_inputs複数のAtlas Project複数のソースAtlasMergerNode.atlas_inputs(複数アトラスを接続)

実用的なパイプライン

  • 基本的な JSON 最適化: InputNode →(任意: DiagnosticNode / フィルター)→ 最適化ノード(RDPNode, SplineNode, QuantizerNode, …)→ OutputNode.
  • アトラスの再パッキング: InputNode.atlas_projectAtlasUnpackerNode →(任意: AssetViewerNode)→ AtlasRepackerNodeOutputNode.atlas_project/atlas_assets.

サブスクリプションプランとプレミアム機能

サブスクリプションプレミアムプラス価格

re-polish はニーズに合わせて2つのサブスクリプションプランを提供します。

Freeプラン

  • ✓ 基本ノードグラフ
  • ✓ JSONビューアー
  • ✓ 複数トラックで再生でき、アニメーション間のミックスを調整できるタイムライン
  • ✓ 限定的な最適化
  • ✓ Spine 版本:4.2、4.1、4.0、3.8、3.7

Plusプラン($5/月)

  • ✓ すべての無料機能
  • ✓ キー(キーフレーム)、カーブ、テクスチャに対応した最適化ツールキット
  • ✓ 物理をキーフレームにベイク
  • ✓ ベイク済みキーフレームをカーブに整理
  • ✓ グラフプリセット
  • ✓ 優先サポート

Plusの取得方法

上部ナビゲーションの Upgrade をクリックして、次を実行します:

  • Get Plus を選択
  • Patreon にリダイレクトされるので、サブスクリプションを完了
  • 同じPatreonアカウントでログインしたままノードエディタに戻り、サービスがリンクを検証してPlusを有効化
  • (任意)アクティベーションコードを入力(特別オファー用)

基本概念: 損失あり vs 損失なし

概念損失あり損失なし初心者

最適化手法は大きく 2 種類に分かれます:

推奨: まずは損失なし最適化から始めてください。さらにファイルサイズを減らす必要がある場合にのみ損失あり手法を使い、必ず見た目で確認しましょう。

効率の測定方法

ガイドメトリクス統計

最適化の効果を理解するには、次の指標に注意してください:

  • ファイルサイズ: .jsonファイルの最終サイズが最適化の主な目標です。
  • キーフレーム数: 「統計」タブで、各アニメーションで削除されたキーフレームの数を示すテーブルとグラフを見つけることができます。
  • 視覚的比較: 常に「表示」タブを使用して「前」と「後」のアニメーションを比較してください。損失あり最適化が許容できない視覚的アーティファクトを導入していないことを確認してください。
  • 「結果」テーブルのレポート: ここでは、データに加えられた各特定の変更を詳細に調べることができます。

表示: コントロールパネル

ビューアコントロールUI

表示 タブはキャンバス上に 操作 パネルを重ねて表示します。3つのグループに分かれています:

アニメーション操作

  • アニメーション — 再生するSpineアニメーションを選択します。
  • スキン — 適用するスキンを選択します。
  • 速度 — 再生速度の倍率(0.1× → 3.0×)。

表示操作

  • 表示をリセット — 既定のカメラ/レイアウト位置に戻します。
  • 表示オプション — 比較表示の位置を調整する数値オフセット: 間隔X / 間隔Y(元/最適化後の距離)と オフセットX / オフセットY(全体のシフト)。

デバッグ操作

  • デバッグモード — デバッグ描画オーバーレイを有効化します(ランタイムのサポートに依存)。
  • 物理を有効化 — 物理シミュレーションを切り替えます(スケルトンが物理を使用している場合)。
  • ラベル — ラベル表示を切り替えます。

表示: パフォーマンスパネル

パフォーマンスFPSメモリUI

Performance パネルは、現在再生中のスケルトンに対するランタイム指標をリアルタイムで表示します。

リアルタイム

  • FPS — モニターで計測したフレーム/秒。
  • Frame Time — 1 フレームあたりの時間(ms、低いほど良い)。
  • FPS chart — 直近 120 サンプルをバー表示。

スケルトン指標

  • Visible Slots — 直近サンプルで可視だったスロット数。
  • Avg. Visible — 可視スロット数の移動平均(単一フレームより安定)。
  • Vertices — レンダリングに使用中の頂点数。
  • Bounds (px) — 現在のスケルトン境界(幅×高さ、px)。
  • Avg. Bounds — 境界の移動平均。
  • Largest Texture — 検出された最大のアトラスページ(寸法ベース)。
  • Texture Memory — 読み込まれたアトラスページの推定総テクスチャメモリ。利用可能な場合、ページ別内訳(ファイル名、寸法、推定サイズ)も表示されます。

改善(Optimized が利用可能な場合)

  • Slot Improvement — Original と Optimized の Avg. Visible を比較。
  • Memory Change — Original と Optimized の Texture Memory を比較。

表示: タイムライン

viewertimelineanimationplaybackguide

タイムラインパネルはViewerの下部にあるドッカブルなアニメーションシーケンサーです。複数のトラックにアニメーションクリップを配置し、再生を制御し、トランジションをプレビューできます。

トラックとクリップ

  • 最大4アニメーショントラック — 各トラックはSpineのtrackIndexレイヤーにマップされます。上位トラックは下位トラックにブレンドされます。
  • アニメーション追加 — 任意のトラックの+ボタンをクリックしてアニメーションピッカーを開きます(検索フィルター付き)。
  • クリップのドラッグとリサイズ — クリップ本体をドラッグしてトラック上を移動、左右の端をドラッグして開始時刻や長さを変更。
  • クリップ削除 — クリップを選択してDeleteまたはBackspaceを押します。
  • オーバーラップ検出 — 同じトラック上で重なるクリップは赤くハイライトされます。

トランスポートコントロール

  • Play / Pause / Stop — 標準的な再生コントロール。
  • Previous / Next — 前/次のクリップの先頭にジャンプ。
  • アニメーション速度 — 0.1×から3.0×のスライダー。
  • Auto-stop — タイムラインの終端で再生が自動停止します。

トランジションミキシング

  • グローバルミックスデュレーション — 連続するクリップ間のデフォルトクロスフェード時間を設定。
  • トランジションごとのオーバーライド — 2つのクリップ間のトランジションバブルをクリックしてカスタムミックスデュレーションを設定。個別のオーバーライドをグローバル値にリセットできます。

シークとスクラブ

  • プレイヘッド — タイムルーラー上のハンドルをドラッグするかルーラーをクリックしてシーク。
  • カーソル時刻プレビュー — トラックエリア上にホバーすると、カーソル下の時刻が表示されます。
  • Web Worker — スムーズなパフォーマンスのためにシークとイベント計算はバックグラウンドワーカーにオフロードされます。

物理対応再生

  • Update(アクティブなconstraints)とNone(無効)の間で物理をトグル。
  • シーク中、物理constraintsを正しくsettleさせるためにスケルトン時間が進められます。

マルチスケルトンサポート

  • ターゲットペアセレクター — 各トラックはすべてのペア(🌐 All pairs)または特定のスケルトンをターゲットにできます。
  • スケルトンごとの位置とスケール — 個々のスケルトンのX/Yオフセットとスケール入力。
  • 描画順序 — レンダーレイヤーの優先度を制御する数値入力。

デバッグ描画

Bones、Bone Names、Regions、Meshes、Hulls、Bounds、Paths、Clipping、Pointsの表示をトグル。

スキン選択

ロードされたスケルトンで定義されているすべてのスキンのマルチセレクトチェックボックス。

表示設定

  • Spacing X / Y — スケルトンペア間の間隔。
  • Offset X / Y — グローバルビューポートシフト。
  • PMAトグル — premultiplied alphaモード(Spine 3.x)またはatlas alphaモード(Spine 4.x: auto / pma / bleed / none)。
  • スケルトンラベル — ラベルオーバーレイのトグル。

表示: レコーダー

viewerrecorderrecordingexportvideoguide

レコーダーはViewerからSpineアニメーションを動画、アニメーション画像、または画像シーケンスとしてキャプチャします。

録画モード

  • ⚡ Quick RecordMediaRecorder + captureStream()を使用したリアルタイムキャプチャ。WebM出力のみ。高速ですがリアルタイムフレームレートに制限されます。
  • 🎬 HQ Export — WebCodecs VideoEncoder + readPixels()を使用したオフラインフレーム単位レンダリング。すべてのフォーマットに対応し、ピクセルパーフェクトな出力を生成します。

出力フォーマット

  • 動画: WebM, MP4, AVI, MOV
  • アニメーション画像: GIF, Animated PNG (APNG)
  • 画像シーケンス: PNG Sequence, WebP Sequence

コーデック (HQ Export)

VP8, VP9, H.264 (AVC), AV1, ProRes — 利用可能なコーデックはブラウザサポートに基づいて自動検出されます。

品質

  • プリセット: Low (~1 Mbps), Medium (~3 Mbps), High (~5 Mbps), Lossless (~20 Mbps)。
  • カスタムビットレート — kbpsで指定して細かく制御。

タイミング

  • FPS: 24, 30, 60, またはカスタム (1–120 fps)。
  • ウォームアップ — 録画開始前に物理/constraintが落ち着くための秒数。
  • Pause-after — 指定時間だけ最終フレームを保持。
  • 最終フレームを含む — トグル。

ビューポートとクロップ

  • クロップの有効/無効 — クロップ領域のトグル。
  • クロップ矩形 — Spineワールド座標でX, Y, 幅, 高さ。
  • Snap to pair — 設定可能なパディング付きでスケルトンペアにクロップを自動フィット。
  • インタラクティブクロップオーバーレイ — ビューポートで直接角/端をドラッグ。

解像度

  • スケールモード — パーセントスライダー (10%–400%)。
  • 固定モード — 明示的なピクセル寸法 (最大4096px)。
  • 計算された出力解像度がリアルタイムで表示されます。

レンダーオプション

  • Render bones — デバッグボーンオーバーレイを含む。
  • Render images — アタッチメント画像を含む。
  • Render others — バウンディングボックス、パス。
  • MSAA — None / 2× / 4× アンチエイリアシング。
  • Smoothing — 0–8レベル、アルゴリズム選択付き (Bicubic / Bilinear)。

背景

  • 透明 — アルファ非対応フォーマット(例GIF、JPEG)では自動無効化。
  • 単色 — カスタムカラーピッカー。
  • チェッカーボード — 透明度の視覚的インジケーター。
  • アルファチャンネルサポート: VP9+WebM, AV1+MP4, PNG Sequence, APNG, WebP Sequence。

HUDオーバーレイ

  • トグル: トラック情報、時刻、フレーム番号、FPS、スケルトンラベル。
  • カスタムテキスト — ウォーターマーク文字列。
  • 位置 — 4つの角(左上、右上、左下、右下)。
  • フォントサイズ — 8–64px、テキストカラーピッカー付き。

リピートとマルチスケルトン

  • リピート回数 — 1–100ループ反復。
  • ターゲットペア — 特定のスケルトンまたはすべてを録画。
  • スケルトンモード — Combined(単一ファイル)/ Separate files(スケルトンごとに1ファイル)。

ファイル名テンプレート

変数付きテンプレート文字列: {project}, {animation}, {W}, {H}, {fps}。解決されたファイル名のライブプレビューが表示されます。

タイムライン統合

録画範囲はタイムライン上に赤/オレンジの破線クリップとして表示されます。端をドラッグして範囲をリサイズ、本体をドラッグして位置変更、または設定ボタン(⚙️)で全録画設定を開きます。

結果タブ

結果テーブル最適化

結果 タブは、最適化の詳細な出力を表示します。

  • 結果テーブル — JSON最適化結果を変更単位(行)で表示します(例: どのアニメーション/ボーン/プロパティ/キーフレームが変更/削除されたか)。
  • スプライト/アトラス比較 — テクスチャ最適化を使用した場合、このセクションでスプライトサイズとパッキング結果を比較します。

ヒント: 結果ビューは 具体的に何が変わったのか を確認するのに役立ちます。

統計タブ

統計チャートメトリクス

統計 タブは、最適化結果をチャートと集計指標として要約します。

  • 最適化チャート — データセット全体に対する最適化の影響を可視化します(JSON最適化で変更が発生した場合)。
  • 指標テーブル — original/new サイズや削減率などの主要な数値。
  • テクスチャパッキング統計 — アトラスの再パッキングを使用した場合、ページ数、総/使用面積、効率、およびページ別内訳を表示します。

このタブは 全体としてどれくらい改善したか を確認するために使います。

パイプライン例(動画)

動画パイプラインYouTube

公式YouTubeプレイリストから、実際のパイプラインを紹介します。

プレイリストを開く

Spine2D 実験1: RDPアルゴリズムによる曲線最適化 — Spine 2D の基本的な最適化デモ。Ramer–Douglas–Peucker(RDP)アルゴリズムが冗長なカーブ/キーのデータを削除してJSONを縮小します。RDPは重要なキーを削除する場合があるため、必ずアニメーションを確認し、RDPノードの前でフィルターノードにより重要なボーン/スロットを除外してください。 YouTubeで見る

Spine2D 実験2: 量子化アルゴリズムによる曲線最適化 — 量子化は最も安全なカーブ最適化です。値を丸める(多くは小数1桁)ことで即座にサイズが減ります。例: [0.115,14.5,0.222,-27.78] → [0.1,14.5,0.2,-27.8]. 最後の手順としてQuantizerノードを出力ノードの前に置き、最適化を確定させます。動画ではほぼ視覚変化のない前後比較を示します。 YouTubeで見る

Spine2D 実験3: SplineとRefitによる曲線再構築 — Splineは直線区間では損失なし(中間の冗長キーを削除)で、Refitは損失ありだが強力で、複雑な区間を単一のベジエ曲線として再構築します。これらは物理ベイクとSchneiderノードによるクリーンアップ後に最適です。注: Refitの反復が100を超えると最良曲線の探索に数分かかることがあります。動画で両手法と最適化率を示します。 YouTubeで見る

Spine2D 実験4: アタッチメント可視性とCleanupで冗長データを削除 — アタッチメント可視性とCleanupノードによる構造的最適化。アタッチメント可視性はalphaが0になるとアタッチメントを無効化し、フェードインで復元してドローコールと冗長キーを削減します。Cleanupは論理的な冗長性(未使用の色/アルファトラック、制約で完全制御されるIK回転キー、パス制約キー)を除去。動画でロジック系最適化と曲線簡略化の違いを示します。 YouTubeで見る

Spine2D 実験5: 非線形パイプラインの構築(フィルターとMerge) — 非線形最適化: フィルター(アニメーション/ボーン/スロット/パラメータ/スキン)でデータストリームを分岐し、並列ブランチで異なるアルゴリズムを実行(例: 体のボーンは強めに圧縮し、顔のアニメは損失なし維持)、最後にMergeノードで一つのスケルトンに統合します。単純な入力 → 最適化 → 出力を超え、最適化すべき箇所だけを狙えます。 YouTubeで見る

Spine2D 実験6: テクスチャ再パックと選択的スケーリング — 高度なテクスチャ最適化パイプライン。Atlas Unpacker/Repackerノードでアトラスのアンパック、リサイズ/圧縮、リパックを1つのグラフ内で実行でき、標準Spineワークフローより高速です。非線形パイプラインにより、アセットを分割し、キャラクターのテクスチャを100%のまま、他を25%にスケールして再統合できます。Atlas/Asset Viewerノードで各段階の可視確認とフィルタリングが可能。リサイズ目標の設定、選択的処理、再利用テンプレ化が容易になります。 YouTubeで見る

Spine2D 実験7: Scaleノードで即時スケルトン調整 — 一連の最適化パイプライン+スケルトンのスケーリング。Scaleノードが、面倒なSpineワークフロー(エクスポート/インポート、リパック/アンパック、パス修正)を単一のグラフ手順に置き換えます。目標サイズを設定し、ビューポートで即時プレビュー、リアルタイムに調整可能。動画でカーブ/キー最適化、アセット処理、スケルトンリサイズを一つにまとめた流れを示します。 YouTubeで見る

Spine2D 実験8: 公開ベータのノード概要 — 公開ベータで使える全ノードの解説と、re‑polishがアニメーターと開発者のギャップを埋める方法を紹介。冗長キーのクリーンアップ、ベジエ→線形の簡略化、サイズ削減のための丸め、不可視アタッチメントの削除、未使用プロパティの整理、非英字の検出、アトラスのunpack/filter/scale/repackを含みます。二画面ビューでビジュアルとFPSを並べて検証。公開ベータ公開中: re-polish.comYouTubeで見る

Spine2D 実験9: 物理制約をキーフレームにベイク — この動画では、物理制約を標準のキーフレームへベイクする最新の実験を紹介します。新しいベイクアルゴリズムは、完全なループ(開始と終了フレーム間のジッターやジャンプをゼロ)、最適なファイルサイズ(自動カーブクリーンアップでJSONサイズを元に近づける)、後方互換性(ベイク済みキーでSpine 4.2の物理アニメーションをSpine 4.1や4.0でも利用可能)を実現します。 YouTubeで見る

Nodes

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'を受け入れ、各抽出された画像を視覚化し、そのプロパティ(寸法、回転など)を調べ、解凍後の視覚的正確性を検証できるようにします。