ウェブテクノロジのブログ「OPTPiX Labs Blog」には、セッションで取り上げた「画像圧縮アルゴリズム」に関するいくつかのエントリーがあります。CEDECを前に、これらの内容を振り返ってみたいと思います。今回はDXTC(S3TC)圧縮についてのブログ記事のなかからピックアップしてみました。
■DXTCって何?
DXTCとは画像圧縮アルゴリズムの一種で、「DirectX Texture Compression」の略称です。S3 Graphics 社の開発した技術なので、S3TC(=S3 Texture Compression)とも呼ばれています。
DXTCは家庭用ゲーム機や、Windows PCのほとんどのグラフィックスカード、さらにNvidia Tegra搭載のスマートフォン・タブレットなどで、3Dグラフィックスを描画する際の圧縮フォーマットとして使われています。
JPEGやPNGに比べるとDXTCの圧縮率は低いのですが、DXTCは画像を圧縮したままGPUのVRAMに置いて使うことができる、という大きな利点があります。
これに対してJPEGなどでは、画像を無圧縮状態に展開しなければGPUで扱えないため、GPUを使って3Dグラフィックスのテクスチャを表示する場合、DXTCに比べてVRAM容量やメモリバンド幅(転送速度)を多く使ってしまいます。
■DXTCには苦手な画像がある?
次のようなアニメ調の画像をDXTCで圧縮してみましょう。
![]() | ![]() |
圧縮前のイラスト | DXTC圧縮後のイラスト |
パッと見た感じは綺麗に圧縮できている気がしますが、よく見てみると所々色がにじんでいます。
画像の一部を3倍に拡大してみました。キャラクターの輪郭付近の色がにじんでしまっているのがわかると思います。
![]() | ![]() |
圧縮前のイラスト (3倍に拡大) | DXTC圧縮後のイラスト (3倍に拡大) |
実はDXTCにはアニメ調の画像を圧縮すると画像が劣化しやすい、という特徴があります。写真のような画像よりもアニメ調の画像が劣化しやすいのは、DXTCの仕組みに原因があります。
仕組みの詳細はDXTC(S3TC)圧縮のアルゴリズムとは?~前編~で。
■DXTC には種類がある
DXTC(S3TC)圧縮には、DXT1~5の5種類のアルゴリズムが存在します。上記で触れているのは「DXT1」のアルゴリズムです。
DXT1はアルファ(α,alpha)チャンネル付き画像(32bit ARGBカラー)に対応していませんでした(完全透明色=抜き色のみ対応)。これに対して、DXT2~5はアルファチャンネル付き画像に対応しています。
その代わり、DXT1が24bit RGBカラー画像を圧縮すると圧縮率が1/6 (4×4ブロック=16ピクセルあたり8バイト)となるのに対して、DXT2~DXT5は32bit ARGBカラー画像を圧縮すると圧縮率が1/4 (4×4ブロック=16ピクセルあたり16バイト)になります。
DXT2~5のアルゴリズムの詳細についてはDXTC(S3TC)圧縮のアルゴリズムとは?~後編~で。
■DXTCのTips
DXTC圧縮をすると、下の図の用に輪郭線付近にブロックノイズが入ってしまうことがあります。

この場合は思い切って輪郭線を太くする、もしくは輪郭線をなくすとブロックノイズが減少します。

DXTCは4×4ピクセルを1ブロックとして独立して圧縮していますが、この1ブロック内に輪郭線の色・輪郭の内側の色・輪郭の外側の色という3つの傾向が違う色が入り込んでしまうと、ブロックノイズが発生する原因になってしまいます。
このため、輪郭線を無くす、あるいは輪郭線を太くすると、1ブロックに入り込む色が2つに抑えられて、ブロックノイズが減少します。
なお1ブロックは4×4ピクセルであるので、輪郭線の太さは3ピクセル以上にすると効果が高いです(逆に1~2ピクセルの輪郭線はブロックノイズの原因となりやすい傾向があります)。
その他のTipsはテクスチャ圧縮フォーマットDXTC・ETCのTips CEDEC2013復習編(1)で。
ウェブテクノロジのブログ「OPTPiX Labs Blog」では技術的なエントリーを定期的に掲載しています。今回ご紹介した画像フォーマットに関する内容以外にも、Androidアプリに関するものやサーバー管理に関するものなど、多岐にわたります。ぜひご覧ください。
OPTPiX Labs Blog
次回は画像圧縮フォーマットの「ETC」についてのサマリーをお届けします。