先日のPVRTCに引き続き、ATCテクスチャのデコードにチャレンジしてみました。
ATCでは、AMD_compressed_ATC_texture.txt にあるように3つの種類の方式があるようです。
- 不透明: ATC_RGB_AMD
- アルファあり: ATC_RGBA_EXPLICIT_ALPHA_AMD
- アルファあり: ATC_RGBA_INTERPOLATED_ALPHA_AMD
これらはそれぞれFourCCが割り当てられているようで次のようになっています。
圧縮後をDDSに出力するツール(Compressonator:AMD製)で確認してみました。
- ‘ATC’: 4bpp: ATC_RGB_AMD
- ‘ATCA’: 8bpp: ATC_RGBA_EXPLICIT_ALPHA_AMD
- ‘ATCI’: 8bpp: ATC_RGBA_INTERPOLATED_ALPHA_AMD
ATCはQualcommのSnapdragonでサポートされている形式でもあり、AdrenoSDK 3.0で提供されるツールでも出力が可能となっています。しかしながら EXPLICIT_ALPHA と INTERPOLATED_ALPHA のFourCCが逆に出力されるようです。
テクスチャツールが割と扱いやすいだけにこのバグは修正されて欲しいなと思います。
それともこれらの圧縮形式を使う場合にはKTXフォーマットの方がいいのかも。
とりあえずわかっている情報からATC圧縮形式をデコードしてRGBA8にして、DDSとして出力してみました。次のような感じに変換できており無事に処理できていそうです。
右側には対等な関係にあるDXT圧縮の物を比較のために並べてみました。
だいたい同様のアルファ変化となっていますし、正しそうな気配です。