超雑訳 Efficient Screen-Space Approach to High-Quality Multi-Scale Ambient Occlusion

Share

こんにちわ。Pocolです。
今日は,
[Hoang 2012] Thai-Duong Hoang, Kok-Lim Low, “Efficient Screen-Space Approach to High-Quality Multi-Scale Ambient Occlusion”, Visual Computer, 28, pp.289-304
を読んでみようと思います。
いつもながら誤字・誤訳があるかと思いますので,ご指摘頂ける場合は正しい翻訳例と共に指摘していただけると幸いです。

Abstract

本研究では、性能と品質の両面で最新のSSAO手法を改良した、新しいスクリーン空間アンビエントオクルージョン(SSAO)アルゴリズムを発表します。この手法では,複数の画像解像度でアンビエントオクルージョン(AO)値を計算し,それらを組み合わせて,各画像ピクセルの最終的な高解像度AO値を求めます.この方法では、近くのオクルージョンに起因する高頻度の影と、遠くのジオメトリに起因する低頻度の影の両方を含む高品質のAOを生成します。このアプローチでは、すべての解像度で非常に小さなサンプリングカーネルを使用するだけでよいため、ランダムサンプリングに頼らずに高い性能を得ることができます。そのため、他のSSAO方式に見られるようなノイズや過度のボケに悩まされることもありません。また、他のSSAO方式では、最終的にブラーをかける必要がありますが、本方式ではその必要がありません。また、複数の解像度を使用することで、SSAO特有の見え方のチェック不足に起因するエラーを減らすことができます。また、粗い解像度を使用することで生じる時間的な不整合は、最適なテンポラルフィルタリングパスによって解決されます。我々の手法は、既存のSSAO手法よりもレイトレースされたソリューションに近い結果を得ることができ、しかも最速の手法と同等以上のフレームレートで動作します。

1 Introduction

アンビエントオクルージョン(AO)とは、シーンを取り囲む一様な拡散球状光源の直接照明下における影の効果のことです。この光源からの入射光が遮られることで、シワや穴などの凹んだ部分が露出した部分よりも暗く見えるようになります。実際には、入射光がすべての方向で等しくなることはほとんどなく、サーフェイス間で光の相互反射が発生するため、AOは現実的な現象ではありません。しかし、人工的な現象であるにもかかわらず、AOは画像のレンダリングにかなりのリアリティを与えることができます。平面的なシーンでも、形状や奥行きを感じさせることができます(図1参照)。そのため、AOは、光の相互反射を考慮した高価なグローバル・イルミネーション・ソリューションの安価な代替手段として使用されることが多いのです。実際、AOはCG映画やテレビ番組の標準的な技術であり、レンダリングされた画像をよりリアルにするために利用されています。また、コンピュータゲームにおいても、グラフィックスハードウェアの性能向上に伴い、リアルタイムAOが普及しています。

※図は、[Hoang 2012]より引用

 AOを計算する方法はいくつかありますが、正確さと速さをどのように交換するかという点で異なります。最も精度の高い手法は,モンテカルロレイトレーシング法を用いることが多いのですが(例えば,[15]を参照),これは速度が遅く,オフラインでの事前計算にしか適していません。このような手法によるAOの結果は、オフラインまたはリアルタイムのレンダリングに使用することができます。しかし,事前に計算されたAO結果をリアルタイムレンダリングに使用する場合,シーンのジオメトリが静的でなければならないという制限があります。最近では、プログラマブル・グラフィックス・ハードウェアの進歩により、シーンの制約が少ないリアルタイムAO計算が可能になっています。AOの事前計算ができないダイナミックなシーンのリアルなリアルタイムレンダリングに役立ちます。スクリーン空間アンビエントオクルージョン(SSAO)と呼ばれるリアルタイム手法は,AOの精度と引き換えに,性能を大幅に向上させています。既存のAO手法と比較して,SSAOはあらゆる種類のシーンに対応し,大幅に高速であり,既存のレンダリングシステムへの実装や統合も簡単です。その代わり、SSAOは精度が低く、様々な品質問題を抱えています。SSAOはそのスピードとシンプルさから、精度や品質よりもスピードを重視する3Dゲームやその他のインタラクティブなアプリケーションで、ますます人気が高まっています。SSAOの実装は、基本的なアイデアは同じでも細部が異なることが多く、その結果は互いに大きく異なることがあります。現在のSSAO手法は、小さなシワを暗くするような局所的なAO効果の生成には問題がありませんが、シーンのリアリズムに欠かせない、よりグローバルなAO効果の生成には大きな性能上の課題があります。その主な理由は、SSAOがスクリーン空間のサンプルを用いてAOを計算しているからです。SSAOでは、スクリーン空間のサンプルを用いてAOを計算していますが、グローバルなAOを実現するためには、大量のサンプルをリアルタイムに取得する必要があり、性能がすぐに低下してしまいます。SSAO方式の多くは、ランダムサンプリングを用いてこの問題を回避しようとしますが、結果としてノイズが多くなったり、ローパスフィルターでノイズを除去してもぼやけた印象になったりします。
 本論文の貢献は、複数の画像解像度での部分的なAO値を組み合わせてAOを計算する、新しいSSAOアルゴリズム(Multi-Resolution Screen-Space Ambient Occlusion (MSSAO)と呼ぶ)です。本手法は,局所的なオクルーダーからの鋭い影と,遠方のオクルーダーからの滑らかな影の両方を捉えることができます。遠くのオクルーダーによるAOは周波数が低いため、粗い解像度で計算できますが、近くのオクルーダーによるAOは周波数が高いため、より細かい解像度で計算する必要があるという原理に基づいています。これにより、各解像度で非常に小さなサンプリングカーネルを使用することができ、ランダムサンプリングなしで高い性能を得ることができます。さらに、すべての解像度でAOの最大値を保持することで、視認性チェックの不足をある程度補うことができ、他の多くのSSAO手法よりも精度の高い結果を得ることができました。本論文では、最先端の3つのSSAO方式と比較し、最速のものと同等の性能を実現しつつ、はるかに高品質な結果が得られることを示しています。

2 Ambient Occlusion Theory

ここでは、AOの理論的根拠について説明します。ここでは、読者が立体角、放射輝度、放射照度などの基本的なラジオメトリの概念に精通していることを前提としています。ラジオメトリの概要については、[5]を参照してください。AOの定義では、シーンを取り囲む一様に拡散した球状の光源のみによってシーンが照らされていることが必要です。このような照明環境では、光源から直接入ってくる放射輝度は、すべての入射方向に対して一定です。また,簡単のために,すべての表面がLambertian(入射光を全方向に均等に反射する)であると仮定します。これらの仮定により、法線\({\mathbf n}\)を持つ点\({\mathbf p}\)におけるサーフェイス放射照度の方程式は次のようになります。

\begin{eqnarray}
E({\mathbf p}, {\mathbf n}) = L_A \int_{\Omega} v({\mathbf p}, \omega) \cos \theta d \omega \tag{1}
\end{eqnarray}

ここで、\(L_A\)は入射する周囲の放射輝度、\(\Omega\)は点\({\mathbf p}\)の上にある\({\mathbf n}\)方向の半球で、可能なすべての入射方向を表しています。\(v({\mathbf p}, \omega)\)は、\({\mathbf p}\)から方向\(\omega\)に投射された光線が遮られている場合は0に、そうでない場合は1になる2値の可視化関数、\(\theta\)は\(\omega\)と\({\mathbf n}\)の間の角度、\(d\omega\)は方向\(\omega\)に沿った無限小の立体角です。式1は以下のようにも書けます。

\begin{eqnarray}
E({\mathbf p}, {\mathbf n}) = L_A \pi k_A ({\mathbf p}, {\mathbf n}) \tag{2}
\end{eqnarray}

ただし

\begin{eqnarray}
k_A({\mathbf p}, {\mathbf n}) = \frac{1}{\pi} \int_{\Omega} v({\mathbf p}, \omega) \cos \theta d \omega \tag{3}
\end{eqnarray}

\(k_A\)は点\({\mathbf p}\)のアンビエントオクルージョン値と定義され、その値は0から1の範囲です。\(k_A\)が0のとき、\({\mathbf p}\)は完全に光を遮断されており、1のとき、\({\mathbf p}\)は完全に露出しています。\(k_A\)は「アンビエントオクルージョン」と呼ばれていますが、実際には\({\mathbf p}\)の上の半球がどれだけ見えているか、つまり「アクセシビリティ」に対応しています。混乱を避けるために、このページではAOという言葉を実際には\(1 – k_A\)という意味で使っていますので、AOの値が大きいほど強度が低い(または色が濃い)ことを意味します。
 上記のAOの定義は、閉ざされたシーンでは役に立たず、すべてが真っ暗になってしまいます。なぜなら、\(v({\mathbf p}, \omega)\)はどこでも0に等しいからです。そのため,実際には,二値の可視性関数 \(v({\mathbf p}, \omega)\) の代わりに,\(d\) の増加に伴って 1 から 0 へと滑らかに変化する減衰(またはフォールオフ)関数 \(\rho({\mathbf p}, d)\) を用いることが多い [39].\(\rho\)を用いて、\(k_A\)を次のように書き換えることができます。

\begin{eqnarray}
k_A({\mathbf p}, {\mathbf n}) = 1 -\frac{1}{\pi} \int_{\Omega} \rho({\mathbf p}, d) \cos \theta d \omega \tag{4}
\end{eqnarray}

\(\rho({\mathbf p}, d)\)は連続関数で、\({\mathbf p}\)から\(\omega\)方向に投げた光線が近くの幾何学的なものと交差する点までの距離\(d\)に依存します。\(d\) が 0 からいくつかのプリセット値 \(d_{max}\) まで増加すると、\(\rho\) は 1 から 0 へと単調に減少します。我々の方法では、式4と二次フォールオフ関数をすべてのAO計算の基礎として使用しています。技術的には、フォールオフ関数を使用するAOの定義は、古いモデルのAOと区別するためにAmbient obscurance [39]と呼ばれていますが、この用語は以前の研究で互換的に使用されているため、本稿ではAO(より確立された用語である)をAmbient obscuranceの意味で使用します。

3 Related Work

ここでは、ダイナミックシーンのリアルタイムまたはインタラクティブなレンダリングを対象とした既存のAO手法について、SSAOに焦点を当てて簡単に説明します。

3.1 Object-Space Methods

Bunnell [3]は、シーンのオブジェクトを円盤の階層で近似しています。AOは、円盤のすべてのペアの間で近似されたフォームファクターを用いて計算されます。さらに,[9](アーティファクトが少ない),[4](精度が高い)などの改良が加えられています.これらの手法は高度にテッセレーションされたジオメトリを必要とするため,性能を大幅に犠牲にしなければ単純なシーン以上には拡張できません.
 Reinbotheら[27]は,元の三角形のメッシュの代わりに,シーンのボクセル化された表現にレイトレーシングを行うことでAOを計算しています.レイトレーシングは,三角形の代わりに近距離のボクセルを扱う場合でも,リアルタイムのアプリケーションでは低速です.
 Renら[28]やSloanら[33]は、オクルーダーを球体で近似し、球面調和関数を用いてAO値を解析的に計算・保存しています。複数の球体によるAOは、対応する球面調和関数係数を効率的に組み合わせることで蓄積されます。Shanmugamら[31]は,球体と画像空間スプラッターを用いた同様のアプローチを採用していますが,球面調和関数は使用していません。これらの方法は,前処理が必要であり,球体で近似できない複雑な物体があるシーンでは使えません。
 Kontkanenら[12]とMalmerら[17]は、各オクルーダーの周りのオクルージョンフィールドを計算し、キューブマップに格納しています。レンダリング時に、複数のオブジェクトによるオクルージョンは、異なるキューブマップから事前に計算された値を調べてブレンドすることで近似されます。Zhouら[38]は,キューブマップの代わりにHaarウェーブレットまたは球面調和関数を用いる同様の手法を提案しています。AOフィールドは大容量のメモリを必要とし、剛体のオブジェクトで構成されたセミダイナミックなシーンでのみ機能します。また,自己閉塞や高周波のオクルージョンも無視されます。
 McGuire [19]では、画面のピクセルごとに、シーン内のすべての三角形のメッシュに起因するオクルージョンを解析的に計算しています。この方法では,オーバーオクルージョンによるアーティファクトが発生します。Laineら[14]は、同じ半球方向から来るオクルーダーからのオクルージョンの寄与を一度だけ考慮することで、この問題を解決しました。このアイデアは、[10]の半球ラスタライズに似ていますが、後者はセルフシャドウイングオブジェクトにしか使えません。解析的な手法は、特に多くの三角形を持つ大きなシーンでは時間がかかります。これらの方法は,リアルタイムアプリケーションにはまだ適していません.

3.2 Screen-Space Methods

スクリーンスペース方式では、近くのピクセルを潜在的なオクルーダーとして扱い、ピクセルを暗くする経験的なモデルを使用しています。Mittring[21]は,最初に知られたSSAO法の1つを紹介しています.この手法は,シェーディングされたピクセルを中心とした球体内の3Dポイントをサンプリングし,そのポイントサンプルをスクリーン空間に投影することで,シーンの表面(目から見たとき)の下に何個のポイントがあるかを判断します。AOは、オクルードしているサンプル数と全サンプル数の比率として定義されます。この考え方を改良した手法としては,[6](減衰関数,自己遮蔽なし),[29](方向性のあるオクルージョン,ワンバウンス間接照明),[16](ラインサンプリングと呼ばれる高速で変動の少ないサンプリング手法),[36]([16]と同様)などがあります。McGuireら [20]は,[16]に似たサンプリング手法を用いていますが,黒ハローを避けるために,よりロバストなAO式を用いています。また,彼らの手法は,より多くのアーティストのコントロールを可能にします。
 Shanmugamら[31]やFoxら[7]は,3次元のポイントサンプルを投影するのではなく,画像空間で直接サンプリングしています。シェーディングされたピクセルに対して、隣接するピクセルがランダムにサンプリングされ、対応するオブジェクト空間のポイントが微小球オクルーダーとして扱われます。視空間のサンプルを投影するアプローチと比較して、スクリーン空間で直接サンプリングすることで、ノイズの少ない結果を得ることができますが、スクリーン空間の方向は必ずしも3D方向に対応していないため、より偏った結果となります。我々の手法では、SSAOの結果は一般的に(例えばレイトレースによる結果と比較して)すでにかなりの偏りがあり、実際の問題はノイズであることを考慮して、トレードオフの価値があると判断したため、スクリーン空間のサンプリングを使用しています。
 Bavoilら[2]は,シェーディングされたピクセルから2Dの各方向に沿って地平線の角度を求めることでAOを算出しています。ある方向に沿った水平線の角度は,シェーディングされたピクセルがその方向にどの程度オクルージョンしているかを示しています.AOはスクリーン空間の複数の方向の水平線角度から平均化されます。HBAOは、他のSSAO手法と比較して、より解析的な手法であるため、高品質な結果を得ることができますが、各方向の光線に沿ってステップするレイマーチングを使用しているため、処理速度が非常に遅くなります。
 スクリーン・スペース法は、AO方程式(式4)の再定式化と、その結果としてのサンプリング方法に大きな違いがあります。サンプルは、2次元または3次元の空間で採取することができます。一部の手法では,3次元空間でサンプルを採取するため,高分散の近似値やノイズが発生します[6,21,29]。我々の方法では,2次元空間でサンプルを採取しますが,その空間がスクリーン空間そのものであるか[2,7,31],オブジェクト空間の2次元部分空間であるか[16,20,36]に関わらず,サンプルを採取します。図2は、SSAOで使用される様々なサンプリングスキームを示しています。一般的には,ノイズの少ない結果が得られるという理由から,2Dサンプリングに移行しています。欠点としては、2Dサンプリングのパターンに偏りがあることが挙げられますが、深度バッファのみに基づいたオクルージョンチェックがすでに不正確であることを考えると、偏ったサンプリングはそれほど大きな問題ではないと思われます。我々の手法では、[31]と同様のサンプリング方式を採用していますが、複数の解像度を使用するため、実際のパターンはより複雑になります。
 一般的に、スクリーンスペース方式は高速ですが、多くの視覚的アーティファクトが発生します。その中には、オーバーオクルージョン(可視性が無視されるため)、アンダーオクルージョン(オクルーダーの投影が小さすぎるか、スクリーン上に存在しないため)、ノイズの多い結果(ランダムサンプリングのため)、ぼやけた結果(ノイズ除去フィルタのため)、非常に局所的なオクルージョン(サンプリングカーネルが小さいため)などがあります。我々の手法は、複数の解像度を使用することで、ノイズ、ぼやけ、局所的なオクルージョンの問題を克服することができます。また、安価な方法で視界を粗く近似することができます。その他の問題については,デプスピーリング[29],複数のカメラ[1],カメラの視野の拡大[1]などの解決策が提案されています。これらの修正は、かなりの性能コストがかかるとはいえ、どのSSAO手法にもメリットがあります。そのため、本稿ではSSAOのコアとなるアイデアのみに焦点を当て、それらの拡張機能は一切含めていません。

※図は、[Hoang 2012]より引用

3.3 Multi-Resolution Techniques

Sloanら[33]は,AOのほとんどが低周波であることに着目し,より粗い解像度でAOを計算し,ジョイント・バイラテラル・アップサンプリング[13]を用いてアップサンプリングを行いました.Bavoilら[1]も同様の手法を用いていますが,細かい部分を精緻化するためにフル解像度のAOを計算しています。しかし,私たちが発見したように,複数の異なるスケールで発生することが多いシーンのAOを捉えるには,単一の粗い解像度だけでは不十分です(図3は,2つの解像度だけでは捉えられないAOの周波数があることを示しています).マルチレゾリューション技術は、[23-25]や[35]でも提案されていますが、その目的は、視認性チェックを行わずにワンバウンス間接照明を計算することにあります。
 MSSAOは、異なる周波数のAOを異なる解像度で自然にキャプチャーすることで、レンダリング速度を向上させつつ、結果のクオリティを保つことができます。MSSAOは、我々の知る限り、性能と品質の両面でリアルタイムAOの問題に取り組んだ最初の真のマルチ・レゾリューション(2つ以上の解像度)技術です。

※図は、[Hoang 2012]より引用

3.4 Temporal Coherence Methods

テンポラルコヒーレンスを利用する方法は、前のフレームのシェーディング情報を再利用し、現在のフレームのシェーディング情報と組み合わせることで、時間的なエイリアシングの低減、画質の向上、シェーディングアルゴリズムの性能向上を図るものです。これらの手法の主なアイデアは、連続したフレーム間ではシェーディング情報の変化がほとんどないため、その大部分を再利用できるというものです。テンポラルコヒーレンスの手法としては,画像空間のリアルタイムのリバースリプロジェクション[22, 30]があります。これは,前のフレームのデータを格納するためにバッファを使用し,現在のフレームのピクセルをそのバッファに投影して古いデータを取り出すというものです。このバッファは、リアルタイムリプロジェクションキャッシュ、またはヒストリーバッファと呼ばれることがあります。SSAOの文脈では,リバースリプロジェクションは品質向上のために[18]で,またテンポラルエイリアシング低減のために[34]で使用されています。我々の場合、リバースリプロジェクションは、連続するフレーム間のフリッカリングを低減するためのフィルタリング方法として使用されます。

4 Multi-Resolution SSAO Algorithm

この半球は、\({\mathbf p}\)の法線\({\mathbf n}\)で定義される接線平面上にあります。この時点で、本稿の議論では、シェーディングされたピクセルを\(p\)と呼び、それに対応する視線空間の「点」を\({\mathbf p}\)と呼ぶことが多いことを覚えておいてください。 概念的には、我々のアルゴリズムは、\({\mathbf p}\)の上にある半径\(d_{max}\)の半球を、入れ子状の半球のセットに分割します。各半球は、外側のより大きな半球の中に入っています(図4)。それぞれの半球に対して、その半球内のオクルーダーによる\({\mathbf p}\)のオクルージョン値を計算します。そして、すべての半球の中での最大値を使って、オクルージョン値を組み合わせる。直感的には、合成されたAO値は、特定の半球における部分的なAO値の最大値以上であることが望ましいと考えられます。最大値を維持することで、遠くのオクルーダーがないために近くのオクルーダーによるオクルージョンが希釈されるのを防ぐことができ、粗い視認性チェックのメカニズムとしても機能します。

※図は、[Hoang 2012]より引用

 計算を高速化するために、\({\mathbf p}\)から遠く離れたオクルーダーによるオクルージョンは、最も細かい解像度で計算する必要がないことに気付きました。そこで、各半球を解像度に関連づけ、大きな半球はより粗い解像度に対応するようにします。各半球について、対応する解像度で部分的なAO値を計算します。半球のAOを計算するとき、サンプルは、隣接する2つの半球の間の「差」だけでなく、半球全体の中で取られなければなりません。しかし、より大きな半球のAOを粗い解像度で計算すると、\({\mathbf p}\)に近すぎるピクセルが粗い解像度では\({\mathbf p}\)自身と一緒にグループ化されてしまい、低解像度のAO値では近くのオクルーダーからの寄与を見逃してしまうというエラーが発生します。そこで、部分的なAO値の最大値を保持するだけでなく、平均的なAO値を用いて変調することで、アンダーオクルージョンの問題を回避しています。
 この方法は、一見似ているように見える別のアイデアとは概念的に異なります。それは、遠くのオクルーダーを粗い解像度でサンプリングするようにサンプルを分配し、シェーディングされた点\({\mathbf p}\)からの距離が大きくなるほど、より少ないサンプルを効果的に使用するというものです。後者のアプローチには大きな欠点があり、遠くのオクルーダーから寄与されるAO値をよりスケーリング(重み付け)する必要があり、結果としてブロック状のアーティファクトが発生します。この問題は過剰なローパスフィルターで解決できますが、最終的な結果はぼやけたものになってしまいます。これは[35]がスクリーン空間、ワンバウンスカラーブリーディングを計算するために使用したアプローチであり、間接照明が異常に低周波数であり、レンダリングされた画像があまりにもぼやけて見えることがそれらの結果から明らかになりました。
 このアルゴリズムでは、各ピクセルの視空間の位置と法線を保存する典型的なG-Bufferを用いたディファードシェーディングフレームワークを使用しています。G-Bufferを用いたディファードシェーディング技術のレビューは[32]を参照してください。シェーディングされた各ピクセル\({\mathbf p}\)に対して,その近くのピクセルに対応する視空間ポイントを,光が\({\mathbf p}\)に到達するのを妨げる可能性のあるオクルーダーとして扱います。これらのオクルーダーはG-Bufferから直接サンプリングされます。\({\mathbf p}\)から離れたオクルーダーについては、\({\mathbf p}\)に近いオクルーダーよりも粗い解像度でサンプリングすることができます。これは常に正しいわけではありませんが(逆は常に正しい)、非常に期待できます。そのため、遠くのピクセルによるオクルージョンの計算には低解像度のG-Bufferを使用し、近くのピクセルには高解像度のB-Bufferを使用します。実際には、複数のスケールのAOをキャプチャするために、複数の解像度のG-Bufferを使用します。各解像度で非常に小さなサンプリングカーネルを使用することで,実質的に\({\mathbf p}\)の周辺の広い範囲をサンプリングしていることになります。高いフレームレートを維持するためにスパース・ランダム・サンプリングに頼る必要がないため,ノイズやブラーといったSSAOの一般的なアーティファクトのない結果が得られています(図5の比較参照)。

※図は、[Hoang 2012]より引用

4.1 Overview

このアルゴリズムでは、まずシーンのジオメトリを最も細かい解像度のG-Bufferにレンダリングします。G-Bufferには、ピクセルごとの視空間座標と(法線化された)法線が格納されます。その後、ミップマップを作成するのと同様に、複数回ダウンサンプリングされます。そして、各解像度の各ピクセルに対して、その小さな2D近傍の他のピクセルをサンプリングして、AO値を計算します。最後に、最も細かい解像度の各ピクセルについて、解像度間で対応するAO値を組み合わせて、最終的なAO値を算出します。これは、ある解像度で隣接するピクセルが、より粗い解像度でまとめられ、同じ粗いAO値を共有するためです。そこで、今回の実装では、複数のレンダリングパスを用いて、最も粗い解像度から最も細かい解像度までのAOを算出することで、滑らかな仕上がりを実現しています。各パスでは、ピクセルごとにサンプリングして算出したAO値と、直前の粗い解像度からサンプリングしたAO値を組み合わせています。バイラテラルアップサンプリング[13]を用いることで,深度や法線の違いによるアップサンプリングを回避しています.また,よりきれいな結果を得るために,アップサンプリングの直前に,粗いAO値にローパス・バイラテラル・フィルターを適用しています。全体のアルゴリズムを表1に示します。

※表は、[Hoang 2012]より引用

 なお、\(AO_{near}\)、\(AO_{far}\)、\(AO_{combined}\)は、ピクセル単位、レゾリューション単位の値です。本アルゴリズムでは、\(AO_{near}\)は隣接するピクセルに起因するAOを表し、\(AO_{far}\)は遠くのピクセルに起因するアップサンプリングされたAOを表します。これらは最初のレンダリングパスを除くすべてのレンダリングパスで合成され、\(AO_{combined}\)が得られます。例えば,\({\mathbf p}\)がアルゴリズム中のある現在の解像度のあるピクセルだとします.次のレンダリングパス(より細かい解像度)では、\({\mathbf p}\)の以前に計算された\(AO_{combined}\)値はアップサンプリングされ、\({\mathbf p}\)の近くのより高い解像度のピクセルのために\(AO_{far}\)として扱われます(詳細はセクション4.5を参照)。なお、\(AO_{near}\)の値は、シェーディングされたピクセルのスクリーン空間の小さな近傍でサンプリングすることにより、すべての解像度で独立して計算されます。このプロセスは、最も細かい解像度に達した時点で終了し、その時点で\(AO_{combined}\)がシェーディングされたピクセルの最終的なAO値となります。

4.2 Downsampling

ダウンサンプリング処理は、最も細かい解像度のG-Bufferから始まり、レンダリングパスごとに、より粗い解像度のG-Bufferを生成していきます。各パスでは、すべてのピクセルが、前のより細かい解像度の4つの対応するサブピクセルの視空間座標と法線を組み合わせます。解像度の合計数は、AOをどの程度「グローバル」にするかによって決まり、AOの影響半径という実数で指定されることが多いです。実際には、4つまたは5つの解像度を使用することで、かなり遠くまで届くAOの実現と、粗いバッファの解像度不足によるアーティファクトの回避のバランスが取れることがわかっています。それ以上の解像度では、AOが粗くなるほど低周波で低コントラストになってしまうため、あまりメリットはありません。
 高解像度の値を結合する最も一般的な方法は、平均化することです。私たちは、より安定した方法を用いることにしました。つまり、平均値の代わりに中央値を保持するのです。4つのサブピクセルを視空間の深度値に応じてソートし、深度値が中央にある2つのピクセルを選び、その視空間座標の平均を取ります。中央値は平均値よりも安定していることはよく知られています。つまり、平均的には、数字の集合の中央値は、数字自体が変動しても平均値よりも変動が少ないということです。そのため、中央値を用いることで、本手法はより良い時間的コヒーレンスを得ることができます。しかし、中央値のみを用いると、視線方向の相対的な距離が保持されないという大きな欠点があることがわかりました。結果として、細かい解像度では遠くにある点が、粗い解像度では近くなるのです。その結果、オクルーダーがAOの影響範囲外のレシーバーに影を落とすことがあるというアーティファクトが発生します。このような状況を避けるために、中央値の代わりに、4つのサブピクセルの視空間座標のうちの1つを保持します。ただし、4つのサブピクセルの視空間座標間の最大距離が十分に大きい場合(あるプリセット値\(d_{threshold}\)よりも大きい場合)に限ります。対応する4つのz値をソートし、2番目に小さい絶対z値を持つサブピクセルを選びます。このダウンサンプリング方式がすべてのケースで使用されない理由は、中央値を維持するほど安定しておらず、アニメーションやカメラの動きの際に激しい揺らぎやちらつきのアーティファクトが発生するからです。
 ピクセルの法線は、視空間座標と同様に、ダウンサマップされます。頂点法線を補間すると、疎なテッセレーションのシーンモデルでは自己閉塞のアーティファクトが発生するからです。ダウンサンプリングのアルゴリズムは表2にまとめられており、ここでは点\({\mathbf p}_i\)の視空間の深度値を\({{\mathbf p}^z}_i\)で表しています。

※表は、[Hoang 2012]より引用

4.3 Occluder Sampling

各解像度でシェーディングされたピクセル\(p\)の\(AO_{near}\)を計算するために、\(p\)の周りの小さなスクリーン空間の近傍をサンプリングします。サンプリングカーネルサイズは以下のように決定されます。まず、市空間におけるAOの影響半径\(d_{max}\)を設定します。これは、オクルーダーがオクルージョンを全く起こさない陰影点までの距離を表します。次に、この距離を最も細かい解像度\(Res_1\)でスクリーン空間に投影し、各ピクセル\(p\)のカーネル半径\(r_1(p)\)(ピクセル数換算)を求めます。次の粗い解像度での\(p\)の最大カーネル半径は\(r_2(p) = r_1(p)/2)\)となり、その次は\(r_3(p) = r_1(p) /4\)というようになります。なお, perspective fore-shorteningにより,カメラに近い画素ほど画面内のカーネルサイズが大きくなるため,カーネルサイズは各画素の深度に依存します。解像度が高いほど半球が小さくなるため、解像度\(Res_i\)におけるカーネル半径として\(r_i(p)\)を直接使用することはありません。代わりに、どの解像度においても半径を\(r_{max}\)ピクセルに制限します。カーネルサイズに上限を設けるもう一つの理由は、\(p\)がカメラに近づくと(シーンがズームインすると)、\(r_i(p)\)の値が非常に大きくなる可能性があるからです。このような状況では、カーネルをある固定サイズに制限しないと、パフォーマンスが大幅に低下します。我々の実装で使用している\(r_{max}\)の典型的な値は5で,これは11×11ピクセルのカーネルに相当します.つまり,解像度\(Res_i\)の各シェーディングピクセル\(p\)に対して,サンプリングカーネル\(R_i(p)\)は以下の式で計算されます。

\begin{eqnarray}
r_0(p) &=& \frac{sd_{max}}{2 z \tan(\alpha /2)} \\
r_i(p) &=& r_0(p) / 2^i \tag{5} \\
R_i(p) &=& min(r_{max}, r_i(p))
\end{eqnarray}

ここで,\(s\)は最も細かい解像度でのビューポートの寸法(正方形のビューポートがあると仮定),\(\alpha\)はカメラの視野角,\(z\)はピクセル\(p\)の視空間の深度値である。
\(11 \times 11\)ピクセルのカーネルのすべてのピクセルをサンプリングするのではなく、1ピクセルごとにサンプリングすることで、フラグメントあたりのテクセル・フェッチの数を121から36に減らすことができました(図6)。このサンプリングパターンはインターリーブサンプリング[11]に似ていますが,ランダム性はなく,\(3 \times 3\)ピクセルの近傍でAO値を合成する後続のブラーパスを利用することができます.カーネル半径が大きく、よりグローバルなAOが必要な場合、1ピクセルごとのサンプリングでは時間がかかることがあります。そのような場合には,サンプル数を固定し,ポアソンディスクのような変動の少ないランダムなサンプリングパターンを使用することができます.実際、最も細かい解像度のピクセルでは、16点のポアソンディスクを用いてサンプリングを行っています。この解像度では、カーネルサイズが小さいため、最終的なブラーパスは必要ありません。言い換えれば,特定の解像度の一部のピクセルについて,対応するカーネル半径がその解像度のピクセルの幅よりも小さい場合,サンプルを取る必要はありません。

※図は、[Hoang 2012]より引用

4.4 Computing Ambient Occlusion

特定の解像度の各ピクセル\(p\)に対して、\(N\)個のサンプルを集めた後の次のステップは、それらを使って\(AO_{near}\)を計算することです。ここでは次の式を用います。

\begin{eqnarray}
AO_{near} ({\mathbf p}) = \frac{1}{N} \sum_{i=1}^N \rho({\mathbf p}, d_i) \overline{{\mathbf n} \cdot \widehat{{\mathbf q}_i – {\mathbf p}}} \tag{6}
\end{eqnarray}

ここで、\(d_i\)はi番目のオクルーダー(\({\mathbf q}_i\))と\({\mathbf p}\)の間の視空間の距離、\(\theta_i\)は\({\mathbf p}\)の法線と\({\mathbf p}\)と\({\mathbf q}_i\)を結ぶベクトルの間の角度です。

\(\rho({\mathbf p}, d_i)\)は、オクルーダーの寄与を\({\mathbf p}\)から遠くなるにつれて滑らかに減衰させるフォールオフ関数です。フォールオフ関数\(\rho({\mathbf p}, d_i)\)は、距離\(d_i\)が0からある一定の\(d_{max}\)まで増加するにつれて、1から0まで滑らかに減少しなければなりません。\(\rho\)の計算には次のような簡単な式を使います。

\begin{eqnarray}
\rho({\mathbf p}, d_i) = 1 – min \left( 1, \left( \frac{d_i}{d_{max}} \right)^2 \right) \tag{7}
\end{eqnarray}

この二次フォールオフ関数を選択したのは、各オクルーダーが非常に小さな球体と考えることができ、その球体が受ける立体角は、\({\mathbf p}\)からの距離の二乗に反比例して変化するからです。
 \({\mathbf p}\)上の半球の接線方向に一様に対応していれば、式6は式3のモンテカルロ近似に近いものとなります。しかし,実際にはこのようなことはほとんどないので,我々のAOの結果は,レイトレースAOなどに比べて偏ったものになってしまいます。しかし,我々の式で計算されたAOは分散が小さいため,例えばCrytek社[21]やBlizzard社[6]の式と比較して,ノイズのない結果を得るために必要なサンプル数は少なくて済みます(図7参照)。主な理由は、これらの手法では、サンプルポイントの分布は、方向(\(\theta_i\))と距離(\(d_i\))の両方を考慮しており、3次元空間でのサンプリングが行われるからです。一方、我々の手法では、サンプル点は2次元空間(スクリーン空間)にしか分布しておらず、サンプルから陰影のある点までの距離は、サンプル自体の一部であると考えられます。最近の他のSSAO法でも、ノイズを避けるために、この次元縮小のアイデアを利用しています[2, 16, 36]。これらの方法と比較して,我々の式はより安価に計算することができます。重要なことは、陰影のある点の半球の下にあるような非ブロッキングなサンプルを無視しないことです。なぜなら、棄却されたサンプリングが高分散の結果を与えることはよく知られているからです[8]。最後に,表3は,サンプリングと計算のAOステップをまとめたものです。

※図は、[Hoang 2012]より引用

※表は、[Hoang 2012]より引用

4.5 Combining Occlusion Values

\(AO_{near}\)を計算した後は、\(AO_{far}\)と組み合わせる必要があります。\(AO_{far}\)は、以前の粗い解像度からサンプリングされていないAOです。\(AO_{far}\)を計算するために、バイラテラルアップサンプリングアルゴリズムを使用して、大きな深度と法線の不連続性の間のぼかしを避けることができます。アップサンプリングでは、現在の解像度のピクセル\(p\)に最も近い4つの低解像度のピクセルのAO値をブレンドします(図9参照)。

※図は、[Hoang 2012]より引用

バイラテラル・アップサンプリング・アルゴリズムで使用される重みは、バイリニア、深度、法線の差の積です。具体的には、ピクセル\(p\)(深度\(z\)、法線\({\mathbf n}\))に関して、低解像度ピクセル\(p_i\)(深度\(z_i\)、法線\({\mathbf n}_i\))の法線の重みと深度の重みは、それぞれ次のようになります。

\begin{eqnarray}
w_{i,n} = \left( \frac{ {\mathbf n} \cdot {\mathbf n}_i + 1 }{2} \right)^{t_n} \tag{8}
\end{eqnarray}

そして,

\begin{eqnarray}
w_{i, z} = \left( \frac{1}{ 1 + |z_i – z|} \right)^{t_z} \tag{9}
\end{eqnarray}

指数\(t_n\)と\(t_z\)は「許容範囲」として解釈され、シーンの大きさに依存します。シーンが小さい場合、近くのピクセルは近くの視空間の「点」に対応するため、大きな指数値を使用することで、大きな深度差を許容する必要があります。目的は、AO値のスムーズな補間とシャープなディテールの維持のバランスをとることです。この論文では、\(t_n=8\)と\(t_z=16\)をすべての実例シーンに使用しています。図8は、バイラテラルアップサンプリングが他のアップサンプリング手法よりも優れていることを明確に示しています。

※図は、[Hoang 2012]より引用

 アップサンプリング後は、「遠方」のAO値\(AO_{far}\)となります。これを “近く “のAO値\(AO_{near}\)と組み合わせる必要があります。最大AO値と解像度間の平均AO値の両方が必要なので、\(AO_{far}\)と\(AO_{near}\)を異なる方法で組み合わせる必要があります。ここまでは\(AO_{near}\),\(AO_{far}\),\(AO_{combined}\)をそれぞれを1つの値として捉えていました。実際には、\(AO_{near}\)は2つの値のタプルであり、\(AO_{far}\)と\(AO_{combined}\)はそれぞれ3つの値のタプルです。\(AO_{near}\)の\(j\)番目の要素を意味するために\({AO}^{[j]}_{near}\)を使うことにしましょう。\(AO^{[1]}_{near}\)は式7を用いて計算された値、\(AO^{[2]}_{near}\)は同じ式から得られたサンプル数\(N\)であると定義します。\(AO_{combined}\)については、その要素は以下の方法で計算されます。

\begin{eqnarray}
AO^{[1]}_{combined} &=& max(AO^{[1]}_{near} / AO^{[2]}_{near}, AO^{[1]}_far) \\
AO^{[2]}_{combined} &=& AO^{[1]}_{near} + AO^{[2]}_{far} \tag{10} \\
AO^{[3]}_{combined} &=& AO^{[2]}_{near} + AO^{[3]}_{far}
\end{eqnarray}

\(AO_{far}\)については、\(AO_{combined}\)を要素ごとにアップサンプリングしたものです。\(AO_{far}\)の最初の要素は現在の最大AO値を記録し、2番目の要素はすべてのAO値の正規化されていない合計値を格納し、最後の要素はこれまでに処理されたすべての解像度のサンプルの合計数を記録します。前者を後者で割って1つの正規化されたAO値を格納するのではなく、正規化されていない合計値とサンプル数の合計値を別々に格納する必要があります。その理由は、ある特定の解像度ではサンプルが存在しない可能性があるため、正規化された値だけを保持していたのでは、最も細かい解像度に到達するまでに正しい平均AO値を回復することができないからです。最も細かい解像度では、最大値と平均値の両方を以下の式で合成します。

\begin{eqnarray}
AO_{max} &=& max(AO^{[1]}_{near} / AO^{[2]}_{near}, AO^{[1]}_{far} ) \\
AO_{average} &=& (AO^{[2]}_{far} + AO^{[1]}_{near} ) / (AO^{[3]}_{far} + AO^{[2]}_{near} ) \tag{11} \\
AO_{final} &=& 1 – (1 – AO_{max})(1 – AO_{average})
\end{eqnarray}

そして、シェーディングされたピクセルの「アクセシビリティ」の値として\(1 – AO_{final}\)を出力するだけです。この値は、ピクセルのシェーディングに直接使用することもできますし(本稿で紹介しているほとんどの例で行われています)、Phongのような従来のシェーディング手法を用いて計算されたピクセルの環境光や拡散光の強度を調整するために使用することもできます。
 一般的に、複数の解像度のAO値を合成する際に最大値演算子を使用すると、内側のオクルーダーが多重にカウントされるのを防ぐことができ、また、ある解像度で見逃したオクルーダーを他の解像度で拾うことができます。一方、他の多くのSSAO方式では、AOの影響半径が大きくなると、最終的なAO値がより不正確になってしまいます。これは、ビジビリティチェックを行わない場合、遠くのサンプルが近くのサンプルによるオクルージョンを誤って希釈してしまうことが多いためです。解像度を超えて最大のオクルージョン値を保持することで、この弊害をある程度軽減することができます。しかし、\(AO_{max}\)だけでは十分ではありません。シェーディングされたポイントは、複数の解像度のオクルーダーに遮られることが多いため、最終的なAO値は\(AO_{max}\)よりも大きくなることが多いのです。この効果を考慮して、平均的なAO値を使って、\(0 \leq AO_{max} \leq AO_{final} \leq 1\)となるように最大値を調整します(式11)。図10は、複数の解像度のオクルージョン値を合成する過程を示しています。バイラテラル・アップサンプリングにより、粗い解像度での影の漏れがほとんどなくなっていることがわかります。

※図は、[Hoang 2012]より引用

 各レンダリングパスでAOの最大値を保持しているため、最終的な出力は「きれい」には見えないかもしれません。これは、隣接するピクセルの最大AO値が、異なる解像度で計算されたものである可能性があるからです。この問題は、アップサンプリングの直前にローパスフィルターを追加することで解決できます。このブラーは、インターリーブパターンを用いたサンプリングで計算されたAO値を適切に「結合」するためにも必要です。これにより、粗い解像度で疎なサンプリングを行うと同時に、最終的な結果を滑らかにすることができます。バイラテラル・フィルタリング[26]は,バイラテラル・アップサンプリング・アルゴリズムと似ていますが,バイリニア・ウェイトをガウス・ウェイトに置き換えたものです.他の違いは,同じ解像度で行われること(クロスレゾリューションではなく)と,わずかに大きなカーネル(\(2 \times 2\)ピクセルではなく\(3 \times 3\)ピクセル)を使用することです.バイラテラル・ブラーリングとアップサンプリングのステップは、表4にまとめられています。

※表は、[Hoang 2012]より引用

4.6 Temporal Filtering

低解像度のG-Bufferを使用すると、連続したフレーム間のコンテンツの一貫性が損なわれるという固有の制限があります。カメラが動くと、高解像度のピクセルが異なる低解像度のピクセルに「スナップ」され、低解像度のG-Bufferが急激に変化することがあります。その結果、アニメーションやカメラの動きの中で、ゆらゆらと揺らめくようなアーチファクトが発生します。ダウンサンプリングアルゴリズムの働きにより、これらの効果は主にシーンオブジェクトのエッジで発生します。ほとんどのシーンでは、ちらつきはあまり目立ちません。しかし、最終的なレンダリングパスを使用して、残っている時間的なアーティファクトをすべて除去することができます。MSSAOの時間的コヒーレンスを向上させるために、我々は[22, 30]で行われているのと同様に、テンポラル理プロジェクションと呼ばれる技術を採用しています。現在のフレームの各ピクセルに対して,次のような2組のビューおよびプロジェクション・マトリクスを用いて,前のフレームのスクリーン空間に再投影します。

\begin{eqnarray}
{\mathbf p} = {\mathbf V}^{-1}_{curr} {\mathbf P}^{-1}_{curr} {\mathbf t}_{curr} \\
{\mathbf t}_{prev} = {\mathbf P}_{prev} {\mathbf V}_{prev} {\mathbf p} \tag{12}
\end{eqnarray}

\({\mathbf t}_{prev}\) と \({\mathbf t}_{curr}\) は,現在のフレームと前のフレームの両方で,同じ視空間の「点」\({\mathbf p}\) のスクリーン空間の座標です。\({\mathbf P}\)と\({\mathbf V}\)はそれに応じたプロジェクション・マトリクスとビュー・マトリクスです。この式は、ジオメトリが変化しない静的なシーンにのみ適用されます。動的なシーンでは,オプティカルフロー\({\mathbf p}\)をフレームバッファに保存し,それを使って,視点(\({\mathbf V}_{prev}\))と投影(\({\mathbf P}_{prev}\))の変換を適用する前に,\({\mathbf p}\)の正しい過去フレームの位置を求めることができる[18].1つの問題は,点pが他のジオメトリによって視界からオクルージョンされている場合や,最後のフレームのビュー・フラスタムの外側にある場合に生じる.オクルージョンの有無を確認するために,\({\mathbf t}_{prev}\) を使って古いフレームバッファをサンプリングし,そのスクリーン空間の位置における最後のフレームの線形深度値(\(z_prev\))を得る.\(z_{prev}\)と\({\mathbf p}^z\)が十分に近い場合,つまり

\begin{eqnarray}
| 1 – \frac{z_{prev}}{ {\mathbf p}^z } \lt \epsilon \tag{13}
\end{eqnarray}

とすると、最後のフレームで\({\mathbf p}\)がカメラに映っていることになります。この場合,\({\mathbf t}_{prev}\) を使って最後のフレームの AO バッファをサンプリングし,現在のピクセルの古い AO 値 \(AO_{prev}\) を求めます. 式 11 を使って計算した AO 値を AO とすると,線形補間を使って \(AO_{prev}\) と組み合わせ,現在のフレームの最終的な AO 値 \(AO_{curr}\) を次のように求めます。

\begin{eqnarray}
AO_{curr} = k AO_{prev} + (1 – k) AO \tag{14}
\end{eqnarray}

\(k\)は0~1の間であらかじめ設定された重みです。\(k\)が大きいほどAOは安定しますが、実際にはカメラが動いたときにモーションブラー効果が出ることが多いです。適切なkの値は、時間的なエイリアシングを除去すると同時に、モーションブラーを最小限に抑えることができます。当社の実装では、通常、\(k=0.5\)を使用しています。テンポラルフィルタリングアルゴリズムは、表5の擬似コードで説明されています。

※表は、[Hoang 2012]より引用

5 Evaluations and Comparisons

我々の手法(MSSAO)とBlizzard社のSSAO[6],NVIDIA社のHBAO[2],Volumetric AO(VAO)[36]を,性能と画質の両面で比較しました。これらの手法が選ばれたのは,既存の SSAO 法の中でも,Blizzard 社の SSAO は最も高速であり,HBAO は最も見栄えのする画像を生成するからです。VAOはこの2つの中間に位置しています。また,Blenderで作成されたレイトレース画像も公開されているので,こちらも参考にしてください。テストは,異なるグラフィックカードを搭載した2台のマシン(1台はNVIDIA GeForece 460M GTX)で行いました。すべてのプログラムは,最終的に\(512 \times 512\)ピクセルの解像度でレンダリングするように設定されています。3つのテストシーンを使用しました。シベニク大聖堂, 会議室, スポンザのアトリウムです。これらのシーンは、グローバルイルミネーションのアルゴリズムを評価するための標準的なベンチマークシーンです。これらのシーンには,シャープエッジ,穴,柱,細い椅子の脚,小さな階段など,SSAO手法では通常困難なジオメトリが含まれています。AOの最大影響半径(\(d_{max}\))は,すべてのシーン,すべての手法で2単位に設定されています。3つのシーンにおいて、我々の手法は4つの解像度を使用し、スクリーン空間の最大カーネル半径(\(r_{max}\))はすべての解像度で5に設定されています。HBAO方式のコントラストとフォールオフのパラメータは、グランドトゥルースの結果と最もよく一致するように慎重に調整されています。HBAO法では,16の画面空間方向と,方向ごとに8つのレイ・マーチング・ステップを使用します。Blizzard社のSSAOとVolumetric AOは、それぞれ1ピクセルあたり32サンプルを使用しています。

5.1 Qualitative Evaluations

図11は、4つのSSAO手法と、Blenderで作成したグランドトゥルースリファレンスの画質を比較したものです(電子版の画像を拡大すると、より詳細な情報が得られます)。結果は、私たちの手法が、レイトレースされた画像に近い、よりクリーンでシャープな画像を生成することを示しています。すべてのシーンにおいて、本手法はAOのより自然な減衰を実現しています。また,微細な解像度ではブラーパスを使用しないため,シャープなエッジなどの高周波数の幾何学的ディテールが維持されています。一方,Blizzard社の結果はノイズが多く,NVIDIA社の結果はぼやけていて,過大なインクルージョン・アーチファクトに悩まされています(例えば,会議室のシーンで椅子と地面の間にできる接触の影を見てみましょう).Volumetric AOによる結果は、ノイズがないものの、多くのディテールが失われているため、大きく偏った結果となっています。MSSAOを除くすべての手法では、幾何学的なディテールが十分に保持されていません(Sibenik Cathedralシーンの階段、Conference Roomシーンの椅子のディテールなど)。

※図は、[Hoang 2012]より引用

 また,表6では,知覚的な画像比較指標であるSSIM(Structural SIMilarity)指標[37]を用いた結果との数値比較も行っています。SSIMによると,本手法による結果は,グランドトゥルース画像と最も高い類似性を示している.

※表は、[Hoang 2012]より引用

 図12は、既存の多くのSSAO方式に対するMSSAOのもう一つの利点を示しています。SSAO方式には可視性(またはレイジオメトリの交差)をチェックする仕組みがないため、AOの影響半径を大きくすると、遠くのオクルーダーによるオクルージョン(の欠如)が、近くのオクルーダーによるオクルージョンに誤って影響することがよくあります。最も一般的な結果は、AOの影響半径を大きくすると、小さい影響半径で撮影できる小さくてシャープなディテールがなくなってしまうことです。私たちの方法では、複数のスケールでシャドウの周波数をキャプチャして保持し、それらを組み合わせるための優れた方法を採用しているため、この問題は発生しません。

※図は、[Hoang 2012]より引用

 最後に,図13は,異なる種類のシーンモデルに対する本手法の追加結果を示しており,本手法が様々な種類の物体を含む幅広いシーンに適していることを示しています。すべての画像は,NVIDIA GeForce 8600M GTを用いて,\(512 \times 512\)ピクセルで40fps近くでレンダリングされています。また,画像を拡大して詳細を見ることもできます。

※図は、[Hoang 2012]より引用

5.2 Performance Evaluations

表7では、GeForce 460M GTXグラフィックスカードで\(512 \times 512\)ピクセルのConference Roomシーンをレンダリングしたときのアルゴリズムの各ステップの詳細なタイミングを示しています。なお、Geometryパスは使用する手法に関係なく、より全体像を把握するために記載しています(例:表から、シーンが約123fpsでレンダリングされていることが推測できます)。予想通り、サンプリング(およびAOの計算)のステップが、他のステップと比べて圧倒的に時間がかかっています。4.3節で述べたように、AOの影響半径が大きい場合は、16点ポアソンディスクパターンのようなより高速なサンプリングスキームを使用することができます。今回のケースでは、\(d_{max}\)が2(\(r_{max}\)が5)しかないため、インターリーブパターンを使用することで、性能を犠牲にすることなく最高の品質を得ることができました。

※表は、[Hoang 2012]より引用

 表8は,3つのテストシーンの各フレームをレンダリングする際の,3つのSSAO方式の実行時間を示している.ここでは,AO アルゴリズムの実際の実行時間を測定しているため,ジオメトリパスはすべての手法で無視しています。

※表は、[Hoang 2012]より引用

 ポリゴン数はSSAOアルゴリズムの複雑さに影響しないため、レンダリング速度の違いは主にフラグメントごとの計算量とテクスチャフェッチ量に起因します。HBAOが最も遅いのは、レイマーチングが画面内の多方向でピクセルごとに行われるためです。8600M GTでは、カーネルサイズが小さく、サンプリングパターンがキャッシュに適しているため、我々の手法はより良いパフォーマンスを得ることができます。最新のグラフィックカードでは、Blizzard社のSSAOとVolumetric AOが、ごくわずかな差で我々の手法を上回っています。これは、GPUのテクスチャキャッシュが大きいため、ランダムなサンプリングパターンや大きなカーネルサイズでも、それほどパフォーマンスが落ちないためだと思われます。しかし、解像度を\(1024 \times 1024\)ピクセルに上げると、GeForce 460M GTXではMSSAOが再び他の手法を上回るようになります(表9参照)。その理由として考えられるのは、我々の手法が他の手法のように、最も細かい解像度で高価な最終ブラーパスを実行しないことである。

 一般的に、我々の手法はBlizzardのSSAOとVolumetric AOの高い性能を達成しており、既存のSSAO手法よりも優れた画質を実現していると考えています。

5.3 Limitations

我々の手法の限界の一つは、既存のSSAO手法に比べてメモリを多く消費することです。解像度の各レベル(最高級を除く)では、位置、法線、AO、フィルタリングされたAOの4つのバッファを使用します。最も細かい解像度では、位置、法線、AOの3つのバッファを使用します。一般的なSSAO方式では、最も細かい解像度では3つのバッファ(ポジション、法線、AO)のみを使用します。さらに、AOバッファには1つではなく3つのチャンネルが含まれており、適切な値を解像度の高いレベルに「伝搬」させることができます。\(1024 \times 1024\)から\(128 \times 128\)までの4つの解像度を使用すると仮定すると、我々の手法は一般的なSSAO手法の1.85倍のメモリを消費することになります。この論文ではAOのみを評価していますので、一般的なグラフィックカードであれば問題ありません。しかし,このメモリ消費量の増加の影響は,他のライティングやシェーディングパスとメモリを共有するコンピュータゲームなど,より現実的な状況でこの手法を使用した場合に顕著になる可能性があります。なお、メモリの帯域幅がボトルネックになった場合は、バッファの再利用など、さらなる最適化が可能であることをお伝えしておきます。
 また、バイラテラル・アップサンプリングを使用することで、この影響が大幅に軽減されたにもかかわらず、粗い解像度を使用したことによるエラーが発生しました。この問題は、奥行きの不連続性が多い画面空間の領域で発生します。このような領域では、わずかにオーバーオクルードになることが多いです。また、椅子の脚や木の葉のような細い形状のものでは、テンポラルコヒーレンスが悪くなることがあります。しかし、これらのアーティファクトが発生するのは稀であり、あまり目立たないことに留意する必要があります。

6 Discussion and Conclusion

スクリーン・スペース法であるため、我々の手法はSSAOの基本的な制限を受け継いでいます。我々の方法で計算されたAOは、真のAOの粗い近似値に過ぎません。オクルーダーがビューポイントから隠されている場所、つまりビューフラスタムの外側や奥行きの第1層の後ろにある場所では正しくありません。隠れたオクルーダーを「推測」するために様々なヒューリスティックスを使用するなどの回避策がありますが、問題を完全に解決することはできず、多くの場合、他のアーティファクトが発生します。デプスピーリング、複数のカメラ、視野の拡大などは、すでに提案されている解決策の一つです。これらの拡張機能は、ある程度精度を向上させることができますが、SSAOのコアアイデアを根本的に変えるものではありません。十分なデータが与えられていない(例えば、G-Bufferのみ)限り、アーティファクトは避けられません。
 SSAOに固有の制限や、メモリ使用量の多さ、解像度不足によるエラーなどの細かい欠点はあるものの、我々の手法は多くの点で最先端のSSAO法よりも改善されている。現在のSSAO方式は、テクスチャのフェッチ数とコヒーレンシーによって制限されており、局所的なオクルージョンに限られています。複数の解像度からそれぞれ小さなカーネルでサンプリングすることで、GPUのテクスチャキャッシングを活用し、アルゴリズムを大幅に高速化することができます。これにより、パフォーマンスをあまり犠牲にすることなく、より多くのサンプリングが可能になり、よりグローバルなAO効果を捉えることができます。堅牢なAO定式と合わせて、少ないサンプル数でもノイズやブラーのない結果を得ることができました。バイラテラル・フィルタリングとアップサンプリングを粗い解像度で繰り返し使用し、オクルージョン値をスムーズにブレンドして補うことで、複数の解像度を使用することによるアーティファクトを回避しています。また、最大演算子を使って複数の解像度のオクルージョン値を合成することで、SSAOでは視認性チェックが行われていないことによる弊害を解消しています。その結果、本手法は他の手法では不可能な複数のAOスケールを捉えることができます。最後に、我々のマルチ・レゾリューション・アプローチは一般的なものであり、本稿で説明したもの以外にも、他の低レベルのAO公式の上に適用することができます。

Acknowledgements
和訳省略。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください