Skip to content
Go back

拙訳「A Comparative Study of Screen-Space Ambient Occlusion Methods」

· Updated:

訳注:拙訳は抜粋や意訳を多く含みます。原著を必ず確認してください。

[Aalund and Bærentzen 2013Aalund, F. P. and Bærentzen, J. A. 2013. A Comparative Study of Screen-Space Ambient Occlusion Methods. https://frederikaalund.com/a-comparative-study-of-screen-space-ambient-occlusion-methods/.]

web

1. はじめに(Introduction)#

1.1. 動機(Motivation)#

シャドウは物体同士の空間的な関係を見た目に判断するための手がかりとなる。シャドウがないと、平坦に見えたり浮遊しているように見えたりする。

シャドウの計算は大縮尺large-scaleシャドウと小縮尺small-scaleシャドウに分けられる。アンビエントオクルージョンは後者に含まれる。

1.2. 大まかな歴史(Brief History)#

アンビエントオクルージョンは当初レイトレーシングで使われた。その後、リアルタイムのインタラクティブアプリケーションでの前処理工程[Akenine-Moller et al. 2008Akenine-Moller, T., Haines, E. and Hoffman, N. 2008. Real-time rendering.]で使われたが、これは静的なワールドに限定されていた。2007年以降、いわゆる スクリーンスペースscreen-space のアプローチを用いて、仮想世界に期待される他の効果と一緒に、オンザフライかつリアルタイムに実現可能であることが証明されてきた[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.; Shanmugam and Arikan 2007Shanmugam, P. and Arikan, O. 2007. Hardware accelerated ambient occlusion techniques on GPUs. Proceedings of the 2007 symposium on interactive 3D graphics and games 73–80. 10.1145/1230100.1230113. http://www.okanarikan.com/assets/Papers/SSAO/paper.pdf.; Nguyen 2007Nguyen, H. 2007. GPU Gems 3. https://developer.nvidia.com/gpugems/gpugems3/contributors.]。これはアニメーションや物理を含む動的な環境で上手く動作する。さらに、遮蔽データの事前計算が必要ないため、アーティストやメモリの予算を軽減する。

スクリーンスペースアンビエントオクルージョン(SSAO)はいくつかの欠点も持ち合わせている。レイトレーシングは一般に優れた画像を生成し、他の大局照明効果とうまく統合する。SSAOも時折近しい所まで行くが、いくつかはcolor-bleeding効果を含んでいたりもする[Ritschel et al. 2009Ritschel, T., Grosch, T. and Seidel, H.-P. 2009. Approximating dynamic global illumination in image space. Proceedings of the 2009 symposium on interactive 3D graphics and games 75–82. 10.1145/1507149.1507161. https://phaazon.net/media/uploads/SSDO.pdf.]。依然として、高速化には情報を破棄する必要があるが、それ故に品質に悩まされるだろう。一般則として、品質を良くしようとすればそれだけパフォーマンスコストがかかるが、アルゴリズム的な発展は大いに役立つ可能性がある。

1.3. プロジェクト(The Project)#

1.4. 報告の概要(Overview of the Report)#

2. 背景(Background)#

2.1. レンダリング理論(Rendering Theory)#

光と表面の間の相互作用は複合的であり、故に、リアルタイム用途ではかなり近似される。それを行う歴史的に有名な方法は光をディフューズdiffuseスペキュラspecularアンビエントambient の構成要素に分けることである[Cook and Torrance 1982Cook, R. L. and Torrance, K. E. 1982. A reflectance model for computer graphics. ACM Trans. Graph. 1, 1, 7–24. 10.1145/357290.357293. https://graphics.pixar.com/library/ReflectanceModel/paper.pdf.]。この議論では、前者2つ(ディフューズとスペキュラ)を直接光direct light、すなわち、光源から直接来る光とすれば事足りる。アンビエント光はすべての間接光indirect light、すなわち、直接光でないものすべてである。例えば、任意の回数の反射または屈折を経た光がある。

与えられた表面点surface pointと方向に対して物理的に正しい間接光を計算することは計算的に難しい。各表面点p\boldsymbol{p}と方向ω\omegaの対は以下の関連する量を持つ。

  • LoL_o、与えられた方向ω\omegaに対するp\boldsymbol{p}における出射するoutgoing放射輝度。
  • LiL_i、与えられた方向ω\omegaに対するp\boldsymbol{p}における入射するincomming放射輝度。
  • ffp\boldsymbol{p}におけるω\omegaに沿って出射する放射輝度と入射方向ωi\omega_iに沿って入射する放射照度incident irradianceの比。双方向反射率分布関数bidirectional reflectance distribution function (BRDF)として知られている。

3つすべての量の間の相互作用はずっと複雑である[Kajiya 1986Kajiya, J. T. 1986. The rendering equation. SIGGRAPH Comput. Graph. 20, 4, 143–150. 10.1145/15886.15902. https://www.cs.cmu.edu/afs/cs/academic/class/15462-s13/www/lec_slides/86kajiyaRenderingEquation.pdf.]

Lo=fLi(nω)dω(2.1)L_o = \int f L_i \cdot (n \cdot \omega) d\omega \tag{2.1}

2.2. アンビエントオクルージョン(Ambient Occlusion)#

アンビエント光はすべての入射方向に対して集約された間接光である。これは、アンビエント光を決定するためには式2.1の積分を計算しなければならない、ということである。これはアンビエント光を更なる仮定なしに扱いづらい量にしている。そこで、状況を改善するため、以下の相当数の仮定a fair slew of assumptionsが作られる[Cook and Torrance 1982Cook, R. L. and Torrance, K. E. 1982. A reflectance model for computer graphics. ACM Trans. Graph. 1, 1, 7–24. 10.1145/357290.357293. https://graphics.pixar.com/library/ReflectanceModel/paper.pdf.]

  • アンビエント光は一様に入射する。すなわち、入射する放射輝度はすべての方向で同じになる(LiL_iは定数)。
  • アンビエント光は見ている角度に依存しない。すなわち、反射した光の比はすべての方向で同じになる(ffは定数であり、その表面は ランバートLambertian である)。

合わせて、これらの近似はアンビエント光のより単純なモデルをもたらす。

Loa=fLia(nω)dω(2.2)L_{oa} = f L_{ia} \int (n \cdot \omega) d\omega \tag{2.2}

式2.2の積分はp\boldsymbol{p}における半球の可視性であり、まずは以下のように書き表すとする。

A(p)=1π(nω)dω(2.3)A(\boldsymbol{p}) = \frac{1}{\pi} \int (n \cdot \omega) d\omega \tag{2.3}

ここで、p\boldsymbol{p}は照らされている点であり、nnp\boldsymbol{p}における表面の法線であり、ω\omegaは積分の方向である。この積分はp\boldsymbol{p}nnによって定義される半球の 遮蔽されていないunoccluded 部分に対してである。内積nωn \cdot \omegaはこの文脈においてその意味が変化し、浅い角度でのオクルーダーが大きな範囲に投影されるという事実を考慮するために可視性を調整する。

AAはアンビエント光のオクルージョンを計算に入れる。古典的な単純化では積分計算を回避するためにA=1A=1を用いる。モダンな実装では式2.3によるオリジナルの定義を用いて、入射するアンビエント光LiaL_{ia}p\boldsymbol{p}から可視である方向に制限する。

2.2.1. 半球の定義(Defining the Hemisphere)#

関数V(p,ω)V(\boldsymbol{p}, \omega)を方向ω\omegaにおけるp\boldsymbol{p}からのレイの 可視性visibility とすると、VVは以下のように定義される。

V(p,ω)={0方向ωにおけるpからのレイがなにかに当たる場合1その他V(\boldsymbol{p}, \omega) = \begin{cases} 0 & \text{方向} \omega \text{における} \boldsymbol{p} \text{からのレイがなにかに当たる場合} \\ 1 & \text{その他} \end{cases}

すると、半球全体で計算するためにAAを拡張できる。その新しい積分は以下となる。

AO(p)=1πΩV(p,ω)(nω)dω(2.4)AO(\boldsymbol{p}) = \frac{1}{\pi} \int_{\Omega} V(\boldsymbol{p}, \omega) (n \cdot \omega) d\omega \tag{2.4}

ここで、Ω\Omegap\boldsymbol{p}ω\omegaによって定義される半球である。アンビエントオクルージョン(AO)[Landis 2002Landis, H. 2002. Production-Ready Global Illumination. Siggraph Course Notes 16.]という用語は基本の式の長らく後に新造された。その積分は離散的な方向数を調べることでレイトレーサーでのモンテカルロ積分によって決定することができる[Landis 2002Landis, H. 2002. Production-Ready Global Illumination. Siggraph Course Notes 16.]

AO1Nn=1NV(nωn)AO \approx \frac{1}{N} \sum_{n=1}^{N} V \cdot (n \cdot \omega_n)

ここで、NN調査用probeのレイの数であり、ωn\omega_nは各nnに対して一様に無作為に選ばれた方向である。

2.3. Ambient Obscurance#

開口部が小さくて抜け出せるレイが極わずかである、すなわち、ほとんどの部分でVVが0となる場合、式2.4で与えられるようなAOの式でレンダリングすると、ほぼ識別不可能なほどに暗くなる。これは望ましくなく、我々は見た目に満足な結果をもたらすAOのさらに実践的な定義を必要とする。

Ambient Obscurance[Zhukov et al. 1998Zhukov, S., Iones, A. and Kronin, G. 1998. An ambient light illumination model. Rendering techniques '98 45–55.]は可視性の関数VVを距離ddに基づく減衰(フォールオフ)関数ρ(d)\rho(d)で置き換える。関数ρ\rhoは経験的に選ばれるが、以下のような一般的な特性を持つ必要がある。

  • ρ\rhoddの単調増加関数である。
  • d>dmaxd > d_{max}に対するρ(d)=1\rho(d) =1となるような上限dmaxd_{max}が存在する。

ρ\rhoによるアイデアは遠くのオクルーダーが受ける影響を少なく、または、一切なくすることにある。これは結果の画像を一般に明るくし、見た目に満足な結果を生み出す。ρ\rhoは物理ベースではなく、審美眼に基づいて完全に選択されることに注意すべきである。Ambient Obscuranceの定義はすでに見てきたものと似ている。

AO(p)=1πΩρ(pωp)(nω)dω(2.5)AO^{* }(\boldsymbol{p}) = \frac{1}{\pi} \int_{\Omega} \rho(|\boldsymbol{p}\omega - \boldsymbol{p}|)(n \cdot \omega) d\omega \tag{2.5}

ここで、pωp|\boldsymbol{p}\omega-\boldsymbol{p}|p\boldsymbol{p}から調査用レイにヒットした最初の表面への距離である。

VVは本当に単にdmax=d_{max}=\inftyでのρ\rhoの特殊なケースであることに注意する。

2.4.1. 反転(Inversion)#

AOAO関数はアンビエントの 遮蔽occlusion を示そうとしているにも関わらず、可視性によって増加する(AO=1AO=1で完全に可視であることを示す)。そのため、著者によっては以下のように定義を反転する方を好む場合がある。

AO=1AO = 1 - \int \dots

これは多かれ少なかれ好みの問題であり、このレポートでは、各手法で与えられる定義を用いる。

2.5. リアルタイムレンダリング(Real-Time Rendering)#

2.5.1. 変換、空間、座標(Transformations, Spaces, and Coordinates)#

2.5.2. ディファードレンダリング(Deferred Rendering)#

2.5.3. シェーダ(Shaders)#

3. 解析(Analysis)#

3.1. レイトレーシングとラスタライゼーション(Ray-Tracing and Rasterization)#

歴史的に、AOはレイトレーサーのために用意された機能であったが、レイトレーサーはGPUが活用するラスタライゼーションアプローチと互換性がないため、大きな商業基盤においてインタラクティブなリアルタイムレンダリングではまだ用いられていない。

3.2. 以前の研究(Previous Work)#

3.2.1. ディスクプロキシ(Disk Proxies)#

このアルゴリズムはディスク要素に分解されたシーンのすべてのポリゴンメッシュを入力として必要とする。そのアイデアはシーン中のジオメトリを遮蔽するディスク数を確認することにある[Pharr and Fernando 2005Pharr, M. and Fernando, R. 2005. GPU Gems 2. https://developer.nvidia.com/gpugems/gpugems2/copyright.]。これが初めて提案されたAO実装に対するレイトレーシングの代替案であり、後に、結果を平滑化することで改良された[Nguyen 2007Nguyen, H. 2007. GPU Gems 3. https://developer.nvidia.com/gpugems/gpugems3/contributors.]

3.2.2. アンシャープマスキング(Unsharp Masking)#

[Luft et al. 2006Luft, T., Colditz, C. and Deussen, O. 2006. Image enhancement by unsharp masking the depth buffer. ACM Trans. Graph. 25, 3, 1206–1213. 10.1145/1141911.1142016. https://www.uni-konstanz.de/mmsp/pubsys/publishedFiles/LuCoDe06.pdf.]

3.2.3. 最初のスクリーンスペースアプローチ(First Screen-Space Approaches)#

シーン近似としての深度バッファ(Depth Buffer as a Scene Approximation)#

深度バッファは、元々の目的を越えて、シーンの粗い表現として働くことも可能である[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.; Shanmugam and Arikan 2007Shanmugam, P. and Arikan, O. 2007. Hardware accelerated ambient occlusion techniques on GPUs. Proceedings of the 2007 symposium on interactive 3D graphics and games 73–80. 10.1145/1230100.1230113. http://www.okanarikan.com/assets/Papers/SSAO/paper.pdf.]

拡張されたパイプライン(Extended Pipeline)#

AOは入力に深度バッファのみを用いるため、同じく入力に深度バッファを用いるシェーディングパスでAOを計算させることができるが、低解像度で計算したりパフォーマンス特徴の割り出しがし易かったりするので、専用のAOパスで計算したほうが良い。

スクリーンスペース積分(Screen-Space Integration)#

シーンを深度バッファで表現することで、式2.5の積分を解くいくつかの興味深いアプローチが可能となる。

方法のひとつは標本点sample point近くでの遮蔽と可視の比でAOAOを近似することである[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.; Dachsbacher and Kautz 2009Dachsbacher, C. and Kautz, J. 2009. Real-time global illumination for dynamic scenes. ACM SIGGRAPH 2009 courses. 10.1145/1667239.1667258.]

AO1Nn=1NV(sn)(3.1)AO \approx \frac{1}{N} \sum_{n=1}^{N} V'(s_n) \tag{3.1}

ここで、NNは標本点の数であり、sns_nnn番目の標本点であり、VV'sns_nが可視であれば11、そうでなければ00である。sns_nの標本点は半径rrを持つp\boldsymbol{p}周辺の球に拡散される。

現在の点p\boldsymbol{p}は始めに再構築されなければならず、計算コストが低いスクリーン座標でp\boldsymbol{p}を再構築するアプローチが選ばれる。pxy\boldsymbol{p}_{xy}は現在のピクセル座標であり、pz\boldsymbol{p}_zは深度バッファから直接読み出すことができる。p\boldsymbol{p}が定まれば、周囲の球に標本点を選ぶことは自明となるはずである。しかし、手法の著者が記す通り、これはアーティファクトの源となり得る。

標本の位置s\boldsymbol{s}p\boldsymbol{p}と同様にスクリーン座標上にあり、関連するsz\boldsymbol{s}_zの座標を持つ。s\boldsymbol{s}の上にある表面の深度はsd=depth(sxy)\boldsymbol{s}_d = \text{depth}(\boldsymbol{s}_{xy})として深度バッファから読み出すことができる。後は単純な比較を行うだけで可視性が定まる。

V(s)={1sd>sz0その他V'(\boldsymbol{s}) = \begin{cases} 1 & \boldsymbol{s}_d > \boldsymbol{s}_z \\ 0 & \text{その他} \end{cases}

この手法(式3.1)は元の式(式2.5)にあるような半球ではなく、p\boldsymbol{p}の周囲の球の中でサンプルすることにも注意する。すなわち、平坦な表面に対してでさえ、サンプルの半分が遮蔽されることを期待しなければならない。

理論上よろしくても、標本分布の問題が残っている。標本位置がp\boldsymbol{p}ごとに固定される場合、結果のAOはバンディングアーティファクトを持つだろうから、代わりに、標本位置を一様に無作為に分布させる。これはバンディングアーティファクトを除去するが、高周波ノイズを引き起こす。著者らはAO計算上でジオメトリ対応geometry-awareのブラーを適用することでノイズを回避する。残念ながら、GPUの特徴により、ブラーはそれ自身のシェーダパスで行われなければならない。もうひとつの障害はシェーダプログラムが乱数をを生成できないことであるため、代わりに、事前に計算した乱数のバッファをAOシェーダに供給する。

バリエーション(Variations)#

以下に概略される差異を持つ前述の手法のバリエーション[Filion and McNaughton 2008Filion, D. and McNaughton, R. 2008. Effects & techniques. ACM SIGGRAPH 2008 games 133–164. 10.1145/1404435.1404441.]が存在する。

標本位置はワールド座標で探し、深度比較のためにスクリーン座標へ投影される。著者らは、単純な比較関数VV'を前に使っていたが、減衰関数ρ\rhoも再導入している。これは高いsd\boldsymbol{s}_dの値を持つ前面のオブジェクトに起因する過剰な遮蔽over-occlusionを軽減する。前述の通り、標本の半分はデフォルトで遮蔽されていると扱われるので、代替アプローチではまず球の中の標本を探すが、表面の法線nnに従って半球にこれらを折り返すflip back。事実上、このアプローチでは半分のサンプル数だけで済む。

球プロキシ(Spherical Proxies)#

[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.]と同時期に、スクリーンスペースで動作し、多くの特性を共有する手法が独立して開発されたが、これもまた球プロキシで表現される表面近くの遮蔽を平均することでAOAOを近似する[Shanmugam and Arikan 2007Shanmugam, P. and Arikan, O. 2007. Hardware accelerated ambient occlusion techniques on GPUs. Proceedings of the 2007 symposium on interactive 3D graphics and games 73–80. 10.1145/1230100.1230113. http://www.okanarikan.com/assets/Papers/SSAO/paper.pdf.]。この手法は、[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.]と同様に、スクリーン座標でp\boldsymbol{p}を再構築し、同様にスクリーン座標でp\boldsymbol{p}の周りのディスク内のNN個のサンプルsns_nを分布させる。似ているのはこれくらいでThis is where similarities stop、各サンプルsssz=sds_z = s_dで表面に投影され、続いて、ワールド座標に変換される。球は各ワールド空間ssに位置し、近くの表面を近似することを意図している。球の半径はsds_dの関数である。AOAOは球がppで半球を遮蔽するサンプル数の合計として近似される。これは単に[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.]に見られるVV'のような比較関数ではないことに注意する。

上述の手法は非常に込み入っており、他の提案と比較してAOAOの近似に全く異なるアプローチを取る。

3.2.4. 地平線ベースのアプローチ(A Horizon-Based Approach)#

AOAOを近似するもうひとつの方法はpp周りの半球上で見える地平線の角度hhを定めることによるものである[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.; Bavoil and Sainz 2008Bavoil, L. and Sainz, M. 2008. Screen Space Ambient Occlusion. https://developer.download.nvidia.com/SDK/10.5/direct3d/Source/ScreenSpaceAO/doc/ScreenSpaceAO.pdf.; Dachsbacher and Kautz 2009Dachsbacher, C. and Kautz, J. 2009. Real-time global illumination for dynamic scenes. ACM SIGGRAPH 2009 courses. 10.1145/1667239.1667258.]。高さフィールドが連続的であるという仮定の下では、この角度を越えてトレースされるレイは遮蔽されるはずである。さらに、視線ベクトルの周りに与えられた角度θ\thetaに対する地平線の角度h(θ)h(\theta)が求まると仮定する。我々は視線ベクトル周りのすべてのθ\thetaに対するhhの平均を求めたい。この手法の著者らはそれを行うために以下の式を提示する。

AO=112πθ=ππAOhorizon(θ)dθ(3.2)AO = 1 - \frac{1}{2\pi} \int_{\theta=-\pi}^{\pi} AO_{horizon}(\theta)d\theta \tag{3.2}

ここで、積分は視線ベクトルの周りのすべての角度θ\theta全体で行われる。AOAOの定義が反転していることに注意する。

すると、与えられたθ\thetaに対しいてAOhorizon(θ)AO_{horizon}(\theta)を計算する方法が必要になる。式2.5ではρ\rhoによって重み付けされた接線から法線までのすべての方向でレイをトレースする必要があるが、h(θ)h(\theta)以下のすべてのレイは遮蔽されることがすでに分かっており、逆に、h(θ)h(\theta)以上のすべてのレイは可視であるため、いずれの場合もトレースする必要はない。代わりに、接線の角度t(θ)t(\theta)h(θ)h(\theta)の間の積分としてAOの寄与を求めることができる。t(θ)t(\theta)nnθ\thetaから容易に導くことができる。著者らは以下としている。

AOhorizon=α=t(θ)h(θ)ρ(d)cos(α)dα(3.3)AO_{horizon} = \int_{\alpha=t(\theta)}^{h(\theta)} \rho(d) \cdot \cos(\alpha) d\alpha \tag{3.3}

ここで、cos(α)\cos(\alpha)式2.5からの内積である。ρ(d)\rho(d)は少々込み入っており、後に説明したい。著者らは式3.3を以下へとさらに計算する。

AOhorizon=ρ(d)(sin(h(θ))sin(t(θ)))AO_{horizon} = \rho(d) \left( \sin(h(\theta)) - \sin(t(\theta)) \right)

すると、式3.3式3.2に挿入できる。計算用途では、この積分を解くのにモンテカルロ積分を用いることも有用である。

AO=11Nn=1Nρ(dn)(sin(h(θn))sin(t(θn)))(3.4)AO = 1 - \frac{1}{N} \sum_{n=1}^{N} \rho(d_n) (\sin(h(\theta_n)) - \sin(t(\theta_n))) \tag{3.4}

ここで、NNはサンプル数である。

スクリーンスペースの計算(Screen-Space Evaluation)#

式3.4を実装する鍵は、同じ著者らによって提案されるように、h(θ)h(\theta)を求めるためにスクリーンスペースで深度バッファをレイマーチすることである。レイはスクリーン座標でppから方向θ\thetaに生成され、深度バッファを横断し、別個の間隔でサンプルする。各サンプルはsz=depth(sxy)s_z = \text{depth}(s_{xy})でシーンの表面に投影される。サンプルのAO寄与は遮蔽された角度acos(t,normalize(sp))\text{acos}(t^{* }, \text{normalize}(s-p))から計算され、ρ(sp)\rho(|s-p|)で重み付けされる。tt^{* }は初期の接線ベクトルであるが、後続の各サンプルのsps-pベクトルへ再代入reassignされる。これは各サンプルが寄与することを可能にし、過剰遮蔽を回避する。現時点で定義されるtt^{* }以下であるサンプルはppから見えないので却下される。

さらに、著者らは組織的なsystematicノイズを回避するためにレイマーチングのステップサイズをジッタリングして無作為に方向を選択することを提案する。これは[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.]で遭遇したアーティファクトと似たものである。

バリエーション(Variations)#

アイ空間でレイをトレースし、バッファをサンプリングするために毎ステップにスクリーン座標に投影する方法もある[Dimitrov et al. 2008Dimitrov, R., Bavoil, L. and Sainz, M. 2008. Horizon-split ambient occlusion. Proceedings of the 2008 symposium on interactive 3D graphics and games. 10.1145/1342250.1357017. https://twistedsanity.net/rocky/Horizon-Split%20Ambient%20Occlusion%20(2007).pdf.; Sainz 2008Sainz, M. 2008. Real-Time Depth Buffer Based Ambient Occlusion. Game Developers Conference. https://developer.download.nvidia.com/presentations/2008/GDC/GDC08_Ambient_Occlusion.pdf.]。これはHorizon-Split AO(HSAO)として知られ、対して、[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.]で述べられる手法はHorizon-Based AO(HBAO)として知られている。追加された投影は余分の計算を伴うimplyが、パフォーマンスの観点でHBAOを優れたものにする。HSAOとHBAOの両方を支持する論文は同じ著者らによるものであるが、後者の論文は前者の半年後のものであるので、我々はHBAOはHSAOの改良版であると結論付けても差し支えはないと考えている。

3.2.5. Directional Occlusion#

Screen-Space Directional Occlusion (SSDO) [Ritschel et al. 2009Ritschel, T., Grosch, T. and Seidel, H.-P. 2009. Approximating dynamic global illumination in image space. Proceedings of the 2009 symposium on interactive 3D graphics and games 75–82. 10.1145/1507149.1507161. https://phaazon.net/media/uploads/SSDO.pdf.; Dachsbacher and Kautz 2009Dachsbacher, C. and Kautz, J. 2009. Real-time global illumination for dynamic scenes. ACM SIGGRAPH 2009 courses. 10.1145/1667239.1667258.]AOAOだけでなく、ppに属する表面で入射する放射輝度も計算する。これはその結果に色付きで有向なシャドウを可能にする。さらに、SSDOは光のディフューズ間接バウンスを1回近似する任意の第2パスを持つ。これは最初のパスで集められた直接放射輝度の値近くをサンプリングすることで行われる。従って、レイトレースの大域照明ソリューションで知られているcolor bleeding効果が起こり得る。

著者らは、深度バッファが最前面のオブジェクトに関する情報のみを含んでいることに起因するシーン情報の欠落の問題に対処するため、depth peelingを用いることを提案する。

3.2.6. マルチレイヤとマルチ解像度(Multi-Layer and Multi-Resolution)#

[Bavoil and Sainz 2009Bavoil, L. and Sainz, M. 2009. Multi-layer dual-resolution screen-space ambient occlusion. SIGGRAPH 2009: Talks. 10.1145/1597990.1598035. https://developer.download.nvidia.com/presentations/2009/SIGGRAPH/Bavoil_MultiLayerDualResolutionSSAO.pdf.]は一般的なSSAOアルゴリズムへの2つの改善を提示する。

1つ目の改善は品質についてである。著者らは[Ritschel et al. 2009Ritschel, T., Grosch, T. and Seidel, H.-P. 2009. Approximating dynamic global illumination in image space. Proceedings of the 2009 symposium on interactive 3D graphics and games 75–82. 10.1145/1507149.1507161. https://phaazon.net/media/uploads/SSDO.pdf.]ですでに提示されたようなdepth peelingを用いることを提案し、加えて、シーン際近くでのアーティファクトを修正するためにAOAOを計算するときに拡大した視野(ガードバンド)を用いることも提案する。

2つ目の改善は品質を犠牲にしないパフォーマンスに焦点を当てる。そのキモはAO計算をハーフ解像度とフル解像度の2つのパスに分けることである。

バリエーション(Variations)#

マルチ解像度を用いると、ブラーステップを省略できる[Hoang and Low 2010Hoang, T.-D. and Low, K.-L. 2010. Multi-resolution screen-space ambient occlusion. Proceedings of the 17th ACM symposium on virtual reality software and technology 101–102. 10.1145/1889863.1889885. https://www.comp.nus.edu.sg/~lowkl/publications/mssao_cgi2011.pdf.]AOAOはまず対称的な低解像度の入力(深度と法線バッファ)を用いてますます低解像度で計算され、異なるAOAO値が最終的なフル解像度のレンダリングに組み合わせられる。そのアイデアは[Bavoil and Sainz 2009Bavoil, L. and Sainz, M. 2009. Multi-layer dual-resolution screen-space ambient occlusion. SIGGRAPH 2009: Talks. 10.1145/1597990.1598035. https://developer.download.nvidia.com/presentations/2009/SIGGRAPH/Bavoil_MultiLayerDualResolutionSSAO.pdf.]で開発されたデュアル解像度手法と似ているように見えるが、いくつかの重要な差異が存在する。まず、著者らはAOAOの計算に用いる深度と法線をダウンサンプリングすることを提案する。これはすでに粗いシーンの近似をさらに粗くする。次に、彼らはAOAO値を組み合わせるのに知的な組み合わせのスキームを提案せず、ただ単にエッジ対応バイラテラルフィルタを用いて一緒にブレンドすることを提案する。その粗い近似にも関わらず、著者らは良好な結果をもたらすとしている。マルチ解像度の入出力バッファはミップマップによりモダンなハードウェアで容易に表現される。

同著者らはいくつかの改善で2年後に初期の実装を再検討する[Hoang and Low 2012Hoang, T.-D. and Low, K.-L. 2012. Efficient screen-space approach to high-quality multiscale ambient occlusion. The Visual Computer 28, 3, 289–304. 10.1007/s00371-011-0639-y. https://www.comp.nus.edu.sg/~lowkl/publications/mssao_visual_computer_2012.pdf.]。今回は、各パスが数学的な動機付けと共に詳細に説明されている。また、著者らは両方の入力バッファを賢くダウンサンプリングし、AOAO値を組み合わせる手法を提示する。このように、提案される手法は審美眼的に動機付けされるのみならず、その背後に理に適った数学的な理由付けがなされている。

3.2.7. 時間的アプローチ(A Temporal Approach)#

AOAO計算の品質を改善する方法のひとつは前フレームからの情報を再利用することである[Smedberg and Wright 2008Smedberg, N. and Wright, D. 2008. Rendering Techniques in Gears of War 2. Game Developers Conference. https://cdn2.unrealengine.com/Resources/files/GDC09_Smedberg_RenderingTechniques-1415210295.pdf.]。 テンポラルフィルタtemporal filter は移動するシーンの結果を改善する方法を提示する。その動機付けは、ビュー(カメラ)が通常のケースではシーンのアニメーションを行うので、フレームからフレームへ徐々に変化する、という所見にある。そのアイデアは 時間をかけてover time 2つの項をブレンドすることでフレームnnAOAOでフレームn1n-1AOAOをフィルタリングすることにあり、実質的に移動中のノイズアーティファクトを取り除く。これが機能するためには、フレームnnのビューおよびアニメーションステートがフレームnnで利用できなければならず、メモリオーバーヘッドを発生incurさせる。スクリーン座標におけるppは2つのフレームの間で異なる可能性が高いので、ワールド座標におけるppからフレームn1n-1とフレームnnの両方で計算されなければならない。ビューとアニメーションステートを保存するとこれが可能になる。著者らはこれを 再投影reprojection と呼んでいる。

動きがないとき、この追加のテンポラルフィルタは品質的な利点をもたらさず、パフォーマンスコストをもたらすのみである。これはフィルタが時間をかけてフレーム間をブレンドするためである。フレーム間でAOAOが変化しない静的なシーンでは、フィルタが効力を持たない。動的なシーンでさえ、筋状のアーティファクトstreaking artifactsが新旧AOAO値の間の収束convergenceの比に基づいて発生し得る。

著者らは、サンプリング半径が大きすぎると、無作為なサンプル探索look-upがテクスチャキャッシュをめちゃくちゃにするとも説明する。小さな値に半径をクランプすることはキャッシュ内のテクスチャサンプルの空間的局所性を改善する。

バリエーション(Variations)#

別の案alternative takeでは、フレーム間でAOAO計算を単純にブレンドせずに、時間をかけてAOAOを精錬するためにサンプルを実際に再利用する[Mattausch et al. 2010Mattausch, O., Scherzer, D. and Wimmer, M. 2010. High-quality screen-space ambient occlusion using temporal coherence. Computer Graphics Forum 29, 8, 2492–2503. 10.1111/j.1467-8659.2010.01784.x. https://www.cg.tuwien.ac.at/research/publications/2010/mattausch-2010-tao/.; Scherzer et al. 2010Scherzer, D., Yang, L. and Mattausch, O. 2010. Exploiting temporal coherence in real-time rendering. ACM SIGGRAPH ASIA 2010 courses. 10.1145/1900520.1900544. https://www.cg.tuwien.ac.at/research/publications/2010/scherzer2010d/scherzer2010d-paper.pdf.]、すなわち、より良い結果に収束するために古いフレームのサンプルを集めるaggregate。これは大量のサンプルがピクセルあたりに追加で格納されなければならないことを示しているが、静的なシーンでも品質が改善するだろう。この手法は[Smedberg and Wright 2008Smedberg, N. and Wright, D. 2008. Rendering Techniques in Gears of War 2. Game Developers Conference. https://cdn2.unrealengine.com/Resources/files/GDC09_Smedberg_RenderingTechniques-1415210295.pdf.]と無関係に開発された。

著者らはディファードパイプラインに再投影を統合する方法やdisocclusionを扱う方法に踏み込んでいる。後者は前景foregroundの動きによって後景backgroundのオブジェクトが可視になる(disoccluded)ときのことである。一般的なアイデアはフレームn1n-1nnの間のワールド座標におけるppの相対的な深度差が与えられたしきい値以上であるかを確かめることにある。それが正しければ、ppが後景のオブジェクトの表面を表現している可能性が大いに高く、AOAOは再び計算されなければならない。

3.2.8. 最初のハイブリッド(The First Hybrid)#

[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.][Shanmugam and Arikan 2007Shanmugam, P. and Arikan, O. 2007. Hardware accelerated ambient occlusion techniques on GPUs. Proceedings of the 2007 symposium on interactive 3D graphics and games 73–80. 10.1145/1230100.1230113. http://www.okanarikan.com/assets/Papers/SSAO/paper.pdf.]に見られる手法の組み合わせは最初に提案されたハイブリッド手法を形成する[Song et al. 2010Song, Y., Liu, F. and Xu, J. 2010. Horizon-based screen-space ambient occlusion using mixture sampling. ACM SIGGRAPH ASIA 2010 posters. 10.1145/1900354.1900410.]

3.2.9. ボリューメトリックなアプローチ(A Volumetric Approach)#

Volumetric Obscurance (VO)はppの周りの3D近傍(例えば、球)の遮蔽されたボリュームと遮蔽されないボリュームの比である[Loos and Sloan 2010Loos, B. J. and Sloan, P.-P. 2010. Volumetric obscurance. Proceedings of the 2010 ACM SIGGRAPH symposium on interactive 3D graphics and games 151–156. 10.1145/1730804.1730829. https://www.ppsloan.org/publications/vo.pdf.]。彼らはVOを以下のように定式化する。

VO(p)=Xρ(xp)O(x)dx(3.5)VO(p) = \int_{X} \rho(|x-p|) O(x) dx \tag{3.5}

ここで、XXppの周りの3Dボリュームであり、xxXX内の点であり、ρ\rhoは以前に述べた通りであり、O(x)O(x)xxにモノがあれば1、そうでなければ0のいずれかである 占有率関数occupancy function である。彼らは式2.5の代わりに式3.5を用いて、AOを計算する目的のために以下とすることを提案する。

AO=VOAO = VO

著者らが示す通り、上記の式は任意の方向におけるppからのレイが単一の表面に交差するのみであろうという仮定の下で有効である。

ある意味では、[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.][Filion and McNaughton 2008Filion, D. and McNaughton, R. 2008. Effects & techniques. ACM SIGGRAPH 2008 games 133–164. 10.1145/1404435.1404441.]の手法はポイントサンプルを用いて式3.5の積分を解くこととして考えることができる。各ポイントサンプルは調査用ボリュームXXの一部を表し、すなわち、それは球か半球である。サンプル数NN\inftyに近づくと、サンプルはXXのすべてを覆い、等価な数式を得る。これはもちろんV=OV' = Oとする仮定の下においてである。

著者らは積分を解くのにラインおよびエリアサンプリングを用いるためにポイントサンプルの使用を一般化する。ラインサンプリングにおいて、積分は遮蔽されるラインと可視のラインの長さの比として近似される。サンプル位置sns_nそれ自体はスクリーン座標でのppの周囲のディスク内で探す。ラインの長さの可視部分の計算は自明であり、可視から遮蔽への転換点は単純な深度バッファ探索sd=depth(sxy)s_d = depth(s_{xy})で示され、sxys_{xy}での球の高さは単純な三角法r2(sx2+sy2)\sqrt{r^2-(s_x^2+s_y^2)}で求まる。ここで、rrは球の半径である。ポイントサンプルに対するラインサンプリングの提案された利点は、ポイントサンプルは遮蔽されるか否か(VV'でテストされる)であり、ちょっとした移動でポップインやポップアウトが発生し得るが、ラインサンプルは移動中に滑らかにフェードすることが可能となるサンプルあたりの遮蔽と可視の比を持つ、という点である。

もうひとつの新しいアイデアは小さな球および大きな球のAOAOまたはVOVO計算を組み合わせることにある。この技術は狭い範囲low-scaleのディテールと広い範囲broad-scaleのディテールの両方を同様にキャプチャする。

バリエーション(Variations)#

無作為化と回転の両方を用いてpp周りのディスク内の標本点を選ぶ方法が多く存在する[Ownby et al. 2010Ownby, J.-P., Hall, C. and Hall, R. 2010. Toy Story 3: The Video Game Rendering Techniques. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2010/index.html.]。著者らはいくつかのバリアントの提案とその差異の分析を行う。提案のひとつはすべての範囲をより良く得るために外向きoutward渦巻きspiralパターンを用いることであるが、以前に言及した通り、ほとんどの固定形成fixed-formationサンプリングパターンは結果として渦巻き分布が含まれるバンディングとなる。最終的に、彼らは視線ベクトル周りで渦巻きにおける各サンプルを無作為に回転する。

著者らは、深度バッファによって与えられる粗いシーン近似に起因して欠落しているサンプル情報をより良く推定するため、(ppの周りで対称的な)対になるサンプル位置を用いることを提案する。

大規模のプロダクションで実際に使われるもうひとつの提案は時間的な精錬[Mattausch et al. 2010Mattausch, O., Scherzer, D. and Wimmer, M. 2010. High-quality screen-space ambient occlusion using temporal coherence. Computer Graphics Forum 29, 8, 2492–2503. 10.1111/j.1467-8659.2010.01784.x. https://www.cg.tuwien.ac.at/research/publications/2010/mattausch-2010-tao/.]と共にラインサンプリング[Loos and Sloan 2010Loos, B. J. and Sloan, P.-P. 2010. Volumetric obscurance. Proceedings of the 2010 ACM SIGGRAPH symposium on interactive 3D graphics and games 151–156. 10.1145/1730804.1730829. https://www.ppsloan.org/publications/vo.pdf.]を用いることである。これは、後者を前者の拡張として動作させることができると証明されている[Kaplanyan 2010Kaplanyan, A. 2010. CryENGINE 3: Reaching the Speed of Light. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2010/index.html.]ためである。

3.2.10. ポアソンサンプリングのアプローチ(Poisson Sampling Approaches)#

任意の2サンプル間の距離が与えられたしきい値以上であるところの表面上に分布するサンプルはポアソン分布という。形式的には、この分布の特性は以下のようにサンプル位置ssとしきい値ddによって述べられる。

sisj(sjsi>dij)\forall_{s_i} \forall_{s_j} (|s_j - s_i| > d | i \ne j)

ディスク上でポアソン的に分布するサンプルを用いるアイデアは既存の手法のハイブリッドの一部として導入された[Sourimant et al. 2011Sourimant, G., Gautron, P. and Marvie, J.-E. 2011. Poisson disk ray-marched ambient occlusion. Symposium on interactive 3D graphics and games 210. 10.1145/1944745.1944790. http://gautron.pascal.free.fr/publications/I3D2011/i3d2011Poster.pdf.]。著者らは[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.]で提案されるような高さフィールドとして深度バッファをレイマーチングすることを提案する。その差異は、彼らはfree horizonの角度を計測していないが、代わりにレイマーチングによってより良いサンプルオクルーダー距離を見つけることを目的としていることである。サンプルそれ自体はディスク表面上でポアソン分布から選ばれ、ppnnによって定義される半球に投影される。AOAO計算それ自体は[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.][Filion and McNaughton 2008Filion, D. and McNaughton, R. 2008. Effects & techniques. ACM SIGGRAPH 2008 games 133–164. 10.1145/1404435.1404441.]と同種のものである。

上記の手順の多くを共有するが細かいところで異なるもうひとつのアルゴリズムが存在する[Aksoy and Phaneuf 2011Aksoy, V. and Phaneuf, G. 2011. Character shading in EA Sports MMA™ using projected Poisson disk based ambient occlusion. ACM SIGGRAPH 2011 posters. 10.1145/2037715.2037736.]。ディスク上でポアソン的に分布したサンプル位置をスクリーン座標における深度バッファ(シーン表面)に投影することに始まり、サンプル位置がppと法線nnで定義される平面の背後にある場合にはそれは遮蔽され、そうでない場合には関数ρ(sp)\rho(|s-p|)が遠くのサンプルの寄与を少なくするようにAO寄与を重み付けする。

著者らはinteractive rates1ではフラグメントあたり32サンプルを持つ結果をブラーする必要はないと述べている。しかし、重要な特徴だけがその手法を用いて陰影付けされたということは覚えておくべきである。フレームの大部分(例えば、背景のジオメトリ)はこの種のAO計算を享受しなかった。

[Loos and Sloan 2010Loos, B. J. and Sloan, P.-P. 2010. Volumetric obscurance. Proceedings of the 2010 ACM SIGGRAPH symposium on interactive 3D graphics and games 151–156. 10.1145/1730804.1730829. https://www.ppsloan.org/publications/vo.pdf.]と同様に、著者らはfine-scaleおよびbroad-scaleの両方の詳細をキャプチャするために異なる半径で2つの半球を用いることを提案する。

3.2.11. 曲率ベースのアプローチ(A Curvature-Based Approach)#

[Hattori et al. 2010Hattori, T., Kubo, H. and Morishima, S. 2010. Curvature depended local illumination approximation of ambient occlusion. ACM SIGGRAPH 2010 posters. 10.1145/1836845.1836976.; Hattori et al. 2011Hattori, T., Kubo, H. and Morishima, S. 2011. Real time ambient occlusion by curvature dependent occlusion function. SIGGRAPH asia 2011 posters. 10.1145/2073304.2073358.]ppの周りの近傍におけるジオメトリの曲率からAOを近似する。

3.2.12. Bent Normals#

bent normalsの概念はアンビエントオクルージョンの用語の始まり[Landis 2002Landis, H. 2002. Production-Ready Global Illumination. Siggraph Course Notes 16.]から使われてきたが、スクリーンスペースのアプローチとの組み合わせに最初に現れるまでおそらく数年かかった[Kasyan et al. 2011Kasyan, N., Schulz, N. and Sousa, T. 2011. Secrets of CryENGINE 3 Graphics Technology. Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2011/index.html.; Donzallaz and Sousa 2011Donzallaz, P.-Y. and Sousa, T. 2011. Lighting in Crysis 2. Game Developers Conference Europe. https://uat.gdcvault.com/play/1014915/Lighting-in-Crysis.]。標準のAOAO計算は、遮蔽されない方向の平均を示すbent normalを加えること以外、通常通りに行われる。このbent normalは単なるAOAOとしてピクセルごとに格納され、続くシェーディング計算で用いられる。[Ritschel et al. 2009Ritschel, T., Grosch, T. and Seidel, H.-P. 2009. Approximating dynamic global illumination in image space. Proceedings of the 2009 symposium on interactive 3D graphics and games 75–82. 10.1145/1507149.1507161. https://phaazon.net/media/uploads/SSDO.pdf.]にある通り、これは、著者らがcontact shadowsと呼ぶ、小縮尺における有向シャドウを可能にする。

bent normalsへの拡張には、円錐の大きさを示すassociated angleを持つbent normalであるbent conesがある[Klehm et al. 2011Klehm, O., Ritschel, T., Eisemann, E. and Seidel, H.-P. 2011. Bent normals and cones in screen-space. Vision, modeling, and visualization (2011). 10.2312/PE/VMV/VMV11/177-182. https://diglib.eg.org/server/api/core/bitstreams/25a399e5-3d25-43f0-8651-16a536c49afa/content.]。この角度はサンプル方向の間の分散に基づく。bent conesが利用できると、(円錐で定義される)球冠spherical capを通して点が受け取る光量を計算できる、より複雑な照明手法を可能にする。著者らはbent normalsの間に見つかるノイズを減らすためにインターリーブされたサンプリングを用いることを提案する。

3.2.13. Alchemy Ambient Occlusion#

このアイデアは、式2.5でいくつかの項を打ち消すことで、減衰関数ρ\rhoを賢く選択することにある[McGuire et al. 2011McGuire, M., Osman, B., Bukowski, M. and Hennessy, P. 2011. The alchemy screen-space ambient obscurance algorithm. Proceedings of the ACM SIGGRAPH symposium on high performance graphics 25–32. 10.1145/2018323.2018327. https://casual-effects.com/research/McGuire2011AlchemyAO/VV11AlchemyAO.pdf.]。彼らが選択するρ\rhoは以下である。

ρ(d)=udmax(u,d)2\rho(d) = \frac{u \cdot d}{\text{max}(u, d)^2}

ここで、ddはサンプル距離であり、uuは厳密な形状を選択するためのユーザ定義パラメータである。ρ\rhoの選択がAOAOの逆の定義を用いることを暗に示すことはすでに明らかであるはずである。我々は議論をやりやすくするために逆AOAO関数を書き直したい。

AO=11πΩρ(d)(nω)dω(3.6)AO = 1 - \frac{1}{\pi} \int_{\Omega} \rho(d) (n \cdot \omega) d\omega \tag{3.6}

式3.6ρ\rhoを挿入しても、uuが積分の外に移動できるという事実にも関わらず、まだおもしろい結果にはならない。

AO=1uπΩd(nω)max(u,d)2dω(3.7)AO = 1 - \frac{u}{\pi} \int_{\Omega} \frac{d \cdot (n \cdot \omega)}{\text{max}(u, d)^2} d\omega \tag{3.7}

著者らはベクトルv=ωdv = \omega \cdot dを定義し、式3.7を以下に単純化することを提案する。

AO=1uπΩvnmax(u,d)2dω(3.8)AO = 1 - \frac{u}{\pi} \int_{\Omega} \frac{v \cdot n}{\text{max}(u, d)^2} d\omega \tag{3.8}

さらに、u>0u>0およびd>0d>0の両方の仮定の下ではmax(u,d)2=max(u2,d2)\text{max}(u, d)^2 = \text{max}(u^2, d^2)としても問題ない。著者らはvv=v2=d2v \cdot v = |v|^2 = d^2であるとも述べ、式3.8を以下に単純化する。

AO=1uπΩvnmax(u2,vv)dω(3.9)AO = 1 - \frac{u}{\pi} \int_{\Omega} \frac{v \cdot n}{\text{max}(u^2, v \cdot v)} d\omega \tag{3.9}

最後に、計算用の式を得るためにモンテカルロ積分を用いる。著者らはいくつかの追加の単純化と共にそれを行い、最終的に以下とする。

AO=11Nn=1Nmax(vnn+β,0)vnvn+ϵ(3.10)AO = 1 - \frac{1}{N} \sum_{n=1}^{N} \frac{\text{max}(v_n \cdot n + \beta, 0)}{v_n \cdot v_n + \epsilon} \tag{3.10}

ここで、NNはサンプル数であり、vnv_nは与えられたサンプルベクトル(snp)(s_n - p)であり、β\betaはオクルージョンの大きさを制御するパラメータであり、ϵ\epsilonは0除算を回避するための小さな数である。分母にあるmax関数は、u2u^2の関数が実際には0除算を回避するためであったので、置き換えられた。加えて、分子における内積は、ベクトルvnv_nが意図せず半球以下になるかもしれないので、0にクランプされた。これはサンプル生成のアーティファクトであり、以下にその概略を述べる。

著者らは、サンプリングをオクルーダーのみに制限することを目的とする、サンプル生成への興味深いアプローチを提案する。これはサンプルが可視か遮蔽かのいずれかとなり得るボリューメトリック手法の一般的な戦略とは対照的である。著者らの提案は地平線の角度hh以下のすべてが遮蔽していると見なされる[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.]により近いのものである。

著者らは[Loos and Sloan 2010Loos, B. J. and Sloan, P.-P. 2010. Volumetric obscurance. Proceedings of the 2010 ACM SIGGRAPH symposium on interactive 3D graphics and games 151–156. 10.1145/1730804.1730829. https://www.ppsloan.org/publications/vo.pdf.]で行われるようにスクリーン座標におけるppの周囲のディスク内でサンプルsns_nを選択する。彼らは[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.]で行われるようにサンプルをシーン表面に投影する。すると、snps_n-pとしてサンプルベクトルvnv_nを構築できる。半球以下のサンプルは式3.10の分子にあるmax関数によって自動的に排除されることに注意する。

彼らは背景のオブジェクトがより少ないサンプルを用いるように距離によってサンプル数を変化させるという面白いアイデアも提示する。これは全体で使われるサンプルが少なくなるのでパフォーマンスが改善する。

3.2.14. 分離可能なアプローチ(A Separable Approach)#

その核となるアイデアは垂直と水平にAO計算を分けることにある[Huang et al. 2011Huang, J., Boubekeur, T., Ritschel, T., Holländer, M. and Eisemann, E. 2011. Separable approximation of ambient occlusion. Eurographics 2011 - short papers. https://perso.telecom-paristech.fr/boubek/papers/SAO/.]。これは一般的なSSAOアルゴリズムへの近似の追加レイヤーを提示する。ブラーカーネルがまず水平に計算され、続いて垂直に計算される分離可能なブラーフィルタと強い類似性がある。その有益性は全体的にサンプルを少なくすることによるパフォーマンスの改善である。

上記で提示される基本形式では、その手法は対角に並行な遮蔽を扱わない。この問題を迂回するため、著者らはピクセルごとにサンプルフレームを無作為に回転することを提案する。すなわち、“水平”および”垂直”の2つの方向は直交したままイメージフレームに対して共に回転される。これは前述の”交差”アーティファクトを実質的に隠蔽する。

ブラーフェーズは無作為に回転したサンプルフレームによってもたらされるジッタリングを隠す必要があることに注意すべきである。

3.2.15. もうひとつの地平線ベースのアプローチ(Another Horizon-Based Approach)#

(例えば、レイマーチングで[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.])正確な地平線の角度hhを近似しようとする代わりに、多数のサンプル角度をサンプルして平均する[Mittring 2012Mittring, M. 2012. The Technology Behind the "Unreal Engine 4 Elemental demo". Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2012/index.html.]。すでに示した通り、前述の角度ベースのアルゴリズムにかなり類似している。この手法は初期のアルゴリズムの後期型late variantと見なすことができる。

対となるサンプル位置の集合s1,s2n\langle s_1, s_2 \rangle_nはスクリーン座標におけるppの周囲に見られる。ここで言う対となるとはサンプル位置の各対がppの周囲に対称的に位置していることを意味する。各対は対におけるサンプルs1s_1s2s_2の両方に対してsz=depth(sxy)s_z = depth(s_{xy})によってシーンに投影される。free horizonの角度はその対に対してs1ps_1-ps2ps_2-pの間の角度として推定できる。free horizonの角度は対から見つかる平均角度として近似される。その法線は各sps-pベクトルを接平面にクランプするために使うことができる。

3.2.16. スケーラブルなアプローチ(A Scalable Approach)#

著者らは大きなサンプリング半径と高解像度でスケールするように以前の手法[McGuire et al. 2011McGuire, M., Osman, B., Bukowski, M. and Hennessy, P. 2011. The alchemy screen-space ambient obscurance algorithm. Proceedings of the ACM SIGGRAPH symposium on high performance graphics 25–32. 10.1145/2018323.2018327. https://casual-effects.com/research/McGuire2011AlchemyAO/VV11AlchemyAO.pdf.]を調整する[McGuire et al. 2012McGuire, M., Mara, M. and Luebke, D. 2012. Scalable ambient obscurance. Proceedings of the fourth ACM SIGGRAPH / eurographics conference on high-performance graphics 97–103. https://research.nvidia.com/sites/default/files/pubs/2012-06_Scalable-Ambient-Obscurance/McGuire12SAO.pdf.; Bukowski et al. 2012Bukowski, M., Hennessy, P., McGuire, M. and Osman, B. 2012. Scalable high-quality motion blur and ambient occlusion. Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://www.casual-effect.com/research/Bukowski2012MBOA/index.html.]

1つ目の改善は深度バッファに依存するのみにすることでメモリ帯域を切り詰めることである。位置と法線は深度バッファから導出できる。ただし、後者は空間微分spatial derivativesを介して行われる。もうひとつの重要な変更は[Hoang and Low 2010Hoang, T.-D. and Low, K.-L. 2010. Multi-resolution screen-space ambient occlusion. Proceedings of the 17th ACM symposium on virtual reality software and technology 101–102. 10.1145/1889863.1889885. https://www.comp.nus.edu.sg/~lowkl/publications/mssao_cgi2011.pdf.]で行われた研究と同じようなミップマップ化された深度バッファを用いることである。これは深度バッファからのテクスチャフェッチのパフォーマンスを改善し、アルゴリズムが大きなサンプル半径でスケールすることを可能にする。フェッチされるミップマップレベルは遠くのサンプルが粗い深度バッファレベルからフェッチするためにssppからどれだけ離れているかに依存する。すなわち、細かなディテールが高解像度の深度バッファをサンプルするppの周りで保存されつつも、長距離の遮蔽が粗い深度バッファレベルを通じて計算に含まれる。

[Hoang and Low 2010Hoang, T.-D. and Low, K.-L. 2010. Multi-resolution screen-space ambient occlusion. Proceedings of the 17th ACM symposium on virtual reality software and technology 101–102. 10.1145/1889863.1889885. https://www.comp.nus.edu.sg/~lowkl/publications/mssao_cgi2011.pdf.][Hoang and Low 2012Hoang, T.-D. and Low, K.-L. 2012. Efficient screen-space approach to high-quality multiscale ambient occlusion. The Visual Computer 28, 3, 289–304. 10.1007/s00371-011-0639-y. https://www.comp.nus.edu.sg/~lowkl/publications/mssao_visual_computer_2012.pdf.]の両方において、出力AOAOは入力バッファの解像度に対応する複数の解像度でも計算されることに注意すべきである。そして、AOAOは続いて後のパスで組み合わせられる。[McGuire et al. 2012McGuire, M., Mara, M. and Luebke, D. 2012. Scalable ambient obscurance. Proceedings of the fourth ACM SIGGRAPH / eurographics conference on high-performance graphics 97–103. https://research.nvidia.com/sites/default/files/pubs/2012-06_Scalable-Ambient-Obscurance/McGuire12SAO.pdf.]では、AOAOはミップマップ化された深度バッファを用いていても一番高い解像度で常に計算される。

著者らは現代のハードウェア上でのパフォーマンスを改善するための多くの技術的詳細も提供する。

3.3. 概観(Overview)#

4. 設計(Design)#

4.1. 一般的な所見(Common Observations)#

4.1.1. 深度バッファの不連続性(Depth Buffer Discontinuities)#

前節において、我々はこれまでに深度バッファがうまくシーンを近似すると仮定してきた。深度バッファは最前面の表面しか格納せず、他のすべての表面の情報は喪失する。これは誤ったAOAO計算をもたらすかもしれない。結果として深度の不連続性の周りで暗いhaloのアーティファクトとなる。

フォールオフ関数(Falloff Function)#

最も簡単な改善策はAOAO計算にフォールオフ関数ρ(d)\rho(d)を導入することである。前景と背景のオブジェクトは相当の距離で分かれている傾向にあり、ほとんどの部分で確実にdmaxd_{max}以上である。結局の所、ρ\rhoは審美眼的な動機を以て導入された[Zhukov et al. 1998Zhukov, S., Iones, A. and Kronin, G. 1998. An ambient light illumination model. Rendering techniques '98 45–55.]。しかし、サンプルが深度バッファのビューから隠れた表面によって遮蔽される場合、そのサンプルを可視として誤って扱ってしまう。

リジェクション(Rejection)#

より単純だが関連のある代替案ではpdp_dから離れすぎている深度値sds_dを持つサンプルを排除する。すなわち、我々は距離sp|s-p|ではなく差pdsdp_d - s_dを計測する。距離ではなく差を何らかの方法で計算する手法によって、これは計算コスト的に安価になる可能性がある。このサンプルのように単純に破棄するとアンダーサンプリングを引き起こすかもしれない[Ownby et al. 2010Ownby, J.-P., Hall, C. and Hall, R. 2010. Toy Story 3: The Video Game Rendering Techniques. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2010/index.html.]。例えば、ほとんどのサンプルがしきい値を越えている場合、実際のAOAO計算のためにはほとんど残らなくなってしまい、おそらくそれでは少なすぎるだろう。

深度レイヤと複数ビュー(Depth Layers and Multiple Views)#

層状の深度バッファ(または、depth peeling)を用いるアイデアもある[Ritschel et al. 2009Ritschel, T., Grosch, T. and Seidel, H.-P. 2009. Approximating dynamic global illumination in image space. Proceedings of the 2009 symposium on interactive 3D graphics and games 75–82. 10.1145/1507149.1507161. https://phaazon.net/media/uploads/SSDO.pdf.; Bavoil and Sainz 2009Bavoil, L. and Sainz, M. 2009. Multi-layer dual-resolution screen-space ambient occlusion. SIGGRAPH 2009: Talks. 10.1145/1597990.1598035. https://developer.download.nvidia.com/presentations/2009/SIGGRAPH/Bavoil_MultiLayerDualResolutionSSAO.pdf.]。代替案として、複数のビュー角度が異なる視点perspectivesから深度バッファを生成するのに使うことができる[Ritschel et al. 2009Ritschel, T., Grosch, T. and Seidel, H.-P. 2009. Approximating dynamic global illumination in image space. Proceedings of the 2009 symposium on interactive 3D graphics and games 75–82. 10.1145/1507149.1507161. https://phaazon.net/media/uploads/SSDO.pdf.]。深度レイヤと複数ビュー角度の両方のアイデアはメモリ予算を使い込み、パフォーマンスを傷つけるかもしれない。加えて、各手法はシーン情報の追加を容易にするために必要な計算を組み込まなければならない。

Paired Sampling#

最後に、これは欠落する深度情報を復元するように変化を増やすためのサンプルの対を用いるアイデアである[Ownby et al. 2010Ownby, J.-P., Hall, C. and Hall, R. 2010. Toy Story 3: The Video Game Rendering Techniques. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2010/index.html.]。このアプローチは表面が平均して平坦であるという仮定を用いる。多くのシーンでは、これは理にかなわない仮定ではない。対における1つのサンプルが拒否される場合(例えば、差pdsdp_d-s_dによって)、そのパートナーは隠れた情報を再構築するのに使われるかもしれない。このアプローチは必然的に既定で対となるサンプルを用いる手法と適合する。さらに、多くのSSAO手法はpaired samplingを用いるように拡張できる。

比較(Comparison)#

上記の深度バッファの不連続性に対する改善策のすべては手法の多くの間に理論上適用できる。しかし、各手法は支配的モデルgoverning modelsや計算するデータのいずれかによる特定の改善策とより自然と適合する。各手法がどれだけ深度バッファの不連続性を扱うかは比較対象として興味深い変数である。選ばれたアプローチは結果の画像だけでなく計算時間にも大いに影響を与える。

フォールオフ関数ρ\rhoの定義は曖昧であり、それを使う手法で変化し得ることに注意する。我々は各手法の背後にある論文によって推奨される定義に同調することを選択した。

4.1.2. ガードバンド(Guard Bands)#

以前に述べたように、幾人かの著者らはスクリーンエッジ近くのアーティファクトへのガードバンドの使用を推奨する[Bavoil and Sainz 2009Bavoil, L. and Sainz, M. 2009. Multi-layer dual-resolution screen-space ambient occlusion. SIGGRAPH 2009: Talks. 10.1145/1597990.1598035. https://developer.download.nvidia.com/presentations/2009/SIGGRAPH/Bavoil_MultiLayerDualResolutionSSAO.pdf.]。しかし、これは、より多くのピクセルをレンダリングする必要があるため、パフォーマンスコストとして降りかかる。ガードバンドの使用が学術的な論文で述べられているのみであり、(我々が確認できる限り)プロダクションのユースケースでは一切言及されていないことは、さらに興味深いことである。我々は、大抵焦点がスクリーンの中心に当たっているため、エッジのアーティファクトは目立たない、というのがこの理由であると考えている。結論として、我々はガードバンドを使わないことを選択した。

4.1.3. メモリ予算の影響(Memory Budget Impact)#

この研究を開始した当初、我々は各手法は異なるメモリ要件を持つだろうと仮定していた。しかし、すべての手法が深度バッファのみを入力として実装できることが判明している。それは、位置が深度から再構築でき[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.; Kasyan et al. 2011Kasyan, N., Schulz, N. and Sousa, T. 2011. Secrets of CryENGINE 3 Graphics Technology. Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2011/index.html.]、法線が位置から再構築できる[McGuire et al. 2012McGuire, M., Mara, M. and Luebke, D. 2012. Scalable ambient obscurance. Proceedings of the fourth ACM SIGGRAPH / eurographics conference on high-performance graphics 97–103. https://research.nvidia.com/sites/default/files/pubs/2012-06_Scalable-Ambient-Obscurance/McGuire12SAO.pdf.; Bukowski et al. 2012Bukowski, M., Hennessy, P., McGuire, M. and Osman, B. 2012. Scalable high-quality motion blur and ambient occlusion. Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://www.casual-effect.com/research/Bukowski2012MBOA/index.html.]ことが理由である。結論として、手法間にメモリ要件の違いは存在しない可能性がある。再構築は若干のパフォーマンスヒットを伴うが、モダンなハードウェア上ではそれほど問題にならないことに注意すべきである。さらに、再構築される法線の品質は議論の余地があり[Bukowski et al. 2012Bukowski, M., Hennessy, P., McGuire, M. and Osman, B. 2012. Scalable high-quality motion blur and ambient occlusion. Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://www.casual-effect.com/research/Bukowski2012MBOA/index.html.]、幾人かの著者らは本物の法線の方を好む。

4.1.4. ブラー(Blurring)#

AOパイプラインにおける重要な点は無作為なサンプリングによってもたらされる高周波ノイズを取り除くためにブラーを用いることである。前述のすべてのSSAO手法は(解析で明示的に述べられていない限り)ブラーパスを推奨する。これはすべての手法に絶対必要であると言っているわけではなく、ある手法は十分に大きなサンプル数NNを用いれば高品質な結果を生成できる。このとき問題となるのがNNを増やすことで発生する急速なパフォーマンス低下である。しかし、各手法は様々にスケールするので、比較対象として興味深い点となる。我々は、選択した各手法が高品質な出力を維持しつつブラーパス全体を省略することへの影響度を発見したいと思う。我々はいくつかがパフォーマンスの観点で他のものより悩まされるであろうと予期している。

ブラー自体(The Blur Itself)#

すべての推奨事項で共通することは、ブラーがジオメトリ対応geometry-awareでなければならない、すなわち、無関係な表面にまたがってブラーしてはならない、ということである。幾人かの著者らは深度バッファを用いることを提案し[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.]、その他は表面法線を追加で使用することを提案する[Filion and McNaughton 2008Filion, D. and McNaughton, R. 2008. Effects & techniques. ACM SIGGRAPH 2008 games 133–164. 10.1145/1404435.1404441.]。しかし、すべての手法の目標は、表面の定義を維持しつつ高周波ノイズを取り除くこと、で一致しているように思える。これを踏まえ、我々はすべての手法に対して同じブラーパスを用いることを選択した。これは比較の次元を削減するが、SSAOの詳細における議論により大きく注力する。そうと言っても、いくつかの手法は他のものより広範囲のブラーを必要とする。これは比較要素として残しておきたい。

我々は表面の定義を維持するために深度と法線の両方の情報を用いる分離可能なブラーフィルタを用いる。これはすべての手法が高品質なブラーを得るretrieveことを保証すべきである。

4.1.5. ノイズとサンプルパターン(Noise and Sample Patterns)#

サンプルパターンが結果に反映されるであろうことはすべての手法に固有の性質である。無作為なパターンが用いられるとき、高周波ノイズが加わる[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.]。一般的に言えば、著者らはバンディングアーティファクトより高周波ノイズを好む。各手法は推奨されるサンプルパターンも持つ。これは時に手法が機能する方法と強く結びついている。故に、手法間のサンプルパターンを切り替えるのは実現不可能である。

4.1.6. 自己遮蔽(Self-Occlusion)#

いくつかの手法は当該位置の周辺で球内に分布するサンプルを用いる([Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.][Loos and Sloan 2010Loos, B. J. and Sloan, P.-P. 2010. Volumetric obscurance. Proceedings of the 2010 ACM SIGGRAPH symposium on interactive 3D graphics and games 151–156. 10.1145/1730804.1730829. https://www.ppsloan.org/publications/vo.pdf.])。その問題は、平坦な表面上でさえ、サンプルの半分が表面の下にあることを予期されることである。これは自己遮蔽self-occlusionとして知られている。

4.1.7. 解像度の変化(Varying the Resolution)#

多くの著者はパフォーマンス上の理由のために更に低解像度でAOAOを計算し、スクリーンに合うように再スケールすることを提案する[Bavoil and Sainz 2008Bavoil, L. and Sainz, M. 2008. Screen Space Ambient Occlusion. https://developer.download.nvidia.com/SDK/10.5/direct3d/Source/ScreenSpaceAO/doc/ScreenSpaceAO.pdf.; Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.; Smedberg and Wright 2008Smedberg, N. and Wright, D. 2008. Rendering Techniques in Gears of War 2. Game Developers Conference. https://cdn2.unrealengine.com/Resources/files/GDC09_Smedberg_RenderingTechniques-1415210295.pdf.; Bavoil and Sainz 2009Bavoil, L. and Sainz, M. 2009. Multi-layer dual-resolution screen-space ambient occlusion. SIGGRAPH 2009: Talks. 10.1145/1597990.1598035. https://developer.download.nvidia.com/presentations/2009/SIGGRAPH/Bavoil_MultiLayerDualResolutionSSAO.pdf.]。他の著者らは複数の解像度でAOAOを計算するための専用で複雑な努力をしている[Bavoil and Sainz 2009Bavoil, L. and Sainz, M. 2009. Multi-layer dual-resolution screen-space ambient occlusion. SIGGRAPH 2009: Talks. 10.1145/1597990.1598035. https://developer.download.nvidia.com/presentations/2009/SIGGRAPH/Bavoil_MultiLayerDualResolutionSSAO.pdf.; Hoang and Low 2010Hoang, T.-D. and Low, K.-L. 2010. Multi-resolution screen-space ambient occlusion. Proceedings of the 17th ACM symposium on virtual reality software and technology 101–102. 10.1145/1889863.1889885. https://www.comp.nus.edu.sg/~lowkl/publications/mssao_cgi2011.pdf.; Hoang and Low 2012Hoang, T.-D. and Low, K.-L. 2012. Efficient screen-space approach to high-quality multiscale ambient occlusion. The Visual Computer 28, 3, 289–304. 10.1007/s00371-011-0639-y. https://www.comp.nus.edu.sg/~lowkl/publications/mssao_visual_computer_2012.pdf.; McGuire et al. 2012McGuire, M., Mara, M. and Luebke, D. 2012. Scalable ambient obscurance. Proceedings of the fourth ACM SIGGRAPH / eurographics conference on high-performance graphics 97–103. https://research.nvidia.com/sites/default/files/pubs/2012-06_Scalable-Ambient-Obscurance/McGuire12SAO.pdf.]。いくつかは再スケーリングを上手くこなし、精度不足のときにAOAOをリサンプルする[Bavoil and Sainz 2009Bavoil, L. and Sainz, M. 2009. Multi-layer dual-resolution screen-space ambient occlusion. SIGGRAPH 2009: Talks. 10.1145/1597990.1598035. https://developer.download.nvidia.com/presentations/2009/SIGGRAPH/Bavoil_MultiLayerDualResolutionSSAO.pdf.]が、その他はパフォーマンスを優遇し、リサンプリングを省略する[Smedberg and Wright 2008Smedberg, N. and Wright, D. 2008. Rendering Techniques in Gears of War 2. Game Developers Conference. https://cdn2.unrealengine.com/Resources/files/GDC09_Smedberg_RenderingTechniques-1415210295.pdf.]

我々はこの因子を比較対象外とするためにある特定の解像度(800x800ピクセル)でAOAOを常に計算することを選択した。すべてのアプローチを平等の立場に置くため、品質における差異はリスケーリングに起因する可能性はない。

4.1.8. スケール(Scale)#

比較のための主要な変数はAO効果が適用されるところでのスケールである。すべての手法は影響度の半径、または、サンプル球かサンプルディスクの半径を制御するいずれかと同様のものを持つ。式2.5では、パラメータdmaxd_{max}によってフォールオフ関数ρ\rhoで暗黙的に定義される。レイトレースのリファレンスは期待通りにスケールする。比較の中で候補の手法がどれだけスケールするかを確認することは興味深いことだろう。

サンプル数(Number of Samples)#

AOAO積分を解決するのに使われるサンプル数NNは比較対象として良い候補となる変数でもある。各手法はNNで個別にスケールするが、それらすべてに対する一般則は大きなNNで遅くなることである。我々はいくつかの良い妥協案を見つけようと思う。

4.1.9. 計算パフォーマンス(Computational Performance)#

パフォーマンスは(できれば)ミリ秒での実行時間としてプロファイルされる。そのようなプロファイリングはソフトウェア自体で容易に処理される。しかし、全体としてのアプリケーションはプロファイルされないことが重要である。AOを計算するシェーダパスと関連するブラーのみが関係している。

我々はプロファイリングにNVIDIA GeForce 260 GTX GPUを用いる。

業界の平均レンダリング予算(Industry Average Render Budget)#

AO計算がどれだけの長さをかけるべきかという標準の基準系reference frameが存在しない。しかし、我々は業界で使われるレンダリング予算から平均を計算できる。

残念ながら、我々が見つけた(上記の)2つのレンダリング予算は純粋にAOAO計算に対するものではない。また、著者らはいくつかのケースで使っているGPUを明記するのみであった。しかし、我々は上記の情報に基づき2msを選択するのが公平であると考える。パフォーマンス比較はいずれにせよ手法間で行われるはずである。業界のレンダリング予算は参考として含まれるのみである。

4.1.10. 品質(Quality)#

品質は手動の見た目の比較によって評価される。我々は金字塔として用いられるレイトレースのリファレンスを生成した。我々はできるだけリファレンスに似るように各手法を調整することを目的とする。

4.1.11. リファレンスシーン(Reference Scene)#

Crytekによって開発されたSponzaモデルを用いる。リファレンスはMental Rayレンダラによってレンダリングされる。我々は線形のフォールオフ関数ρ\rhoを持つ完全な半球でピクセルあたり64つのレイを用いた。

我々は比較のために2つの異なるカメラ位置を用いる。この比較パラメータは[McGuire et al. 2011McGuire, M., Osman, B., Bukowski, M. and Hennessy, P. 2011. The alchemy screen-space ambient obscurance algorithm. Proceedings of the ACM SIGGRAPH symposium on high performance graphics 25–32. 10.1145/2018323.2018327. https://casual-effects.com/research/McGuire2011AlchemyAO/VV11AlchemyAO.pdf.]で提案された。

4.1.12. パラメータ(Parameters)#

各手法はユーザの好みに調整できる一連のパラメータを持つ。時折、支配的governingAOAOモデルはすべての詳細を網羅しないことがあり、実装者にある種の自由度が与えられている。しかし、すべての手法の間で共有される、結果を調節する一連のパラメータが潜在する。それらは以下としてポストプロセッシングステップを介して適用される。

AO(AO)=(b(AO+a))cAO'(AO) = (b \cdot (AO + a))^c

ここで、aabbccはユーザ定義である。bbccAOAO計算の明るさとコントラストを制御するのに使うことができる。aaは期待される0.50.5の遮蔽量をその結果に単純に加算することで自己遮蔽を改善してクランプするのに使うことができる。

4.2. 候補手法(Candidate Methods)#

比較対象として選ばれた手法は図4.3に示される。これらはアルゴリズム的にも時系列的にも異なるSSAO手法が提示されることが意図されている。前者は様々な支配的governingAOAO近似を網羅できる。後者は初期の手法が後の手法や一般の傾向にどれだけ影響を与えたかを見せてくれる。

(図4.3:選ばれたSSAO手法。(a)スクリーン座標で球状にポイントサンプルするAO[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.]、(b)ワールド座標で半球状にポイントサンプルするAO[Filion and McNaughton 2008Filion, D. and McNaughton, R. 2008. Effects & techniques. ACM SIGGRAPH 2008 games 133–164. 10.1145/1404435.1404441.]、(c)レイマーチングによるhorizon-based AO[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.]、(d)ラインサンプルを用いるボリューメトリックAO[Loos and Sloan 2010Loos, B. J. and Sloan, P.-P. 2010. Volumetric obscurance. Proceedings of the 2010 ACM SIGGRAPH symposium on interactive 3D graphics and games 151–156. 10.1145/1730804.1730829. https://www.ppsloan.org/publications/vo.pdf.]、(e)投影されたサンプルと球状のρ\rho関数を用いるAlchemy AO[McGuire et al. 2011McGuire, M., Osman, B., Bukowski, M. and Hennessy, P. 2011. The alchemy screen-space ambient obscurance algorithm. Proceedings of the ACM SIGGRAPH symposium on high performance graphics 25–32. 10.1145/2018323.2018327. https://casual-effects.com/research/McGuire2011AlchemyAO/VV11AlchemyAO.pdf.]、(f)対となるサンプルを用いるhorizon-based AO[Mittring 2012Mittring, M. 2012. The Technology Behind the "Unreal Engine 4 Elemental demo". Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2012/index.html.]

さらに、我々は手法がAOAO近似の組み合わせや積分の解き方に基づいて分類できることを発見した。これは各手法のアルゴリズムの基盤を素早く評価することを可能にする。故に、(我々が以下で明らかにするであろう)様々なカテゴリーに起因する手法は等しく表現されるはずである。

4.2.1. 手法の分類方法(Categorization of Methods)#

Point Sampled AO#

これらの手法グループは、SSAOの使用を広めるきっかけとなったため、すべてのSSAOアプローチへの手がかりとなる。これらは直観的な理由付けに基づいており、業界での使用が多く確認されていた。最近の家庭用ビデオゲーム作品でもそれらの基本の手法[Smedberg and Wright 2008Smedberg, N. and Wright, D. 2008. Rendering Techniques in Gears of War 2. Game Developers Conference. https://cdn2.unrealengine.com/Resources/files/GDC09_Smedberg_RenderingTechniques-1415210295.pdf.]としてこれらを使ってきた。基本となる前提premiseは当該の各点の周囲のボリュームにおけるサンプル位置を調べ、AOAO近似として遮蔽サンプルと可視サンプルの比を用いることである。我々が確認できる限りでは、2つの最も人気の候補は、両方が最近のSSAO関連の論文[Hoang and Low 2012Hoang, T.-D. and Low, K.-L. 2012. Efficient screen-space approach to high-quality multiscale ambient occlusion. The Visual Computer 28, 3, 289–304. 10.1007/s00371-011-0639-y. https://www.comp.nus.edu.sg/~lowkl/publications/mssao_visual_computer_2012.pdf.]で言及され続けている、[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.][Filion and McNaughton 2008Filion, D. and McNaughton, R. 2008. Effects & techniques. ACM SIGGRAPH 2008 games 133–164. 10.1145/1404435.1404441.]である。故に、我々は重要な両方を選択した(図4.3aと図4.3b)。それらの両方の間には、結果に対して大いに影響を与えるいくつかの重要な差異がある。故に、その研究に両方を含めることは関連性がある。

Horizon-Based AO#

horizon-based AO手法はまったくアルゴリズム的に異なるアプローチを取るが、説得力のある結果を生み出す。それらは可視性のためにサンプルを直接的に調査するのではなく、free horizonの角度を見つけることを目的とする。故に、それらは研究として興味深く、2つの候補が比較対象として含まれている。1つ目の手法[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.]はhorizon-basedアプローチを提示し、2つ目は同じコンセプトに頼りつつも異なって実装された[Mittring 2012Mittring, M. 2012. The Technology Behind the "Unreal Engine 4 Elemental demo". Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2012/index.html.]図4.3cと図4.3fに見られるように、その手法は時間的に大きな隔たりもある。比較の変数の一部でのみだったとしても、後者の手法が初期の手法の改善と見なすことができるかどうかを探すことは興味深いことだろう。[Mittring 2012Mittring, M. 2012. The Technology Behind the "Unreal Engine 4 Elemental demo". Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2012/index.html.]は深度の不連続性を解決するのにpaired samplesを用いることに非常に良く適合している[Ownby et al. 2010Ownby, J.-P., Hall, C. and Hall, R. 2010. Toy Story 3: The Video Game Rendering Techniques. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2010/index.html.]。故に、我々は我々の実装にこの機能を追加することを選択した(次章を参照)。しかし、この選択は、かなり微妙な違いであったとしても、その手法を参考文献で提案された手法と異なるものにしてしまう。我々は結果の比較が追加したバリエーションを使うとより興味深くなるのみであると主張する。

Volumetric AO (Line Sampled AO)#

技術的に言えば、point sampled的な手法は、以前言及した通り、このカテゴリにも属する。しかし、我々はこれらを2つに分けることを選択する。1つ目はすでに言及されたものであり、もうひとつは以下に説明されるものである。VO項の始まりと共に、ポイントサンプリングと対照的に積分を解くのにラインサンプリング[Loos and Sloan 2010Loos, B. J. and Sloan, P.-P. 2010. Volumetric obscurance. Proceedings of the 2010 ACM SIGGRAPH symposium on interactive 3D graphics and games 151–156. 10.1145/1730804.1730829. https://www.ppsloan.org/publications/vo.pdf.]を用いるというアイデアももたらされた(図4.3d)。故に、2つの項は文献中で同義語になっており、我々はここではその考え方に従う。結論として、このカテゴリはラインサンプルを用いて積分を解く手法に対するものである。カテゴリの名前は既存の文献と互換性を持つように選ばれている。

有名なprominentVO手法[Loos and Sloan 2010Loos, B. J. and Sloan, P.-P. 2010. Volumetric obscurance. Proceedings of the 2010 ACM SIGGRAPH symposium on interactive 3D graphics and games 151–156. 10.1145/1730804.1730829. https://www.ppsloan.org/publications/vo.pdf.]はプロダクションでの使用が確認でき[Kaplanyan 2010Kaplanyan, A. 2010. CryENGINE 3: Reaching the Speed of Light. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2010/index.html.]、幾人かの著者らはポイントサンプリングに対してパフォーマンスと品質の両方の観点での大幅な利点を提示する。これが我々の比較にも反映されるがどうかを確認するのは興味深いだろう。

この手法は深度の不連続性を解決するためにpaired samplingを用いることに対する良い候補でもある。事実、そのアイデアのオリジナルの論文は基礎としてVO手法を用いた[Ownby et al. 2010Ownby, J.-P., Hall, C. and Hall, R. 2010. Toy Story 3: The Video Game Rendering Techniques. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2010/index.html.]

Alchemy AO#

我々はalchemy手法[McGuire et al. 2011McGuire, M., Osman, B., Bukowski, M. and Hennessy, P. 2011. The alchemy screen-space ambient obscurance algorithm. Proceedings of the ACM SIGGRAPH symposium on high performance graphics 25–32. 10.1145/2018323.2018327. https://casual-effects.com/research/McGuire2011AlchemyAO/VV11AlchemyAO.pdf.]のためだけにカテゴリを設けることを選択した(図4.3eを参照)。ある観点では、これはポイントサンプリングとhorizon-basedアプローチの両方との多くの類似点を共有するが、ひとつにまとめると完全に異なるように見える。人によってはこれが実際にはハイブリッドであると主張するが、我々は賢く選択されたρ\rho関数の導入と式3.10での項の削減がこれをユニークにするに足ると考える。また、他の手法の間の時系列にうまくフィットする。

4.2.2. 共通の特性(Common Attributes)#

すべての候補手法に共通することはサンプルパターンを実装するのに一様に分布する単位ベクトルを必要とすることである。すなわち、すべての手法は同一の乱数テクスチャを供給させることができる。

法線を必要とする手法は法線テクスチャによって明示的にもたらされるだろう。

4.3. 比較のフレームワーク(Comparison Framework)#

我々は上記の節で候補手法とともに比較で使う変数を提示してきた。この節は比較の基礎となるであろうフレームワークに変数と候補を組み込んでいこうと思う。すなわち、比較の方法論である。

4.3.1. 構成(Configurations)#

我々は2つの異なる目的のために調整された候補手法ごとに2つの異なる構成を作りたい。

パフォーマンス(Performance)#

1つ目の構成は手法がどれだけのパフォーマンスを出せるかを見せることを意図している。ある程度の品質レベルは維持されなければならず、我々は手法間で比較可能なビジュアル的な品質における良い妥協点を探ることを目的とする。これは主観的な意見になりがちな作業である。我々は読者が同様に自身の結論に適用できるようにサンプルのレンダリングを提供しようと思う。

クオリティ(Quality)#

2つ目の構成は品質に関してである。我々はここではその結果をリファレンス画像に匹敵させる一連の設定を見つけることを目的とする。我々は手法固有の欠陥を強調するためにこの構成に対してブラーパスを無効化することも意図している。コトを合理的に保つため、我々はAOAO項が収束する点を見つけることを目的とする。すなわち、我々は、それ以上パラメータを増やすと結果が劣化してゆくだけになる一連の設定を探したい。この場合も、これは主観的な意見になりがちな作業であり、我々は調査する読者に対するサンプルのレンダリングを提供しようと思う。

4.3.2. スケーラビリティ(Scalability)#

そして、我々は他のパラメータを一定にしつつサンプリング半径を変化させることで手法のスケーラビリティをテストしたい。これはサンプル数を変更させないことを含む。その結果は各手法がクオリティとパフォーマンスの観点でどれだけスケールするかを示すだろう。

我々は今度はサンプル数と共にサンプル半径を増加させ、それ以外を同じとした実験を行いたい。その目的は2つの変数の間の関係を見つけることにある。

4.3.3. ビュー(Views)#

適切な場合、比較は、節4.1.11で述べた通り、シーンの2つの異なるビュー(カメラ角度)で行われるだろう。

4.3.4. 概要(Overview)#

我々は読者に対して概要を提供するために比較の変数をリスト化したい。

  • サンプル半径(ワールド空間の単位)
  • サンプル数
  • パラメータaabbcc
  • プラーカーネルの大きさ(ピクセル)
  • パフォーマンス(ミリ秒)
  • クオリティ

他の変数(例えば、サンプル分布)は、各手法に固有であるか、複雑さを合理的に保つために比較対象から外したか、のいずれかである。

5. 実装(Implementation)#

5.1. 全体(Overall)#

SSAO手法が実装される所のアプリケーションはC++で書かれる。これは他のリアルタイムレンダリングの実験のためにこの論文の著者のひとりが初期に使っていた研究課題projectである。これは自由に手に入れることができ、GitHubのhttps://github.com/frederikaalund/sfjに見つけることができる。これは標準の実装、とりわけ、OpenGLのAPIに基づいている。それ故に、SSAO手法は関連するシェーダ言語であるGLSLでシェーダとして実装される。シェーダもまた前述のGitHubのアドレスで手に入れることができる。これらはこの報告書の付録にそのままの形でin full length見つけることができる。

5.1.1. 接頭辞(Prefixes)#

我々は節2.5.1に見られる座標(空間)の略語を変数への接頭辞として用いる。これは関連する変数がどの空間に属しているかを理解しやすくする。

5.2. 候補手法(The Candidate Methods)#

5.2.1. [Mittring 2007a]#

[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.]

ランダムなベクトル(Random Vectors)#

シェーダはSPMD原則に従っており、データセットごとに異なる乱数を生成するのは困難である。我々はテクスチャに事前計算されたランダムなベクトルを提供することで状況を改善する。ベクトルは円上に一様に分布する(rejection samplingで生成される)。これらは続いて精度を維持するpreserveために[0;1]3[0;1]^3の範囲に変換される。故に、我々がテクスチャからランダムな方向を読み出すとき、我々は[1;1]3[-1;1]^3の範囲にスケールし直すことを覚えておかなければならない。

vec3 random_direction = texture(random_texture, tc_random_texture).xyz;
random_direction = normalize(random_direction * 2.0, - 1.0);
サンプリング(Sampling)#

サンプリングそれ自体はforループで上手く動作する。

for (int i = 0; i < samples; ++i) {
    // サンプルiを用いる
}

ここで、samplesは用いられるサンプル数である。すべてのサンプルはランダムな方向を必要とする。すなわち、我々はサンプル数×ピクセル数サンプル数 \times ピクセル数個のランダムな方向を必要とする。ランダムテクスチャは、このような多くのエントリを持った場合、あまりにも多くのメモリを消費する。代わりに、その手法の著者らはフラグメント毎のランダムな方向によって定義される平面において各サンプルのランダムな方向を反射させることを提案する。

vec3 sample_random_direction = // iに基づいてランダムテクスチャをフェッチする
sample_random_direction = sample_random_direction * 2.0 - 1.0;
sample_random_direction = reflect(sample_random_direction, random_direction);

ここで、reflect関数はすでにGLSLの仕様の一部である。そして、我々はスクリーン座標で球をサンプルするためにランダムな方向を続けて用いる。これは、バッファサンプラ関数が期待するものであるので、むしろテクスチャ座標であるべきである。スクリーン座標(範囲[0;横幅],[0;縦幅],[0;1][0; 横幅], [0; 縦幅], [0; 1])とテクスチャ座標(範囲[0;1]3[0;1]^3)の間の差異は単なるスケーリングに関する問題であることを思い出して欲しい。サンプル位置は以下のように求まる。

vec3 tc_sample_pos = vec3(tc_depths.xy, scene_depth) + vec3(sample_random_direction.xy * projection_scale_xy, sample_random_direction.z * scene_depth * projection_scale_z) * radius;

ここで、projection_scaleファクタはサンプル半径がワールド座標で与えられるために存在する。すなわち、サンプル半径は投影を計算に入れてスケールされなければならない。それは以下のように行われる。

float projection_scale_xy = 1.0 / ec_depth_negated;
float projection_scale_z = 100.0 / z_far * projection_scale_xy;

ここで、ec_depth_negatedは深度バッファから読み出された深度である。これは、アイ座標がスクリーンの外を指すzz軸を持つので、negatedである。

そうすると、我々はサンプル位置を持ち、それ以上か以下にある表面の実際の深度sds_dを見つけるための準備が完了する。それは深度バッファからの読み出しによって見つけることができる。

float sample_depth = texture(depths, tc_sample_pos.xy).x;

残っているものは単純にVV'のテストを作り、寄与を加えることである。

ambient_occlusion.a += float(sample_depth > tc_sample_pos.z);

すべてのサンプルが集められると、その実行はforループから戻り、式3.1で行われるそのままの通りに、寄与の合計がサンプル数で除算される。

ambient_occlusion.a /= float(samples);

5.2.2. [Filion and McNaughton 2008]#

[Filion and McNaughton 2008Filion, D. and McNaughton, R. 2008. Effects & techniques. ACM SIGGRAPH 2008 games 133–164. 10.1145/1404435.1404441.]

この手法は上記と同じ特性を多く共有する。違いのひとつは円ではなくpp周りの半球でサンプルを見つけることである。これは正の半球への表面法線で定義される平面の周りの負の半球のサンプルを鏡映しすることで達成される。

sample_random_direction = faceforward(sample_random_direction, sample_random_direction, -wc_normal);

ここで、faceforward関数はGLSLの仕様の一部である。サンプルはワールド座標で選択される。しかし、これは各サンプルが後続の深度バッファ探索でテクスチャ座標に投影されなければならないことを暗に示している。これはOpenGLの変換パイプラインを模倣することで行われる。

vec3 wc_sample = wc_position + sample_random_direction * radius;
vec3 ec_sample = (view_matrix * vec4(wc_sample, 1.0)).xyz;
vec4 cc_sample = view_projection_matrix * vec4(wc_sample,
1.0);
vec3 ndc_sample = cc_sample.xyz / cc_sample.w;
vec2 tc_sample = (ndc_sample.xy + vec2(1.0)) * 0.5;

我々は以下のようにフォールオフ関数ρ\rho付きのこの手法も実装する。

float rho = clamp((depth_difference - radius) / depth_difference, 0.0, 1.0);
ambient_occlusion.a += rho;

実際の実装では使わないが、bent normals [Klehm et al. 2011Klehm, O., Ritschel, T., Eisemann, E. and Seidel, H.-P. 2011. Bent normals and cones in screen-space. Vision, modeling, and visualization (2011). 10.2312/PE/VMV/VMV11/177-182. https://diglib.eg.org/server/api/core/bitstreams/25a399e5-3d25-43f0-8651-16a536c49afa/content.]の概念を統合するのが容易であろうことに触れておく。

bent_normal += normalize(sample_random_direction) * rho;

5.2.3. [Bavoil et al. 2008a]#

[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.]

この場合、サンプル数はアルゴリズムが1つのレイに沿ってマーチングする所の方向の数を参照する。ビューベクトル周りの角度θ\thetaを選択するとき、我々は、zz座標を単純に破棄することを除いて、以前と同じくするランダムな方向を用いる。つまり、我々はまず角度を選択してそれを方向に変換するのではなく、前もってup frontランダムな方向ベクトルのひとつを単純に用いる。アルゴリズムは方向θ\thetaにおけるppからのレイに沿ってマーチングする所の増加分を続けて見つける。

const int steps = 6;
vec2 tc_step_size = tc_sample_direction * projected_radius / float(steps);
vec2 ec_step_size = tc_sample_direction * radius / float(steps);

我々は6ステップが我々の場合で十分に良好であることを発見した。これはオリジナルの著者らが見つけたものと似ている[Bavoil and Sainz 2008Bavoil, L. and Sainz, M. 2008. Screen Space Ambient Occlusion. https://developer.download.nvidia.com/SDK/10.5/direct3d/Source/ScreenSpaceAO/doc/ScreenSpaceAO.pdf.]。我々は2つのステップ増分を維持しなければならないことに注意する。ひとつはテクスチャ座標用、ひとつはアイ座標用である。タンジェントはアイ座標で再構築されなければならない。これは位置情報から法線を再構築する方法と似ている。

我々は今やレイマーチングを始める準備が整っている。我々はラジアン角α\alphaを使って直接的には一切行っておらず、代わりに、変換関数tan_to_sinなどと共にtan(α)\tan(\alpha)sin(α)\sin(\alpha)を使って直接的に行っている。これはさもなければ高価なtansin関数の計算に費やされるであろう多くの計算時間を節約する。レイマーチングは以下のように(角度θ\theta全体で)最初のforループ内でネストされる。

float tan_tangent_angle = ec_tangent.z / length(ec_tangent.xy) + tan(bias);
float tan_horizon_angle = tan_tangent_angle;
float_sin_horizon_angle = tan_to_sin(tan_horizon_angle);

for (float j = 1.0; j <= float(steps); j += 1.0) {
    vec2 tc_sample = vec2(tc_depth + tc_step_size * j);
    vec3 ec_horizon = vec3(ec_step_size * j, ec_depth(tc_sample) - ec_position_depth);
    float ec_horizon_length_squared = dot(ec_horion, ec_horizon);
    float tan_sample = ec_horizon.z / length(ec_horizon.xy);

    // サンプルを計算する
}

ここで、tan_sampleは地平線の角度に適用したtan関数である。似たような慣例conventionsが他の変数に適用される。どれだけのレイがテクスチャおよびアイ座標で実際にマーチングされるかに注意する。後者は単位をサンプル半径と矛盾のないように保つために使われる。サンプルの計算は節3.2.4で説明されたように動作する。

if (radius_squared >= ec_horizon_length_squared && tan_sample > tan_horizon_angle) {
float sin_sample = tan_to_sin(tan_sample);
float weight = 1.0 - ec_horizon_length_squared / radius_squared;
ambient_occlusion.a += (sin_sample - sin_horizon_angle) * weight;
tan_horizon_angle = tan_sample;
sin_horizon_angle = sin_sample;
}

各サンプルは以前のhorizon_angleを覚えておくことによって寄与する。AO計算が式3.4で求まる式とどれだけ似ているかに注意する。

5.2.4. [Szirmay-Kalos et al. 2009]#

[Szirmay-Kalos et al. 2009Szirmay-Kalos, L., Umenhoffer, T., Tóth, B., Szécsi, L. and Sbert, M. 2009. Volumetric Ambient Occlusion. IEEE Computer Graphics and Applications 3. https://www.researchgate.net/profile/Mateu-Sbert/publication/228912587_Volumetric_Ambient_Occlusion/links/09e4150ca6b7f59c98000000/Volumetric-Ambient-Occlusion.pdf.]

サンプリング自体は各サンプルがsz=pzs_z = p_zであることを除いて[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.]のそれと類似している。それの新しい部分は遮蔽された線分の長さと可視のものの比を見つけなければならないということである。まず、ssppの間の深度差を求める。

float ec_sample_1_depth = ec_depth(tc_sample_1);
float ec_sample_2_depth = ec_depth(tc_sample_2);

float depth_difference_1 = ec_position_depth - ec_sample_1_depth;
float depth_difference_2 = ec_position_depth - ec_cample_2_depth;

ここで、ec_depthはアイ座標で深度を返す関数であり、ec_position_depthpd=depth(pxy)p_d = depth(p_{xy})である。サンプリングはppの周りで対称的なペアで行われることに注意する。球の高さは三角法で求められる。

float sphere_height(in vec2 position, in float radius) {
    return sqrt(radius * radius - dot(position, position));
}

そして、アルゴリズムは遮蔽されていない線分の長さと遮蔽されているものの比を続けて求める。

float volume_ratio_1 = (samples_sphere_height - depth_difference_1) * samples_sphere_depth_inverted;
float volume_ratio_2 = (samples_sphere_height - depth_difference_2) * samples_sphere_depth_inverted;

同じ球の高さが両方のサンプルで使われることに注意する。これはその対称性により可能である。これはその基本形におけるアルゴリズムである。しかし、我々はpaired sampling[Ownby et al. 2010Ownby, J.-P., Hall, C. and Hall, R. 2010. Toy Story 3: The Video Game Rendering Techniques. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2010/index.html.]で深度の不連続性の問題を解決する改善されたバージョンを提供することを意図している。まず、我々は(もしあれば)ペアにおけるどのサンプルが有効であるかを求める。これは(シーンに依存する)ボリューム比がユーザ定義された境界内にあるかどうかを単純に確認している。

bool sample_1_valid = lower_bound <= volume_ratio_1 && upper_bound >= volume_ratio_1;
bool sample_2_valid = lower_bound <= volume_ratio_2 && upper_bound >= volume_ratio_2;

サンプルs1s_1が無効であるならば、平坦な表面が仮定され、代わりにs2s_2の反転したボリューム比が用いられる。両方のサンプルが無効であるならば、打つ手はほぼないwe are short of options。我々はその手法[Ownby et al. 2010Ownby, J.-P., Hall, C. and Hall, R. 2010. Toy Story 3: The Video Game Rendering Techniques. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2010/index.html.]の著者らによって提案されるようにこの場合において50%の遮蔽を仮定することを選択した。

// 条件付き代入に評価されるはず(分岐なし)
if (sample_1_valid || sample_2_valid) {
    // サンプルが有効であるならば、それを使う。そうでないならば、(反転して)ペアにあるもう片方を使う。
    ambient_occlusion.a += (sample_1_valid) ? volume_ratio_1 : 1.0 - volume_ratio_2;
    ambient_occlusion.a += (sample_2_valid) ? volume_ratio_2 : 1.0 - volume_ratio_1;
} else {
    // 両方のサンプルが無効であるので、0.5ではなく1.0
    ambient_occlusion.a += 1.0;
}

5.2.5. [McGuire et al. 2011]#

[McGuire et al. 2011McGuire, M., Osman, B., Bukowski, M. and Hennessy, P. 2011. The alchemy screen-space ambient obscurance algorithm. Proceedings of the ACM SIGGRAPH symposium on high performance graphics 25–32. 10.1145/2018323.2018327. https://casual-effects.com/research/McGuire2011AlchemyAO/VV11AlchemyAO.pdf.]

前に述べた通り、Alchemy AO手法はその実装において幾分かハイブリッドである。これは[Loos and Sloan 2010Loos, B. J. and Sloan, P.-P. 2010. Volumetric obscurance. Proceedings of the 2010 ACM SIGGRAPH symposium on interactive 3D graphics and games 151–156. 10.1145/1730804.1730829. https://www.ppsloan.org/publications/vo.pdf.]のサンプル分布を使い、その後、[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.]にあるようにシーン表面に各サンプルを投影する。

vec3 tc_sample;
tc_sample.xy = tc_depths + sample_random_direction * projected_radius;
tc_sample.z = tc_depth(tc_sample.xy);

その後、サンプルは実際の計算のためにテクスチャからワールド座標へ逆投影されるbackprojected

vec3 ndc_sample = tc_sample * 2.0 - 1.0;
vec4 temporary = inverse_view_projection_matrix * vec4(ndc_sample, 1.0);
vec3 wc_sample = temporary.xyz / temporary.w;

AO寄与は式3.10に従って計算される。

vec3 v = wc_samle_ - wc_position;
ambient_occlusion.a += max(0.0, dot(v, wc_normal) - bias) / (dot(v, v) + epsilon);

周辺の詳細のほとんどは何らかの形式ですでに触れてきた。例外として距離ベースのサンプル数を使うことがひとつある。

int samples = max(int(base_samples / (1.0 + base_samples * ndc_linear_depth)), min_samples);

これは、距離が大きくなるほどにサンプルリングを抑えることでパフォーマンスを改善することができる。しかし、このスキームは我々の後の比較と衝突するため無効化された。

5.2.6. [Mittring 2012]#

[Mittring 2012Mittring, M. 2012. The Technology Behind the "Unreal Engine 4 Elemental demo". Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2012/index.html.]

これは理論的には[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.]に似ているが、その実装はレイマーチする必要がないという点で異なる。また、我々は[Ownby et al. 2010Ownby, J.-P., Hall, C. and Hall, R. 2010. Toy Story 3: The Video Game Rendering Techniques. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2010/index.html.]で提案されるように深度バッファの不連続性を克服するためにサンプルのペアを用いる。両方のサンプルに対して、その角度はベクトル演算を用いて求まる。

vec3 s = normalize(wc_sample - wc_position);
vec3 v = normalize(-vertex.wc_camera_ray_direction);

float vn = dot(v, wc_normal);
float vs = dot(v, s);
float sn = dot(s, wc_normal);

// 接平面にキャップする
vec3 tangent = normalize(s - sn * wc_normal);
float cos_angle = (0.0 <= sn) ? vs : dot(v, tangent);

ここで、sはベクトルsps-pであり、vは視線ベクトルであり、wc_normalは法線である。すべての変数はワールド座標にある。最後に、我々はacos関数で直接的に角度を求めなければならない。しかし、この関数は低速であり、我々は近似でコレを置き換えることを選択した。

float acos_approximation(float x) {
    return (-0-69813170079773212 * x * x - 0.87266462599716477) * x + 1.5707963267948966;
}

これはAltDevBlogADayというブログで提案された2

5.3. ジオメトリ対応の分離可能ブラー(The Geometry-Aware Separable Blur)#

分離可能なブラーは非常に素直である。これは各サンプルの寄与を重み付けする深度および法線の両方の差を伴うこと以外は普通のブラーフィルタとして機能する。

result = texture(source, tc);
float weightSum = 1.0;

for (int i = -1; i >= -samples_in_each_direction; -i) {
    vec2 offset = vec2(float(i), 0).DIRECTION_SWIZZLE * inverted_source_size;

    float normalWeight = pow(dot(texture(wc_normals, tc + offset).xyz, texture(wc_normals, tc).xyz) * 0.5 + 0.5, normalPower);
    float positionWeight = 1.0 / pow(1.0 + abs(ec_depth(tc) - ec_depth(tc + offset)), positionPower);
    float weight = normalWeight * positionWeight;

    result += texture(source, tc + offset) * weight;
    weightSum += weight;
}

for (int i = 1; i <= samples_in_each_direction; ++i) {
    // 対称的に
}

result /= weightSum;

ここで、定数normal_powerdepth_powerは重みを制御する。これらはシーン依存であり、我々は10.0と0.5がそれぞれSponzaに対して上手く動作することを発見した。分離可能なブラーフィルタはまず水平にブラーし、続いて垂直方向にブラーすることを思い出して欲しい。DIRECTION_SWIZZLEは、シェーダのソースコードが両方の方向に対してほぼ同一であるので、このようになっている。これは以下のようにパスごとにコンパイル時に切り替えられる。

#if defined HORIZONTAL
    #define DIRECTION_SWIZZLE xy
#elif defined VERTICAL
    #define DIRECTION_SWIZZLE yx
#else
    "このシェーダをコンパイルする前にHORIZONTALかVERTICALを定義してください";
#endif

6. 結果と知見(Results and Findings)#

6.1. パフォーマンス構成(Performance Configuration)#

6.1.1. 精度(Precision)#

最初は、成し遂げるのが難しい技術的詳細のためにパフォーマンス計測が±1\pm 1msの精度を持つとは言えない、ということから始めよう。我々は数回アプリケーションを実行し、その結果が設定を同じにしても実行ごとに(±1\pm 1msで)変化することを発見した。我々はこの差異の原因が我々の制御を越えた技術的詳細にあると考えている。いずれにせよ、我々は依然として適格な声明statementsを作るための妥当な精度の範囲内にある。

6.1.2. 遠景視点の知見(Deep View Findings)#

生の結果(Raw Results)#

まず第一に、重要なこととして、リファレンスに合わせるために生のAO計算を調節することがどれだけ必要不可欠であるかに触れておく。すべての手法は、それが他より本質的に近いとしても、調整されなければならなかった。これは、SSAO手法が一般に近似的であるので、驚くような話ではない。幾人かの著者らは手法固有のパラメータ付きのAOAO'のような関数のアーティスト向けの制御に実際に重きを置いている[McGuire et al. 2011McGuire, M., Osman, B., Bukowski, M. and Hennessy, P. 2011. The alchemy screen-space ambient obscurance algorithm. Proceedings of the ACM SIGGRAPH symposium on high performance graphics 25–32. 10.1145/2018323.2018327. https://casual-effects.com/research/McGuire2011AlchemyAO/VV11AlchemyAO.pdf.]。とはいえ、どの手法が本質的に一番近いかを確認する事は興味深い。horizon-based手法のカテゴリはより明るい生の結果を生成する。この遮蔽不足under-occlusionは地平線が完全に明らかであることを仮定するという事に起因するかもしれない。すなわち、これらは連続的な高さフィールドの仮定の下で機能する。2つの球サンプリング手法は非常に暗く見える生の画像を生成する。しかし、以前に言及した通り、これはサンプルの半分が遮蔽されると分かっているためである。その効果はa=0.5a=0.5に設定するとこで取り除かれる。[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.]で凹面のジオメトリが明るくなっているが[Loos and Sloan 2010Loos, B. J. and Sloan, P.-P. 2010. Volumetric obscurance. Proceedings of the 2010 ACM SIGGRAPH symposium on interactive 3D graphics and games 151–156. 10.1145/1730804.1730829. https://www.ppsloan.org/publications/vo.pdf.]ではなっていない様子に注意することは興味深い。これは後者の手法がpaired samplingで補われていたためである。そして、その下限は同様にハイライトを取り除く。

調整された出力(Tweaked Output)#

[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.]では、深度バッファの不連続性を扱わないので、haloが顕著に現れる。残りの手法はそれを扱うので、halosが現れない。[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.]は一般にAOっぽい結果を生み出すが、ノイズとブラーのためにきめがより粗く、いくらか遮蔽過多overoccludedになっているように見える。しかし、これはhalosに起因する可能性がかなり高い。[Filion and McNaughton 2008Filion, D. and McNaughton, R. 2008. Effects & techniques. ACM SIGGRAPH 2008 games 133–164. 10.1145/1404435.1404441.]の手法はきめが粗くぼやけたblurred感じを同じくするが、フォールオフ関数を導入することでhaloの問題を解決する。

horizon-based手法は、高いccパラメータによって暗くした後、かなり良くなっている。つまり、これらの遮蔽不足underoccludedな生の画像は満足する結果を得るために容易に調整させることができる。この事実はオリジナルの定義にかなり近いAOAOに対するモデルに基づいているという事に起因するかもしれない。実際に、数学的な差異は連続的な高さフィールドの仮定に起因するもののみである。十分に興味深いことに、[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.]もまた植木鉢の中の葉っぱの間にその定義を最も良く捕捉する手法である。

Alchemy AOもまた良いSSAO候補として注目を浴びている。しかし、これは一般に遮蔽不足underocclusionにも悩まされる。我々はその問題が、サンプリングスキームがオクルーダーのみを見つけるために設計されるという事に内在するかもしれない、と考えている。多くのサンプルが領域内で失敗する場合、その結果はアンダーサンプリングなAOAO近似となり、オクルーダーがあまり見つからないことになる。その結果は遮蔽不足underoccludedな画像になる。最上階のカーテンからのシャドウが欠落しているのはこれの良い例である。

Volumetric AOは、通常、遮蔽過多overoccludedになり、真逆の問題に悩まされているように見える。これはアンダーサンプリングを修正しようとするpaired samplingスキームに起因するかもしれない。このスキームは、一般に表面が平坦であるという仮定の下で機能する。その仮定が成り立たないと、その出力は誤ったサンプル値を使うだろう。もうひとつの理由はサンプリングのアプローチに起因するかもしれない。その手法はシーンに投影されたディスク中に分布したサンプルを用い、球がその周囲に構築できることを仮定する。しかし、ディスクは他のディスクではなく楕円に投影される。楕円は球のベースにはなれないので、その手法はバイアスされる。このすべてに関わらず、Volumetric AOは見た目に満足する結果を生成する。

数値(The Numbers)#

驚くことではないかもしれないが、2つの最も古い手法(ポイントサンプリング手法)はその中で最も低速であり、それと同時に、最もきめが粗くぼやけた結果を生成する。半球を用いると、完全な球のために24サンプルが必要なのに対して15サンプルで済む、などのいくつかの改善が見られる[Filion and McNaughton 2008Filion, D. and McNaughton, R. 2008. Effects & techniques. ACM SIGGRAPH 2008 games 133–164. 10.1145/1404435.1404441.]。しかし、これはAOのパフォーマンスに影響を与えない(3.75ms対3.5ms)が、これは各サンプルをワールド空間からスクリーン空間に変換するのに必要な追加の計算に起因するかもしれない。また、計測精度は±1\pm 1msであることを思い出して欲しい。

残念ながら、その他の点で申し分のないhorizon-basedアプローチは酷い結果をもたらす。しかし、[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.] (8x6サンプル)と[Mittring 2012Mittring, M. 2012. The Technology Behind the "Unreal Engine 4 Elemental demo". Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2012/index.html.] (6サンプル)の間には必要とされるサンプル数に大きな差異があることに注意する。

明らかなパフォーマンス上の勝者として突出しているのはAlchemy AO(2.75ms)とVolumetric AO(1.85ms)である。同時に、これらはその中で最も小さなブラーカーネルを必要とする手法である。Volumetric AOは、1ピクセルだけ広いブラーを必要とするので、総合パフォーマンスの観点でAlchemy AOを打ち負かす。

近景視点(Close View)#

上で述べられるような同様の一般的な所見はライオン頭部のクローズアップでも行われる。Alchemy AOとVolumetric AOは依然としてパフォーマンス的に最上位である。一般に、パフォーマンスは遠景deep viewにおいてと同じままである。しかし、クオリティに関しては、いくつかの手法で変化が生じていた。

以前に述べたVolumetric AOでの遮蔽過多overocclusionはライオン頭部の周りにその細部に渡ってかなり多く見えるようになった。これらは見た目に満足のいくものではないほどである。ビュアーがオブジェクトに接近して見るとも想定される場合、1ビクセル幅のブラーがこの手法では十分でないと主張することもできるかもしれない。この遮蔽過多overocclusionに対するもうひとつの理由は、任意の方向でサンプル球の中心からトレースされるレイが単一の表面に当たるのみである、というVolumetric AOの基礎となる仮定である。ここにあるようなクローズアップで見られる小さな隆起ridges浮彫りされたreliefedディテールにおいて、この仮説はサンプル球の半径内で破綻する。

horizon-based手法は依然としてその品質レベルを幾分か維持する。とはいえ、[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.]は基礎となるポリゴン表面を強調するように見える。しかし、我々はレイトレースのリファレンスをざっと眺めると、これは実際に期待される結果である。[Mittring 2012Mittring, M. 2012. The Technology Behind the "Unreal Engine 4 Elemental demo". Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2012/index.html.]はこの特性を示さない。しかし、主観的に言えば、その結果はポリゴンの定義なしにより良いように見える。[Mittring 2012Mittring, M. 2012. The Technology Behind the "Unreal Engine 4 Elemental demo". Advances in Real-Time Rendering in Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2012/index.html.]もまたおかしなhaloのようなアーティファクトによる問題を持つ。平坦な表面の仮定が丸いライオン頭部では上手く維持されていないように見える。

また、 Alchemy AOは素晴らしく見える。しかし今回は、レイトレースのリファレンスとの類似性はそこまで同じではない。その症状symptomsは以前と逆で、あってはならないところで遮蔽過多overocclusionが起こっている。我々はこれが特別に選ばれたρ\rho関数の結果であるかもしれないと疑っている。Alchemyにおけるρ\rhoは、レイトレースのリファレンスが線形の減衰を用いるのに対して、逆累乗inverse power関数を表す。結論として、その結果は、この設定で見られるように特に近距離で、異なるだろう。

6.2. クオリティ構成(Quality Configuration)#

では、我々は各手法が最高品質の結果を生成することを目的とするときにどのようなことが起こるかを見ていきたい。結果については表4を参照のこと。我々は、前節でクローズアップの影響をすでに述べたので、ここでは単一のビューを用いるのみである。ポストプロセスのブラーが一切用いられていないことに注意すべきである。AOAOモデルはそれ自体のものに基づく。

[Bavoil et al. 2008Bavoil, L., Sainz, M. and Dimitrov, R. 2008. Image-space horizon-based ambient occlusion. ACM SIGGRAPH 2008 talks. 10.1145/1401032.1401061. https://developer.download.nvidia.com/presentations/2008/SIGGRAPH/HBAO_SIG08b.pdf.]で何かがおかしいことにすぐ気付く。グラデーションはそこにあるべきでない天井や床に沿って徐々に増加しているように見える。我々は目の前にある問題を識別できなかったが、我々の実装の内部にあるに違いなく、グラデーションは文献中に一切報告されていない。同じサンプル量とより大きなサンプル半径では、その問題が完全に消失していることに注意すべきである。これは我々が残念なパラメータの組み合わせで実行していたということなのかもしれない。とにかく、64msでは、優れたモデルの候補にはなり得ない。

とにかく、他の手法は非常に良く処理している。この構成におけるすべての手法に共通するアーティファクトのひとつは遮蔽過多overocclusionである(カーテンと壁の間の影を参照)。我々はこれの原因が上の節において遮蔽過多overocclusionのためにすでにリストアップされた要因によるものであると考えている。Alchemy AOは最も少ない遮蔽過多overocclusionの量を示す唯一の手法である。これは、我々が以前に遮蔽不足underoccludingを起こしていることを発見したので、驚くべきことではない。我々は追加のサンプル量が排除されるサンプルのためにアンダーサンプリングの効果を減少させるという理論を立てる。結論として、より多くのオクルーダーが見つかると、その結果はより暗くなる。

全体で最も著しいのはパフォーマンスの特徴である。Volumetric AOはその最適な構成で6msかかるのみで突出している。Alchemy AO(12ms)とhorizon-basedの手法(16ms)もまた良いパフォーマンスをしている。3つすべての手法がパフォーマンス構成に対して最も少ない追加サンプルを必要とするという事に直接的に関連している可能性がある。[Mittring 2007Mittring, M. 2007. Finding Next Gen CryEngine2. Advances in Real-Time Rendering in 3D Graphics and Games course. ACM SIGGRAPH. https://advances.realtimerendering.com/s2007/.]は最悪のパフォーマンスであり、驚きの200サンプルを用いる。代わりに半球にサンプリングすることで、[Filion and McNaughton 2008Filion, D. and McNaughton, R. 2008. Effects & techniques. ACM SIGGRAPH 2008 games 133–164. 10.1145/1404435.1404441.]はたった80サンプルで似たような結果を達成している。

6.3. スケーラビリティ(Scalability)#

最後はスケーラビリティの問題である。すなわち、その手法がサンプル半径の増加にどう反応するかである。これをテストするため、我々は、プロダクションの設定で使われる可能性が高いものであるので、パフォーマンス構成を用いた。我々はサンプル半径を20.0ワールド座標単位まで倍にしていく。その結果は表5にある。パフォーマンス向きなすべての手法は若干の被害を受けるが、確実に±1\pm 1msの精度範囲外となり、それほど大きくない。我々は空間変換の計算的オーバーヘッドなどがサンプル半径の増加の効果を単純に上回っているという理論を立てる。

しかし、クオリティはより憂慮される要因である。一般に、手法のすべてはリファレンス画像からさらに逸脱することによって少々悩まされる。とは言え、Alchemy AOはリファレンスに最も近いので突出している。

6.4. 優れた手法(The Superior Method)#

我々が2msの業界平均のレンダリング予算の範囲内に収めた手法はAlchemy AOひとつだけである。上記の議論に従い、この手法がパフォーマンスとクオリティの両方の観点で優良であることは疑いようがない。我々はそのクオリティの原因がAOAOオリジナルの定義(式2.5)から一切逸脱しないことを前提に構築される強力な数学的基盤によるものであると考えている。それは加えると壊れてしまうかもしれない更なる仮定を一切作らない。唯一の懸念はアンダーサンプリングの効果のために発生する遮蔽不足underocclusionである。追加の利点として、これは競争相手と比較して優れてスケールもする。horizon-based手法はオリジナルのAOAO定義から逸脱しない似たような理に適った数学的基盤を持つ。しかし、これらはパフォーマンスの観点で悩まされる。これらの戦略はAlchemy AOに単純に太刀打ちできない。初期のポイントサンプリング手法はパフォーマンスとスケーラビリティの両方の観点で完全に選外である。これらはSSAOの分野がどれだけの時間をかけて実際に改善されてきたかを比較に含めるという点で興味深かった。Volumetric AOは第2位である。これは遮蔽過多over-occlusionに関する問題を持つが、強力なパフォーマンス上の特徴を持つ。

7. 議論(Discussion)#

7.1. SSAOの拡張(Extensions to SSAO)#

この議論では、我々は多くのSSAO手法に適用できる幾つかの拡張を概説した。ひとつはdirectional occlusion (SSDO)の仕様であり、2つ目はbent normalsの仕様であり、3つ目はマルチ解像度で行うことあった。いくつかの手法はbent normals、SSDO、マルチ解像度を他より上手に統合する。我々はどのような拡張が提示されたSSAO手法に統合されるかに触れなかった。これは追跡調査報告書に関する面白いトピックとなる可能性があるかもしれない。

時間的一貫性temporal coherenceもまた多くの学術的興味やプロダクションユースを得た拡張である。この報告書では、我々は静的なシーンに焦点を当てた(スクリーンショットにあるアニメーションする球に時折気付いたかもしれないが)。しかし、実際の仮想世界は動的であり、SSAO手法はこれらの環境でも機能しなければならない。

8. おわりに(Conclusion)#

現時点でのオススメはAlchemy AO。

9. 付録(Appendix)#

9.1 シェーダ(Shaders)#

Footnotes#

  1. 訳注:(処理速度などが)インタラクティブな操作に必要なレベルにある状態のこと?

  2. 訳注:リンク切れ(https://web.archive.org/web/20131016160936/http:<//www.altdevblogaday.com/2012/10/12/angle-based-ssao/>)