優秀だという BC7 圧縮の品質がどんなものか調べてみました。
そのためにはそこそこの品質以上の画像データが必要だったので友人に協力してもらい画像を使わせてもらっています。
この場を借りてお礼申し上げます。
BC7への圧縮については Codeplex からダウンロードできる Microsoft の TexConv を使用しています。この最高品質となる CPU で処理した結果ではなく、 GPU を用いた速度とのバランスがとれているであろうモードを選択しています。
比較
いきなりですが圧縮前後の画像を比較してみます。
左が圧縮前、右が圧縮後のデータです。圧縮ノイズなどは確認できるでしょうか?自分では等倍でぱっと見た感じわかりませんでした。心持ち髪の毛曲線部とアルファの部分でノイズが気になるかも程度です。
よくわからない状態だったので、2画像間の差を求めてみました。そのままだとそれでもわからず、差の値をリマップしています。
0-32 までの範囲を 0-255 の範囲になるように区間拡張しています。つまり画素間の誤差はその範囲に収まっている、ということでもありますね。
ここまですると両者での値が違っていることがわかりますね。当たり前のことですがグラデーション部分は強いものの輪郭部分はやはり誤差が出てくるようです。
髪の細い部分とアルファからなる部分ではノイズが多いように見えますが、思っていたよりはブロックノイズが控えめです(と感じています)。
また髪の太い束側では曲線部分も含め気になるレベルのノイズは見当たらないようです。アルファもきれいに圧縮されているように思います。
一方でアルファが入っていない塗りの部分では気にならないように思います。リボン周辺部とかは誤差が多い判定がされているにもかかわらず人の目には大丈夫そうです。
まとめ
確かに世間で言われているように BC7 は優秀だと思いました。使える環境ではこれで十分な気がします。高解像度化が進んでいますし、1ピクセルが面積的には少なくなってきている昨今ではブロックノイズすら気づきにくいかもしれません。現在はまだ GLES3 ですら BC7 が使えませんが・・・時間の問題で同品質の圧縮形式が使えるようになってくるかもしれません。
他の圧縮形式でもどの程度の圧縮品質なのかはそのうち調べてみようかと思っています。