テクスチャパッキング

Spineはランタイムにより効率的なレンダリングを実現するために個々のイメージをテクスチャアトラスまたはグリッド(スプライトシート)にパックします。Spineのテクスチャパッカーは一般用途のツールです。Spineスケルトンにも使用できますが、全てのイメージをアプリケーションにパックするために個別に実行することも可能です。

ほとんどのグラフィックスAPI(例、OpenGL)ではテクスチャがバインドされて描画が行われます。また他のテクスチャがバインドされ、さらに描画が行われます。テクスチャのバインドは負荷が高い処理です。このため、多数の小容量のイメージを大きなイメージの上に保存し、大型のテクスチャを1度バインドし、部分を何回か描画するとよいでしょう。Spineは多数の小容量のイメージを効率的にパックします。小容量イメージははシンプルなデータファイルに保存されるため、アプリケーション内で名前により参照できます。

Spineは複数の高度なパッキングアルゴリズムを使用します。パッキングは大小の多数のヒューリスティックスにより実行され、最も効率的な結果が選択されます。

パッキング

テクスチャパッカーは2方法により実行されます。

1) JSONまたはバイナリにエクスポートする間、「アトラス作成」をチェックします:

これはデータとアトラスを同時にエクスポートする便利な方法ですが、各スケルトンが参照するイメージのみをパックし、フォルダ構造JSONファイルを無視します。複数のスケルトンのイメージを単一のアトラスにパックするには、次のパッカー実行方法をご使用ください。

2) メインメニューから「テクスチャパッカー」を選択します:

その後パックするイメージへのパスを指定します:

設定

イメージのパック方法の制御には多くの設定があります。

最初は困難かもしれませんが、ほとんどの場合、デフォルトでも大丈夫です。最も重要な設定は:1)最大幅/高さ、2)プリマルチプライド・アルファ(乗算済みアルファ)使用の有無、3):空白スペース除去(whitespace stripping)実行の有無です。メッシュを使用する場合、空白スペース除去は無効にしなければなりません。

領域

設定内容
空白スペース除去 X/Yインプットイメージの端周辺の空白ピクセルを除去します。除去量はアトラスデータに保存されているため、アプリケーション内で空白スペースが除去されていないかのようにイメージが表示されます。メッシュを使用する場合、空白スペース除去は無効にしなければなりません。
回転イメージには90度回転するとより効率的なパッキングが行われるものもあります。アプリケーションはこれらの領域を表示するために、特別な注意が必要です。
アトラス各ピクセルが全く同一のイメージは一度しかパックされません。
空白イメージを無視透明なピクセルしかないイメージはパックされません。
アルファの閾値空白スペースが除去される時、これより下のアルファ値はゼロとして扱われます。

領域パディング

設定内容
パディング X/Yパックされたイメージ間のピクセル数。テクスチャフィルタリングが隣接ピクセルを平均するため、隣接領域がお互い影響し合わないようにパディング2が推奨されます。
エッジパディングページイメージの端にもパディングが適用されます。
パディング複製パディングが最寄りの領域のピクセルをコピーします。テクスチャフィルタリングがパディングピクセルを選択する場合、これにより「シーム」アーチファクトを非表示にすることができます。

ページ

設定内容
最小幅/高さページイメージの最小サイズ
最大幅/高さページイメージの最大サイズ。イメージがこのサイズのページにフィットしない場合、複数ページのイメージが出力されます。
2のべき乗出力ページの寸法を2のべき乗にします。これは幾つかのゲームツールキットの要件です。
正方形幅と高さを作ります。これは幾つかのテクスチャ圧縮アルゴリズム(例、PVRT)の要件です。

出力

設定内容
形式PNGまたはJPGページを出力します。
JPG品質JPG出力の圧縮。
パッキング

「アトラス」はイメージをできる限りタイトにパックします。「グリッド」はイメージを画一的なグリッド(スプライトシートとして知られる)にパックします。

プリマルチプライド・アルファ

アルファ値でピクセルRGB値を乗算します。これは適切なブレンディングに推奨されます。

Bleed

透明ピクセルのRGB値を最も近い非透明ピクセルのRGB値に設定します。RGB値が透明ピクセルのためにサンプルされる時、これはテクスチャフィルタリングアーチファクトを予防します。

スケールアトラス全体が指定されたスケールで出力されます。
接尾辞スケーリングされたアトラスの接尾辞。空白の場合、複数スケールのファイルは同名でそれぞれのスケールのサブフォルダに出力されます。

オプション

設定Description
アトラス拡張子アトラスデータファイルのファイル拡張子。
サブディレクトリの組み合わせ現在のフォルダと全サブフォルダが同じページにパックされます。サブフォルダ内のJSON設定ファイルは無視されます。
パス平坦化サブフォルダは領域ファイル名から除去されます。イメージファイル名には独自の名前を付けます。
使用インデックスイメージ名はイメージインデックス接尾辞(最後の下線以降全て)を削除せずに使用します。
高速パッキングは効率的ではありませんが、より高速に実行されます。
デバグパックされたイメージバインドを表示するために出力ページ上にラインが描画されます。

ランタイム

これらの設定はランタイムにオプションとして適用できるアプリケーションへのヒントです。

設定内容
縮小/拡大フィルターテクスチャ縮小と拡大設定。
ラップ X/Yテクスチャラップ設定
形式インメモリ形式。

フォルダ構造

Spineは1ショットに全てのイメージをパックします。Spineはフォルダのイメージファイルを再帰的にスキャンします。遭遇する各イメージフォルダに対し、ページと呼ばれる大きなテクスチャ上にイメージをパックします。フォルダ内のイメージが単一ページの最大サイズにフィットしない場合、複数ページが使用されます。

同じフォルダのイメージは同じページセットに出力されます。全てのイメージが単一ページにフィットする場合、アプリは1ページに1テクスチャバインドしか実行しないため、サブフォルダは使用されません。それ以外の場合は、テクスチャバインドを最小化するために関連イメージは分離されてサブフォルダに入れられます。

例:2セットのイメージが順次に描画されたため、アプリケーションは全ての「ゲーム」イメージを「ポーズメニュー」とは別のフォルダに配置するとします:全てのゲームイメージは(1バインド)で描画され、ポーズメニューがその上(他のバインド)に描画されます。イメージが1ページ以上の単一フォルダに存在する場合、各ページはゲームとポーズメニューイメージのミックスを含むことがあります。これによりゲームとポーズメニューをレンダリングするテクスチャバインドが各々一つづつではなく、複数存在することになります。

サブフォルダは関連テクスチャ設定とイメージをグループ化する目的にも便利です。ランタイムメモリ形式(RGBA、RGB、その他)やフィルタリング(ニアレスト、リニアなど)はテクスチャ毎に設定されます。テクスチャ設定毎に相違するイメージは別々のページに出力する必要があるため、別個のサブフォルダに配置します。

Spineによる各サブフォルダ用のページセット出力を使用せずに、サブフォルダを整理のために使用する場合、「サブディレクトリの組み合わせ」設定をご覧ください。

アトラスファイル内でサブフォルダパスがイメージ名に使用されるのを避けるためには、「パス平坦化」設定をご覧ください。

JSON設定

それぞれのフォルダがフォルダ設定を指定するために"pack.json"ファイルを含むことがあります。各サブフォルダは親フォルダから全ての設定を継承します。サブフォルダの設定セットは親フォルダ内の設定を無効にします。

以下はJSONの例と利用可能な全ての設定です。

{
   pot: true,
   paddingX: 2,
   paddingY: 2,
   bleed: true,
   edgePadding: true,
   duplicatePadding: false,
   rotation: false,
   minWidth: 16,
   minHeight: 16,
   maxWidth: 1024,
   maxHeight: 1024,
   square: false,
   stripWhitespaceX: false,
   stripWhitespaceY: false,
   alphaThreshold: 0,
   filterMin: Nearest,
   filterMag: Nearest,
   wrapX: ClampToEdge,
   wrapY: ClampToEdge,
   format: RGBA8888,
   alias: true,
   outputFormat: png,
   jpegQuality: 0.9,
   ignoreBlankImages: true,
   fast: false,
   debug: false,
   combineSubdirectories: false,
   flattenPaths: false,
   premultiplyAlpha: false,
   useIndexes: true,
   grid: false,
   scale: [ 1 ],
   scaleSuffix: [ "" ]
}

これはlibgdxの"最小"JSONフォーマットなので、二重引用符("")はほとんどの場合オプションであることにご注意ください。

全ての設定を指定する必要はありません。1部または全部を省略できます。例えばパディングをオフにしてサブフォルダを組み合わせるには、以下のJSONが使用されます:

{
   paddingX: 0,
   paddingY: 0,
   combineSubdirectories: false
}

設定ダイアログは「JSON保存」ボタンがあり、JSONファイルを現在の設定で保存します。このファイルは「pack.json」と名付けられ、JSONを手書きする代わりにフォルダ設定を指定するために、インプットイメージフォルダに配置することができます。

Ninepatches 

一般的にNinepatchesはSpineのスケルトンに役立ちますが、他の目的にも使用できます。

イメージファイル名がファイル拡張子の直前で".9" で終了する場合、ninepatchと考慮されます。Ninepatch イメージは手動またはこのツールを使用して作成できます。イメージは1pxの透明なボーダーを持つ必要があります。左上端にはninepatchのどの部分が伸びるかを示すスプリット情報を意味するブラックピクセルの隣接線を1本含むことがあります。右下端にはninepatchの上のコンテンツがいかに挿入されるかを示すパディング情報を意味するブラックピクセルの隣接線を1本含むことがあります。このイメージがパックされると1pxボーダーが削除され、スプリットとパディング情報はアトラスデータファイルに保存されます。

イメージインデックス

一般的にイメージインデックスはSpineスケルトンに利用できますが、他の目的にも利用できます。

イメージファイル名が下線と数字で終了する場合(例、animation_23.png)、数字は「インデックス」と考慮され、アトラスデータファイル内のその領域に保存されます。イメージ名は下線とインデックス無しで保存されます。これにより同名の全イメージリストが読み出され、インデックスにより整理されます。これによりフレーム順序を失わずにスプライトアニメーションを容易にパックすることができます。

次: インポート 前: エクスポート