今回はLightingの設定ごとにシーンやオブジェクトにどのような影響があるか調査して表にまとめていこうと思います。
環境
Unity:2020.3.31
HDRP:10.8.1
検証内容
今回は以下のような環境でテストを作成して、それぞれのLightingのType(発光側)とMeshRenderer(光を受ける側)の設定がどのように作用するか全てを表にまとめていきます。あとLight Probeの有無も含めます。
検証環境
シーンには光が一切ない状態
Light Probeを配置したときのシーンはこんな感じ
その他全体の設定としては
・ベイクした情報は毎回クリアしてる
・Lightは全てShadowを有効
・Mesh Rendererはcast shadowをOn
以下の表にまとめているのでそこから気になった部分の考察や検証を行なっていきます。
ここから「specular反射」と「色にじみ」という単語が出てきます。簡単に説明するとspecular反射が鏡面反射で、色にじみ(カラーブリード)が近くのオブジェクトの色が他の色に影響を与えることです。
「色にじみ」に関しては本に載っていた単語なのでUnityでは別の呼び方をしているかもしれませんが、当記事では「色にじみ」の表現を使います。
Specular反射について詳しく知りたい方はこちらの記事が参考になります。
物理ベースレンダリングを柔らかく説明してみる(1) - Qiita
検証結果
Type | RealTime | Mixed | Baked | |
---|---|---|---|---|
Static/ Light map |
Direct ional |
specular反射有(動的) 影有(動的) |
specular反射有(動的) 影有(動的) 色にじみ有(固定) |
specular反射有(固定) 影有(固定) 色にじみ有(固定) |
Point |
specular反射有(動的) 影有(動的) |
specular反射有(動的) 影有(動的) |
specular反射有(固定) 影有(固定) |
|
Spot |
specular反射有(動的) 影有(動的) |
specular反射有(動的) 影有(動的) |
specular反射有(固定) 影有(固定) 色にじみ有(固定) |
|
Area |
specular反射有(動的) 影有(動的) |
specular反射有(動的) 影有(動的) |
specular反射有(固定) 影有(固定) |
|
Static/ Light Probe |
Direct ional |
specular反射有(動的) 影有(動的) |
specular反射有(動的) 影有(動的) 色にじみ有(固定) |
specular反射無 影有(固定・粗い) 色にじみ有(固定) |
Point |
specular反射有(動的) 影有(動的) |
specular反射有(動的) 影有(動的) |
specular反射無 影有(固定) |
|
Spot |
specular反射有(動的) 影有(動的) |
specular反射有(動的) 影有(動的) |
specular反射有(固定) 影有(固定) 色にじみ有(固定) |
|
Area |
specular反射有(動的) 影有(動的) |
specular反射有(動的) 影有(動的) |
specular反射無 影有(固定) |
|
Dynamic |
Direct ional |
specular反射有(動的) 影有(動的) |
specular反射有(動的) 影有(動的) 色にじみ無 |
specular反射無 影無 色にじみ無 |
Point |
specular反射有(動的) 影有(動的) |
specular反射有(動的) 影有(動的) |
specular反射無 影無 |
|
Spot |
specular反射有(動的) 影有(動的) |
specular反射有(動的) 影有(動的) |
specular反射無 影無 |
|
Area |
specular反射有(動的) 影有(動的) |
specular反射有(動的) 影有(動的) |
specular反射無 影無 |
考察&検証
何故contribute GIの表がないのか?
検証環境の画像にはcontribute GI/Lightmapが入っています。何故表にないかというと
実は私がcontribute GIを理解していなかったこともあり、最初一緒に検証しました。
後々ドキュメントを見るとcontribute GIをつけることこそがオブジェクトにLightmapとLight Probeの影響を与えるトリガーだったみたいです。
つまり画像左上(Static/Lightmap)と右下(contribute GI/LIghtmap)は同じ状態のオブジェクトということです笑
通りで何も変わらないと思いました。
RealTImeでは色にじみが表現できない?
RealTimeでは以下の画像のような、オブジェクトの色が他のオブジェクトに影響する色にじみが表現できませんでした
後述していますが、色にじみの結果はLightmapに一緒に書き込まれるので、Lightmapを生成しないRealTimeだけでは色にじみは表現できません。
Light Probeはとりあえずつけておくでよし
今回わかったこととしてLight Probeをつけることで、動的なオブジェクトがあるときにより正確なライティングが再現可能だったということです。
Light ProbeはそのポイントでのLight情報を持っていて他のオブジェクトに渡すので、計算コストを抑えた間接光の再現する手法かなと理解しました。
Light Probeついてないアセットあんまりみたことないし、とりあえずつけておくで良さそう。ただ、配置方法についてはもう少し研究する必要があるかなと思いました。
RealTimeとmixedで影の落ち方が異なる
RealTime
mixed
LightmapデータをクリアにすることでmixedはRealTimeの影に近づきます。
つまり、mixedでもベイク可能(Lightmapが生成される)ということ。
mixedでベイクをすることで間接光のLightmap Data情報を用意することが可能。Specular反射と影はRealTimeに近い形がとられ、間接光は予め用意したものを使っていた。それと比べてRealTimeではLightmap Dataが生成されないのでこういう現象が起こっていたのでした。
mixedを知るために少しやり方を変更
bakedのSpot Lightを用意してbakeした状態が以下です。この状態から反対側にmixedのDirectional Lightを用意したときにどうなるか検証します。
Dynamic以外のオブジェクトには影が二つできた!
もちろんSpot Lightの方はbakedなのでSpot LIghtを動かしても影は動かない
ちなみにSpotLightをmixedに変更してみたらSpot Lightのon/offが動的に切り替えられた!この表現はよく使うので覚えておきたい
また、今回はLighting Modeはbakedで行いましたが、公式のmixedライティングの説明ではLighting Modeによって動作が変わるみたいです。それはまた別の機会に検証行おうかなと思います。
Light Probeが存在する状態でBaked Lightの影が正確に動的オブジェクトに反映されない
自分の考察ではLight Probeがあれば動的なオブジェクトにも影が落ちると考察していましたが、Light Probeは正確な影の情報は持っていないみたいでした。
正確な影は落ちないが、暗い場所なのでオブジェクトが暗くなるといったことは再現できるっぽい
LightProbeはベイクしないと効果を発揮しない
今回の検証では動的になくすなどはできなかった。
→LightProbeの情報をランタイムで更新する方法がないか調べてみます。
Area Lightのシャドウ変じゃない?
以下の画像を見てもらいたい(見にくいけどごめん)
Area Lightがもし全面均一に発光しているのだとしたら、影は本来Sphereの真下に現れるはず
なのに影は明らかにArea Lightの中心からのみ発光されているように出ていた。
これは自分の仕様に対する勘違い。Directinal Lightのような挙動だと思っていた。皆さんも間違えないように注意
Lightmapデータを削除したのに照らされているのはなぜ?
bakedのライトのみが存在するシーンで一度ベイク、その後にベイクしたLightmap情報を削除してもシーンは明るいまま?どういうこと?
普通暗くなるのでは...?
Emissionは光源ではなかった
今回ついでにEmissionも使ってみました。今までEmissionも単体で光源になると思っていたが認識が違っていた。
Lightなどの光源に反応して発光する効果という意味で使われるものということがわかりました。
環境光は影を落とすのか検証
Lightが何もない状態でHDRI Skyのみ20000Luxにしてベイク
結果→落とさない
今回かなりLightに関して理解が深まりました。
他にも気になることがあれば検証していきたいと思うのでTwitterのDMかこの記事にコメントしていってください!
それでは