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

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

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

応用分野[編集]

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

フィルタリングの要求[編集]

テクスチャマッピング処理の間、テクスチャ参照は、テクスチャ上のそれぞれのピクセルの中心はどこにあるかを探す処理に置き換えられる。テクスチャ表面は、視点と比べて距離と方向を任意に設定できるので、一つのピクセルがいつも直接一つのテクセルに対応するとは限らない。あるフィルタリング形式を適用すると、ピクセルにとってもっともよい色を決定できるが、まずい、間違ったフィルタリングでは、ブロック状やジャギー、ちらちらするなど、画質の劣化(画像中のエラー)が生じる。

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

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

ミップマッピング[編集]

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

フィルタリングの方法[編集]

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

最近傍補間法[編集]

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

ミップマップを用いた最近傍法[編集]

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

バイリニアフィルタリング[編集]

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

トリリニアフィルタリング[編集]

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

異方性フィルタリング[編集]

異方性フィルタリングは、現在のコンシューマ3Dグラフィックスカードで使える、画質とパフォーマンスのバランスがよいフィルタリング方法である。この方法は進化したものである。なぜなら、バイリニアフィルタリングおよびトリリニアフィルタリングの両方ではテクスチャから矩形をサンプリングしているが、これは視点がテクスチャの真上から見ている場合にのみ正しい。テクスチャを貼った面が斜めだった場合、非常によくあるケースは、後方に伸びている床では、ぶれたように見えてしまう。異方性フィルタリングでは、視点からの角度によって、正しく台形としてサンプリングすることで、正しく見えるようにしている。最終的な色を生成するためにはトリリニアフィルタリングでサンプリングを行う。

バイキュービックフィルタリング[編集]

バイキュービックフィルタリングは、現在のコンシューマ3Dグラフィックスカードで使える、もっとも画質の良いフィルタリング方法である。 拡大時にはバイリニアフィルタリングよりもより滑らかに描写されるが、縮小時にはちらつきが発生するので、一般的にはリニアフィルタリングのミップマップと組み合わせる。DirectXではバージョン9.0で対応した。