新しい記事
前回 Unity5 で画面を綺麗にするライティングに挑戦してみるメモ で大雑把なライティングについてのメモを書きました。
今回は屋内でのライティングについて色々試しました。
目次
屋内のライティング
前回紹介した方法は基本的に屋外のやり方なので、屋内…つまり環境光が基本なライティングではない場所では少し使い勝手が悪いです。
というのも、Unityのモデルは基本的に環境光(Ambient Light)の影響をうけるため、屋内なのに「空の影響を受ける」事となる為です。
下の画像は空の影響をモロに受けて何となく青くなっています。
Unity4までは環境光が初期状態では非常に低い値が設定されていた為に、暗い所は暗くなっていたのですが、Unity5より基本値が明るくなった為、暗い所も明るめになってしまっています。
Reflection Probe
そこでReflectionProbeを配置します。ReflectionProbeは範囲内のレンダリング結果を取得し、その情報を元に反射や色等を設定する機能です。ReflectionProbeを部屋の中心とかその辺りに配置すると、空の色ではなく反射結果を元に描画してくれます。
なおReflectionProbeがBake(事前計算)の場合は、ReflectionProbeに映るのはstatic(Reflection Probe static)なオブジェクトのみです。dynamicにすると静的ではないオブジェクトも写りますが負荷が上がります。
ちなみにReflectionProbeの影響範囲はReflectionProbeを選択した時に表示される黄色い枠の範囲内です。この枠の範囲内にあるMeshが影響を受け、色を塗る際に使用されます。なので、部屋の壁に枠が含まれるような形でReflectionProbeのサイズを調整します。
ReflectionProbeは反射率の高い…例えば金や鉄といった物質も高い影響を受けます。ReflectionProbeの範囲内にある場合、下のロボットのように表面に反射したオブジェクトが映り込んだりします。
それと、ReflectionProbeの影響範囲が重複してしまった場合、ReflectionProbeは両方をブレンドして表示しようとします。その場合、例えば屋外のReflectionProbeと屋内のReflectionProbeが混ざって妙に明るい壁が出来たりします。
そういった場合、AnchorOverride を選択する事で、アンカーの近くのReflectionProbeを使用して描画する事ができます。ちょっとだけ便利。
ちなみにReflectionProbeはどちらかと言えば風景・遠距離の映り込みに対して有効な技術で、鏡などの接地面に対しての反射等に関してはSSR(Screen Space Reflection)と呼ばれるアプローチが望ましいです。テーブルのコップが反射してるとか、そういった奴です。これをやりたい場合は、kode80氏のSSRが使えるかもしれません。ちなみにSSR自体すごく重いエフェクトなので、普通にゲームに使いたい場合は注意です。
kode80 - Screen Space Reflections in Unity 5
Color Collection
後は屋内ならカラーコレクションで「明るい所」と「暗い所」をハッキリさせるとかすると、かなり絵的にいい感じになる気がします。勿論、調整しなければ正しい感じの絵になりますが、普通に写真を撮った時と同じように、退屈です。
ちなみにカラーコレクションの設定は屋内・屋外・壁の色・その他諸々の条件でベストな値が変わるので、範囲内になったらカラコレを調整するような機能を用意しても良いかもしれません。
Unityの場合、カラーコレクションはColor Collectionや Color Collection Lookup で設定します。後はkeijiro/ColorSuite が評判良い感じです。
それとBloomとSSAOを使うと下のような絵になります。
ImageEffectの適応順はImage Effectの実行順番 を参照。
カラコレの使い方は絶賛学習中なので、慣れてる人 何処か参考になるサイトや練習方法を教えてください m(_ _)m