異方性フィルタリング(AF)を把握する


8

最近、テクスチャフィルタリング、つまり最近傍フィルタリング、バイリニアフィルタリング、トリリニアフィルタリング、異方性フィルタリング、MIPマップ、RIPマップなどについて読んでいます。

高レベルの観点からは、異方性フィルタリングを除いて、これらの手法、動作方法、および存在する理由を理解できると思います。異方性フィルタリングは私を混乱させています。

カメラに対してある角度であるサーフェスをテクスチャリングする必要があるという問題を確認できますが、台形のフットプリントをサンプリングすることでこれをどのように解決できるかわかりません(結果は確認できます)。これはおそらく、台形のフットプリントがどのように計算され、テクスチャをサンプリングするために囲まれたテレックスがどのように重み付けされているかを理解していないためです。

Nvidiaによるこの記事では、「テクセルが台形である場合」または「異方性フィルタリングがミップマップの高さまたは幅をテクスチャの遠近歪みに対する比率でスケーリングするという文を使用することで、さらに混乱します。台形テクセル?MIPmapのスケーリング?これはどういう意味ですか?

AFとAFレベルの仕組みを理解するのを手伝ってくれませんか?

私の目標は、OpenGLまたはDirectX AFの実装ではなく、AFが高レベルの観点からどのように機能するかを理解することです。

回答:


10

異方性フィルタリングの性質を理解するには、テクスチャマッピングの実際の意味をしっかりと理解する必要があります。

「テクスチャマッピング」という用語は、オブジェクト上の位置をテクスチャ内の場所に割り当てることを意味します。これにより、ラスタライザ/シェーダは、オブジェクトの位置ごとに、テクスチャから対応するデータをフェッチできます。これを行う従来の方法は、オブジェクトの各頂点にテクスチャ座標を割り当て、その位置をテクスチャ内の場所に直接マップすることです。ラスタライザは、さまざまな三角形の面にまたがってこのテクスチャ座標を補間し、テクスチャからカラーをフェッチするために使用されるテクスチャ座標を生成します。

それでは、ラスタライズのプロセスについて考えてみましょう。それはどのように機能しますか?三角形を取り、ピクセルサイズのブロックに分割します。これを「フラグメント」と呼びます。現在、これらのピクセルサイズのブロックは、画面に対してピクセルサイズです。

ただし、これらのフラグメントは、テクスチャに比べてピクセルサイズではありませんラスタライザがフラグメントの各コーナーのテクスチャ座標を生成したと想像してください。次に、これらの4つのコーナーを、スクリーン空間ではなくテクスチャ空間で描画することを想像してください。これはどんな形でしょうか?

まあ、それはテクスチャ座標に依存します。つまり、テクスチャがポリゴンにどのようにマップされるかによって異なります。特定のフラグメントについては、軸に沿った四角形になる場合があります。軸に沿っていない正方形の場合があります。長方形かもしれません。台形かもしれません。それは、ほぼすべての4面の図(または少なくとも凸面の)かもしれません。

テクスチャアクセスを正しく行っている場合、フラグメントのテクスチャカラーを取得する方法は、この長方形が何であるかを理解することです。次に、その四角形内のテクスチャからすべてのテクセルをフェッチします(カバレッジを使用して境界にある色をスケーリングします)。次に、それらすべてを平均します。それは完璧なテクスチャマッピングでしょう。

また、非常に遅くなります。

パフォーマンスのために、実際の答えを近似するようにしています。テクセル空間内のフラグメントの領域全体をカバーする4ではなく、1つのテクスチャ座標に基づいています。

ミップマップベースのフィルタリングは、低解像度の画像を使用します。これらの画像は基本的に、色の大きなブロックがブレンドされたときにどのように見えるかを事前に計算することにより、完璧な方法のショートカットです。したがって、より低いミップマップを選択すると、各テクセルがテクスチャの領域を表す事前計算された値が使用されます。

異方性フィルタリングは、固定数の追加サンプルを取得することにより、完璧な方法(ミップマッピングと組み合わせることができ、組み合わせる必要があります)を近似することによって機能します。しかし、まだテクスチャ座標が1つしか与えられていないため、フェッチするテクセル空間の領域をどのようにして把握するのでしょうか。

基本的に、それはだまします。フラグメントシェーダーは2x2の隣接ブロックで実行されるため、画面空間XおよびYでフラグメントシェーダーの任意の値の導関数を計算できます。次に、これらの導関数を実際のテクスチャ座標と組み合わせて使用​​して、真のフラグメントのテクスチャフットプリントはどうなるか。そして、この領域内で多数のサンプルを実行します。

これを説明するのに役立つ図は次のとおりです。

フラグメントフットプリントと異方性サンプル。 参考までに、これまでに見たことがあるなら、それは私のものです。

白黒の四角はテクスチャを表しています。これは、2x2の白と黒のテクセルのチェッカーボードです。

オレンジ色の点は、問題のフラグメントのテクスチャ座標です。赤いアウトラインはフラグメントのフットプリントであり、テクスチャ座標を中心にしています。

緑のボックスは、異方性フィルタリングの実装アクセスする可能性のあるテクセルを表します(異方性フィルタリングアルゴリズムの詳細はプラットフォーム固有であるため、一般的なアイデアしか説明できません)。

この特定の図は、実装が4つのテクセルにアクセスする可能性があることを示唆しています。そうそう、緑色のボックスは7つをカバーしていますが、中央の緑色のボックスは小さなミップマップからフェッチできるため、1つのフェッチで4テクセルに相当するものをフェッチできます。実装はもちろん、単一のテクセルのものと比較して、そのフェッチの平均に4の重みを付けます。

異方性フィルタリングの制限が4(またはそれ以上)ではなく2の場合、実装はこれらのサンプルの2つを選択してフラグメントのフットプリントを表します。


説明してくれてありがとう、返事が遅れてすみませんでしたが、非常に注意深く読む時間を見つける必要がありました。私が完全に理解していない唯一の段落は、フラグメントシェーダーと派生物について話している段落だと思います。画面空間XとYで正確に何が導き出されますか?テクスチャ座標値ですか?
Nicola Masotti 2017年

@NicolaMasotti:「導関数」は微積分用語です。この場合は、スクリーンスペースXまたはYにおける、三角形の表面全体のテクスチャ座標の変化率です。微積分がわからない場合は、説明できません。単一の投稿であなたに。
Nicol Bolas

幸いなことに、私は派生物が何であるかを知っています。正確な数学を見ることができる場所はありますか?
Nicola Masotti

また、私は「すなわち、あなたの答えへの変更のカップルを提案することがポリゴンがテクスチャにマッピングされている方法によって異なります」ではなく「それはテクスチャがポリゴンにマッピングされているかに依存します」。また、「カバレッジを使用して境界線上にある色を拡大縮小する」とは、実際には「境界線上にある色の重み」を意味しますか?
Nicola Masotti 2017年

3

あなたがおそらくすでに知っているいくつかのポイントですが、私はこれを読んでいる他の人のためにそこに出したいのです この場合のフィルタリングとは、ガウスぼかしやボックスぼかしから得られるようなローパスフィルタリングを指します。高周波数のメディアをいくつか取り、より小さなスペースにレンダリングするため、これを行う必要があります。フィルタリングしないと、エイリアシングアーティファクトが発生し、見た目が悪くなります。したがって、スケーリングされたバージョンで正確に再現するには高すぎる周波数を除外します。(低周波数を通過させるため、ぼかしのような「ローパス」フィルターを使用します。)

まず、ぼかしの観点から考えてみましょう。ぼかしは畳み込みの一種です。たたみ込みカーネルを取得し、それを領域内のすべてのピクセルで乗算してから、それらを加算して重みで除算します。これにより、1ピクセルの出力が得られます。次に、それを上に移動し、次のピクセルのためにもう一度繰り返します。

そのようにすることは本当に高価ですので、ごまかす方法があります。一部の畳み込みカーネル(特にガウスぼかしカーネルとボックスぼかしカーネル)は、水平パスと垂直パスに分離できます。最初に水平カーネルだけですべてをフィルタリングしてから、その結果を取得して垂直カーネルだけでフィルタリングすることができます。結果は、すべてのポイントでより高価な計算を実行するのと同じになります。次に例を示します。

元の:

ハワイ

水平ぼかし:

水平方向にぼやけたハワイ

水平に続いて垂直のぼかし:

ハワイは水平にそして次に垂直にぼやけた

したがって、フィルタリングを垂直パスと水​​平パスに分離できます。だから何?そうですね、空間変換についても同じことができることがわかりました。次のように、遠近法の回転について考える場合:

ハワイはY軸を中心に回転

Xスケールに分解できます。

ここに画像の説明を入力してください

その後、わずかに異なる量の各列のスケール:

ハワイはXでスケーリングされ、次にYで比例的にスケーリングされます

これで、2つの異なるスケーリング操作ができました。これに対して正しいフィルタリングを行うには、Xの方がYよりも強くフィルタリングする必要があり、列ごとに異なる量でフィルタリングする必要があります。最初の列は元の列と同じサイズであるため、フィルタリングされません。2番目の列は、最初の列よりもわずかに小さいため、ほんの少しだけ取得します。最後の列は、任意の列で最も多くのフィルタリングを取得します。

「異方性」という言葉は、ギリシャ語の「an」が「not」を意味し、「isos」が等しいことを意味し、「tropos」が「方向」を意味することに由来します。つまり、「すべての方向で等しくない」ということです。そして、それがまさに私たちが目にするものです。スケーリングとフィルタリングは、各方向で異なる量で行われます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.