Linear
Bi-Linear
Tri-Linear

98/06/27(土)  − Linear Bi-Linear Tri-Linear − それは線形補間ラッシュ

 今回話題として取り上げるのは、いわゆる リニアフィルタというやつである。 3DCGに興味のある人なら バイリニア、トリリニアなどの言葉くらいは 聞いたことがあるだろう。
 主に テクスチャマッピング時のフィルタとして使用されているものであるが、 具体的に説明のできる人は意外と少ないのではなかろうか。 いや、説明させても間違った認識をしている人が実に多いのに驚く。 だいたい、 原理も理解していないライターが雑誌などで、 バイリニアがどうとか、 パースペクティブコレクションがどうとか、ミップマップがどうとか、 環境マップがどうとかいい加減な書き方をするのが、誤解の元である。 前々から何度も書いているが、これらの記事を読んだ 初心者は、これを 疑いなく信じてしまう ということを、もっと真剣に考えて欲しい。
 とまあ、愚痴はとりあえず置いといて....本題に入ろう...(^^;

 まず最初に言ってしまうが、 「バイリニアとは2点間の線形補間のことである」の時点で 既に間違っている。 あんた線形補間ってのは 単なるリニア(linear)補間でしょうが!!
 線形補間、つまり リニア(linear)フィルタというのは、 異なる2点の(例えば色)から、その間にある目的の座標の色を、 2点間の距離の比例配分によって決定するものである。

 つまり、2点補間である。

しかし、異なる2点だけでは直線上の補間しか行えないため、 この手法は一次元テクスチャにしか使えない。
 そこで、バイリニア(bi-linear) と呼ばれる補間を使うのである。 これは、まず 目的のテクスチャ座標に最も近い4テクセル(近傍の4テクセル)を 選択し、それらを、x または y 方向どちらかの 2点ずつのペアに分ける。 そしてこのペアで それぞれリニア、つまり線形補間を施し、 さらに求まった2つの色を線形補間して目的の色を求める。 これが、バイリニアフィルタである。

 つまり2点補間ではなく、4点補間なのである。


 ちなみに ミップマッピング実行時には、この 近傍4テクセルは、 描画サイズに合ったレベルのミップマップが使われる。

  ミップマップについて簡単に説明しておこう。 一般に、 画面上のピクセルのサイズよりもテクセルのサイズが小さくなると、 サンプリング(標本化)不足による「もあれパターン」が発生する。 テクスチャマッピングした絵の遠くの方が妙にチカチカしたり、 動かした際にウネウネと波打つように見えた経験はないだろうか?
原因は簡単である。 画面上の1ピクセルは、 わずかながらも角度をもっている視野 であると言い換えることができる。 つまり、本来この1ピクセルには、その わずかな視野の範囲にある色すべてが関与しなければならない。 当然 遠くのもの程広い範囲(つまり多く)の色情報が関与する訳だ。 しかし、 ピクセルのサイズよりもテクセルが小さくなると、 描画されたピクセルには、その 複数のテクセル中の1点(バイリニアフィルタ施行時は4点)の色しか影響しない ことになる。 つまり、先程述べたようにサンプリング不足になる。
 これを防ぐには、本来 1ピクセルに関与すべきであるすべてのテクセルを平均化して表示する 必要がある。 しかし、これが4テクセルくらいならまだ良いが、もっと小さくなり、 50とか100とかになってくると、当然負荷は耐えがたいものとなる。
 そこで、 予めフィルタ処理を施しながら縮小した同じ内容でサイズの違うテクスチャを 複数用意しておき、 テクセルのサイズが画面上のピクセルのサイズにもっともうまく合うテクスチャを使用するのである。 これがミップマップである。 縮小された複数のミップマップは、 オリジナルのテクスチャのすべてのピクセルが関与していなければならない ことは言うまでもない。 そうしないと、 ミップマップを使っても全く効果がないのは明白である。

 さて、これにより、テクスチャが小さくなった時の 「もあれ」を防ぐことができるのだが、このままでは ミップマップのレベルが切り変わった場所が、線のように見えてしまう。 これを防ぐために考え出されたのが、 ミップマップ・リニアなどと呼ばれているフィルタである。 これは、 近傍2レベルのミップマップから色を拾い、それぞれのミップマップからの 距離に応じてリニアフィルタを施す。 ここで 補間の対象となるのは2点だけなので、これは単なる リニア(線形補間)であることは理解できるだろう。

 そして、上の2つのフィルタの組合せ、つまり バイリニアフィルタの結果にさらにミップマップ・リニアフィルタを施すのが、 トリリニア(tri-linear)フィルタと呼ばれる フィルタである。
 つまり、 近傍2レベルのミップマップでそれぞれバイリニアフィルタを施し、 その結果の2色をさらに、2レベルのミップマップからの距離に応じて リニア(線形)補間することで 目的のピクセルの色を求めるという、実に大胆な補間方法である。

 つまり、8点補間なのである。

トリリニアを3点からの曲線(二次式)補間だと思い込んでいた人も いるのではなかろうか?...実際には、 リニア(つまり線形)補間を何重にもかけるのである。

 ここで簡単にまとめると、 リニアフィルタとは線形補間を施すフィルタであり、 バイリニアフィルタとは、 2つの線形補間の結果をさらに 線形補間するものである(つまり、2点が2つで計4点の補間)。 さらにトリリニアフィルタ とは、2つのバイリニア補間の結果をさらに 線形補間するもの(つまり2点が2つで4点、それをさらに2つで計8点の補間)なのである。
 ちなみに、ポイントフィルタというものもあり、 これは、最近傍の1テクセルのみで 即、色を決定する方法である。当然、 処理は非常に軽い。

 そう言えば、セガのドリームキャストの グラフィックスチップのスペック説明には、 16点補間という言葉が使われていた。 テトラリニアフィルタとでも いったところか。 詳しくは書いてなかったため詳細は分からなかったが、 残る1つの補間はどのような補間をするのか、 これについてもいろいろ考えてみると面白いかもしれない。