アトラス出力形式
このページでは、libgdxアトラス形式をベースとしたSpineのテクスチャアトラス形式について説明します。Spineランタイムは、このデータをロードしてアニメーションを表示します。
Spineランタイムは、テクスチャアトラスデータのロードを行います。独自のランタイムをゼロから書くのでなければ(これは膨大な作業量です)、独自のロードコードを書く必要はありません。
この形式は、1つ以上のページ項目と任意の数の領域項目からなる単純な行ベースのテキスト形式です。ページ項目は空白行によって区切られます。改行以外の空白スペースは任意です。以下は2ページある場合のアトラスの例です:
size: 640, 480
format: RGBA8888
filter: Linear, Linear
repeat: none
pma: true
dagger
bounds: 372, 100, 26, 108
head
index: 0
bounds: 2, 21, 103, 81
rotate: 90
page2.png
size: 640, 480
format: RGB565
filter: Nearest, Nearest
repeat: x
bg-dialog
index: -1
rotate: false
bounds: 519, 223, 17, 38
offsets: 2, 2, 21, 42
split: 10, 10, 29, 10
pad: -1, -1, 28, 10
ページセクション
ページセクションでは、ページ画像名と、画像のロードとレンダリングに関する情報を提供します。以下がページセクションのヘッダーの例です:
size: 640, 480
format: RGBA8888
filter: Linear, Linear
repeat: none
pma: true
ページのプロパティ:
- name: 最初の行は、このページの画像名です。画像がどこにあるかはアトラスローダー次第ですが、通常はアトラスファイルを含むディレクトリからの相対位置です。
- size: ページ画像の幅と高さ。これはアトラスローダーが画像をロードする前に知っておくと便利で、例えばバッファを割り当てるのに利用できます。省略した場合は
0,0になります。 - format: アトラスローダーが画像をメモリに格納するために使用するフォーマット。アトラスローダーはこのプロパティを無視することができます。使用可能な値は次の通り:
Alpha、Intensity、LuminanceAlpha、RGB565、RGBA4444、RGB888、RGBA8888。省略した場合はRGBA8888になります。 - filter: テクスチャフィルタの縮小および拡大の設定。アトラスローダーはこのプロパティを無視することができます。使用可能な値は次の通り:
Nearest、Linear、MipMap、MipMapNearestNearest、MipMapLinearNearest、MipMapNearestLinear、MipMapLinearLinear。省略した場合はNearestになります。 - repeat: テクスチャのラップ設定。アトラスローダーはこのプロパティを無視することができます。使用可能な値は次の通り:
x、y、xy、none。省略した場合はnoneになります。 - pma:
trueの場合、このページ画像は乗算済みアルファ(Premultiplied alpha)が適用されています。省略した場合はfalseになります。
領域セクション
領域セクションは、ページ画像内の領域の位置と、領域に関するその他の情報を提供します。以下が領域セクションの例です:
index: -1
rotate: false
bounds: 519, 223, 17, 38
offsets: 2, 2, 21, 42
split: 10, 10, 29, 10
pad: -1, -1, 28, 10
領域のプロパティ:
- name: 1行目は領域の名前です。これはアトラス内でその領域を探すのに使われます。異なるindexを持っている場合は、複数の領域が同じ名前を持つことがあります。
- index: インデックスを使用すると、それぞれが異なるインデックスを持つ限り、同じ名前を使用してたくさんの画像をパックすることができます。通常、フレーム・バイ・フレームアニメーションのために順番に表示される領域では、インデックスがフレーム番号になります。省略した場合は
-1になります。 - bounds: ページ画像内のこの画像のx、yピクセル座標、つまりページ画像内のこの画像のピクセルサイズであるパック画像サイズです。省略した場合は
0,0,0,0になります。 - offsets: パックする前に画像の左端と下端から取り除かれた空白ピクセルの量、つまりパックする前のこの画像のピクセルサイズであるオリジナル画像サイズを示します。空白除去が行われた場合、元の画像サイズはパックされた画像サイズよりも大きくなることがあります。省略された場合、左端と下端には
0,0が使用され、元の画像サイズはパックされた画像サイズと等しくなります。 - rotate:
trueの場合、領域は反時計回りに90度回転してページ画像に格納されています。それ以外の場合は、0 回転の場合はfalseまたは0 から 360 までの度数を表す数値となります。省略した場合は0になります。 - split: ninepatch用の左、右、上、下分割です。これらは、元画像の端からのピクセル数になります。分割は、画像のすべての部分を引き伸ばすことなく画像を拡大縮小するための 3x3 グリッドを定義します。省略した場合は
nullになります。 - pad: ninepatch用の左、右、上、下パディングです。これらは、元画像の端からのピクセル数になります。パディングにより、ninepatchの上に配置されたコンテンツが、分割とは異なる形で挿入されるようになります。省略した場合は
nullになります。
領域セクションの後の空白行は、そのページの領域全体の終わりを意味します。その次の行は、別のページセクションか、ファイルの終端となります。
名前/値のペア
上記以外の名前の領域値は、名前と値のペアとして格納されます。これにより、各領域に追加データを関連付けることができます。Spineでは、フレーム・バイ・フレームアニメーションの画像エクスポートにこれを使用して、各領域の原点(ワールド0,0の位置に対するオフセット)とボーン座標を保存します。
レンダリング
アトラス作成時のテクスチャパッキング設定によっては、アトラスから領域をレンダリングする際に特別な注意を払う必要があります。以下の設定は、より効率的なテクスチャパッキングをもたらしますが、レンダリングを簡素化するために、アトラス作成時に無効にすることができます。
回転
領域が回転してアトラスに保存された場合、レンダリングは回転を補正するためにUVを調整する必要があります。
空白除去
領域の端の空白除去をしてからパッキングした場合、レンダリングでは空白が除去されていないように見えるように描画位置を調整する必要があります。
領域を反転して描画できる場合は、反転した領域を描画する際に空白の除去を考慮する必要があります。
右端と上端から削除される空白の量は、次のように計算されます:
offsetTop = originalHeight - packedHeight - offsetBottom