---
title: VAO++ 日本語解説
tags: 
author: [imagire](https://convert.docswell.com/user/imagire)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/547MNYPVJW.jpg?width=480
description: VAO++ 日本語解説 by imagire
published: September 19, 17
canonical: https://convert.docswell.com/s/imagire/ZXQ9P5-2022-05-03-152234
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/547MNYPVJW.jpg)

EGSR2017
2017/09/19
今給黎 隆
VAO++: Practical Volumetric
Ambient Occlusion for Games
J. Bokšanský1 , A. Pospíšil1 and J. Bittner2
1) Project Wilberforce, Czech Republic
2 ) Czech Technical University in Prague, Czech Republic


# Page. 2

![Page Image](https://bcdn.docswell.com/page/ZP7RD91WJ9.jpg)

Project Page：
https://projectwilberforce.github.io/vaopaper/
Youtube:
https://www.youtube.com/watch?v=_vzVxsMrxJ8


# Page. 3

![Page Image](https://bcdn.docswell.com/page/NPJX1QYVJX.jpg)

VAO++: Practical Volumetric Ambient Occlusion for Games
J. Bokšanský1 , A. Pospíšil1 and J. Bittner2
1) Project Wilberforce, Czech Republic
2 ) Czech Technical University in Prague, Czech Republic
https://projectwilberforce.github.io/vaopaper/
どんなもの？
高速なアンビエントオクルージョ
ン（VAO法の高速化）
先行研究と比べてどこがすごい
従来提案されたVAOに対して、
追加の制約なしにめだった品
質の低減なしに高速化をした。
具体的には適応型サンプリン
グ、カリングの高速化と輝度感
度、深度範囲チェックによる高
品質化。カラーブリーディング
対応
技術や手法のキモはどこ？
議論はある?
2π/9で回転したときに不変なポ
リファレンスとVAO++, Unity
アッソンディスクサンプリング考え、 SSAOとの品質の評価が行われ
インターリーブサンプリングでの
ていない
品質を上げる
どうやって有効だと検証した?
Unity Profiler で、VAO++とVAO及
び、VAO++とUnity標準のSSAOの
速度を比較
次に読むべき論文は?
基礎として[SKUT10]


# Page. 4

![Page Image](https://bcdn.docswell.com/page/63JK29357D.jpg)

Abstract
• アンビエントオクルージョンは、リアルタイムレンダリングアプリ
ケーションで視覚的忠実度を高めるためによく使用される方法の1
つです。 我々は近年導入されたボリューム的なアンビエントオク
ルージョン法に対して、いくつかの拡張を提案する。 これらの拡張
は、現在のゲームにおける品質対性能のトレードオフおよび幅広
い適用性に特に重点を置いて、手法の特性を改善する。 提案ア
ルゴリズムの実装とその拡張について述べる。 このメソッドをUnity
ゲームエンジン内のカメラエフェクトとして実装しました。 結果は、
我々の実装がUnityの標準的なアンビエントオクルージョンと、品
質とスピードの両方の点で優れていることを示しています。


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4LE34WG175.jpg)

1. Introduction
•
•
•
•
最新のグラフィックスハードウェアは、詳細なジオメトリ、リアルなマテリアル、およびさまざまな照明効果をリアル
タイムに複雑な動的シーンで表示するのに十分強力です。しかし、物理ベースの光輸送シミュレーションは、ゲー
ムなどのリアルタイムアプリケーションでは依然として非常に複雑です。この問題に対処するために、影を扱うた
めのシャドーマッピング、鏡面反射を扱う反射マップ、または事前計算グローバルイルミネーションのためのライト
マップなど、異なる照明効果を近似する多数の技術が設計されてきました。 一般的な手法の1つは、近くのジオメ
トリによるオクルージョンを捕捉し、アンビエントライトの影響を計算することを目的とするアンビエントオクルー
ジョン[ZIK98、IKSZ03、Lan02]です。 多くの場面では、アンビエントライトは重要な照明成分であるため、アンビエン
トオクルージョンは、レンダリングされた画像の現実感の認識に大きく貢献します。
最初のアンビエントオクルージョンメソッドはオブジェクト空間で動作し、前処理でアンビエントオクルージョンを評
価しました[ZIK98、Lan02]。 画面空間アンビエントオクルージョン[Mit07、SA07]の導入により、デプスバッファに保
存された情報だけを使用してリアルタイムでアンビエントオクルージョンを近似することができました。 いくつかの
強力なスクリーン空間アンビエントオクルージョン法が、デプスバッファ情報および関連するアンビエントオクルー
ジョン評価の異なる解釈を使用して提案されている。 より最近の技術の1つは、Szirmay-Kalos ら[SKUT10] によっ
て提案されたボリューメトリックアンビエントオクルージョン（VAO）である。 この方法は、比較的少数のサンプルで
もロバストな結果をもたらす体積積分として問題を定式化しています。
我々は、ゲームのようなリアルタイムアプリケーションの性能を最大にすることを目的としたVAOのいくつかの実
用的な拡張からなるVAO ++メソッドを提案する。 特に、我々は出力の品質への影響を最小限に抑えてアルゴリ
ズムを高速化する適応型サンプリングとカリングプリパスを提唱している。 我々のソリューションは、オリジナル
のVAO方式に対して2.4倍のスピードアップを達成し、組み込みのUnity SSAOの実装に関しては1.3倍のスピード
アップを実現します。 また、輝度感度、深度範囲のチェック、コンパクトなサンプルセットによる効率的なインター
リーブサンプリングなど、結果の知覚される品質を向上させるその他の実用的な詳細についても説明します。
UnityゲームエンジンでのVAO++の実装について説明します。 結果では、この方法が速度と知覚される品質の両
方に関してUnityに実装された標準アンビエントオクルージョンよりも有利に働くことを示しています。


# Page. 6

![Page Image](https://bcdn.docswell.com/page/V8EDQK1K7G.jpg)

1. はじめに
• ゲームではGIは重い
• 一般的に用いられている手法の一つがAO
– [ZIK98、Lan02]: (オブジェクト空間の)最初のAO
– [Mit07、SA07]: SSAO (リアルタイム!)
– [SKUT10]: VAO(小数サンプル。ロバスト)
• 提案法：VAO++ (VAOをいくつか拡張)
– 高速化：適応型サンプリングとカリングプリパス
• VAOの2.4倍、UnityのSSAOの1.3倍
– 高品質化：輝度感度、深度範囲のチェック、インターリーブサン
プリング
– Unityに実装


# Page. 7

![Page Image](https://bcdn.docswell.com/page/4V7PLKQ3E8.jpg)

2. Related work
•
•
•
•
•
アンビエント光を扱う最初の試みの1つは、古典的なPhong照明モデル[Pho75]のアンビエント項です。この項はグ
ローバルなアンビエントイルミネーションを説明しますが、近くのジオメトリによるオクルージョンを考慮しません。
Zhukovら[ZIK98]およびIonesら[IKSZ03]は、入ってくるアンビエント光に関する表面上の点の近接性を評価することに
よって、入射光の補正を事前に計算することができることを初めて観察した。
彼らは、距離の連続関数を使用して、近くのジオメトリの寄与により、遮蔽やアンビエントオクルージョンを調整しまし
た。アンビエントオクルージョンは、産業界[Lan02]で迅速に採用されました。多くの場合、距離を考慮せず、与えられ
た距離閾値内の半球の非遮蔽部分が評価された簡略版のアンビエントオクルージョンが使用されている。
動的シーンをサポートするためにKontkanenら[KL05]はアンビエントオクルージョンフィールドを提案し、その後、手法
はアニメーション化されたキャラクタに拡張されました[KA06]。 Bunnnell [BE05]は、変形する表面を持つシーンを扱う
方法を提案した。 Mendezら[MSC03]は色のにじむ効果を説明するよう提案した。これらの方法のさらなる拡張は、
HoberockおよびJia [HJ08]およびChristensen [Chr08]によって提案されている。
前述の方法は、レイトレーシングや様々な表面の離散化方法に依存しています。インタラクティブな速度で複雑な完
全に動的なシーンを扱うための新たな道が、画面空間アンビエントオクルージョン法[HJ08、Mit07、SA07、Ngu07、
CAM08]の導入によって登場しました。これらの方法は、デプスバッファの内容に基づいてリアルタイムでアンビエント
オクルージョンを評価します。スクリーンスペースの方法は、より正確な環境照明と色にじみのためにディレクショナ
ルオクルージョン[RGS09]を扱うように拡張されました。 Sainzら[Sai08]は、影付きの点から見たときに水平線を再構成
することによって、アンビエントオクルージョンを評価する、ホライゾンベースアンビエントオクルージョンを提案した。
Szirmayら[SKUT10]は、体積積分に対するスクリーン空間AO評価の賢い再構成によるボリューメトリックアンビエント
オクルージョンを提案した。我々は、この手法を最適化の基礎として使用し、手法を現代のゲームエンジンに統合す
るという実践的な問題について議論します。
論文は次のように構成されています。セクション3では、VAOアルゴリズムの概要を説明します。セクション4は、VAO++
アルゴリズムの拡張を示しています。セクション5では、Unityにおける実装について説明します。 6章で結果を示し、
最後に7章で結論を述べる。


# Page. 8

![Page Image](https://bcdn.docswell.com/page/L2JVQV5NEQ.jpg)

3. VAO Algorithm Outline
•
•
•
•
•
•
•
•
•
このセクションでは、VAOアルゴリズム[SKUT10]の概要を説明しま す。他のスクリ ーン・スペース・ ソリューシ ョンと同様に、VAOは近傍の遮蔽物のみを考慮してオク
ルージョンに近似します。大部分のスクリ ーン空間アンビエントオクルージ ョン法は、与え られた半径（R）の半球の内側にある深度バッファの内容を分析する。半
球の体積がサンプリングされ、アンビエントオクルージョンは、包含されていないサンプルの割合として計算される。これとは対照的に、VAO はサンプリング領域を
表面法線に沿って移動した半径R/2のより小さなタンジ ェント球に巧妙に変換します（図2）。アンビエントオクルージョンは、接線球の閉じられていない体積の割合
として計算されます。
このような変換は、より効率的なサンプリングボリューム につな がる、 より密な局所的な近傍（タンジ ェント球は通常使用される半球の4分の1 の体積を有する） を生
成する。これは実装を簡単にする： コサインを計算する必要はなく、生成されたサンプルはすべて、（ カメラ空間内での）Z軸に垂直な接平面の中心にある半径R=2
の円盤内にあります。
各サンプルは、カメラから与えられたサンプルまでのレイに対応する正接球と交差するボリュ ーム（パイプ） を表しま す。
各サンプルについて、対応するパイプの非遮蔽部分が計算される（最適化として、各サンプルについて非遮蔽パイプの全長を事前に計算することができる）。次に、
各サンプルについて、以下の3つのケースのいずれかが発生する（図3）。
ケースA：タンジェント球の内部でオクルージョンが発生する
ケースB：オクルージョンが発生しないかシーンの深いところでオクルージョンが発生する
ケースC：タンジェント球に達する前にオクルージョンが発生する
遮蔽されていないパイプセグメントの体積は合計され、タンジ ェント球の総体積で除算されて非遮蔽体積を表す。
点xのボリューメトリックアンビルオクルージョンV（x）は、タンジェント球にま たがる円板を一様にサンプリングすることによって計算される：
•
ここで、nはサンプル数、Dziはi番目のサンプルに対応するパイプの長さ、RはAO カーネルの幅、Fはタンジ ェント球SJの体積をR^2π/（4n）で割ったものです。 Fの解
析的計算は可能であるが、推定値の相関誤差によるより良い結果が得られるので、数値近似を使用する[SKUT10]。
•
VAOアルゴリズムは、3つのパスで動作する。（1）オクルージョンをテクスチャに計算する、（2）高周波ノイズ を除去するローパスフィルタを適用する、（3）シェーディ
ングを実行する、すなわちオクルージョンをカラーバッ ファに適用する。


# Page. 9

![Page Image](https://bcdn.docswell.com/page/Z5EGWL657L.jpg)

図2: 従来のAO（半球）とVAO（タン
ジェント球）の検索体積の比較
図3:ラインサンプルの3つの可能なケース。
ケースA：パイプが部分的に閉塞されている、
ケースB：パイプが完全に閉塞されていない
ケースC：パイプが完全に閉塞している。


# Page. 10

![Page Image](https://bcdn.docswell.com/page/V4JQ3Y4LJP.jpg)

VAOアルゴリズム概要 (1/4)
• 通常のSSAO:描画ピクセルから法線の向きを中心に半球の領域
で遮蔽される割合を評価
• VAO:描画ピクセルの前に半径R/2の球(タンジェント球)を置いて、
球の遮蔽割合を評価(cosθが積分範囲に考慮されている)
n
n
R
R
図2: 従来のAO（半球）とVAO（タンジェント球）の検索体積の比較


# Page. 11

![Page Image](https://bcdn.docswell.com/page/DK741WQ571.jpg)

VAOアルゴリズム概要 (2/4)
•
•
•
•
描画点の法線からタンジェント球の中心を導出
タンジェント球の中心から視線に垂直な円板を生成
円板上をサンプリング
サンプル点において
視線方向にタンジェント
球と深度の交差を計算
• サンプル点での
可視割合を評価


# Page. 12

![Page Image](https://bcdn.docswell.com/page/PLJ1GYP2EG.jpg)

VAOアルゴリズム概要 (3/4)
• Volume Ambient Ocullusion
半径R/2の面積をn個のサンプル点で割って
それぞれの長さを掛け合わせる
遮蔽されない体積
球の体積
球の体積を使うと、サンプル点の位置に応じて
球の体積の誤差が生じるが、
この近似は深度の遮蔽割合なので
そのような問題が出ない
=Σ|zexit-zentry|


# Page. 13

![Page Image](https://bcdn.docswell.com/page/8GJWKG22J2.jpg)

VAOアルゴリズム概要 (4/4)
1. オクルージョンを計算してテクスチャに出力
2. 高周波ノイズを除去するローパスフィルタを適用
3. シェーディングを実行
– オクルージョンをカラーバッファに適用


# Page. 14

![Page Image](https://bcdn.docswell.com/page/W4EZZLD4E3.jpg)

4. The VAO++ Algorithm
• オリジナルのVAOアルゴリズムを拡張して、パフォーマンスを向上
させ、一般的なアプリケーションの使用事例での効率を向上させま
す。 提案されたVAO++アルゴリズムの拡張およびその他の重要な
部分については、このセクションで説明します
• 私たちの拡張機能は、幅広いシーンで効果的に機能します。 拡張
が依存している発見的問題解決法は、違いが目立たない領域、す
なわち適応サンプリングの場合の遠隔ジオメトリ、およびカリング
プレパスのためのオープンサーフェスでパフォーマンスを得ること
に焦点を当てています
• これらの方法は一般的ではありませんが、特にこのようなケース
が一般的に現れるゲームではうまく機能します


# Page. 15

![Page Image](https://bcdn.docswell.com/page/KY76ZW1G7V.jpg)

4.1. Adaptive Sampling
•
•
•
•
既存のAOメソッドは、通常、使用するサンプル数を含むグローバルに指定された品質設定を使用
します。適応型サンプリング拡張の考え方は、（透視投影のために）サンプリング半径がより小さ
いカメラからより少ないサンプルを使用することであり、したがって、同じレベルの品質を達成する
のにより少ないサンプル数しか必要としない。言い換えれば、我々は、パースペクティブ変換後の
イメージ空間において同じサンプリング密度を維持しようとする。
VAOでは、サンプリングカーネルは常に画面上にディスクとして表示されます（他のアルゴリズム
のように半球ではありません）。したがって、透視投影後のディスクの表面積に基づいて適切な数
のサンプルを選択するのは簡単です。
ユーザに、使用する最小のサンプル数を相対スクリーン空間座標系で円盤の直径を設定させる。
このため、この方法は異なる解像度で同じ方法で動作し、ユーザーに複数の事前定義された品
質オプションを与えることも可能になります。この事前定義された距離で使用されるサンプルの数
は、最小（すなわち、2サンプル）に設定され、最大数のサンプルに達するまで、サンプリングディ
スクの表面積が2倍になるたびにサンプルの数を2倍にする。
この実装は、2,4,8,16または32サンプルの事前計算サンプルセットから選択します。これらのサン
プルはすべてGPUシェーダにサイズ62の単一の配列として送られます。このようなサンプルセット
は、GPUに送信される配列サイズの実際的な制限（100個）に適合し、できるだけ多くのターゲット
プラットフォームをサポートします。


# Page. 16

![Page Image](https://bcdn.docswell.com/page/5G75WM4XJ4.jpg)

適応型サンプリング
• タンジェント球から作られる円板の面積からサンプ
リング数を決定
–
–
–
–
透視変換で円板の面積は距離に応じて減少
面積が２倍になるとサンプリング数を2倍
ユーザーが最低サンプリング数を設定可能
サンプリング点のパターンは、2,4,8,16,32のサンプリン
グ数毎に計算され、62個の配列としてGPUに送られる


# Page. 17

![Page Image](https://bcdn.docswell.com/page/V9J2Q9VQER.jpg)

図4: 適応型サンプリングのレベルの可視化。後ろから前に4，8，16，32サンプル


# Page. 18

![Page Image](https://bcdn.docswell.com/page/5DEYW43Y7M.jpg)

4.2. Culling Pre-pass
•
•
•
•
ほとんどの場面では、アンビエントオクルージョンは画像の一部の領域（角、亀裂など）にのみ現れます。他の領域で
は、計算は不要で省略することができます。カリングプレパスは、オクルージョンのない領域ではAO計算を省略する
ように設計されたテクニックです。まず、より低い解像度のテクスチャ（最終イメージの1/8解像度を使用）でAOを計算
し、 AOが発生する領域を推定します。このパスでは常に8サンプルを使用します。この低解像度テクスチャ内のAOを
計算することは、理論的に64倍高速であり、従って非常に安価である。 2番目のパスでは、低解像度テクスチャで遮
蔽された領域のAOのみを計算します。より高い解像度とサンプリングカーネルサイズのために、このステップは品質
損失を最小限に抑えてパフォーマンスを大幅に向上させます。これは、比較的大きなテクスチャで効果が適用される
VRのための「シングルパスステレオレンダリング」技術で設計されました。
第2パスで推定されたオクルージョンをチェックすることは、与えられたピクセルコーナーにおける縮小されたAOテクス
チャからの4つのテクセルフェッチを介して行われる。テクスチャ補間モードは線形に設定されているため、24×24の
領域をカバーする8つの周辺ピクセルから補間された結果が得られます。これらのピクセルの少なくとも1つがオク
ルージョンを示す場合、完全なAOを計算する。そうでない場合、ピクセルはカリングの候補となる（図5および図6）。
カリング候補ピクセルを処理するために、我々はこの手法の2つの変種で解決した。１つ目は「貪欲」と呼んでおり、
AOが推定されずに計算は完全に省略さます。これは、推定が小さな細部を検出できない場合、8×8サイズの白い線
または四角形を点滅させる可能性があります。大きなAO半径を使用する場合、貪欲型の場合はアーチファクトをほと
んどまたは全く生じず、高性能ブーストとして使用できます。これは明らかにシーンに依存しており、それは問題にな
るはずであり、我々はこの方法の第2の「慎重な」場合に落ちる。この技術は、選択された品質に関係なくAOが推定さ
れない領域で4サンプルのオクルージョンを計算します。これらの領域には細部（8×8ピクセル以下のサイズ）しか含
まれていないため、4つのサンプルで十分な品質が得られます。
「慎重な」カリングプレパスの品質損失はほとんど目に見えず、実装ではデフォルト設定でオンになっています（図7）。


# Page. 19

![Page Image](https://bcdn.docswell.com/page/2VJN9YVRJ8.jpg)

カリングプリパス
• 1/8解像度で8サンプルで計算
• プリパス遮蔽がなかった画素に対応する領域ではAO計算
を実行しない
– 縮小バッファの4点をサンプリング
• 線形補間で(3*8の)24ピクセル分を評価
• 実際の評価方法
– 貪欲：縮小バッファで遮蔽がなければ処理しない
• 高速だが、白い四角形のアーティファクトが生じうる
– 慎重：縮小バッファで遮蔽がなければ4サンプルで処理
• 8サンプルでは出ない情報なので、4サンプルで十分（ディフォルト設定）


# Page. 20

![Page Image](https://bcdn.docswell.com/page/GYE92P6ZJ3.jpg)

図5:カリングプレパスのイラスト。 オク
ルージョンが推定されない領域は、カリン
グされます（白で示されます）。 詳細に計
算される領域は黒で表示されます。
図7: （左）VAOに「欲張り」なカリングプレパス
があります。 白い四角形のアーティファクトを
注意してください。 （中央）「慎重」なプレパス
は結果を大幅に改善します。 （右）カリングプ
レパスなしのリファレンス。 画像はアーティ
ファクトを誇張するようにガンマ補正されてい
ます。
図6: カリングプリパスを有効にしたシーンの結果


# Page. 21

![Page Image](https://bcdn.docswell.com/page/5GE85DPYED.jpg)

4.3. Luminance Sensitivity
•
•
•
•
SSAO法で共通な問題の1つは、幾何学的なシーン情報のみを考慮することです。
そのため、通常、光源やエミッシブまたは鏡面のようなアンビエント影が現れない
ようなサーフェス上にオクルージョンを描画します。
これらの欠陥に対抗するために、我々は輝度感度拡張を提案する。輝度感度は、
評価された表面の明度（輝度）に基づいてアンビエントオクルージョンを抑制する
（図8）。
この方法では、AO成分を減らすためにユーザが指定した輝度閾値を使用する。
与えられた点xについて、輝度補正アンビエントオクルージョンAOL（x）は次のよう
に表される:
ここで、AO（x）は入力アンビエントオクルージョン、lum（x）はxのRGBカラーから計
算された輝度を表し、thresholdはユーザー指定の閾値、widthおよびsigmaは補
正関数のプロファイルを定義する定数です。代替として、輝度の代わりにHSVカ
ラーモデルのV成分を使用します。この結果、色相の色成分に依存しない結果が
得られます。輝度感度カーブの例を図9に示します。


# Page. 22

![Page Image](https://bcdn.docswell.com/page/MLELYM197R.jpg)

輝度感度
• 光源、エミッシブや鏡面でのAOを消す
– 明るさに応じてAOの効果を下げる
• HSVのVを使うと色相に影響しなくなる
[0,1]クランプ
画素輝度
輝度がwidthぐらいになると0になる
グラデーション
の調節


# Page. 23

![Page Image](https://bcdn.docswell.com/page/54JMNYWVEW.jpg)

図8:AOなしのシーン、輝度感度のないAO、輝度感度を有効にしたAO
図9:さまざまなシグマ（直線性）設定の輝度感度曲線。 閾値は0.5に、幅は0.3に設定


# Page. 24

![Page Image](https://bcdn.docswell.com/page/ZPJRD9YWE9.jpg)

4.4. Depth Range Check
•
•
•
シーンのジオメトリの近似として深度バッファを使用する最大の欠点の1つは、シーンの遮蔽された部分に関する
情報の損失です。追加の情報源がなければ、VAOアルゴリズムはすべての遮蔽体を無限に厚いものと見なしま
す（VAO法のケースCを参照）。これにより、オクルージョンが発生しない領域では、望ましくないシャドウアウトライ
ンが発生することに注意してください（図10）。デプスピーリング[Eve01]や他のカメラからの情報の取得[VPG13]な
ど、この問題に対処して現実的な結果を生み出すための方法については、過去に多くの提案がありました。しか
し、これらのソリューションでは、パフォーマンスのオーバーヘッドが大きくなります。我々は、視覚的に満足のいく
結果を生み出し、ユーザからの追加の設定を必要としない高速な方法を提案する。
無限に厚い遮蔽物を考えるのではなく、それらは平らであり、厚さが徐々に減少すると仮定します。与えられたサ
ンプルが完全に内部の幾何形状（VAOケースC）である場合、減衰関数（式4）で表されるオクルーダーからの距離
に応じてオクルージョンを減少させます。多くのテスト関数から、我々は審美的に最良の結果をもたらしたものを
選択した。この関数は本質的に、カメラが見るものの背後にあるジオメトリの厚さを表します。
s(d)は、カーネル半径を考慮して、ビュー空間座標系で遮蔽物の背後の距離dにあるサンプルのオクルージョン
寄与を表します。 サンプルの重み（タンジェント球と交差するパイプの長さ）は、s（d）を乗じることによって減少し、
距離が増すにつれて徐々に遮蔽を減少させる。パラメータuは、深度バッファの数値不正確さによって引き起こさ
れるアーティファクト（自己遮蔽）を抑制するために、一定量だけ厚みをオフセットします（図11）。 我々は、経験的
に選択された値0.03を手法の実装で使用することで、深度不連続性を有する領域において滑らかな遷移を生成
し、ハローアーチファクトを顕著に抑制する。


# Page. 25

![Page Image](https://bcdn.docswell.com/page/NPEX1QGVEX.jpg)

デプス範囲チェック
• 通常は、遮蔽物の厚さは無限大
と考える
– z*より後ろは中身が詰まっている
• VAO++では、遮蔽物の厚さS(d)を
距離に反比例して薄くする
– 効果を下げる
– 関数形は一番いい感じの物
適当な最小クランプ
d


# Page. 26

![Page Image](https://bcdn.docswell.com/page/63EK2945JD.jpg)

図10: （左）元のアルゴリズムによる可視シャドーアウトライン。（右）奥行き範囲チェックで訂
正された結果。
図11:カメラから見るジオメトリの厚さを表す減衰関数。


# Page. 27

![Page Image](https://bcdn.docswell.com/page/4L734WL1J5.jpg)

4.5. Samples Generation
•
•
•
•
•
•
•
最終的な視覚結果の最も重要な要素の1つは、オクルージョンボリュームを推定するために使用されるサンプルセットの品質です。 VAOアル
ゴリズムは、半球内のサンプルという3次元分布を使用する従来のSSAO手法とは対照的に、接線球の円内に分布するサンプルを使用します。
私たちは、異なる（しかし対称的な）サンプルセットを得るために、各画素のサンプルセットを均一に分布した角度で回転させることによるイン
ターリーブサンプリングを採用します。我々は、3×3ピクセルタイルの回転角度の繰り返しパターンを使用します。実験的に我々は、3×3のタ
イルサイズが、高い視覚的品質をもたらすのに十分であり（サンプルの数は9倍に事実上増加する）、一致するサイズの高速ローパスフィルタ
によって完全に除去するのに十分小さいことを立証した。したがって、9回回転させた後に均一なサンプル分布を生成するサンプルセットを生
成する必要があります。
我々は、生成中に回転を考慮したコンパクトなサンプルセットを生成するポアソンディスク分布に基づくサンプル生成器を使用する。この方法
の主な目的は、試料の不均一な分布によって生じるバンドアーチファクトの減少である（図12参照）。
我々のポアソンディスクサンプル生成器は、サンプルの将来の回転を考慮に入れます（図13）。我々は回転のために9つの均一なステップ角
を使用する。これは、回転をカスタムテクスチャからフェッチする必要はなく、UV座標から計算できるというメリットがむしろあります（これは約
1％のパフォーマンス向上をもたらしました）。私たちのジェネレータは、新たに追加されたポイントだけでなく、それらのローテーションのすべ
てを保存します。別のポイントがサンプル候補として考慮されている場合、このアプローチは、それらの回転を含む他のすべてのポイントから
十分に離れていることを保証します。
ポアソンディスクサンプル分布を生成した後、回転サンプルの最良の順列を選択して、互いの距離の合計が最大となるようにする。これは、
回転によって導入されるノイズをさらに低減する。サイズが8以下のサンプルセットでは、すべての順列をテストすることが可能です。大きな
セットの場合、8つのサンプルのグループを段階的に追加し、固定されたそれまでのグループとの最適な順列を探します（図14）。
最後に、サンプルをzオーダーに従ってソートし、シーン内で空間的に近接するサンプルをメモリ内でも互いに近くします。これにより、深度テク
スチャおよび法線テクスチャからデータをフェッチしている間のキャッシュのコヒ―レンシーが向上します。
上述のアルゴリズムから生成されたサンプルセットはまた、本方法の適応サンプリングステップにおいて異なるサイズのセット間の遷移の視
覚的品質を改善します。


# Page. 28

![Page Image](https://bcdn.docswell.com/page/V87DQKNKJG.jpg)

サンプル生成
• AO計算では、少ないサンプリングで高品質な物
が得られることが望ましい。
• VAOでは、円板上でのサンプリングを行う
– 円板内で一様なポアッソンサンプリングを用いる
• インターリーブサンプリング(3x3)を行う
– 9回転して均一なサンプリングパターンを作る
– 同じサイズのぼかしフィルタで高周波ノイズは
除去
インターリーブサン
プリングの適当な回
転（論文に記載なし）
1*
2π/9
5*
2π/9
3*
2π/9
7*
2π/9
0
8*
2π/9
4*
2π/9
6*
2π/9
2*
2π/9


# Page. 29

![Page Image](https://bcdn.docswell.com/page/4VJPLK5378.jpg)

分布の生成
• サンプル数ごとに、９回転させたときにポアッソン分布
になるようなサンプルを生成
• 生成したサンプルについて、自由に回転させたときに
サンプル間の距離の総和が最大になるように再配置
• サンプル数が多いときは8サンプルの結果に追加して
生成
• Z値でソートして、深度
バッファと法線マップの
キャッシュヒット率を上げる


# Page. 30

![Page Image](https://bcdn.docswell.com/page/L2EVQVPN7Q.jpg)

図12: 発生時にサンプル回転を考慮してバンドアーチファクトを低減する。
（左）回転を認識しないポアソンディスク分布。
（右）提案された方法によって生成されたサンプルセットを使用。


# Page. 31

![Page Image](https://bcdn.docswell.com/page/Z57GWLP5JL.jpg)

図13:後で回転した一様分布と生成時
に回転を考慮した修正分布（ 9回転を
掛けた16サンプル）の比較。
図14: ：ポアソンディスクジェネレータで生成さ
れたサイズ4のサンプリングカーネル（左）。回
転にベストな並び替え（中）。すべての回転
（右）。


# Page. 32

![Page Image](https://bcdn.docswell.com/page/V4EQ3Y2LEP.jpg)

4.6. Low Pass Filter
•
•
•
•
AOを計算するために少数のサンプルを使用する場合、アンダーサンプリングによってより多くの
アーチファクトが生じる。これは、2および4つのサンプル（また、半径によっては8つのサンプルで
も）で発生します。
これらのアーチファクトは、少数のサンプルがシーンのジオメトリを適切にサンプリングするのに十
分でないため、ギザギザのエッジを含むオクルージョンとして表示されます。これらのアーチファク
トを除去するために、可変サイズのガウスぼかしをオプションとして提供する。ユーザーは、畳み
込みカーネルのサイズとガウスベルカーブの偏差を設定して、アーチファクトの量と「ぼやけ」のバ
ランスを微調整することができます。
我々は、非線形のクロスバイラテラルフィルタを使用します：事前定義された閾値を超える奥行き
変化を持つ隣接ピクセルを考慮しません。閾値として、ワールド/ビュー空間座標系のAO半径を用
い、各ピクセルの線形ビュー空間の深さを計算します。深さ認識部分を省略すると、この小さなサ
イズのたたみ込みの場合でも深度不連続点を持つ領域には不安定なハローアーチファクトが発
生します。
より大きいカーネルサイズの畳み込みフィルタはパフォーマンスが悪いため、フィルタが分離可能
であるかのように（技術的にはそうではありませんが）2パスでフィルタを実装します。深度不連続
がフィルタをカーネルの対角線上に分割する最悪の場合のシナリオでも、非常に良い結果が得ら
れます。


# Page. 33

![Page Image](https://bcdn.docswell.com/page/DKJ41WL5J1.jpg)

ローパスフィルタ
• サンプル数が少ないと階段状のアーティ
ファクトが発生
• 可変サイズのガウスぼかし
2
4
– クロスバイラテラルフィルタ
• 深度差が閾値（AO球の半径）を超えたら無視
8
– ぼかすサイズが大きいときは２パス
• 正確ではないが良好
16


# Page. 34

![Page Image](https://bcdn.docswell.com/page/PLE1GYL27G.jpg)

4.7. Color Bleeding
•
他のいくつかのSSAO法と同様に、1回の間接的な光のバウンスの近似によるカラーブリードの単純なシミュレー
ションを使用する。このエフェクトを追加するために、アルゴリズムは（深度と法線によって表される）ジオメトリだ
けでなく、サーフェスの色もサンプリングする。私たちは、陰影のある表面におけるサンプル位置と法線の構成に
基づいて各サンプルの寄与を計算します。特に、サンプルxの注目点pへの間接寄与の量を次のように計算しま
す。
•
ここで、nは表面法線であり、radiusはAOカーネルの半径である。我々は、c(x)を用いて、白色とサンプリングされ
た色との間を線形補間する。
二次バウンスのために同じサンプルを再使用する際の問題は、サンプルが空間的にジオメトリの内部に深くあり
うることから生じますが、正しい結果を得るためにはジオメトリサーフェスをサンプリングしたいです。これは、陰
影を計算する表面から光線に沿って衝突する表面の位置のサンプルまでレイマーチングする必要がある。この
ような操作は、コストが高く、実用的ではない。もう1つの解決策は、表面近くに位置しないサンプルを廃棄するこ
とです。しかしながら、これは使用可能な結果を提供するためにあまりにも多くのサンプルを捨てる。
我々の方法では、この要件を緩和します。表面上にあるかどうかにかかわらず、すべてのサンプルを使用します。
レイの出発点に近い表面があるときに問題のあるサンプルが発生するという事実に着目します。これは、その領
域の強いアンビエントオクルージョンによってその寄与が隠されることを意味します。これにより、良好な結果とパ
フォーマンスが得られます。さらにパフォーマンスを向上させるために、2つまたは4つごとにサンプルを取る、半
分または四分の一のサンプルを使用してカラーブリードを計算します。サンプルはzオーダーであるため、円の全
体を均一にサンプリングします。
•
•


# Page. 35

![Page Image](https://bcdn.docswell.com/page/8GEWKGV2E2.jpg)

カラーブリーディング (1/2)
• サンプルでの色に重みを付けて合成
– 重みc(x)で白色と線形ブレンディング
法線
サンプル点
注目
画素
AO球半径


# Page. 36

![Page Image](https://bcdn.docswell.com/page/W47ZZL4473.jpg)

カラーブリーディング (2/2)
• サンプル点は物体の内部に発生しうる
– サンプル点からの表面探索はレイマーチングが必要
で重い
– 注目から遠い色を無視する方法もあるが、非効率
• 提案法では、すべてのサンプル点を利用
– 注目画素に近い点の寄与が問題になることが多いが、
アンビエントオクルージョンの効果も強くなるので無
問題
– ２，４サンプル毎に評価することで高速化可能
• zソートされているので、均一に評価される


# Page. 37

![Page Image](https://bcdn.docswell.com/page/KYJ6ZW3GJV.jpg)

5. Unity Implementation
• VAO++は、ピクセルごとの法線を生成し、デプスバッファへのアクセスを
提供するレンダリングソリューションに実装できます（現代の遅延レンダリ
ングされたレンダラー）。 効果は、単にオクルージョン値を乗算によって
結果の画像に適用します。 これは、レンダラの結果を入力として取り込
み、画面に新しい結果を生成する追加のレンダリングパスとして一般的
に実現されます。我々は、人気と使いやすさのためにUnityを選択しまし
た。
• Unityはカスタムポストプロセッシングエフェクトで拡張可能なように設計さ
れています。 エフェクトは、シーングラフのカメラノードに普通にアタッチさ
れるイメージエフェクトとして、または既存のレンダリングパイプラインを
拡張するグラフィックスコマンドのリストであるコマンドバッファとして実装
できます。私たちの実装では、特定のデプロイメントプラットフォームでの
互換性の問題を解決するために両方のオプションを提供しています


# Page. 38

![Page Image](https://bcdn.docswell.com/page/5GJ5WMLXE4.jpg)

5.1. Image Effect Implementation
• Unityでの画像エフェクトとしてのVAO++の実装は、他のUnityコンポーネ
ントと同様の動作をするため、非常に直感的です。
• ユーザーは、画像エフェクトが適用される順序を完全に制御できます。
実装は、1組のシェーダとスクリプトファイルで構成されています。
OnRenderImageイベントが発生すると、スクリプトはシェーダをロードして
実行します。 また、GUIコントロールが含まれており、選択した設定を
シェーダーのユニフォーム変数を介してGPUに送信します。 シェーダファ
イルには、複数パスの頂点シェーダとフラグメントシェーダとしてのイメー
ジエフェクトの実装が含まれています。
• 画像エフェクトのアプローチから生じる問題の1つは、すべてのレンダリン
グパスが終了した後のポストプロセスとして適用されることです。 これに
より、透明なプリミティブ、前にかけられたエフェクト、HDRレンダリングが
有効になっている場合は、明るく点灯したサーフェスにもアンビエントオク
ルージョンが置かれます。


# Page. 39

![Page Image](https://bcdn.docswell.com/page/4LE34WL475.jpg)

5.2. Command Buffer Implementation
• コマンドバッファを使用するVAO++の実装はより複雑であるが、エ
フェクトは、想定されるレンダリングパイプラインに挿入することが
できる。すなわち、すべての不透明プリミティブがレンダリングされ、
照明が計算される前である。 しかし、これは、画像エフェクトが与
えられたシーンに適用される順序を制御することを難しくします。
実装は画像エフェクトとシェーダファイルを共有し、有効にすると
OnRenderImageイベントをバイパスします。 代わりに、
OnPreRenderイベントでコマンドバッファを満たし、レンダリングパイ
プライン内で処理するためにそれを送信します。 コマンドバッファ
自体には、テンポラルテクスチャを作成し、アルゴリズムの必要に
応じて特定のシェーダパスを実行するためのコマンドが含まれて
います。


# Page. 40

![Page Image](https://bcdn.docswell.com/page/V8EDQKN57G.jpg)

5.3. VAO++ Shader
•
•
•
•
•
我々はOpenGL/GLSLのプロトタイプの実装から始めて、プラットフォーム特有の問題を取り除き、アル
ゴリズムを微調整しました。その後、Unityが使用するCg/HLSL言語にシェーダを書き直しました。
Unityは特殊なテクスチャ_CameraDepthNormalsTextureを介してG-Bufferへのアクセスを提供します。
最初の16ビットにビュー空間の法線と残りの16ビットに線形深度がパックされます。圧縮されてパック
された深度と法線をデコードするには、組み込みマクロのDecodeDepthNormalを使用します。深度は
すでに線形化されて、&lt;0,1&gt;の範囲であるため、ほとんどの他の実装の様に、逆数から再計算する必
要はありません。
深度と法線はそれぞれ16ビットに圧縮されるため、精度は現代のGPUで得られる精度よりも低くなり
ます。
設計のおかげで、このアルゴリズムはこれらの不正確さに対してかなり抵抗力があり、同様の効果で
よく見られる魔法のバイアス変数を必要としません。
陰影計算するピクセルのビュー空間の位置は、リプロジェクションによって計算されます。頂点シェー
ダでは、各スクリーンコーナーの位置が、（CPU上で事前に計算された）投影行列の逆行列を使用して
スクリーン空間からビュー空間に再投影される。結果として得られる頂点シェーダの値は自動的に補
間され、フラグメントシェーダでは、カメラから描画ピクセルの遠方平面への方向ベクトルとなります。
このベクトルは正規化され、ピクセルのビュースペース位置を得るために深度値で乗算されます。


# Page. 41

![Page Image](https://bcdn.docswell.com/page/4V7PLK5DE8.jpg)

6. Results and Discussion
•
•
•
•
•
•
このセクションでは、さまざまなVAO++拡張がアルゴリズムのパフォーマンスに及ぼす影響を示します（表1）。すべての
測定は、NVIDIA GTX 970グラフィックスカードで実行され、Unity Profilerで測定されました。私たちの主要な最適化は、
それぞれ異なる画像解像度とサンプル数に対する影響の程度をより良く示すために別々に測定されます。また、結果
をUnityポスト処理スタックプラグインに含まれるUnity SSAOと比較します。最後に、様々な距離とジオメトリにおける手
法の挙動を示すために、異なるシーンのサンプル画像を含めます（図17）。
カリングプレパスは、サイズが8以上のサンプルセットのパフォーマンスで向上が見られます。これは、カリング候補の
オクルージョンが常にサンプル数8で計算されるために発生します。このアルゴリズムのダウンサンプリングの性質は、
高分解能の高速化にもスケーリングします。カリングプレパスは1080pで30％、 4k解像度で40％のスピードアップを達
成します。
アダプティブサンプリングによるパフォーマンスの向上は、サンプルセットのサイズとともに徐々に増加します。サンプル
数が多いほど、距離が遠いほどサンプル数が減少します。
表2と図15に、VAO ++とUnity SSAOの比較が含まれています。両方の方法は、ほぼ同じサイズのAO影を作るように設定
されていました。 16サンプルの場合、VAO ++Unity SSAOより1080pでは約20％高速で、4kでは30％以上高速です。また、
VAO++サンプルセットのサイズをさらに2倍にすると（32サンプル）、1080pで16サンプルのUnity SSAOよりもわずか15％
遅く、、4kでわずか3％遅いことにも注意してください。
VAO++のビジュアル結果はレイトレースAO（図16）に近く、カメラの移動や動的オブジェクトの場合にも生成された影の
形状が保持されます。 VAO++はUnityのSSAOのような大きなローパスフィルターを必要とせず、シーンのジオメトリによく
合ってより現実的に見える鮮明な画像と影が得られます。私たちはまた、より良い結果をもたらすと信じるより積極的な
レンジチェック機能を採用し、不必要にシーンを過度に暗くしません。
パフォーマンス向上を目的とした我々の拡張は視覚品質にはほとんど影響しません。カリング・プレパスは無視できる
サイズのアーチファクトを引き起こし、適応サンプリングはカメラから離れた領域にのみ影響します。サンプル生成はオ
フラインで実行され、結果は再利用されます。したがって、拡張では、元のVAOアルゴリズムと比較して追加の制限はあ
りません。


# Page. 42

![Page Image](https://bcdn.docswell.com/page/L2JVQVPGEQ.jpg)

Table 1:さまざまな最適化で効果を計算するのに費やされた時間。 パーセンテージは、
非加速化VAOに関する実行時間比です。 最速の設定が太字で示されています。
Table 2:図15のシーンにおけるUnity SSAOの実装とVAO++の最高の結果との比較。どち
らのアルゴリズムも、各品質レベルごとに異なるサンプル数を使用しています。


# Page. 43

![Page Image](https://bcdn.docswell.com/page/Z5EGWLQD7L.jpg)

図15: サンプル数を増やした際のUnity SSAO（上）とVAO++（下）の比較。Unity SSAOでは、
VAO++ 2,4,8および16サンプルに対して3,6,10,16サンプルを使用した。


# Page. 44

![Page Image](https://bcdn.docswell.com/page/V4JQ3YKXJP.jpg)

図16: レイトレーシングのリファレンス画像とVAO++の比較。
左から右：レイトレースAOシベニク、VAO++シベニク、レイトレースAO会議室、VAO++会議室


# Page. 45

![Page Image](https://bcdn.docswell.com/page/DK741WP271.jpg)

図17: （左）VAO ++で描画されたテストシーン（Viking Village、Corridor、Sibenik and Sponza）のスナップ
ショット、（中央）VAO ++ビジュアライゼーション、（右）Unityの組み込みSSAOビジュアリゼーション。


# Page. 46

![Page Image](https://bcdn.docswell.com/page/PLJ1GY9KEG.jpg)

7. Conclusion
• 我々は以前に提案されたVAOアルゴリズム[SKUT10]を拡張し、その性能
と視覚的品質を改善するいくつかの最適化を含むVAO++法を説明した。
これらの最適化には、適応サンプリング、カリングプリパス、輝度感度、
深度範囲チェック、コンパクトサンプルセットによる効率的なインターリー
ブサンプリングが含まれます。 Unityゲームエンジン内でのメソッドの実装
については、メソッドをレンダリングエンジンに組み込む2つの異なる方法
を含めて説明しました。
• 提案法を速度と視覚的品質の観点から評価しました。 その結果は、
SSAOの標準的なUnity実装と同じ品質を維持しながら、レンダリング時間
を最大30％短縮しました。 将来は、可変サンプリング密度のカーネルと
マルチスケールデプスバッファ表現を使用してサンプルセットをさらに最
適化することで、この方法を拡張する予定です。


