Unity で使えるリアルタイム AO 比較
Post-Processing Stack でも Ambient Occlusion を使うようになって、色々と気になってきたいくつかをかーるく比較してみた。
ちなみにとてもザッと言うと AO とは、遮蔽されている箇所を暗く塗ることで影を表現する技術です。下のサンプルでは、柱と天井の境目がはっきりと視認できるようになり、より立体的に見えることがわかります。
筆者は VR 人間なので、VR コンテンツに使用する場合の比較を書いていく。なお、Deffered でのみ使える機能などがあるので、特に断りのない限り Deffered レンダリングで比較しています。
今回比較するのは以下3種類。(Asset Store へのリンク)
クリックで拡大します。
なお、サンプルの素材はこれのサンプルシーンを使用しています。感謝。
Post-Processing Stack 1.0.4
Unity 純正のポストプロセス・エフェクト。各種エフェクトが1箇所にまとめられており、非常に扱いやすい。ここに含まれる AO について。
良い点
- 設定項目が少ないので使いやすい。
- Radius をいくらでも広げられるので表現範囲が広い。
- 無料 and 公式
悪い点
- 画面の端で AO が薄まる。(VR ヘッドセットの視界の端で、はっきりと視認できるレベル)
- [Single Pass Stereo Rendering] 見た目の解像度が下がる。
解像度が下がる件
クリックで拡大します。
シングルパスの場合のみ解像度が著しく下がります。VR で見るとこのツラミがより顕著になります。
感想
Radius を好きなだけ大きく設定できるのは強いです。通常の AO から、ビルの階層全体に渡る “闇” まで、広い用途に使えます。Intensity は4までですが、ほぼ真っ暗になりますのでなかなか使い勝手が良い(遊べる)印象です。
AO自体のディテールはそこまで出ないのと、シングルパスで解像度の下がる問題があるので、VR でテクスチャ解像度やモデルの細かさを見せるような場合には逆効果になります。(マルチパスでは問題ないので、フレームレートが許すならOKです。)
Amplify Occlusion 1.2.3
Amplify Creations 製の AO。Industry Level を謳っている。
良い点
- 設定項目が少なめで使いやすい
- Post-Processing Stack に比べてディテールのある AO が出る。
- [Deffered] 光の当たっている部分を AO から除外できる。
- AO の色を変更できるので、絵作りを大きく変えられる。
悪い点
- 画面の端で AO が薄まる。(VR ヘッドセットの視界の端で、はっきりと視認できるレベル)
- [Single Pass Stereo Rendering] 非対応
感想
AO 自体の結果は良く、ディテール感のある品質の高い AO が得られます。下記が Post-Processing Stack との比較ですが、Amplify はより細かく AO が出ています。
ただし、Single Pass Stereo Rendering は非対応なのでそこは割り切りが必要です。対応はよ。
あと、Blur オプションを切ってしまうとノイズが出るので、設定値に合わせた Blur を設定する必要があります。使用時にはそういうのがある前提で必ずチェックしましょう。
Horizon Based Ambient Occlusion 2.5
NVIDIA が発表した Horizon-based Ambient Occlusion の Unity 用実装。NVIDIA による HBAO+ の紹介(旧 HBAO は見つけられなかった)
良い点
- 限定した位置に AO が出る。(AO の世界ではこういうのを Accurate というのだろうか。)
- AO の色を変更できるので、絵作りを変えられる。
- プリセットや設定項目が充実している。
- 画面端でも AO がブレない。
悪い点
- 特になし
感想
変に色の出現位置が散らないので、全体を壊さず確実な AO を効かせられそうです。これだけ見た目が変わるのであれば上の2つとはキャラ・用途が違うという感じで、目的次第な印象です。使い分けができる別の道具。
まとめ
基本 Post-Processing Stack を使っている場合、もっといいのが欲しくなったら Amplify や HBAO には手を出すだけの価値がありそうです。光が当たる部分の AO 除外や、HBAO の色が散りにくい感じはきちんと画にメリハリを与えてくれるので、全体のクオリティが一気に上がりますし、邪魔をしないので使いやすい印象です。
Post-Processing Stack と Amplify で画面端の AO が薄くなるのは、スクリーンスペースである以上普通に作ったらそうなるのかなーと想像してます。画面外のものを考慮できない以上、近くの遮蔽度合いをキャッシュしておくとか、画面の端ほど Intensity を上げるとか、時間軸でそこの色をキャッシュしておくような工夫が必要なんだろうなあと言う気がします。
比べれば比べるほど違いが見えてきて楽しいですね。こういうときはどうなるの!って質問があったら Twitter まで。暇な時に比較します。
2017年9月18日