NVIDIAがATIに噛み付いた「テクスチャの異方性フィルタリング」ってなに? 前編
Page.2

バイリニア型異方性フィルタリング

 たとえば前出の右図のような,異方性フィルタリングの品質を「2:1」(2X)としたときを考える。2点の代表地点から,それぞれ4テクセルずつを取り出してバイリニアフィルタリングを適用するのが「バイリニア型異方性フィルタリング」(Bilinear Anisotropic Filtering)だ。
 つまりこの方法では,異方性フィルタリングの品質で指定した地点数の4倍のテクセル読み出しが行われることになる。「2:1」ならば,8テクセルが読み出されることになるわけだ。
 この方式では,逆に考えればテクセル読み出し箇所を増やしたバイリニアフィルタリングということができるわけで,バイリニアフィルタリングの弱点はそのまま露呈する。そう,MIPMAPの切り替えポイントが可視化されてしまうのだ。
 廊下を突き進んでいくような3Dゲームで,異方性フィルタリングを適用しているのにも関わらず,奥の方でテクスチャのボケ方の境界線が見えるような場合は,バイリニア型異方性フィルタリングが適用されているとみていい。

トライリニア型異方性フィルタリング

 もう話の流れが見えているとは思うが,より高精度な結果が得られるのが「トライリニア型異方性フィルタリング」(Trilinear Anisotropic Filtering)だ。
 こちらは異方性処理で求めた2/4/8/16といった複数の代表地点に対し,対応する二つのMIPMAPを参照して4テクセルずつ,つまり合計8テクセルを取り出してテクスチャフィルタリング処理をする。そう,バイリニア型異方性フィルタリングのときの2倍のテクセル量を取り出すことになるわけだ。
 前出の「2:1」の例でいけば,二つの代表地点それぞれから8テクセル読み出されるので,全体としては合計16テクセルの取り出しが行われることになる。
 二つのMIPMAPから4テクセルを取り出して奥行きに配慮した形で補間されるので,「ただのトライリニアフィルタリング」がそうであったように,トライリニア型異方性フィルタリングではMIPMAPの切り替えポイントが可視化されてしまうことがない。
 結論としては,トライリニア型異方性フィルタリングこそが,現時点の汎用テクスチャフィルタリングとしては最良の結果が得られるテクスチャフィルタリングメソッドなのだ。
 ただ,処理として重いのは想像に難くないだろう。
 異方性フィルタリングの品質パラメータに「16X」(あるいは「16:1」)と与えたときには,1テクセルの値を算出するのに,なんと128個ものテクセルを取り出して演算をしなくてはならないからだ。豆知識としてバイリニア型異方性フィルタリングは品質パラメータの4倍,トライリニア型異方性フィルタリングは品質パラメータの8倍のテクセル読み出しが必要だということを覚えておくといいだろう。

バイリニア型異方性フィルタリングを適用した画面 トライリニア型異方性フィルタリングを適用した画面


バイリニア型異方性フィルタリングでは,ちょうど,この部分にMIPMAPの切り替えポイントが可視化されてしまっている 2X設定のバイリニア型異方性フィルタリング適用時の該当箇所を拡大した図。よく見ないと分かりにくいが,ちょうど上下でテクスチャのボケ方が違うのが分かる。これが,MIPMAPの切り替えポイント。異方性フィルタリングでもバイリニア型ではこうなってしまうのだ 2X設定のトライリニア型異方性フィルタリング適用時の,該当箇所を拡大した図。ボケ方の切り替えポイントは見て取れない。トライリニア型異方性フィルタリングこそが本命の異方性フィルタリングなのだ

 

バイリニア型異方性フィルタリングの選び方

 さて,これでやっとATIとNVIDIAの話をすることができる。
 ATIのCATALYSTドライバの「3D」タブを見てもらいたい。

ATI RADEONシリーズのドライバソフトのプロパティ画面。異方性フィルタリングの項目中の,「パフォーマンス」と「画質」のサブパラメータに注目

 異方性フィルタリングの設定に対して「パフォーマンス」と「画質」のラジオボタンがあるのが分かるだろうか。これはどんな働きをするのか。
 実はこれは,異方性フィルタリングのタイプ設定に相当する設定なのだ。具体的には,「パフォーマンス」を選択するとバイリニア型異方性フィルタリングが選択され,「画質」を選択するとトライリニア型異方性フィルタリングが選択される仕組みになっているのである。
 一方,NVIDIAのForceWareドライバのほうを見てみよう。

NVIDIA GeForceシリーズのドライバソフトのプロパティ画面。「システムパフォーマンス」が異方性フィルタリングの手法に影響する設定項目

 「システムパフォーマンス」の項目で「ハイパフォーマンス」「パフォーマンス」「クオリティ」「高画質」の4タイプが選べるが,「クオリティ」がトライリニア型異方性フィルタリングの選択に,「パフォーマンス」がバイリニア型異方性フィルタリングの選択に対応している。そして「ハイパフォーマンス」は,異方性フィルタリングを強制キャンセルする設定となる。なお,「高画質」については後述する。
 ATIのCATALYSTにしろ,NVIDIAのForceWareにしろ,初期状態はトライリニア型異方性フィルタリングを使う設定になっているのでなんの問題もないように思える。

RADEON X800XT-PEは,異方性フィルタリングのパフォーマンスが高い?

 以下の表は,ATI RADEON X800XT Premium Edition(以下PEと略記)とNVIDIA GeForce 6800 Ultraの3DMark03のテスト結果だ。
 RADEON X800XT-PEのほうが,異方性フィルタリング"あり"にしたときのパフォーマンスが異様に高い。
 3DMark03の実行に際して指定した,異方性フィルタリングの品質パラメータは4X。トライリニア型異方性フィルタリングが使用されたとして,1テクセル値を求めるのにあたり32テクセル分の読み出しが行われるわけで,これはただのトライリニアフィルタリングの4倍は重い処理だ。
 RADEON X800XT-PEがここまでの好成績となったのはどうしてだろうか? RADEON X800XT-PEには卓越したビデオメモリキャッシュシステムが組み込まれているためだろうか。だとしたら,同じ3DMark03の実行結果で,アンチエリアス処理を適用したときのパフォーマンスの落ち込みが激しいのには謎が残る。

デフォルト設定でのパフォーマンスは互角。異方性フィルタリングを有効にするとRADEON X800XT-PEが逆転。しかしアンチエリアス(FSAA)を有効にすると今度はGeForce 6800 Ultraが逆転。ちょっとパフォーマンスの傾向が捉えにくい今世代のRADEON-GeForce対決


処理系が複雑だからこそ,最適化の道も見えてくる

 バイリニアフィルタリングやトライリニアフィルタリングのような単純な処理系ならいざしらず,異方性フィルタリングのように処理系が複雑になってくると,逆に「最適化」とか「高速化」などいった,「工夫のしどころ」が出てくるのもまた事実なのである。
 異方性フィルタリングは,視線とテクスチャを貼り付けるポリゴンとの角度関係に応じて適切なテクセル処理を行うと説明した。また,一つの最終的なテクセル値を決めるために,「2:1」(2X)や「16:1」(16X)といったパラメータで与えられる,複数地点からのテクセル参照を行うことも説明した。
 視線に対して角度のきつくなっているポリゴンには広範囲のテクスチャが圧縮されて適用されることになるので,多くの地点からテクセル参照を行うのは当然だ。しかし,そうでない地点に対し,たとえば16Xで16地点分,トライリニア型異方性フィルタリングならば128個のテクセル参照を行うのは,ちょっとやりすぎなのではないか。もっと少なくても,結果には大差ないのではないか。
 あるいは視点位置との距離関係によっては,処理の重いトライリニア型異方性フィルタリングではなくて,バイリニア型異方性フィルタリングで代行してもほとんど映像結果には差がないケースも出てくるだろう。ならば,距離にも応じて処理系を切り換えてやったら高速化に結びつくのではないか。なにしろバイリニア型異方性フィルタリングは,トライリニア型異方性フィルタリングの半分のテクセル処理量で済むのだから。
 そんな手抜きとも最適化ともつかないアイデアが次から次へと生まれてくる。
 最近のGPUの異方性フィルタリング処理には,このアイデアが盛り込まれるようになってきたのだ。
 ただし,処理系としてはさらに複雑度を増してしまった感じもある。とはいえ,テクセル参照のような非常に時間のかかるメモリ読み出し処理を節約できるのであれば「やる価値」はあるのだ。

次のページへ

▲ 上に戻る