ATF (Adobe Texture Format) は GPU で利用するテクスチャのコンテナとして使われるフォーマットです。Stage3D にも ATF を GPU にアップロードする API が提供されています。
ところが、これまで ATF を生成するツールは提供されていませんでした。ということで、こちら (なぜか dropbox) にようやく待望の ATF SDK が公開です。
ダウンロードすると、ZIP ファイル内には、
- Mac、Windows、Linux 用のツール
- ATF のスペック (PDF : 英語)
- ユーザーガイド (PDF : 英語)
が含まれています。
ATF を使った開発を行うには以下の環境が必要です。
- AIR SDK 3.4 の最新版 (Flash Builder 4.7 ベータ版に付いてきます)
- Starling を使う場合は最新版の Starling 1.2
- Stage3D で直接扱う場合は最新版の AGALMiniAssembler
その際、パブリッシュのターゲットは、Flash Player 11.4 / AIR 3.4 以降に設定します。また、コンパイル時には -swf-version=17 を指定します。
ATF の利点
Stage3D を始め、GPU 描画でテクスチャを扱う際は、まず GPU にテクスチャをアップロードします。その際、圧縮されたテクスチャをアップロードするのが望ましいとされています。
その理由としては、
- テクスチャの保持に必要なメモリ料が少ない
- テクスチャのアップロードが短時間で済む
- 描画が早くなる
といったものがあるようです。
ここで扱う圧縮フォーマットは JPEG の様な一般的なものではなく、GPU がその機能の一部としてサポートする圧縮フォーマットです。そのため GPU の種類により対応するフォーマットが異なります。
以下のように、いずれも通常はあまり耳にしない名前です。
- iOS
ImgTech : PVRTC - Android
Mali : ETC1
NVidia : ETC1 / DXT1 / DXT5
PowerVR : ETC1 / PVRTC
Qualcom : ETC1 - MacOS : DXT1 / DXT5
- Windows : DXT1 / DXT5
このリストを見ると、デスクトップ以外の環境をターゲットに含む場合は、複数のテクスチャを使い分ける必要がありそうなことが分かります。
例えば iOS と Andoroid で動作させたければ、PVRTC と ETC1 のデータを用意します。加えて、実行時に、動作環境を特定してアップロードするデータを選択するという処理も必要です。
こんな面倒な手間はできればかけたくないですよね、というところで ATF の出番です。
ATF は、複数のフォーマットを内部に保持することができるようになっています。そして、Flash Player や AIR には、ATF ファイルから実行環境に最適なテクスチャを取り出す機能があります。
そのため、GPU 機能の詳細を意識すること無く、プログラムを記述することができます。
例えば、Starling であれば以下の様な感じです。
[Embed(source="myTexture.atf", mimeType="application/octet-stream")] public static const CompressedData:Class; var data:ByteArray = new CompressedData(); var texture:Texture = Texture.fromAtfData(data); var image:Image = new Image(texture); addChild(image);
これなら圧縮フォーマットの利用も簡単そうです。
ATF SDK の使い方
ATF SDK には、画像を ATF ファイルに変換するツールがいくつか含まれています。
元のファイルのフォーマットによって使うツールが異なります。例えば、PNG ファイルを ATF ファイルに変換する場合は png2atf を使用します。
指定する引数は、圧縮することを指示する -c と、入力ファイルを指定する -i と、出力ファイルを指定する -o で通常は十分かと思います。例えば、
./png2atf -c -i myTexture.png -o myTexture.atf
の様に実行します。
これにより生成される ATF ファイルには、iOS、Android、デスクトップ用の 3 種類が含まれています。例えば、とりあえず iOS 用に PVRTC だけあれば良いという場合には -c の後に p を指定して、ファイルサイズを押さえることもできます。
./png2atf -c p -i myTexture.png -o myTexture_pvrtc.atf
引数 -c を指定しないと、非圧縮の RGBA データが ATF 内にパッケージされます。圧縮による画像データの質の低下が気になる場合には使えるかもしれません。
Flash Player 11.3 / AIR 3.3 から導入された、テクスチャストリーミングに使う ATF ファイルを生成することもできます。
png2atf -m -n 0,0 -c -i myTexture.png -o myTexture_high.atf png2atf -m -n 1,2 -c -i myTexture.png -o myTexture_med.atf png2atf -m -n 3,10 -c -i myTexture.png -o myTexture_low.atf
生成された ATF ファイルの内容を確認できるように、ATFView というツールも提供されています。
その他にも便利なツールがいくつか提供されています。詳しい使い方は、ドキュメントをご覧下さい。
コメントする