<HEAD>
<TITLE>Linear Bi-Linear Tri-Linear</TITLE>
</HEAD>

<BODY BACKGROUND="../Image/Back2.GIF"
	TEXT="#E0E0E0"
	BGCOLOR="#191919"
	LINK="#90D0FF"
	VLINK="#4080D0"
	ALINK="#0000FF">

<BASEFONT SIZE="3" FACE="ＭＳ Ｐ明朝">

<BR>
<CENTER>
<FONT SIZE="7" COLOR="80FF80"><I>Linear<BR>Bi-Linear<BR>Tri-Linear</I></FONT>
<P>
<P>
</CENTER>

<CENTER>
<IMG SRC="../Image/Bar2.gif" ALT "-------------------------------------------" width=100% height="8">
</CENTER>
<P>

<P>
<DL>
<DT>
<FONT SIZE="3" COLOR="#FFFF80"><B><I>98/06/27（土）　</I></B></FONT>
<FONT SIZE="4"><B>− Linear Bi-Linear Tri-Linear − それは線形補間ラッシュ</B></FONT>
<P>
<DD>
　今回話題として取り上げるのは、いわゆる<FONT COLOR ="#FF9090">
リニアフィルタ</FONT>というやつである。
3DCGに興味のある人なら<FONT COLOR ="#FF9090">
バイリニア、トリリニア</FONT>などの言葉くらいは
聞いたことがあるだろう。
<BR>
　主に<FONT COLOR ="#FF9090">
テクスチャマッピング</FONT>時のフィルタとして使用されているものであるが、
具体的に説明のできる人は意外と少ないのではなかろうか。
いや、説明させても間違った認識をしている人が実に多いのに驚く。
だいたい、<FONT COLOR ="#FF9090">
原理も理解していないライター</FONT>が雑誌などで、
<FONT COLOR ="#FF9090">バイリニアがどうとか、
パースペクティブコレクションがどうとか、ミップマップがどうとか、
環境マップがどうとかいい加減な書き方をする</FONT>のが、誤解の元である。
前々から何度も書いているが、これらの記事を読んだ
<FONT COLOR ="#FF9090">初心者</FONT>は、これを
<FONT COLOR ="#FF9090">疑いなく信じてしまう</FONT>
ということを、もっと真剣に考えて欲しい。
<BR>
　とまあ、愚痴はとりあえず置いといて....本題に入ろう...(^^;
<P>
　まず最初に言ってしまうが、
<FONT COLOR ="#FF9090" SIZE="5">
「バイリニアとは２点間の線形補間のことである」</FONT>の時点で
既に間違っている。
<FONT SIZE="5">
あんた<FONT COLOR ="#FF9090">線形補間</FONT>ってのは
単なる<FONT COLOR ="#FF9090">リニア（linear）補間</FONT>でしょうが！！
</FONT>
<BR>
　<FONT COLOR ="#FF9090">線形補間</FONT>、つまり<FONT COLOR ="#FF9090">
リニア（linear）フィルタ</FONT>というのは、
<FONT COLOR ="#FF9090">
異なる２点の（例えば色）から、その間にある目的の座標の色を、
２点間の距離の比例配分によって決定する</FONT>ものである。
<P>
　<FONT COLOR ="#C0FFFF" size="5">つまり、２点補間である。</FONT>
<CENTER>
<IMG SRC="Image/linear.gif" width="233" height="217">
</CENTER>
<P>
しかし、<FONT COLOR ="#FF9090">異なる２点だけでは直線上の補間しか行えない</FONT>ため、
この手法は<FONT COLOR ="#FF9090">一次元テクスチャ</FONT>にしか使えない。
<BR>
　そこで、<FONT COLOR ="#FF9090">バイリニア（bi-linear）</FONT>
と呼ばれる補間を使うのである。
これは、まず<FONT COLOR ="#FF9090">
目的のテクスチャ座標に最も近い４テクセル（近傍の４テクセル）</FONT>を
選択し、それらを、x または y 方向どちらかの<FONT COLOR ="#FF9090">
２点ずつのペア</FONT>に分ける。
そしてこのペアで<FONT COLOR ="#FF9090">
それぞれリニア、つまり線形補間を施し、
さらに求まった２つの色を線形補間して目的の色を求める</FONT>。
これが、<FONT COLOR ="#FF9090">バイリニアフィルタ</FONT>である。
<P>
　<FONT COLOR ="#C0FFFF" SIZE="5">つまり２点補間ではなく、４点補間なのである。
</FONT>
<CENTER>
<IMG SRC="Image/bi-linear.gif" width="347" height="300">
</CENTER>
<P>
<BR>
　ちなみに<FONT COLOR ="#FF9090">
ミップマッピング</FONT>実行時には、この<FONT COLOR ="#FF9090">
近傍４テクセルは、
描画サイズに合ったレベルのミップマップ</FONT>が使われる。
<P>
　<FONT COLOR ="#FF9090">
ミップマップ</FONT>について簡単に説明しておこう。
一般に、<FONT COLOR ="#FF9090">
画面上のピクセルのサイズよりもテクセルのサイズが小さくなると、
サンプリング（標本化）不足による「もあれパターン」が発生する。</FONT>
テクスチャマッピングした絵の<FONT COLOR ="#FF9090">遠くの方が妙にチカチカしたり、
動かした際にウネウネと波打つ</FONT>ように見えた経験はないだろうか？
<BR>
原因は簡単である。
画面上の１ピクセルは、
<FONT COLOR ="#FF9090">わずかながらも角度をもっている視野
である</FONT>と言い換えることができる。
つまり、本来この１ピクセルには、その</FONT>
わずかな視野の範囲にある色すべてが関与しなければならない。</FONT>
当然<FONT COLOR ="#FF9090">
遠くのもの程広い範囲（つまり多く）の色情報が関与する</FONT>訳だ。
しかし、<FONT COLOR ="#FF9090">
ピクセルのサイズよりもテクセルが小さく</FONT>なると、
描画されたピクセルには、その<FONT COLOR ="#FF9090">
複数のテクセル中の１点（バイリニアフィルタ施行時は４点）の色しか影響しない
</FONT>ことになる。
つまり、先程述べたようにサンプリング不足になる。
<BR>
　これを防ぐには、本来<FONT COLOR ="#FF9090">
１ピクセルに関与すべきであるすべてのテクセルを平均化して表示する</FONT>
必要がある。
しかし、これが４テクセルくらいならまだ良いが、もっと小さくなり、
５０とか１００とかになってくると、当然負荷は耐えがたいものとなる。
<BR>
　そこで、<FONT COLOR ="#FF9090">
予めフィルタ処理を施しながら縮小した同じ内容でサイズの違うテクスチャ</FONT>を
複数用意しておき、<FONT COLOR ="#FF9090">
テクセルのサイズが画面上のピクセルのサイズにもっともうまく合うテクスチャを使用する</FONT>のである。
これが<FONT COLOR ="#FF9090">ミップマップ</FONT>である。
縮小された複数のミップマップは、<FONT COLOR ="#FF9090">
オリジナルのテクスチャのすべてのピクセルが関与していなければならない</FONT>
ことは言うまでもない。
そうしないと、<FONT COLOR ="#FF9090">
ミップマップを使っても全く効果がない</FONT>のは明白である。
<P>
　さて、これにより、<FONT COLOR ="#FF9090">テクスチャが小さくなった時の
「もあれ」</FONT>を防ぐことができるのだが、このままでは<FONT COLOR ="#FF9090">
ミップマップのレベルが切り変わった場所が、線のように見えてしまう。</FONT>
これを防ぐために考え出されたのが、<FONT COLOR ="#FF9090">
ミップマップ・リニア</FONT>などと呼ばれているフィルタである。
これは、<FONT COLOR ="#FF9090">
近傍２レベルのミップマップから色を拾い、それぞれのミップマップからの
距離に応じてリニアフィルタを施す</FONT>。
ここで<FONT COLOR ="#FF9090">
補間の対象となるのは２点だけ</FONT>なので、これは単なる<FONT COLOR ="#FF9090">
リニア（線形補間）</FONT>であることは理解できるだろう。
<P>
　そして、上の２つのフィルタの組合せ、つまり<FONT COLOR ="#FF9090">
バイリニアフィルタの結果にさらにミップマップ・リニアフィルタを施す</FONT>のが、
<FONT COLOR ="#FF9090">トリリニア（tri-linear）フィルタ</FONT>と呼ばれる
フィルタである。
<BR>
　つまり、<FONT COLOR ="#FF9090">
近傍２レベルのミップマップでそれぞれバイリニアフィルタ</FONT>を施し、
その結果の２色をさらに、２レベルのミップマップからの距離に応じて
<FONT COLOR ="#FF9090">リニア（線形）補間</FONT>することで
目的のピクセルの色を求めるという、実に大胆な補間方法である。
<P>
　<FONT COLOR ="#C0FFFF" SIZE="5">つまり、８点補間なのである。</FONT>
<P>
<CENTER>
<IMG SRC="Image/tri-linear.gif" width="456" height="486">
</CENTER>
<P>
<FONT COLOR ="#FF9090">
トリリニアを３点からの曲線（二次式）補間</FONT>だと思い込んでいた人も
いるのではなかろうか？...実際には、<FONT COLOR ="#FF9090">
リニア（つまり線形）補間を何重にもかける</FONT>のである。
<P>
　ここで簡単にまとめると、<FONT COLOR ="#FF9090">
リニアフィルタとは線形補間</FONT>を施すフィルタであり、
<FONT COLOR ="#FF9090">バイリニアフィルタ</FONT>とは、
<FONT COLOR ="#FF9090">２つの線形補間の結果をさらに
線形補間する</FONT>ものである（つまり、２点が２つで計４点の補間）。
さらに<FONT COLOR ="#FF9090">トリリニアフィルタ</FONT>
とは、<FONT COLOR ="#FF9090">２つのバイリニア補間</FONT>の結果をさらに
<FONT COLOR ="#FF9090">
線形補間する</FONT>もの（つまり２点が２つで４点、それをさらに２つで計８点の補間）なのである。
<BR>
　ちなみに、<FONT COLOR ="#FF9090">ポイントフィルタ</FONT>というものもあり、
これは、<FONT COLOR ="#FF9090">最近傍の１テクセルのみ</FONT>で
即、色を決定する方法である。当然、<FONT COLOR ="#FF9090">
処理は非常に軽い。</FONT>
<P>
　そう言えば、<FONT COLOR ="#FF9090">セガのドリームキャスト</FONT>の
グラフィックスチップのスペック説明には、
<FONT COLOR ="#FF9090">１６点補間</FONT>という言葉が使われていた。
<FONT COLOR ="#FF9090">テトラリニアフィルタ</FONT>とでも
いったところか。
詳しくは書いてなかったため詳細は分からなかったが、
<FONT COLOR ="#FF9090">残る１つの補間はどのような補間をするのか</FONT>、
これについてもいろいろ考えてみると面白いかもしれない。
</DL>

<!-- Signature -->
<FONT SIZE="3" FACE="ＭＳ Ｐ明朝">

<CENTER>
<IMG SRC="../Image/Bar2.gif" ALT "-------------------------------------------" width=90% height="16">
</CENTER>

<UL>
	<A HREF="index.html"><B><I>Masa's Column</I></B>に戻る</A>

	<TABLE>
	<TR>
	<TD>
	<A HREF="../index.html"><IMG SRC="../Image/MasaPlate.gif" BORDER="0" WIDTH="112" HEIGHT="48"></A>
	</TD>
	<TD><A HREF="../index.html">ホームページに戻る</A></TD>
	</TR>
	</TABLE>

	本ページの御意見・御感想は<BR>
<B>
<ADDRESS>
	<A HREF="mailto:masa@daionet.gr.jp">
		<I>E-Mail: masa@daionet.gr.jp</I></A>
</ADDRESS>
</B></UL>

</FONT>
<!-- Signature -->

</BODY>
