コンテンツにスキップ

ワールドのライティングガイド

ワールド制作初心者が陥りがちなライティングのミス、ライトを設定するうえでの注意点や、Unityにおけるライトの概念を紹介する記事。

キーワード:環境光 ライトマップ ライトプローブ

見落とされがちな環境光

ワールドを照らす光の種類

Unityで用意されているライトで代表的なものとしてディレクショナルライトスポットライトポイントライトがあります。これらはコンポーネントが用意されて、オブジェクトを生成してポンと置くだけで照らしてくれるのでわかりやすいと思います。

ただこれらのライト以外にワールドの見た目を決定するうえで重要なライトがあります。

環境光

環境光とは、ワールド全体をぼんやりと照らす光のことで、現実では空全体の光や、地面の照り返しなどのことです。 このライトは他のライトコンポーネントと違い、コンポーネントではありません。 ちょっと奥まったところに設定があるので見落とされがちです。

この設定がうまくされていない場合、以下のように影が真っ黒になってしまいます。こうなってしまっているワールドをたまに見かけます。

ワールド全体をゆるく照らす光がないため、ディレクショナルライトの影部分は、光が全く当たっていない=完全な闇となるためです。

左:環境光がないため影が完全な闇になっている。 右:環境光があると影部分は完全な闇にはならない。

環境光の設定方法

実は特に設定していなくても、基本的には環境光は自動で生成されます。ただ、VRCSDKの設定で自動でライトマップ(後述)を生成する機能をオフにするため、環境光が生成されないままになってしまうときがあります。

(なぜオフにされているのかというと、ライトマップの生成というのは場合によっては非常にPCに負荷のかかる処理のため、1つオブジェクトを動かしたら再生成されたりするとPCが重くなって作業がしにくいためです。そのため基本オフで作業をして最後に手動でライトマップを生成するという作業手順が推奨されています。)

環境光の設定はツールバー->Window->Rendering->Lighting Settingsにあり、以下のような画面です。

Generate Lighting ボタンを押せばライトマップが生成され、同時に環境光も生成されます。 環境光はデフォルトではSkyboxを元に生成されます。

ワールドの影が真っ黒。という場合はまず環境光が生成されているか確認するとよいです。

ライトベイクをしよう

ライトマップの生成、いわゆるライトを焼くライトベイクと呼ばれるものがなんなのか?どう行うのかについて解説します。

ライトを焼く必要性

ディレクショナルライトやポイントライトを配置すればワールドは照らすことができます。しかしこのままライトを置き続けると、それぞれのライトの影響を受ける全てのオブジェクトで毎フレーム光の計算を行う必要があります。これらはとても重い処理で、ライトを増やせばそれだけワールドが重くなります。またポイントライトなどはリアルタイムライトだと同時に照らせる数に限りがあります。

では負荷を抑えつつライトをたくさん使うにはどうすればいいか?その方法の一つがライトベイクです。

ライトベイクとは

動かないライトと動かないオブジェクトの場合、オブジェクトが受ける光の影響は変化しません。なら、事前に計算してしまって、以降はずっとのその情報を使えばよいのでは?というのがライトベイクの発想です。

Unityでは「動かないライト=Bake設定されたライト」と、「動かないオブジェクト=スタティック設定されたオブジェクト」を見て、ライト計算の結果をテクスチャ(ライトマップ)に描き込むことで実現しています。こうすることで大部分の動かないライトが動かないオブジェクトを照らす光の計算をカットすることができます。

あらかじめ動かないとわかっているオブジェクトをStatic設定したほうがいいのはこのためです。

また、ライトベイクは光の跳ね返りまで計算するので、より自然な光の見た目になります。

ライトベイクのやりかた

1. 動かないオブジェクトをStatic設定にする

動かないとわかっているオブジェクトをスタティック設定にします。基本的にはオブジェクトのインスペクタのStaticにチェックを入れればOKです。

2. 動かないライトをBakeモードにする

動かないとわかっているライトをMixed、もしくはBakedモードにします。Mixedモードは動くオブジェクトに対しては通常のリアルタイムなライト計算、スタティックなオブジェクトに対してはベイクしたライトマップを使うというモードです。

使い分けとしては、たとえばディレクショナルライトで、アバターと動かないオブジェクト両方で影を落としたい場合はMixedを選択します。特にアバターや動くオブジェクトの影が不要であればBakedを選択します。

3. ライトをベイクする

ツールバー->Window->Rendering->Lighting SettingsからGenerate Lightingを選択します。