おもちゃラボ

Unityで遊びを作ってます

【Unity】Ambient Occlusionを綺麗に見せる3つの方法

ライトをベイクするとき、あわせてAmbient Occlusionの設定もすることが多いと思います。このAmbient Occlusionがなかなかの曲者で、適当に設定すると綺麗に見えないのです。ここではライトをベイクする際にオススメなAmbient Occlusionの設定を3つ紹介します。

f:id:nn_hokuson:20170306193548j:plain

Precomputed Realtime GIはオンのままで

Precomputed Realtime GIはメニューバーから「Window」→「Lighting」で表示される項目の一つです。これをオフにすると、ろくなことにならないので、基本的にはオンのままにしておきましょう。

f:id:nn_hokuson:20170306190812p:plain:w400

かといって、シーンを下手に構成すると事前計算に膨大な時間がかかるそうなので、一度この資料に目を通しておくと良いと思います。

unity3d.com

AOの強度はIndirectを中心に設定

次にAmbient Occlusionの設定です。Max Distanceは特別なことがなければ1.0のままで良いです。これで1mの範囲でAmbient Occlusionが計算されるようになります。

f:id:nn_hokuson:20170306191131p:plain:w400

続いてIndirectとDirectの項目です。基本的にはAmbient Occlusionの強度はIndirectで設定します。Directは「もう少し暗いところを暗くしたい」というときに少しずつ強度を上げて見ます。あまりに上げすぎると不自然な絵になります。

下記のキャプチャはDirectは0のままでIndirectを0、3、6と変化させたときの結果です。Indirectを上げるにしたがって赤いキューブと黄色キューブの隙間がだんだん暗くなっていくのがわかると思います。

f:id:nn_hokuson:20170306192057p:plain

次にIndirectは1に固定したまま、Directを1、5、10と変化させたときの結果です。3つのキューブの隙間がどんどん暗くなっていきます。キューブの隙間から闇が広がっていく感じですね・・・・Direct=10は不自然すぎます。

f:id:nn_hokuson:20170306192655p:plain

ということで、基本はIndirectでAmbient Occlusionの強度を決めて、Directは味付け程度と考えておきましょう。

少しだけオブジェクトと床の間に隙間をつくる

これは裏技的な感じですが・・・・オブジェクトと床の間に少しだけ隙間を作ることで、その隙間がAmbient Occlusionによって暗くなります。これにより、接地面が強調され綺麗に見えます(場合によりますが・・・)。

f:id:nn_hokuson:20170306192848p:plain:w450

左の箱は少しだけ床面から浮かせています。右奥の箱は床にめり込んでいます。

まとめ

この記事ではライトをベイクする際にAmbient Occlusionを綺麗に見せるための設定方法を3種類紹介しました。一方で、ライトをベイクしなくてもリアルタイムでもAmbient Occlusionをかけることもできます。

わざわざ苦労してライトをベイクしたり、ややこしいAmbient Occlusionの設定をしたくない!と言っても怒られない人(モバイル関係ではない人)は、Unityに用意されているカメラエフェクトを使ってみてください。ただし、結構計算コストは高くなるので注意です。