圧縮テクスチャ。現代的なグラフィックス処理の大半はメモリ間転送ですよね。圧縮テクスチャはGPU内のメモリ使用量と転送量を削減してパフォーマンスもアップさせる魅惑のテクニックです。きっとスマートフォンのバッテリーの持ちも良くなることでしょう。
iOSはPowerVRを一貫して使っているので、PVRフォーマットが標準です。Androidの方はいちおうETC1という共通フォーマットはあるのですが、アルファチャンネルが持てなかったりするのでデバイスごとの最適なフォーマットを使うのが普通みたいです。
- ATiTC: 元ATi(現AMD)のフォーマット。ATCとも呼ばれています。ATiのモバイル向けのプロセッサは現在Qualcommがリリースしています。よく使われていrます。アルファチャンネルの有無、アルファチャンネルの特性で3種類の内部フォーマットがあります。
- DXTC: Direct X用共通フォーマットみたいです。nVidiaのTegra系が利用しています。これも、データの種類ごとに3〜4種類の内部フォーマットがあるらしい。
- PVR: iOS系と同じPowerVRを載せているデバイスで使います。圧縮率、アルファチャンネルの有無で2x2の4種類あります。
- ETC1: エリクソン社が作った標準フォーマットですが、ARM社自身が作っているMaliというGPUがこれのみをサポートしています。
そのうち、ETC2というアルファチャンネルをサポートしたフォーマットが共通で使えるようになるらしいです。このあたりは、こちらのブログを上から下まで拝むように読みまくる方が正しい情報を得られると思います。
開発ツールのみであれば、WindowsかMacだけでもいいとは思うのですが、ビルドサーバとか考えるとLinuxサポートも欲しくなるかもしれないので、その観点でマルチプラットフォームで入手可能か?で調べています。全部の検証をしたわけではないです。あくまでもメモです。
PVRフォーマット
PowerVRをリリースしている、Imagination社のサイトにツールなりなんなりが色々あります。要ユーザ登録。PVRTexToolが変換ツールです。GUIツールですが、コマンドラインからも使えるらしい。パッケージに、Windows 32/64, Linux 32/64, Mac 32の5バージョンが含まれています。Windows版だけはDXTCサポートみたい。ずるい。Apple限定でよければ、iOS用のSDKに変換ツールが付いてきます。
ライブラリとしても提供されていますので、ツールチェーンに組み込んだりもしやすいかな、と思います。ただし、ビルド手順を見ると、SDKに含まれるライブラリとかヘッダも必要とか色々書かれていて、家の遅いネットでダウンロードするのが時間がかかりそうなので詳しくおいかけてません。SDKはOpen GL ES1.1と、ES 2.0用と分かれていリリースされています。
DXTCフォーマット
今回は僕の作業では特に必要はないので詳しくは調べていませんが、nVidia社が変換ツールのソースをMIT License!で公開しています。コメントを見ると、Linuxでも動くよ、と書かれています。Macは時々落ちるかも・・・と書かれています・・・。
http://code.google.com/p/nvidia-texture-tools/ATiTC/ETCフォーマット
なかなか調べにくかったのがこいつです。DXTCファイルから無理やり変換も見つけましたが、1ビット情報を無理やり落としてしまっていたりとちょっとデザイナーさんから怒られそうな感じ。AMDはWindows向けのツールしか提供していませんし、QualcommのAdrenoSDKもzipファイルを展開すると.exeファイルががががが。
でも、あきらめずに.exeファイルでインストールすると、変換用のライブラリが手に入ります。Windows32/64用とMac用。それにWindowsMobile、webOS、Androidもサポートしているので実機上の変換もできそうです。Linuxは残念ながら対象外。
また、Windows専用ですが、QCompressというGUI/CUIのツールも付いてきます。@nakamura001の啓示に従い、wineで動かしてみようと思います。
$ sudo port install wine : (待つ) $ wine ~/Downloads/AdrenoSDK/AdrenoSDK.2.3.00.exe
ふつーにWindowsっぽいダイアログが出て、インストールが行われます。初回のwine起動時は環境作ったりで時間がかかるかも。ホームの.wine以下にWindowsっぽいディレクトリ構造ができます。/users/Public/Documents/にテスト用の画像を置いてみました。
$ cd ~/.wine/drive_c/AdrenoSDK/Tools/QCompress $ wine QCompressCmd.exe c:\\users\\Public\\Documents\\test.png c:\\users\\Public\\Documents\\test.atc "ATC RGBA Explicit" QCompessCmd v0.01.00 (c)2011 QUALCOMM Incorporated
フォルダを見てみると、test.atcが出来ています。やったね。
上記の例で使ったQCompressがETC1にも対応しています。以上終了。
まとめ
やっぱり、Windowsの方が細かいツール類は充実していますねー。一部無理やりなところもありましたが、ひと通り欲しいデータは得られそうです。