テクスチャフィルタリング

コンピュータグラフィックスでは、**テクスチャフィルタリング**は、テクセル（テクスチャ上のピクセル）近傍の色を使ってピクセルにテクスチャマッピングするために、テクスチャ色を決定するために使われる方法である。端的にいえば、テクスチャのピクセルをより小さなピクセル単位に分けて、それらを混ぜ合わせることを行う。テクスチャフィルタリングは別の用語として、テクスチャスムージングと呼ばれている。テクスチャフィルタリングには多くの方法があるが、計算の手間と画質の間にはそれぞれ異なったトレードオフが存在する。テクスチャフィルタリングでは、離散的に与えられた点群からある点の値を得ようとする。これが補間である。

## 応用分野

テクスチャフィルタリングはコストの低いアンチエイリアシングである。ソフトなテクスチャ、特に高さマップは補間をするとより良い見た目となる。

## フィルタリングの必要性

テクスチャマッピング処理の間、テクスチャ参照は、テクスチャ上のそれぞれのピクセルの中心はどこにあるかを探す処理に置き換えられる。テクスチャ表面は、視点と比べて距離と方向を任意に設定できるので、一つのピクセルがいつも直接一つのテクセルに対応するとは限らない。ある種のフィルタリングは、ピクセルにとってもっともよい色を決定するために適用されなければならない。不十分で不適切なフィルタリングでは、ブロックノイズやジャギー、ちらつきなど、アーティファクト（画質の劣化、画像中のエラー）が生じる。

スクリーン上に表示するための、ピクセルとテクセルとの対応のさせ方には複数の異なったやり方がある。これらは視点に対するテクスチャ表面の相対的な位置に依存し、異なったフィルタリング方式が、それぞれの場合において必要とされる。ワールド座標系において、矩形の物体の表面に矩形のテクスチャを貼付けるということは、ある視点において、スクリーン上の一つのピクセルのサイズが一つのテクセルのサイズと正確に同じである。視点からの距離がより近ければ、テクセルはスクリーン上のピクセルよりも大きくなるので、適切に大きくする必要がある。この処理は「テクスチャの拡大」(texture magnification) として知られている。さらに、それぞれのテクセルがピクセルよりも小さくなれば、一つのピクセルにつき複数のテクセルが対応することになる。この場合、「テクスチャの縮小」(texture minification) を通して、カバーしている複数のテクセルを元に適切な色が決定される。OpenGLやDirect3DのようなグラフィックスAPIでは、プログラマーが拡大用および縮小用にそれぞれ異なるフィルターを設定できる。

ピクセルとテクセルが正確に同じ大きさである場合でさえ、一つのピクセルが必ずしも正確に一つのテクセルに対応しない場合がある。これはピクセルが整列していない場合で、4つの近傍テクセルを使って対応付けを行う。従って、あるフィルタリング形式もまだ必要とされている。

## ミップマッピング

ミップマップはテクスチャ縮小時に必要なフィルタリング処理を省くのに使われる標準的な技法である。テクスチャ拡大時には、任意のピクセルに対応するのに必要なテクセルは常に4つないしそれ以下である。しかし縮小時には、テクスチャマッピングされるポリゴンが非常に遠くの位置に移動してしまって、*テクスチャ全体*が一つのピクセルにまで縮小してしまうことがある。この時、テクセルは**全て**読み込む必要があり、その一つのピクセルの色を正しく決めるために、そのテクセルの値を使って計算しなければならない。これは計算コストが高くて手が出ない。ミップマッピングはテクスチャにフィルタを前もってかけて置き、それをより小さなサイズのテクスチャに格納することで、この問題を避けている。テクスチャマッピングされた面がより遠くに移動したなら、適用されるテクスチャは前もってフィルタリングされたより小さなサイズに切り替えられる。ミップマップの複数の異なるサイズは*レベル*として参照され、レベル0が最も大きく（視点からもっとも近い場合に用いられる）、距離が離れるほど大きなレベルのものが使われる。

## フィルタリングの方法

この章では、テクスチャをフィルタリングするもっともよくある方法を列挙する。下に行くに連れて、計算コストが大きく画質がよくなる。

### 最近傍補間

最近傍補間（ニアレストネイバー補間）は最も高速で乱暴なフィルタリング方法である。これは単にピクセルの色を決めるために、ピクセルの中心に最も近いテクセルの色を使うというものである。高速である一方、この方法は誤差が大きく、テクスチャ拡大時にはブロックノイズ、縮小時にはエイリアシングとちらつきが見られる。

### ミップマップを用いた最近傍補間

この方法は、まだ最近傍補間法を用いているが、ミップマッピングを併用している。まず、距離によってもっとも近いミップマップレベルが選択され、次にピクセル色を得るためにもっとも近いテクセルの中心値がサンプリングされる。これによって、エイリアシングとちらつきはかなり軽減されるが、ブロック状ノイズには役に立たない。

### バイリニアフィルタリング

は次の段階である。この方法では、ピクセルの中心に最も近い4つの（もっとも適切なミップマップレベルの）テクセルをサンプリングする。これらのテクセルの色を距離によって加重平均して合成する。この処理によって、拡大時におけるブロック状ノイズを取り去ることができる。またピクセルの中心がテクセルの境界をまたいだとしても、突然色が変化する代わりに、一つのテクセルから次のテクセルになめらかに色が変化するようになる。バイリニアフィルタリングではほとんど常にミップマッピングと共に使われる。もしミップマッピングなしに使われたとしても、最近傍法と同じくらいエイリアシングとちらつきの問題は残る。

### トライリニアフィルタリング

はミップマッピングを用いたバイリニアフィルタ画像に見られる、共通の劣化、つまり画像の境界でレンダラがミップマップレベルを違うものに切り替えたことによって、唐突にかつ見て分かる変化を矯正できる。トライリニアフィルタリングは*2つの*最も近いミップマップレベル（適切なレベルより一つはレベルが大きくもう一方はレベルが小さい）からテクスチャの参照とバイリニアフィルタリングを行うことによって、この問題を解決する。これは線形補間である。この処理では、視点からの距離が離れると、突然テクスチャの画質が落ち込むというよりも、むしろ滑らかに劣化していく結果になる。もちろん、レベル0より近い場所では、ミップマップレベルはたった1つしか使うことができないので、アルゴリズムとしてはバイリニアフィルタリングに後戻りしてしまう。

### 異方性フィルタリング

異方性フィルタリングは、現在のGPUで使える、画質とパフォーマンスのバランスがよい発展的フィルタリング方法である。バイリニアフィルタリングおよびトライリニアフィルタリングはともにテクスチャから矩形領域をサンプリングしているが、これは視点がテクスチャの真正面にある場合にのみ正しい。テクスチャを張った面が斜めだった場合、ボケたように見えてしまう（非常によくあるケースのひとつに、次第に遠ざかる床が挙げられる）。異方性フィルタリングでは、視点からの角度によって、正しく台形としてサンプリングすることで補正する。最終的な色を生成するためにはトライリニアフィルタリングでサンプリングを行う。

### 近傍比率フィルタリング
深度ベースのシャドウマッピング技法では、Percentage Closer Filter (PCF) が使われることがある。シャドウマップの解像度不足によるエイリアスを軽減したり、ソフトシャドウの効果を簡易的に得たりすることができる。

## 脚注