コンピュータ グラフィックスでは、テクスチャ フィルタリングまたはテクスチャ スムージングは、近くのテクセル(テクスチャのピクセル) の色を使用して、テクスチャがマップされたピクセルのテクスチャ色を決定するために使用される方法です。
フィルタリングとは、テクスチャを様々な形状、サイズ、角度、スケールで適用する方法を指します。選択したフィルタアルゴリズムに応じて、ぼかし具合、ディテール、空間エイリアシング、時間エイリアシング、ブロッキングの程度が異なります。フィルタリングは状況に応じて、ソフトウェア(ソフトウェアレンダリングパッケージなど)またはハードウェア(リアルタイムまたはGPUアクセラレーションによるレンダリング回路、あるいはその両方)で実行できます。一般的なインタラクティブグラフィカルアプリケーションのほとんどでは、最新のテクスチャフィルタリングは専用ハードウェアによって実行され、メモリキャッシュとプリフェッチによってメモリアクセスが最適化され、ユーザーと開発者が利用可能なアルゴリズムが実装されています。
テクスチャフィルタリングには、拡大フィルタリングと縮小フィルタリングの2つの主なカテゴリがあります。[ 1 ]状況に応じて、テクスチャフィルタリングは、スパースデータを補間してギャップを埋める再構成フィルタの一種(拡大)か、テクスチャサンプルがテクスチャの塗りつぶしに必要なサンプル周波数よりも高い周波数で存在するアンチエイリアシング(AA)の一種(縮小)のいずれかになります。
テクスチャ フィルタリングにはさまざまな方法があり、計算の複雑さ、メモリ帯域幅、画像品質 の間でさまざまなトレードオフが行われます。
フィルタリングの必要性
任意の3Dサーフェスのテクスチャマッピング処理中に、テクスチャルックアップは、各ピクセルの中心がテクスチャ上のどこに位置しているかを調べるために行われます。3Dゲームや映画のほとんどのサーフェスに見られるような、三角形で構成されたテクスチャマッピングされた多角形サーフェスでは、そのサーフェス上のすべてのピクセル(または従属ピクセルサンプル重心座標のセットに関連付けられます。このような位置は「ピクセルグリッド」上に完全には存在しない場合があり、このようなケースに対応する何らかの関数が必要になります。言い換えれば、テクスチャサーフェスは視聴者に対して任意の距離と方向にある可能性があるため、1つのピクセルが1つのテクセルに直接対応するとは限りません。ピクセルに最適な色を決定するには、何らかのフィルタリングを適用する必要があります。フィルタリングが不十分または不適切だと、ジャギー、ちらつきなど アーティファクト(画像エラー)
ピクセルと、それが画面上で表すテクセル(複数可)との間には、さまざまな種類の対応関係があります。これらは、視聴者に対するテクスチャ面の位置によって決まり、それぞれの場合で異なる形式のフィルタリングが必要となります。画面上の正方形の面にマッピングされた正方形のテクスチャを考えると、ある視聴距離では、1 画面ピクセルのサイズは 1 テクセルとまったく同じになります。それよりも近い距離では、テクセルは画面ピクセルよりも大きくなるため、適切に拡大する必要があります。このプロセスは、テクスチャ拡大と呼ばれます。離れると、各テクセルはピクセルよりも小さくなるため、1 ピクセルが複数のテクセルをカバーします。この場合、テクスチャ縮小によって、カバーされているテクセルに基づいて適切な色を選択する必要があります。OpenGLなどのグラフィックスAPI を使用すると、プログラマは縮小フィルタと拡大フィルタのさまざまな選択肢を設定できます。[ 1 ]
ピクセルとテクセルのサイズが全く同じ場合でも、1つのピクセルが必ずしも1つのテクセルと完全に一致するとは限らないことに注意してください。ピクセルの位置がずれていたり、回転していたり、最大4つの隣接するテクセルの一部を覆っている可能性があります。そのため、何らかのフィルタリングが必要になります。
ミップマッピング
ミップマッピングは、テクスチャの縮小時に必要なフィルタリング作業の一部を節約するために使用される標準的な手法です。[ 2 ]また、キャッシュの一貫性にも非常に役立ちます。ミップマッピングがないと、遠くのテクスチャからサンプリングする際のメモリアクセスパターンの局所性が極めて悪くなり、フィルタリングを実行しなくてもパフォーマンスに悪影響を与えます。
テクスチャの拡大中は、どのピクセルでも参照する必要があるテクセルの数は常に 4 以下です。しかし、縮小中は、テクスチャが適用されたポリゴンが遠ざかるにつれて、テクスチャ全体が1 ピクセルに収まる可能性があります。この場合、すべてのテクセルを読み取り、それらの値を組み合わせてピクセルの色を正しく決定する必要があり、これは非常にコストのかかる操作です。ミップマップでは、テクスチャを事前にフィルタリングし、1 ピクセルになるまで小さなサイズで保存することで、この問題を回避します。テクスチャが適用された表面が遠ざかるにつれて、適用されるテクスチャは、事前にフィルタリングされた小さなサイズに切り替わります。ミップマップの異なるサイズは「レベル」と呼ばれ、レベル 0 が最大サイズ (視聴者に最も近いサイズで使用) で、距離が増すにつれてレベルが大きくなります。
フィルタリング方法
このセクションでは、最も一般的なテクスチャ フィルタリング方法を、計算コストと画像品質の昇順で示します。
最近傍補間
最近傍補間は最も単純かつ粗いフィルタリング手法であり、ピクセルの中心に最も近いテクセルの色をピクセルの色として用いる。単純ではあるが、多くのアーティファクト(拡大時のテクスチャのブロック化[ 3 ]、縮小時のエイリアシングや揺らめき[ 4 ])が発生する。この手法は拡大時は高速だが、縮小時はメモリのストライドが任意に大きくなり、空間的に一貫性のあるテクスチャアクセスとキャッシュラインの再利用がないため、ミップマッピングよりも効率が悪くなることが多い。[ 5 ]
ミップマッピングによる最近傍法
この手法は、最近傍補間法を引き続き使用しますが、ミップマップ処理を追加します。まず距離に応じて最も近いミップマップレベルを選択し、次に最も近いテクセル中心をサンプリングしてピクセルの色を取得します。これにより、縮小時のエイリアシングとシマーが大幅に軽減されますが、完全に除去されるわけではありません。これにより、ラスタライズ時にテクスチャメモリへの不必要なアクセスストライドを回避することで、テクスチャメモリへのアクセスとキャッシュラインの再利用性が向上します。ただし、拡大時のブロックノイズは改善されません。拡大された各テクセルは依然として大きな長方形として表示されるためです。
線形ミップマップフィルタリング
あまり一般的ではありませんが、OpenGL やその他の API は、サンプルに関連する 2 つの最も近いミップマップを線形補間しながら、個々のミップマップからの最近傍サンプリングをサポートします。
双線形フィルタリング
バイリニアフィルタリングでは、ピクセル中心に最も近い4つのテクセルが(最も近いミップマップレベルで)サンプリングされ、それらの色が距離に応じて加重平均で結合されます。 [ 6 ]これにより、ピクセル中心がテクセル境界を越えたときに急激な変化が起こらず、1つのテクセルから次のテクセルへの色の変化のグラデーションが滑らかになるため、拡大時に見られる「ブロックノイズ」が除去されます。[ 7 ]拡大フィルタリングではバイリニアフィルタリングが一般的です。縮小に使用する場合は、ミップマップと併用されることが多いです。ミップマップなしでも使用できますが、縮小しすぎると、最近傍フィルタリングと同じエイリアシングやちらつきの問題が発生します。ただし、中程度の縮小率の場合は、安価なハードウェアアクセラレーションによる加重テクスチャスーパーサンプルとして使用できます。
ニンテンドー64では、ハードウェアの最適化を考慮し、4ピクセルではなく3ピクセルのみを使用する、バイリニアフィルタリングの特殊なバージョン、いわゆる3点テクスチャフィルタリングが採用されていました。これにより、一部のテクスチャに顕著な「三角測量バイアス」が生じました。[ 8 ]
トライリニアフィルタリング
トライリニアフィルタリングは、ミップマップされたバイリニアフィルタリング画像によく見られるアーティファクト(レンダラーがミップマップレベルを切り替える境界で、品質が急激かつ顕著に変化する現象)に対する対策です。トライリニアフィルタリングは、最も近い2つのミップマップレベル(1つは高品質、もう1つは低品質)に対してテクスチャルックアップとバイリニアフィルタリングを行い、その結果を線形補間することでこの問題を解決します。 [ 9 ]これにより、視聴者からの距離が離れるにつれて、テクスチャ品質が急激に低下するのではなく、滑らかに劣化します。もちろん、レベル0よりも近い場合は利用可能なミップマップレベルは1つだけなので、アルゴリズムはバイリニアフィルタリングに戻ります。
異方性フィルタリング
異方性フィルタリングは、現在のコンシューマー向け3Dグラフィックカードで利用可能な最高品質のフィルタリングです。よりシンプルな「等方性」手法では、正方形のミップマップのみを使用し、それをバイリニアフィルタリングまたはトリリニアフィルタリングで補間します。(等方性とは、すべての方向で同じであることを意味し、すべてのマップが長方形やその他の四辺形ではなく正方形であるシステムを表すために使用されます。)
表面がカメラに対して高角度にある場合、テクスチャの塗りつぶし領域はほぼ正方形にはなりません。ゲームの床の一般的なケースを考えてみましょう。塗りつぶし領域は、高さよりもはるかに広いです。この場合、正方形のマップはどれもうまくフィットしません。結果は、フィットの選択方法に応じて、ぼやけたり、揺らめいたりします。異方性フィルタリングは、テクスチャを非正方形としてサンプリングすることでこれを修正します。目的は、テクスチャ空間に投影されたピクセルフットプリントと一致するようにテクスチャをサンプリングすることですが、このようなフットプリントは必ずしもテクスチャの軸に揃っているわけではありません。さらに、サンプル理論を扱う場合、ピクセルは小さな正方形ではありません[ 10 ]したがって、そのフットプリントは投影された正方形にはなりません。テクスチャ空間のフットプリントアセンブリは、テクスチャ空間に投影されたピクセルの計算された関数の近似値をサンプリングしますが、詳細は大体近似値であり[ 11 ]サンプル理論についての意見に深く関わっています。ただし概念的には、投影されたサイズが異なる場合に、1 つの軸のエイリアシングと他の軸のぼかしとの間の競合を回避するために、適切な方向のより正確な異方性サンプルをサンプリングすることが目標です。
異方性の実装では、フィルタリングには、中間結果または最終結果の構築中に、従来のミップマッピングの正方形マップをフィルタリングするために使用されるのと同じフィルタリング アルゴリズムが組み込まれる場合があります。
パーセンテージクローサーフィルタリング
深度ベースのシャドウ マッピングでは、深度マップ テクスチャを備えた興味深いPercentage Closer Filter (PCF) を使用できます。これにより、適用される可能性のあるテクスチャ フィルタの種類に対する認識が広がります。PCF では、シーンの深度マップが光源からレンダリングされます。その後のシーンのレンダリング中に、この深度マップがライトの位置からシーンに投影され、投影深度座標と取得されたテクスチャ サンプル深度が比較されます。投影座標はライトからのシーン ピクセル深度になりますが、深度マップから取得された深度は、その投影方向に沿ったシーンの深度を表します。このようにして、レンダリングされたピクセルの光に対する可視性、つまりライトによる照明を判定できます。したがって、このテクスチャリング操作は、ピクセルが照らされているかどうかのブール テストですが、特定のピクセルに対して複数のサンプルをテストし、ブール値の結果を合計して平均化することができます。この方法では、サンプリングされたテクセルの位置や、ジッタされた深度マップの投影位置などのさまざまなパラメータと組み合わせることで、深度比較後の平均、またはより近い、つまり照明されているサンプルのパーセンテージをピクセルごとに計算できます。重要なのは、ブール結果の合計とパーセンテージ値の生成は、投影深度とサンプルフェッチの深度比較の後に実行する必要があるため、この深度比較はテクスチャフィルタの不可欠な部分になるということです。このパーセンテージは、照明計算の重み付けに使用され、ブール照明または影の値だけでなく、ソフトシャドウの半影の結果も提供できます。[ 12 ] [ 13 ]現代のハードウェアでは、比較が実行され、ブール比較後に距離による双線形フィルタが適用されるバージョンがサポートされています[ 14 ]
参照
参考文献
- ^ a b「第9章 - OpenGLプログラミングガイド」 . Glprogramming.com. 2009年2月13日. フィルタリング. 2018年1月14日閲覧。
- ^ Williams, Lance (1983). 「ピラミッド型パラメトリクス」(PDF) . ACM SIGGRAPH Computer Graphics . 17 (3): 1– 11. doi : 10.1145/964967.801126 . ISSN 0097-8930 . 2016年6月6日時点のオリジナル(PDF)からアーカイブ。 2017年2月14日閲覧。
- ^ 「ゲームエンジン設計:テクスチャマッピング」(PDF) . uncc.edu. テクスチャ拡大. 2021年4月17日時点のオリジナル(PDF)からアーカイブ。 2017年2月14日閲覧。
- ^ 「ゲームエンジン設計:テクスチャマッピング」(PDF) . uncc.edu. テクスチャの縮小. 2021年4月17日時点のオリジナル(PDF)からアーカイブ。 2017年2月14日閲覧。
- ^ Hendrik Lensch (2007年11月29日). 「コンピュータグラフィックス:テクスチャフィルタリングとサンプリング理論」(PDF) .マックス・プランク協会. ミップマップ. 2018年1月14日閲覧.
- ^ Markus Hadwiger (2015年3月9日). 「GPUとGPGPUプログラミング講義12:GPUテクスチャリング2」(PDF) . KAUST . テクスチャ再構成:拡大.オリジナル(PDF)から2021年1月24日アーカイブ。 2017年2月14日閲覧。
- ^ Markus Hadwiger (2015年3月9日). 「GPUとGPGPUプログラミング講義12:GPUテクスチャリング2」(PDF) . KAUST . テクスチャアンチエイリアシング:MIPマッピング. 2021年1月24日時点のオリジナル(PDF)からのアーカイブ。 2017年2月14日閲覧。
- ^ 「高速で効率的な3Dグラフィックスとデジタルオーディオ信号処理を提供するコプロセッサを搭載したビデオゲームシステム」 。 2022年11月14日閲覧。
- ^ Hendrik Lensch (2007年11月29日). 「コンピュータグラフィックス:テクスチャフィルタリングとサンプリング理論」(PDF) .マックス・プランク協会. ミップマッピングII . 2018年1月14日閲覧.
- ^ Alvy Ray Smith (1995年7月17日). 「ピクセルは小さな正方形ではない!(そしてボクセルは小さな立方体ではない) - 技術メモ6」(PDF) . cs.princeton.edu . 2018年1月14日閲覧。
- ^ Hendrik Lensch (2007年11月29日). 「コンピュータグラフィックス:テクスチャフィルタリングとサンプリング理論」(PDF) .マックス・プランク協会. 異方性フィルタリング. 2018年1月14日閲覧.
- ^ Reeves, William T.; Salesin, David H.; Cook, Robert L. (1987-08-01). 「深度マップを用いたアンチエイリアスシャドウのレンダリング」(PDF) . ACM SIGGRAPH Computer Graphics . 21 (4). Association for Computing Machinery (ACM): 283– 291. doi : 10.1145/37402.37435 . ISSN 0097-8930 . S2CID 18320563. 2018年1月15日時点のオリジナル(PDF)からのアーカイブ。
- ^ Randima Fernando (2008年7月2日). 「Percentage-Closer Soft Shadows」(PDF) . NVIDIA Corporation . 2018年1月14日閲覧。
- ^ 「WebGL WEBGL_depth_texture Khronos承認拡張仕様」 Khronos.org. 2014年7月15日. 2018年1月14日閲覧。