3Dc
3Dcは法線マップを非可逆圧縮するアルゴリズムであり、ATIが最初に開発、実装した。これは初期のDXT5アルゴリズムをベースとしており、オープンスタンダードな技術である。3Dcは今はATIとNVIDIAの両方が実装している。
対象分野
[編集]対象となる法線マッピングは、直線で囲まれた格子から表面の法線を読み出し、幾何学的な表面にライトを当てることをシミュレーションするバンプマッピングの一拡張である。これは、単純なモデルに複雑さを増した印象を与えるテクスチャマップに似たものである。
処理コストは減少するが、メモリコストはより増大している。コンシューマ用の3Dハードウェアに実装されてきた既存の可逆圧縮アルゴリズムでは、少ない描画物体で正確に表現するための法線マップを用意するには力不足である。これが3Dcの開発された理由である。
3DcはATIのX800シリーズで正式に導入されたが、このアルゴリズムは古いR3xxシリーズや他社のカードで採用されたS3TCとも互換性がある。画質と圧縮率はそれほどいいわけではないが、画質の劣化は標準のS3TCよりは非常に少ない。
アルゴリズム
[編集]表面の法線は、単位長さを持つ3次元ベクトルである。法線ベクトルの長さを制約することにより、どんな法線でも表現するには2要素のみあればよい。それゆえに、入力ベクトルは2次元配列になる。
4x4ブロックで圧縮を行う。それぞれのブロック内では、それぞれの値の2要素を別々に圧縮する。このことから圧縮には16個の数字を2セット必要になる。
この圧縮は、16個の値のうち最小値と最大値を取り出し8bitに量子化する。4x4ブロック内にある個々の要素は3bitに量子化され、最小値と最大値の間を線形に8分割した値に近似される。
入力データは、全体の大きさは4x4ブロック毎に128bitで表現される。8bit精度で非圧縮の場合は、元データは同じ大きさの領域の32個の8bitデータがあるので、全部で256bit必要になる。このアルゴリズムを用いると2:1に圧縮ができる。
圧縮率が時々4:1として表現されるが、これは入力データとして8bit精度ではなく16bit精度を使った場合である。このアルゴリズムは入力データを文字通り1/4に圧縮して出力するが、精度は1/2の場合と比較して同じではない。