テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】Ambient Occlusionを設定

物の接地感を出すのにAmbient Occlusion(AO)を使うのは中々に有効です。その設定方法が少しわかりにくかったのでメモしておきます。

f:id:tsubaki_t1:20150918002357p:plain

Ambient Occlusion

Unity - マニュアル: Screen Space Ambient Occlusion曰く、

互いに接近している折り目、穴、地表を暗くする効果があります。現実世界においては、環境光を遮られ光効果を無視するため暗く見えます。

 との事。

ちなみにBlenderのマニュアル曰く

AO は照明とは全く関係ありません。描画トリックでしかない AO が自然に見えるのは、現実世界で間近にある面同士(小さなすきまなど)は影やほこりなどのせいで、前に何も置かれていない面より暗くなるためです。

 だそうで。

静的なライトマップに
Ambient Occlusionを焼く

簡単なステージを作ってみました。早速AOを焼いてみます。

f:id:tsubaki_t1:20150918001237p:plain

AOを焼くには、メニュー>Window>LightingAmbinet Occlusionを設定します。

これで焼けると思いきや、焼けないケースがあります。注目すべきは「Baked GI」にしかこの設定が無い事。つまり、BakeするライトでしかAOを焼く事が出来ません(当然と言えば当然ですが)

f:id:tsubaki_t1:20150918000910p:plain

f:id:tsubaki_t1:20150918003742p:plain

ライトマップのAOを機能させたければライトを焼く必要があります。
ライトを焼くアイディアとしては、Directional Lightの設定をBakedに設定したり、LightingのAmbient LightをBakedに設定したり。モデルを光らせているEmissionマテリアルをBakedに設定するのも良いかもしれません。

f:id:tsubaki_t1:20150918001914p:plain

これでBakeを行えば、AOが設定され境目が強調されるようになります。上の影のみと比較して、モデルの輪郭がクッキリと見えています。

f:id:tsubaki_t1:20150918002056p:plain

このAOの濃さと範囲ですが、色の濃さはAmbient OcclusionAOが判定する距離はMax Distanceを使用しています。

例えばAmbient Occlusionを3、Max Distanceを0.5とした時の絵はこんな感じになります。輪郭線がより強調されています。

f:id:tsubaki_t1:20150918002851p:plain

AOに使用するRayの数は、Lightmap Parametersで設定します。

メニュー > Assets > Lightmap Parametersで設定を作り、LightmappingのGeneral GIのDefault Parametersで切り替えます(個別に設定も可能)

f:id:tsubaki_t1:20150918004513p:plain

f:id:tsubaki_t1:20150918004520p:plain

この設定を上げると計算に時間がかかり、逆に下げると計算時間が超短くなりますがゴミというか、汚くなります。
上Quality 32(ベイクが一瞬で完了)、下 Quality512(時間かかった)

f:id:tsubaki_t1:20150918004853p:plain

f:id:tsubaki_t1:20150918004902p:plain

動的なオブジェクトにSSAOを設定する

動的なオブジェクトはAOを疑似的に行うSSAOのイメージエフェクトを使用します。
動的なオブジェクト以外にも、テクスチャのメモリを節約する用途や、ベイクするのが時間かかりすぎる巨大マップのようなケースでも活躍します。

設定手順はこんな感じです。

  1. メニュー > Assets > Import Package > Effect をインポート
  2. CameraにScreen Space Ambient Occlusionをアタッチ

f:id:tsubaki_t1:20150918005407p:plain

こっちでもソレなりに綺麗に見えます。

設定のポイントは最初に暗くする事だそうです。個人的な設定のアプローチとしては、下のような手順で設定していることが多いです。

  1. Occlusion Intensityを4、Blurを0、Downsamplingを0にする

    f:id:tsubaki_t1:20150918010154p:plain

  2. Radiusを操作しAOの大きさを決める

    f:id:tsubaki_t1:20150918010213p:plain

  3. Blurを上げてノイズを減らす

    f:id:tsubaki_t1:20150918010230p:plain

  4. Occlusion Intensityを綺麗に見える量まで下げる

    f:id:tsubaki_t1:20150918010243p:plain

アセット

ちなみにSSAOだとSE Screen-Space Ambient Occlusionなるアセットが個人的にはお気に入りです。
このアセットは黒単じゃなくて付近の色でAOを作るので、露骨なアウトラインじゃなくて割と自然な感じで色を出してくれます。

他にも色々とアルゴリズム違いのSSAOがあるので、試してみたい処。

f:id:tsubaki_t1:20150918010506p:plain

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

トンガルマン ブログ: Unity5のライティング機能を試してみた