超雑訳 High-Quality Screen-Space Ambient Occlusion using Temporal Coherence

こんまっする。Pocolです。
今日は,
[Mattausch 2010] Oliver Mattausch, Daniel Scherzer, Michael Wimmer, “High-Quality Screen-Space Ambient Occlusion using Temporal Coherence”, Computer Graphics forum, Vol.29, Issue 8, 2010.
を読んでいくことにします。
いつもながら、誤字・誤訳があるかと思いますので,ご指摘頂ける場合は正しい翻訳例と共に指摘して頂けると有難いです。

Abstract

アンビエントオクルージョンは、安価ですが効果的なグローバルイルミネーションの近似です。最近では、シーン形状の離散化としてフレームバッファをサンプリングするスクリーン空間アンビエントオクルージョン(SSAO)手法が、リアルタイムレンダリングに非常に普及しています。我々は、リアルタイムで高品質なアンビエントオクルージョンを生成するために、テンポラルコヒーレンスを利用する新しいアルゴリズムであるテンポラルSSAO(TSSAO)を提案します。従来のSSAOと比較して、本手法は、強力な空間フィルタリングによるノイズとブラーアーティファクトの両方を低減し、きめの細かい幾何学構造を忠実に表現します。我々のアルゴリズムは、過去に計算されたSSAOサンプルをキャッシュして再利用し、以前のフレームからまだ十分な情報が得られていない領域にのみ、より多くのサンプルと空間フィルタリングを適応的に適用します。この方法は静的なシーンでも動的なシーンでもうまく機能します。

1. Introduction

アンビエントオクルージョン(AO)は、サーフェス点に入射するアンビエントライトのうち、周囲のジオメトリによってオクルードされる割合を表します。AOはサーフェス点のアンビエントカラーを変調することでシェーディングに使用されます。物理的な観点からは、アンビエントオクルージョンは空による拡散照明として見ることができます[Lan02]。法線\(n_p\)を持つサーフェイス点\(p\)のアンビエントオクルージョンは[CT81]のように計算されます:

\begin{eqnarray}
{\rm ao}(p, n_p) = \frac{1}{\pi} \int_{\Omega} V (p, \omega) {\rm max}(n_p \cdot \omega, 0) d \omega \tag{1}
\end{eqnarray}

ここで、\(\omega\)は半球上の全方向を表し、\(V\)は(逆)2値視認関数で、障害物によって視認が妨げられた場合は\(V(p, \omega)=1\)、そうでない場合は0となります。視認性の項は通常、あるサンプリング半径内の障害物のみを考慮します。

 アンビエントオクルージョンは、プロダクションレンダリングで多用され、最近ではリアルタイムレンダリングや多くの有名ゲーム[Mit07, FM08]でも使用されています。これは、(サンプリング半径が限られているため)局所的な効果であり、完全なグローバルイルミネーションソリューションに比べて非常に安価ですが、シーンのリアリズムを大幅に向上させることができるからです。スクリーンスペースアンビエントオクルージョン(SSAO)技術は、シーンジオメトリの離散近似としてフレームバッファを使用することにより、シーンの複雑さからシェーディングを切り離します。SSAOの性能は主にフレームあたりのサンプル数に依存するため、所望の性能に到達するためには通常、比較的少ないサンプル数が使用され、その結果生じるノイズは空間深度認識フィルターでブラーされます。しかし、特に大きなサンプリング半径を使用した場合、細かいディテールを持つ複雑な形状をシェーディングするには、少ないサンプル数では不十分な場合があります。最終的な画像は、フィルターカーネルのサイズによって、ノイズが多いかぼやけた感じになります。一般に、安定した結果を得るためには、フィルタパラメータを注意深く調整する必要があります。そうしないと、例えば、小さな深さの不連続面の周りにハローのようなアーティファクトが現れることがあります。

 本論文では、1フレームあたりのサンプル量を最小限に抑えながら、ぼやけやノイズアーチファクトのない高品質なアンビエントオクルージョンを実現するアルゴリズムを紹介します。連続する画像フレーム間のテンポラルコヒーレンスを利用することで、前のフレームから利用可能なAO情報を再利用します。時間的再投影によって、同一のワールドポジションを記述するピクセルを特定します。解の現在の状態は、いわゆるアンビエントオクルージョンバッファにキャッシュされます。各フレームごとに、いくつかの新しいAOサンプルを計算し、それらを前のフレームの蓄積されたサンプルとブレンドします。アンビエントオクルージョンの解は、その後、別のステップで直接拡散照明の結果の画像と合成されます。テンポラルコヒーレンスを用いた場合と用いない場合のSSAOの比較は図1を参照してください。

※図は,[Mattausch 2010]より引用

 近年、リプロジェクション技術は、アンチエイリアシングやシャドウマッピングなど、多くの有用なアプリケーションに使用されています。SSAOは、ピクセル近傍を考慮するため、特にダイナミックなシーンにおいてユニークな課題をもたらす、特に興味深いケースです。まず、SSAOは後処理であるため、リプロジェクションに関する情報はメインのレンダリングパスの間に保存する必要があります。第二に、リプロジェクションされたピクセルの妥当性は、そのピクセル自体だけでなく、その近傍にも依存するため、リプロジェクションされたピクセルに対する新たな妥当性テストが必要となります。第三に、解の収束により、SSAO手法で通常必要とされる空間フィルタリングを減らすか完全に省略することができ、フレームごとに最小限の新しいサンプル数に依存することができます。収束していないピクセル、例えばキャッシュされたサンプルが無効になったピクセルに対しては、既に収束しているサンプルにより多くの重みを与える適応的収束認識フィルタを用いて、近傍のサンプルから値を再構成するために、収束に関する情報を用いることができます。

2. Related Work

2.1. Ambient Occlusion

アンビエント・オクルージョンは、逆サーフェイス露出を測定するシェーディング技法で、Zhukovらによって導入されました[ZIK98]。比較的単純で安価な技法であり、画像の見栄えを大幅に向上させるため、プロダクションレンダリング[Lan02, PG04]などの分野で広く使用されています。

 近年、動的シーンにおけるアンビエントオクルージョンのオンライン計算をリアルタイムアプリケーションで実現可能にする、概念的に異なるアプローチがいくつか提案されています。オブジェクトベースのアプローチの中には、各オブジェクトのオクルージョンパワーを、関心範囲内の他のオブジェクト全てに分配するものがあります[KL05, MMAH07]。これらの方法は重なり合うオクルーダーの処理に問題があります。ソフトシャドウと低周波照明のために、球面調和指数化を用いたブロッカーの可視性をテストする実行可能な方法が、Renらによって提案されました[RWS*06]。Bunnell[Bun05]は動的シーンのための頂点毎のアンビエントオクルージョン法を提案し、これは階層的アプローチを用いて複雑さを解消し、拡散色のにじみを計算するために拡張することができます。

 一方、画像空間法は、フレームバッファを離散的なシーン近似として解釈し、しばしばスクリーン空間アンビエントオクルージョンと呼ばれる[Mit07]。これらは通常、ディファードシェーディング[ST90, Shi05]と組み合わせて使用されます。オリジナルの実装では、オクルージョンされたアンビエントオクルージョンサンプルの深さを比較しました[Mit07]。ShanmugamとArikan [SA07]は2段階の画像空間法を提案し、1段階は低周波の遠方場照明用、もう1段階は高周波の近傍場環境オクルージョン用です。高周波数部分は深度バッファの各ピクセルを球面オクルーダとして扱います。FoxとCompton [FC08]は,深度バッファをサンプリングし,サーフェイス法線とサンプルへのベクトル間の余弦とサンプル距離によって寄与を重み付けする,同様のSSAOシェーディング技法を提案しました。最近、サーフェイスのオクルード部分を計算するために水平マッピングを使う手法が提案されました[BSD08]。Ritschelら[RGS09]は、方向情報とファーストバウンスグローバル照明を含むようにSSAO生成法を拡張しました。彼らのSSAO生成法はMittringのオリジナルの手法に似ているが、深度テストに合格したサンプルを正確に重み付けするために、サンプル点までの角度も考慮しています。Bavoilら[BS09]は、深度バッファ表現における情報の欠落によるSSAOアルゴリズムの問題を軽減することを目的とした、いくつかの一般的な手法を提案しました。彼らはまた、SSAO値範囲の差が小さい領域では半分の解像度のSSAOを計算し、差が大きい領域でのみ高解像度のSSAOに切り替える多重解像度アプローチも提案しました。我々の手法も適応サンプリングを利用しますが、この場合、テンポラルコヒーレンスにより既に十分に収束している領域でのサンプリングにかける計算量を削減するという異なる目標を持ちます。

 キャラクタアニメーションのためのアンビエントオクルージョンは、いくつかの主要なポーズについてアンビエントオクルージョンを事前に計算し、それらのポーズ間を補間することで実現できますが[KA06, KA07]、かなりのストレージコストがかかります。

 図2は、シーンの奥行き知覚に対するSSAOの視覚的影響を示しています。

※図は,[Mattausch 2010]より引用

2.2. Reprojection Techniques

GPUレンダリングにテンポラルコヒーレンスを使用するために、Scherzerら[SJW07](テンポラルリプロジェクションと呼ばれる)とNehabら[NSL*07]によって独自に提案された逆再投影と呼ばれる技術を採用しています。これは、現フレームの画像ピクセルを、同じワールド空間位置を表す前フレームのピクセルと関連付けることで、現フレームのために前フレームのピクセルコンテンツを再利用することを可能にします。この技術は、シャドウマッピング、アンチエイリアシング、あるいはモーションブラー[Ros07]のような様々なアプリケーションに有用であることが示されました。

 Smedbergら[SW09]は、GDCの講演でSSAOの質を高めるためにリプロジェクションを使うことを独自に提案しました。しかし、その方法の正確な詳細は不明であり、不正なキャッシュ値の適切な無効化については特に言及していません。

3. Our algorithm

3.1. SSAO generation

SSAO法は、元のAO積分をスクリーン空間で近似することを目的としています。異なる仮定とトレードオフを持つSSAOのいくつかのバージョンが説明されています[BSD08, Mit07, RGS09]。我々は、2つの異なるアンビエントオクルージョン手法のみを用いて我々の手法を実証していますが、それはより多くのもので動作し、スクリーン空間サンプリングカーネルに依存する他のいくつかのシェーディング手法に使用することができます。このようなシェーディング法は、サンプル\(s_i\)の数列に依存する寄与\(C\)の平均として書くことができると仮定します:

\begin{eqnarray}
AO_n(p) = \frac{1}{n} \sum_{i=1}^n C(p, s_i) \tag{2}
\end{eqnarray}

 SSAOの典型的な貢献関数の例は以下の通りです。

\begin{eqnarray}
C(p, s_i) = V(p, s_i) {\rm cos}(s_i – p, n_p) D(|s_i – p|).
\end{eqnarray}

\(V(p, s_i)\)は、\(s_i\)が\(p\)から見えていれば0、そうでなければ1を与える二値可視関数です。可視性は、例えば、\(s_i\)がzバッファで可視かどうかをチェックすることによって決定されます。我々は、サンプル\(s_i\)が事前に計算され、テクスチャ(例えば、半球に一様に分布する3次元点の集合)に格納されており、\(C\)の評価のために\(p\)の接線空間に変換されると仮定します[Mit07]。\(D\)は、\(p\)から\(s_i\)までの距離の1から0までの単調減少関数です。最も単純な場合、\(D\)はステップ関数ですが、例えばexp()関数で与えられるような滑らかなフォールオフがより良い結果をもたらします。収束を速くするために、サンプル生成にハルトン数列を使用します。ハルトン数列は低ディスクレパンシーとして知られています[WH00]。

3.2. Reprojection

リプロジェクション技術は、ピンポン方式で2つのレンダーターゲットを使用します。1つは現在のフレーム用で、もう1つは以前のフレームからキャッシュされた情報を表します(リアルタイムリプロジェクションキャッシュ[NSL*07]またはヒストリーバッファ[SJW07]と呼ばれます)。私たちのコンテキストでは、アンビエントオクルージョンの値をキャッシュするので、このバッファをアンビエントオクルージョンバッファと呼びます。
 静的ジオメトリの場合,リプロジェクションはフレーム全体に対して一定であり,ピクセルシェーダ内,または(ディファードシェー ディングの場合)別のシェーディングパスで,現在および前 のビュー(\(V\))行列と投影(\(P\))行列(ここで \(t\) はピクセルの後視点位置を表す) を使用して実行することができます[SJW07]:

\begin{eqnarray}
{t_{old}}_{x’,y’,z’} = P_{old} V_{old} V_{new}^{-1} P_{new}^{-1} {t_{new}}_{x, y, z} \tag{3}
\end{eqnarray}

 我々のディファードシェーディングパイプラインでは、現在のフレームと前のフレームのeye linear depth値を保存し、ワールド空間位置\(p\)を再構築するためにそれらを使用します。\(p_{old}\)は逆ビュー投影行列を\(t\)に適用することで上式から得られることに注意してください。動的なシーンでは、再投影は移動オブジェクトの変換に依存するため、この単純な式は機能しません。したがって,Nehab ら [NSL*07]は,完全な頂点変換を2回適用し,1回は現在の変換パラメータ(モデリング行列,スキニングなど)を使用し,もう1回は前のフレームのパラメータを使用して,頂点シェーダで再投影を行うことを提案しています。

 しかし、ディファードシェーディングパイプラインでは、\(p_{old}\)は別のシェーディングパスでアクセスされる必要があり、そこでは変換パラメータに関する情報はすでに失われています。したがって,我々は3Dオプティカルフロー\(p_{old} – p_{new}\)を(法線,マテリアルなどと並んで)別のシェーディングパラメータとしてフレームバッファに保存します。回転するハッピーブッダモデルによって引き起こされるオプティカルフローの描写については図3を参照してください。

※図は,[Mattausch 2010]より引用

 リプロジェクションの際、無効となったピクセルをチェックする必要があります(例えば、ディスオクルージョンによる)。これについてはセクション3.4で説明し、SSAOがピクセルの有効性を保つためにいくつかの追加制約を課すことも示します。

3.3 Temporal refinement

我々のアルゴリズムの主なアイデアは、リプロジェクションを使用することにより、アンビエントオクルージョン(式2)の計算を複数のフレームに分散させることです。可能な限り、画像ピクセルに対応する前のフレームから解を取り出し、現在のフレームで計算された新しいサンプルの寄与でそれを改良します。フレーム\(t+1\)では、\(k\)個の新しいサンプルから新しい寄与\(C_{t+1}\)を計算します:

\begin{eqnarray}
C_{t+1} (p) = \frac{1}{k} \sum_{i=n_t(p)+1}^{n_t(p)+k} C(p, s_i) \tag{4}
\end{eqnarray}

上記を計算し、フレーム\(t\)から以前に計算された解と組み合わせます:

\begin{eqnarray}
AO_{t+1} (p)) &=& \frac{ n_t(p)AO_t(p_{old}) + kC_{t+1}(p) }{ n_t(p) + l} \tag{5} \\
n_{t+1}(p) &=& {\rm min}(n_t(p) + k, n_{max}) \tag{6}
\end{eqnarray}

 ここで、\(n_t\)は、解にすでに蓄積されたサンプルの数を追跡します。もしキャッシュされたAO値が無効であれば、\(n_t\)を0に設定することで前の解を破棄することができます。そうではない場合、解は数フレーム後に安定した状態に達します。

 理論的には、このアプローチは任意の数のサンプルを使うことができます。リプロジェクションは厳密ではなく、再構成のためにバイリニアフィルタリングを必要とするため、リプロジェクションのステップごとに誤差が発生し、時間とともに累積していきます。この誤差はぼやけの増加として顕著に現れます[YNS*09]。さらに,新たに計算されたサンプルの影響はゼロに近くなり,以前に計算されたサンプルが置き換えられることはありません.そのため、\(n_t\)をユーザー定義の閾値\(n_{max}\)にクランプし、古い寄与の影響が時間と共に減衰するようにしています。したがって、\(conv(p)={\rm min}(n_t(p),n_{max})/n_{max}\)は収束状態の指標となります。\(n_{max} \rightarrow \infty\)の場合、式6は正しい解に収束することに注意してください。- 以前のアプローチ[SJW07, NSL*07]で用いられた指数平滑化とは異なり、テンポラルフィルタカーネルとして機能します。

 我々の経験では、[500…1500]の範囲の閾値\(n_{max}\)は、一時的なちらつきのようなアンダーサンプリングアーチファクトを避けながら、主要なぼかしアーチファクトを避けるために十分に速い更新頻度を提供します。図4(左)は、新しいサンプルが導入された瞬間から、その影響がどのように変化するかを示しており、(右)は、閾値\(n_{max}\)に達した後、以前に計算されたAO解の影響が指数関数的に減衰する様子を示しています。

※図は,[Mattausch 2010]より引用

3.3.1. Implementation notes

値\(n_t\)は、アンビエントオクルージョンバッファの別のチャンネルに格納されます。また、事前計算されたサンプルのセットに開始インデックスを格納します。これは、事前計算された不一致の少ないハルトンシーケンスから、現在のフレームの新しいサンプリング位置を取得するために使用されます。したがって、現在のインデックス位置は、SSAO値のように逆再投影によって次のフレームに伝搬されます。インデックス位置がハードウェアによって補間され、シーケンスに偏りが生じるのを防ぐためには、常に最も近いピクセル中心からインデックス値をフェッチすることが重要です。

3.4 Detecting and dealing with invalid pixels

フラグメントをリプロジェクションする際には、キャッシュされたAO値が有効かどうかをチェックする必要があります。有効でない場合、\(n_t\)は0にリセットされ、新しいAO解が計算されます。このような無効なピクセルを検出するために、次の2つの条件のいずれかが発生したかどうかをチェックします:1) 現在のフラグメントの破棄[SJW07, NSL*07]、2) フラグメントのサンプル近傍の変化。以下では、この2つの条件について説明します。

3.4.1. Detecting disocclusions

これまでのアプローチ[SJW07, NSL*07]では、リプロジェクションされたフラグメント位置の深度\(d_{new}\)とキャッシュされた値の深度\(d_{old}\)を比較することで、排他性をチェックしていました:

\begin{eqnarray}
| d_{new} – d_{old} | \lt \epsilon
\end{eqnarray}

 しかし、スクリーン空間の深度値も、視線方向の深度値も、信頼できる結果をもたらさないことがわかりました。スクリーン空間深度値は近平面付近の小さな領域でしか正確でなく、eye-linear 深度の比較は遠平面付近の領域で過敏であり、近平面付近では十分な感度が得られません。解決策は、視線方向の深度を保存することですが、次のチェックによって、絶対的な深度差ではなく相対的な深度差を考慮することです。

\begin{eqnarray}
\left| 1 – \frac{d_{new}}{d_{old}} \right| \lt \epsilon \tag{7}
\end{eqnarray}

 深度範囲の広い大きなシーンでも良好な結果が得られます。前のフレームでフレームバッファの外にあったピクセルも無効としてマークされることに注意してください。

3.4.2. Detecting changes in the neighborhood

非排他性のテストは、純粋に静的なシーン、あるいは純粋なアンチエイリアシングにおいて有効であるための十分な条件です。しかし、SSAOのような動的なシーンで近隣のピクセルにアクセスするシェーディングカーネルでは、たとえ非排他的でなくても、現在のピクセルのシェーディングが近くの動くオブジェクトの影響を受ける可能性があることを考慮しなければなりません。例えば、箱が床から持ち上げられるシーンを考えてみましょう。接触影にあるピクセルのSSAO値は、ピクセル自体の除外がなくても、箱を取り囲むように変化します。

 チェックする近傍領域のサイズは、SSAOに使用されるサンプリングカーネルのサイズに相当します。ピクセルの完全な近傍をチェックすることは法外なコストがかかるため、サンプリングを使用します。実際、私たちはすでにサンプルのセット、つまりAO生成に使われたサンプルのセットを持っていることがわかります。つまり、AOのサンプリングカーネルを2つの目的、つまり現在の寄与度\(C_t(p)\)を計算するためと、妥当性をテストするために効果的に使用します。ピクセル\(p\)は、サンプルとピクセルの相対位置が\(\epsilon\)以上変化していない場合、サンプル\(s_i\)に対して有効であるとみなされます(図5参照):

\begin{eqnarray}
| |s_i – p | – | {s_i}_{old} – p_{old}| | \lt \epsilon \tag{8}
\end{eqnarray}

 ここで、再投影位置\({s_i}_{old}\)は、\(s_i\)に対して格納されたオフセットベクトルから計算されます(最初のレンダリングパスは、SSAOシェーディングパスが後でアクセスできるように、フレームバッファ内のすべてのピクセルのオフセットベクトルを格納することを思い出してください)。したがって,シャドウ項を実際に修正するのはこれらのサンプルだけであるため,近傍テストには\(p\)の接平面の前にあるこれらのスマプルのみを使用することに注意してください。このテストがピクセル\(p\)に対して評価されたサンプルの1つに対して失敗した場合、\(p\)は無効とマークされ、\(n_t\)は0に設定されます。

※図は,[Mattausch 2010]より引用

 理論的には、サーフェイス法線とサンプルポイントへのベクトルとの間の角度が、あるフレームから次のフレームへ有意に変化したかどうかをチェックすることもでき、ベクトルの長さが十分でない実用的なケースもあり得ます。しかし、この場合、より多くの情報(前のフレームのピクセルの表面法線)を保存する必要があり、我々のすべてのテストでは、条件8をテストするのに十分であることがわかりました。

 \(p_{old}\)をフェッチするときに、コストのかかるテクスチャのルックアップを避けるために、このテストとアンビエントオクルージョンの計算に必要な値は、単一のレンダーターゲットに格納されるべきであることに注意してください。

 動的オブジェクトの場合、前のフレームのピクセル情報の大部分が再利用可能であることが多い。我々のアルゴリズムによって最近無効にされたピクセルの視覚化については図6を参照。例えば、回転動きの場合、シルエット上や、前のフレームではサーフェイスのしわやひだで隠れていたピクセルで無効化が発生する。ディスオクルージョンの量は回転速度に依存し、通常、1フレームあたり数度までは適度に小さい。

※図は,[Mattausch 2010]より引用

3.5. Dealing with undersampled regions

我々のアルゴリズムは、十分に収束したピクセルに対して高品質のAOを保証します。しかし、最近無効化された画面領域では、アンダーサンプリングにより時間的なちらつきが生じる可能性があります。無効化された領域はコヒーレントであることが多く、数フレームにわたる散漫な相関ノイズパターンにつながります。我々は、新しいコンバージェンスを考慮した空間フィルタによってこれを解決します。

3.5.1. Adaptive Convergence-Aware Spatial Filter

SSAO法は通常、不十分なサンプリングレートによって引き起こされるノイズアーティファクトを防ぐために、シェーディング計算の後に空間フィルタリングパスを適用します。我々は空間フィルタリングも適用するが、テンポラルコヒーレンスが十分でない場合に限ります。クロスバイラテラルフィルタ[ED04, BSD08]のバリエーションが一般的に使用され,深度差を考慮することでエッジ上のフィルタリングが回避されます。このフィルタは形式的に分離可能ではありませんが、リアルタイム設定では、評価が実行可能になるように、通常は\(x\)方向と\(y\)方向に別々に適用されます。我々もこのアプローチに従います。

 これまでのアプローチとは対照的に、私たちはノイズを大幅に減らすことができるフィルターの追加情報を持っている:私たちのAO値の収束\(conv(p)\)です。最近除外されたピクセル(例えば薄いシルエット領域)は、他の信頼できないピクセルからではなく、近くの収束したピクセルからより多くの情報を集めることができる。さらに、Laineら[LSK*07]のようにワールド空間距離に直接フィルターカーネルを適用することで、深度差を自動的に考慮し、深度差が大きい場合の不連続性を検出することができます。

\begin{eqnarray}
AO_{filt}(p) = \frac{1}{k(x, p)} \sum_{x \in F} g(|p – x|) conv(x) AO(x) \tag{9}
\end{eqnarray}

ここで、\(x\)はフィルタに対するスクリーン空間サポート\(F\)(例えば、\(9 \times 9\)ピクセル領域)における個々のフィルタサンプル、\(k(x,p)\)は正規化\(\sum_{x \in F}g(|p-x|)conv(x)\)、\(g\)は空間フィルタカーネル(例えば、ガウシアン)です。ピクセルの収束が進むにつれて、縮小係数\(s\)を用いてスクリーン空間フィルターのサポートを滑らかに縮小します:

\begin{eqnarray}
s(p) = \frac{ {\rm max}(c_{adaptive} – conv(p), 0) }{ c_{adaptive} } \tag{10}
\end{eqnarray}

 収束が\(c_{adpative}\)に達したら、空間フィルタリングを完全にオフにします。\(c_{adaptive}\)の設定は知覚的に批判的でないことがわかった。例えば、0.2ではトランジションに気づきません。

3.6. Optimizations

このセクションでは、フレームレートの高速化や画質の向上を可能にするコアアルゴリズムの最適化について説明します。

3.6.1. Smooth invalidation

中程度の速さで動くオブジェクトの場合、アンビエント・オクルージョンは知覚的に1フレーム以上有効です。近傍だけが変化する場合(つまりセクション3.4の無効化の2つ目の条件)、現在のピクセルの完全な無効化は有用な情報の無駄であり、ノイズやちらつきのアーチファクトが発生する可能性があります。したがって、\(n_t\)を0にリセットすることで現在の解を完全に破棄するのではなく、\(n_t\)を低い値に固定します。我々は、多くの場合、完全無効化と全く無効化しないことの間の良いトレードオフである32と64の範囲の\(n_{max}\)値であることが分かりました。この小さな最適化を使うことで、AOは時間の経過とともに滑らかに見えるようになります。したがって、これをスムーズ無効化と呼ぶことにします。我々の実験から、結果として生じるわずかなモーションブラー効果は、時間的なちらつきよりも気が散りにくいと述べることができます。

3.6.2. Adaptive sampling

空間フィルタリングはノイズを減らすことができますが、アンダーサンプリングされた領域でより多くの入力サンプルを提供することがさらに良い。別の言い方をすれば、AOが十分な収束に達すれば、この解を再利用すればよく、以前のように多くのサンプルを使用する必要はありません。我々は、収束に応じて、フレームごとに新しいAOサンプルの数\(k\)を適応します(これらのサンプルは、サンプル数を変更する代わりにカーネルサイズを適応する、前のセクションの空間フィルタリングに使用されるスクリーン空間サンプルとは全く無関係であることに注意してください)。非排他的領域はしばしば空間的にコヒーレントであるため(図6を見ればわかる)、シェーダで必要な動的分岐演算は、今日のグラフィックスハードウェアでは非常に効率的です。

 式5で\(n_t(p)\)をクランプしたのと同じ理由、つまりバイリニアフィルタリングによって生じるぼかしのアーチファクトを避けるために、少なくとも最小量のサンプルを生成する必要があることに注意してください。さらに、近傍領域が変化することによる無効なピクセルを検出するためにも、ある程度のサンプル数が必要です(セクション3.4.2)。最小限の分岐を導入するために、\(conv(p) \lt c_{spatial}\)の場合は\(k_1\)サンプル、それ以外の場合は\(k_2\)サンプルとする単純な2段階方式を選択しました(我々の実装で実際に使用したパラメータのリストは表1を参照)。

3.6.3. Frame buffer borders

SSAO 固有の問題は、フレームバッファの境界からはみ出したサンプルの処理です。最良の方法はないため、clamp-to-edgeを使用することで、境界上に現れた値を再利用することに落ち着きます。深度情報の欠落による画面端のアーチファクトを避けるために、オプションで、最終的に画面に表示するよりもわずかに大きな画像を計算することができます – SSAOカーネルのサイズとニアプレーン[BS09]に依存しますが、画面の両側で約5〜10%程度を拡張すれば十分です。これはSSAOの一般的な問題であり、我々のアルゴリズムによる制限ではないことに注意してください。 これらのボーダーサンプルは伝播されるべきではない不正確な情報を持つため、我々の無効化スキーム(セクション3.4参照)を使用して、前のフレームでフレームバッファの外側にあったサンプルを検出します。

3.6.4. Noise patterns

ほとんどのAOアプローチと同様に、入力ピクセルごとに異なるランダムベクトルによってサンプリングパターンを回転させる。しかし、これは、テクスチャキャッシュのスラッシング[SW09]が原因と思われる、驚くほど大きなパフォーマンスヒットにつながります。したがって、収束がある閾値\(c_{rot}\)に達したら回転をオフにします。

4. Results and implementation

提案されたアルゴリズムをCgシェーディング言語を用いてOpenGLに実装し、異なる特徴を持つ2つのシーン(図7に示す)、シベニク大聖堂とウィーンの都市モデルでテストしました。両シーンとも複数の動的オブジェクトが配置されています。性能実験のために撮影されたウォークスルー・シーケンスを添付のビデオに示します。すべてのテストでは、Intel Core 2プロセッサ2.66 GHZ(1コア使用)とNVIDIA GeFore 280 GTXグラフィックボードを使用しました。レンダーターゲットの解像度は\(1024 \times 768\)または\(800 \times 600\)です。ウィーンのような大規模なシーンで十分な精度を達成するために、32ビットの深度精度を使用しています。アンビエントオクルージョンバッファとSSAOテクスチャの両方が32ビットRGBAレンダーターゲットです。実用的なアプリケーション[FM08]では、SSAOは多くの場合、ハーフ解像度のレンダーターゲットで計算され、空間フィルタを使用して最終画像用にアップサンプリングされます。したがって、この一般的なアクセラレーション方法を使用した場合のアルゴリズムの性能もテストしました。結果画像はすべてフル解像度のレンダーターゲットを使用して計算したことに注意してください。

※図は,[Mattausch 2010]より引用

 我々のアルゴリズムがSSAO生成方法からほとんど独立していることを証明するために、Ritschelら[RGS09]の方法と、FoxとCompton[FC08]によって導入されたアルゴリズムの両方を実装しました。後者のアルゴリズムは、ChanmugamとArikan [SA07]のようなスクリーン空間サンプリングを使用しており、よりアーティスティックなアプローチであり、物理的な動機付けはあまりありません。私たちの意見では、低周波AOをキャプチャするために大きなカーネルを使用する場合、それはより多くの小さな詳細を保持します。サンプリングカーネルがワールド空間で常に同じ大きさをカバーすることを保証するために、我々はこの方法に次の拡張を実装しました:初期カーネル半径に、現在のピクセルの透視投影からの\(w\)座標を乗算します、すなわち、透視投影のフォアショート係数を乗算します。その結果、ズーミングに不変なAO値が得られます。また、この方法は、根本的なテッセレーションを明らかにしやすいので、救済策として、半球のグレーシング角のサンプルをカウントしない(余弦が小さい\(\epsilon\))。また、ピクセル中心から深度バッファとの交点までの長さが最大サンプル半径の2倍以上のサンプルはカウントしません。これは、遠くの切り離されたオブジェクトによる間違ったオクルージョンを防ぐことと、現在のピクセル近辺の正しいオクルージョンを考慮することのトレードオフです。

 TSSAOアルゴリズムには、時間的精密化を制御するために使用されるいくつかのパラメータがあり、推奨値とともに表1に示します。すべての結果において、セクション3.6で議論した最適化を適用しました。TSSAOは収束時にViennaでは8サンプル、Sibenikでは16サンプル、それ以外では32サンプルを使用し、SSAOは常に32サンプルを使用します。

※表は,[Mattausch 2010]より引用

 ViennaとSibenikの2つのウォークスルー・シーケンスでは、添付のビデオで見ることができるように、実世界のアプリケーションで発生する動きの主なケースを考慮することを目指しました。私たちは、剛体の動的オブジェクトと、変形部分を持つアニメーションのキャラクターを含めました。動画はすべて垂直リフレッシュ同期をオンにして撮影し、30 FPSでエンコードしました。ビデオに表示されている収束は、実時間での収束率に完全には対応していないことに注意してください: 30FPS以上に達するシーケンス(ゲームの絶対的な最小値)では、TSSAOメソッドの方が早く収束します。ビデオ圧縮が大きな問題となりました。量子化アーチファクトは、ライブアプリケーションや非圧縮ビデオでは見ることができないビデオに現れ、その結果、後ろに引きずられている接触影による暗い影や、わずかにほつれた影の境界が生じます。これは、高品質のH.264コーデックを使用しても発生しました。

 図8は、並進運動のあるシーンにおける我々の新しい無効化スキームの重要性を示しています。ピクセル近傍をチェックすることによって、移動による誤った接触影を検出することができます(中央の画像)。スムーズな無効化により、アニメーションシーケンスの品質がさらに向上し、移動オブジェクトのシルエットと背景の間の遷移におけるノイズが効果的に低減されます(右画像)。

※図は,[Mattausch 2010]より引用

 図9は、ウィーンのシーンで床面の上を回転するスタンドフォード・ドラゴンを描いています。適応型収束認識フィルターがTSSAO解の品質に与える影響を示しています。フィルターはテンポラルコヒーレンスが低い接触影領域だけをぼかし、他は鮮明なままであることに注意してください。

※図は,[Mattausch 2010]より引用

 
 視覚的な画質の面では、TSSAOはすべてのテストでSSAOより優れていました。TSSAOは少なくとも32サンプルのSSAO解に相当し(32サンプルが棄却に使用されるため)、収束した状態は数百(\(n_{max}\))サンプルまで考慮されます。しかしながら、滑らかな無効化最適化を使用することで、アルゴリズムが、より良い視覚的印象のために正しい解から逸脱することに留意する必要があります。同質のSSAO解法は法外に時間がかかることに注意。図1(FoxとComptonの方法を使用)、図10(FoxとComptonの方法、またはRitschelらの方法のいずれかを使用)、および添付のビデオでわかるように、TSSAOはより細かいディテールを提供し、ノイズアーティファクトが少なく、同時に高速です。TSSAOとSSAOを弱いぼかしフィルターと強いぼかしフィルターで比較します。さらに、TSSAOを、1フレームあたり480サンプルを使用する参照解と比較します。TSSAO法は静止画において参照解に非常に近く、短時間で収束することに注目してください。

※図は,[Mattausch 2010]より引用

 図11は\(1600 \times 1200\)の高解像度でバニーモデルを配置したシベニクの大聖堂です。テンポラルコヒーレンスのないSSAOは非常によく機能しますが、TSSAOアルゴリズムは背景の細かいディテールでも良い品質を提供します。また、TSSAOアルゴリズムはこのような高解像度でより優れた性能を維持します。

※図は,[Mattausch 2010]より引用

 動画は、図6のパラディンのキャラクターのような変形部分を持つオブジェクトが、我々のアルゴリズムでかなりうまく処理できることを示しています。また、このアルゴリズムは高速で動くオブジェクトに対しても十分に機能します。静止したカメラであらゆる種類の動きを撮影したビデオで見ることができます。動的な動きに対しては、参照解法と比較してぼかしの量が増えますが、テンポラルコヒーレンスを用いることで、普通のSSAOと比較して画質が向上します。TSSAOはアニメーションシーケンスにおけるちらつきアーチファクトを効果的に低減することがわかります。時間経過に伴うSSAO解の視覚的洗練は、適応フィルタによりほとんど目立ちません。

 図12は、レイトレースされた参照解との比較を示しています。参照ソリューション(中央)は、256の半球サンプルと線形フォールオフ関数を持つMental Rayアンビエントオクルージョンシェーダを使用しています。TSSAOは、Ritschelらの方法(左)およびFoxとComptonの方法(右)を使用して、フレームごとに8つの新しいサンプルのみを計算します(最初は32)。Ritschel et al.では、Mental rayソリューションと同等の線形フォールオフに対応するサンプルを均等に重み付けし、レイトレースされたソリューションと同じ最大半径を使用していることに注意してください。SSAO解は参照解と若干の違いがあり(例えば、欄干の複雑な形状)、FoxとComptonの方法は、基本的な幾何学的構造を強調しすぎています。それ以外の点では、両解法の視覚的な質はほとんど参照解法と同等です。

※図は,[Mattausch 2010]より引用

 表2は、我々の方法(TSSAO)と、テンポラルコヒーレンスを使用しないSSAO、およびパフォーマンス・ベースラインの方法(SSAOを使用しないディファード・シェーディング)を比較した、ウォークスルーの平均タイムを示しています。すべての結果において、セクション3.6で議論した最適化を適用した。SSAOが常に32サンプルを使用するのに対して、TSSAOは収束時にそれぞれ8サンプル、ウィーンおよびシベニクでは32サンプルを使用する。SSAO/TSSAOアルゴリズムのコスト(ベースラインに対するフレーム時間の差)は、シーンの複雑さに依存せず、フレームバッファ内のピクセル数によって変化する。TSSAOは、フルおよびハーフ解像度のアンビエントオクルージョンバッファで同じサンプル数を使用する場合、SSAOよりも常に高速です。TSSAOは、収束に達した後、空間フィルタリングを適用したり、ノイズパターンでサンプリングフィルタカーネルを回転させたりしません。

※表は,[Mattausch 2010]より引用

 図13は、両ウォークスルーにおけるフレーム時間の変化を示している。オンラインオクルージョンカリング[MBW08]は大規模なViennaモデルに対して有効であり、したがって、ベースラインのディファードシェーディングのフレームレートは、このような複雑なモデルに対して非常に高いことに注意してください。TSSAOのフレームレートの変動は、この方法が最近除外された領域に対して適応的に多くのサンプルを生成するという事実に起因します。ダイナミックオブジェクトのクローズアップの場合、TSSAOのフレームタイムはSSAOのフレームタイムとほとんど変わりません。ウォークスルーの静的な部分では、TSSAOの方がかなり速いです。

※図は,[Mattausch 2010]より引用

4.1. Discussion and limitations

変形する物体の場合、各フレームの変形部分に完全な無効化を使用すると、テンポラルコヒーレンスが常に壊れてしまいます。したがって、従来のSSAOと比較した視覚的な改善のほとんどは、滑らかな無効化の最適化からもたらされます(図14のクローズアップされたクロークを参照)。滑らかな無効化を適切な値に設定することが、ここでは非常に重要です。この最適化をあまりに緩く使用すると、移動するオブジェクトに続く顕著な暗軌跡のようなアーティファクトが発生する可能性があります。

※図は,[Mattausch 2010]より引用

 物体があまりにも速く動いたり変形したりすると、テンポラルコヒーレンスを利用するには限界があります。また、(SSAOカーネルサイズに対して)薄く、素早く動く構造の場合、無効化アルゴリズムが見逃してしまい、無効化に失敗する可能性があります。Sibenikウォークスルーのスケルトンキャラクターの足は、難しいケースの例です。同様に、カーネルサイズが非常に大きいと、サンプリングが棄却イベントを見逃す可能性があるため、無効化で問題が発生することもあります。

 このアルゴリズムの主なターゲットは、リアルタイムの視覚化とゲームである。適応的なサンプル生成は、従来のSSAOよりも常に良好なフレーム時間を保証するものではなく、ゲームにおいて邪魔になる可能性のあるフレーム時間の変動が確実に存在する。しかし、ゲームでは通常、煩わしいフレームレートの低下を避けるために、大規模なプレイテストが行われることを念頭に置く必要がある。ほとんどのフレームでSSAOが速くなれば、他のエフェクトに使える時間が増えるので便利です。

また、適応的なサンプル生成はアルゴリズムの最適化機能に過ぎないことに注意してください – これがなければ、従来のSSAOのスピードに逆戻りすることになりますが、それでも画質の向上はあります。さらに、このアルゴリズムの主な目的は、標準的なケース、つまり、適度な動きのあるケースを高速化することです。このような場合、うまく機能することが示されていますが、極端な場合には破綻する可能性があり、これはおそらくテンポラルコヒーレンスに依存するほとんどの手法に当てはまります。

5. Conclusion and future work

我々は、リプロジェクションとテンポラルコヒーレンスを利用し、動的なシーンに対して高品質なアンビエントオクルージョンを生成するスクリーン空間アンビエントオクルージョンアルゴリズムを発表しました。我々のアルゴリズムは、利用可能であれば前のフレームから利用可能なサンプル情報を再利用する一方で、適応的にサンプルを生成し、まだ十分なサンプルが蓄積されていない領域のみに空間フィルタリングを適用します。影響を受けるピクセル近傍のみにアクセスするシェーディングアルゴリズムのための、効率的な新しいピクセル妥当性テストを示しました。我々の方法を用いることで、このようなシェーディング手法は、アニメーションオブジェクトのある動的なシーンにおいても、時間的再投影の恩恵を受けることができます。我々はアンビエントオクルージョンを示す結果に限定したが、我々のアルゴリズムはクックブックレシピとして見ることができます。

 将来的には、スムーズな無効化を改善し、より理論的な基礎の上に置きたい。要するに、滑らかな無効化は、アンビエントオクルージョンバッファに保存された以前のAOを完全に破棄するという二者択一の決定を回避します。しかし、無効化の二項対立的な定義ではなく、むしろ連続的な定義を用いるべきです。特に、我々は0と1の間の信頼値を推定し、以前のSSAO解の有効性の信頼情報を重み付けします。この信頼度は、式8から得られる検証サンプルの距離の長さの差によって制御することができ、これは変化の大きさの指標となります。

 将来的には、サンプリングに基づく他の有用な技法と、それらをテンポラルコヒーレンスによってどのように強化できるかを探求し、異なるクラスの問題に適用可能な無効化に関する一般的なルールを導き出したいと考えています。また、高速ズームと組み合わせたバイリニアフィルタリングによって発生するぼやけの問題についても、さらに調査を進める予定です。これらのアーティファクトは主にビュー方向にほぼ垂直な面で発生するため、シャドウマッピングで知られる投影誤差とどのように関連しているかを調査したい。

References