【Unity】複数配置したライトが消える?RenderModeを見直したら解決した!

 ライティングを使うと3Dの見栄えがグッと良くなります。
Unityで開発中の「Celestial Ball」でもステージの一部分を照らすため、スポットライトを配置しました。
ところが、追加したスポットライトが消されてしまったというか、うまく表示されませんでした。
結論としては「RenderMode」を見直したら解決したので、その時の解決法です。


プレイヤーが操作するボールにライトを仕込んで発光するようにしています。
そのためステージ全体を暗くしているのですが、配置されているオブジェクトが見辛い問題がありました。
そこでヒントとなるオブジェクトをスポットライトで照らすようにしました。

PCのエディタ上では意図通りに表示されました。

spot1.jpg

赤矢印の部分のスポットライトがあたり、オブジェクトが照らされているのがわかります。
よっしゃできたやん、と思ってandroid端末で実機確認したところ、問題が発生しました。

spot2.jpg

スポットライトが消えてました。
正確には、別のライトと干渉して表示されなくなってしまいました。

なんでや、と思って色々調べたらこんな記事を見つけました。

画面のちらつきや、実行環境の違いによるレンダリング結果の変化、の原因になるので、Autoは基本的に利用しない。

🔍RenderModeの設定によるライティングの変化より引用

なるほど、配置したばかりのライトの RenderMode はデフォルトで「Auto」になっているんですね。
RenderMode というのは、選択中のライトの描画の優先度を設定できる項目です。ライティングの忠実性を守るのか、パフォーマンスを優先するのか、そういった設定ができます。
RenderMode を「Important」に変更すると…。

spot3.jpg

表示されました。

さて、先程の記事をじっくり読むと、「Important」は綺麗にレンダリングされるが、計算コストが高い(=処理が重い)のだそう。
何でもかんでも「Important」にするというよりは、消えると困るライト(懐中電灯の明かり、車のヘッドライトなど)に使うのがよさそうです。