S3 テクスチャ圧縮( S3TC ) ( DXTn、DXTC、BCnとも呼ばれる) は、S3 Graphics, Ltd. [1]の Iourcha ら[2]がSavage 3Dコンピュータ グラフィックス アクセラレータで使用するために開発した、関連する非可逆 テクスチャ圧縮 アルゴリズムのグループです。圧縮方法は、以前に公開されたカラー セル圧縮[3]と非常によく似ています。カラー セル圧縮は、 1970 年代後半に公開されたブロック トランケーション コーディングを改良したものです。一部の画像圧縮アルゴリズム ( JPEGなど) とは異なり、S3TC の固定レート データ圧縮と単一メモリ アクセス (カラー セル圧縮や一部のVQベースのスキームを参照) を組み合わせることで、ハードウェア アクセラレーションによる3D コンピュータ グラフィックスのテクスチャ圧縮に適しています。その後、 MicrosoftのDirectX 6.0 およびOpenGL 1.3 (GL_EXT_texture_compression_s3tc拡張機能経由)に取り込まれたことで、ハードウェアおよびソフトウェア メーカーの間でこのテクノロジが広く採用されるようになりました。S3 Graphics はグラフィック アクセラレータ市場ではもはや競合相手ではありませんが、2017 年 10 月までは、ゲーム コンソールやグラフィック カードなどで S3TC テクノロジの使用に対してライセンス料が課され、徴収されていました。S3TC の広範な使用により、 OpenGL ドライバは事実上これをサポートすることが義務付けられましたが、S3TC の特許による制約がオープン ソース実装の大きな障害となり、[4]特許部分を回避しようとする実装アプローチも存在しました。[5]
特許
S3テクスチャ圧縮に関する複数のUSPTO特許のうちいくつか(例:US 5956431 A)は、2017年10月2日に失効しました。 [6]ただし、少なくとも1つの継続特許(US6,775,417)には165日間の延長がありました。この継続特許は2018年3月16日に失効しました。
コーデック
S3TC アルゴリズムには 5 つのバリエーション ( DXT1からDXT5まで、 Microsoft が各形式に割り当てたFourCCコードを参照) があり、それぞれ特定の種類の画像データ向けに設計されています。いずれも 4×4 のピクセルブロックを64ビットまたは 128 ビットの量に変換し、24 ビットRGB入力データで 6:1、32 ビットRGBA入力データで 4:1の圧縮率を実現します。S3TC は非可逆圧縮アルゴリズムであるため、画像品質が低下しますが、メモリ要件を同じにしたままテクスチャ解像度を上げることができるため、この影響は最小限に抑えられます。手描きの漫画のような画像は圧縮率が低く、法線マップデータも同様に圧縮率が低く、どちらも通常はアーティファクトを生成します。ATIの3Dc圧縮アルゴリズムは、法線マップに関する S3TC の欠点を克服するように設計された DXT5 の修正版です。 id Softwareは、圧縮前に赤の成分をアルファチャンネルに移動し、ピクセルシェーダーでのレンダリング中にそれを戻すことで、 Doom 3の法線マップの圧縮問題を回避しました。[7]
多くの最新の画像圧縮アルゴリズムと同様に、S3TC は画像を解凍する方法のみを指定しており、実装者は特定のニーズに合わせて圧縮アルゴリズムを設計できますが、特許は依然として圧縮アルゴリズムをカバーしています。nVidia GeForce 256 から GeForce 4 カードでは、DXT1 テクスチャのレンダリングに 16 ビット補間も使用されていましたが、その結果、カラー グラデーションのテクスチャを解凍するときにバンドが発生しました。これもまた、テクスチャ圧縮の悪い印象を与えましたが、コーデック自体の基礎とは関係ありません。
DXT1
DXT1 (ブロック圧縮 1 または BC1 とも呼ばれる) は S3TC の最小のバリエーションであり、16 個の入力ピクセルを 64 ビットの出力に格納します。出力は 2 つの 16 ビット RGB 5:6:5 カラー値と、および 4×4 の 2 ビット ルックアップ テーブルで構成されます。
(これらの色を2つの16ビット符号なし数値として解釈して比較する)場合、各成分について、およびとなるように他の2つの色が計算されます。このモードは、オリジナルのAppleビデオコーデックのモード0xC0と同様に動作します。[8]
それ以外の場合、 の場合、およびは、プリマルチプライされたアルファ形式に対応する透明な黒です。この色は、不透明なテクセルの色と隣接する黒い透明なテクセルの間で色が補間されるため、線形テクスチャ フィルタリングとアルファ テストが使用されるときに、透明領域を囲む黒い境界線を引き起こすことがあります。
次に、ルックアップ テーブルを参照して各ピクセルのカラー値を決定します。値 0 は に対応し、値 3 は に対応します。
DXT2 と DXT3
DXT2 および DXT3 (総称してブロック圧縮 2 または BC2 とも呼ばれる) は、16 個の入力ピクセル (4x4 ピクセル ブロックに相当) を 128 ビットの出力に変換します。この出力は、64 ビットのアルファ チャネルデータ (各ピクセルに 4 ビット) と、それに続く 64 ビットのカラー データで構成され、DXT1 と同じ方法でエンコードされます (ただし、との相対値に基づいてどちらのバージョンを使用するかを決定するのではなく、常に DXT1 アルゴリズムの 4 色バージョンが使用される点が異なります)。
DXT2 では、カラー データはアルファで事前乗算されていると解釈されますが、DXT3 ではアルファで事前乗算されていないと解釈されます。通常、DXT2/3 は、半透明領域と不透明領域の間のアルファ遷移が急峻な画像に適しています。
DXT4 と DXT5
DXT4 および DXT5 (総称してブロック圧縮 3 または BC3 とも呼ばれます) は、16 個の入力ピクセルを 128 ビットの出力に変換します。出力は、64 ビットのアルファ チャネル データ (2 つの 8 ビット アルファ値と 4×4 の 3 ビット ルックアップ テーブル) と、それに続く 64 ビットのカラー データ (DXT1 と同じ方法でエンコード) で構成されます。
の場合、、、、、、およびという 6 つの他のアルファ値が計算されます 。
それ以外の場合、 の場合は、、、 、となる他の 4 つのアルファ 値が計算されます。
次に、ルックアップ テーブルを参照して各ピクセルのアルファ値を決定します。値 0 は に対応し、値 7 は に対応します。DXT4 のカラー データはアルファで事前に乗算されますが、DXT5 ではそうではありません。DXT4/5 は補間アルファ スキームを使用するため、一般にアルファ (透明度) グラデーションでは DXT2/3 よりも優れた結果が得られます。
さらなるバリエーション
BC4 と BC5
BC4とBC5(ブロック圧縮4と5)はDirect3D 10で追加されました。これらはDXT4/5(BC3)のアルファチャネルエンコーディングを再利用します。[9]
- BC4は16個の入力シングルチャンネル(グレースケールなど)ピクセルを64ビットの出力に格納し、BC3アルファとほぼ同じ方法でエンコードします。拡張パレットにより、より高い品質が実現します。
- BC5 は、16 個の入力ダブル チャネル (例: 接線空間法線マップ) ピクセルを 128 ビットの出力に格納します。出力は、それぞれ BC4 のようにエンコードされた 2 つの半分で構成されます。
BC6H と BC7
BC6H(BC6と呼ばれることもある)とBC7(ブロック圧縮6Hと7)はDirect3D 11で追加されました。[9]
- BC6Hは16個の入力RGB HDR(float16)ピクセルを128ビットの出力にエンコードします。基本的にfloat16を16の符号絶対値整数値として扱い、そのような整数を線形補間します。符号が変わらないブロックではうまく機能します。合計14のモードが定義されていますが、ほとんどのモードは最小限の違いしかありません。実際に使用される予測モードは2つだけです。[10]
- BC7は16個のRGB8/RGBA8ピクセルを128ビットの出力にエンコードします。これはBC3の大幅な強化版といえます。[10]
BC6HとBC7は、エンコードモードの選択を伴うはるかに複雑なアルゴリズムを持っています。その結果、品質ははるかに向上しています。[9]これらの2つのモードは、許容される偏差の範囲とともに、はるかに正確に指定されています。以前のBCnモードは、GPUベンダー間でわずかに異なる方法でデコードされていました。[10]
S3TC フォーマットの比較
データの事前処理
BCn テクスチャは、ディスク上の保存と配布のためにさらに圧縮できます (テクスチャ スーパー圧縮)。アプリケーションはこの追加レイヤーを解凍し、BCn データを通常どおり GPU に送信します。
BCnは、入力テクスチャを修正してBCn出力をLZ77コンプレッサで簡単に圧縮できるようにする非可逆プリプロセッサであるOodle Textureと組み合わせることができます(レート歪み最適化)。BC7は特に、テクスチャをより圧縮しやすい形式で再エンコードするロスレスパスである「bc7prep」を使用することもできます(解凍時にその逆が必要です)。[11]
crunchはRDOを実行し、オプションでさらに再エンコードを行う別のツールです。[12]
2021年、マイクロソフトはBCn圧縮テクスチャ専用の「BCPack」圧縮アルゴリズムを開発した。XboxシリーズXとSはBCPackストリームの解凍をハードウェアでサポートしている。[13]
参照
- S2TC、特許のない回避策
- FXT1
- DirectDraw サーフェス
- PVRTC について
- 適応型スケーラブルテクスチャ圧縮(ASTC)
- Ericsson テクスチャ圧縮(ETC1 および ETC2)
- カラーセル圧縮
参考文献
- ^ US 5956431「推定ピクセル値による固定レートのブロックベース画像圧縮」
- ^ US 5956431、Iourcha、Konstantine I.、Nayak、Krishna S.、Hong、Zhou、「推定ピクセル値による固定レート ブロックベース画像圧縮のシステムおよび方法」、1999 年 9 月 21 日発行
- ^ 「1990 IEEE カラー セル圧縮論文」。IEEE。doi :10.1109/ TENCON.1990.152671。S2CID 62015990 。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です - ^ 「S3TC の状況は公式 DRI 情報ページに掲載されています」。Dri.freedesktop.org。2012 年 1 月 19 日時点のオリジナルよりアーカイブ。2012 年 1 月 25 日閲覧。
- ^ S2TC : S3TC 特許問題の回避策 アーカイブ 2016-05-13ウェイバックマシンphoronix
- ^ Yates, Tom (2017-02-15). 「これが私が飲む理由: Fedora の法的状態に関する議論」LWN.net。 2017-03-01 にオリジナルからアーカイブ。2017-02-16に取得。
... S3 テクスチャ圧縮の特許は 2017 年 10 月 2 日に期限切れとなるため、それ以降は Steam ゲームが Fedora でより適切に動作する可能性があります。 ...
- ^ Duffy, Robert (2004 年 7 月 27 日). 「DOOM 3 ビデオ要件」. Gamershell.com. 2008 年 1 月 3 日時点のオリジナルよりアーカイブ。2012年 1 月 25 日閲覧。
- ^ Togni, Roberto、他「Apple RPZA Archived 2017-07-04 at the Wayback Machine」。マルチメディアウィキ。
- ^ abc Reed, Nathan. 「BCnテクスチャ圧縮フォーマットを理解する」。Nathan Reedのコーディングブログ。2020年11月9日時点のオリジナルよりアーカイブ。2020年9月1日閲覧。
- ^ abcd Giesen、Fabian “ryg” (2021年10月4日). 「GPU BCnデコード」. The ryg blog . 2023年7月24日時点のオリジナルよりアーカイブ。 2023年7月24日閲覧。
- ^ 「Oodle テクスチャ圧縮」www.radgametools.com。 2023 年 3 月 18 日時点のオリジナルよりアーカイブ。2023 年 4 月 3 日閲覧。言及されているオープンソース部分: bc7enc_rdo 2021-02-02にWayback Machineでアーカイブされました
- ^ 「crunch オープンソーステクスチャ圧縮ライブラリ」。GitHub 。 2016年9月9日時点のオリジナルよりアーカイブ。2016年9月13日閲覧。
- ^ “DirectStorage の概要 - Microsoft ゲーム開発キット”. 2023年3月16日. 2023年8月3日時点のオリジナルよりアーカイブ。 2023年8月3日閲覧。
外部リンク
- 米国特許商標庁、特許全文および画像データベース、US 5956431 A の結果
- USPTO 特許譲渡検索 US 5956431 A
