Unityの環境光を遮って部分的に暗くする

Unityのゲームでは最初から環境光が有効になっており、直接光が当たっていない部分も明るくなっています。

環境光とはなんぞや?

という人もいると思いますが(わたくしもそうですが)直接光が当たっていない場所も光が回りこんだりしてほんのり明るく照らす光みたいです。

壁や地面等に当たって光が反射しその光が当たる事で物体を照らすのは間接光で環境光の一種みたいです。

間接光はゲームオブジェクトのstaticにチェックを入れる事で有効になります。

間接光が有効であれば草や木に当たった緑色の光が建物等に反射しほんのり緑色に見えます。

暗い洞窟でも入口付近は直接光が当たってなくてもほんのり明るいですね、それが環境光です。

詳しい所は置いておきましょう・・・・(-_-)

スポンサーリンク

環境光の設定

UnityではメニューからWindow→Lightingで環境光の設定が出来ます。

環境光の設定

デフォルトでは指定したSkyboxの色合いの環境光が設定されています。

Ambient SourceがSkyboxであれば

環境光をSkyboxにした時

↑のような感じになります。

Ambient SourceをColorにすると

AmbientSourceをColorにする

AmbientSourceをColorにした時の図

↑のように配置した建物が環境光によって色の見え方が変わります。

前置きがずいぶん長くなりましたが・・・、今回はこの環境光によって照らされている部分を遮りゲームオブジェクト同士の繋がっている部分や穴、面等を部分的に暗くする機能を使ってみます。

今回使用するスクリプトはStandardAssetsに入っています。

Screen Space Ambient Obscurance

カメラのインスペクタでAdd Component→Image Effects→Rendering→Screen Space Ambient Obscuranceを追加します。

ScreenSpaceAmbientObscurance

Intensityは強度
Radiusは範囲
Blur iterationsはブラ-を柔らかくする為の数値
Blur Filter Distanceはブラ-の距離
Downsamplingは品質によってレンダリングスピードをダウンサンプリングする数値

細かい部分は値を調整し探りましょう・・・・(-_-)

機能を確認する前に間接光を有効にする為、建物等の動かないゲームオブジェクトのインスペクタでstaticにチェックを入れます。

計算が入る為しばらく待つ必要があります。

動かないゲームオブジェクトはstaticにチェックを入れる

間接光なしとありで画像を比較してみます。

間接光なしとありの画像の比較

間接光ありの場合は地面の緑がかった光が建物に当たって少し緑がかっています。

それではUnityを実行し確認してみましょう。

↑のようになりました。

ゲームオブジェクトの接続面等の環境光が遮られ暗くなっていますね。

動画が暗くて解り辛いですが・・・・(^_^;)

Screen Space Ambient Occlusion

Screen Space Ambient Occlusionも同じような処理を行う事が出来ます。

カメラのインスペクタでAdd Component→Image Effects→Rendering→Screen Space Ambient Occlusionを追加します。

ScreenSpaceAmbientOcclusion

Radiusは範囲
Sample Countはサンプリングの回数の品質
Occlusion Intensityは環境光を無視する強度
Blurはぼやかす度合い
DownSamplingはダウンサンプリングの数値で、解像度より大きい値を設定するとレンダリングの速度が上がりますが品質が下がります。
Occlusion Attenuationは距離に応じて弱くする度合い
Min Zは画像に乱れが生じる場合に値を増加します

うん・・・・試してみましょう。

↑のようになりました。

Screen Space Ambient Obscuranceより効果が解り辛い感じです。

終わりに

UnityマニュアルでScreen Space Ambient Obscuranceを説明する項目に

すでに存在するスクリーンスペースアンビエントオクルージョン(SSAO)の品質と、「設定とハードウエアに依存する」速度によって改善されています。さらに、深さを基準として動的に再構築するため、生成された法線バッファに依存しません。

とあるのでScreen Space Ambient Occlusionを改善したものがScreen Space Ambient Obscuranceなのかもしれません。

と言う事はScreen Space Ambient Obscuranceを使った方がいいかもしれませんね。

参考サイト

Unityマニュアル-Screen Space Ambient Obscurance-

Unityマニュアルースクリーンスペースアンビエントオクルージョン(SSAO)ー