概要
ライトのベイクをちょっと試してみたい人用の記事です。
DirectionalLightのベイクとEmissiveのベイクをやっていきます。
本文
サンプルとしてこのような環境を作ってみました。照明はDirectionalLight一つだけです。
壁のオブジェクトはStaticのチェックを入れてCastShadowsはOn。StaticShadowCasterにチェックを入れておきます。今回の場合は全ての壁をまとめて選択していっぺんに設定しました。
DirectionalLight等「ベイクされたライトマップとリアルタイム処理された影を合わせたい場合」はModeにMixedを選びます。間接照明などはBakedが良さそうです。
今回は動作確認のためにBakedを選択しました。
Lighting設定画面を表示します。
Window > Rendering > Lighting
Sceneタブが選ばれていることを確認して、一番下にあるGenerateLightingボタンを押すとライトのベイクが始まります。
ベイク結果の確認
シーンフォルダの中にライトマップファイルが生成されたことが確認できました。
ライトマップはテクスチャに直接影を描くわけではありません。テクスチャは元の画像のままでした。
試しにDirectionalLightをOFFにしてみます。光源が無くなってもオブジェクトの表面に光源情報が焼きついているので影は消えません。(空は暗くなります)
さらに右側の壁を非表示にしてみると壁が作っていた影だけは残されていることが確認できます。市松模様のブロックは移動させても乗っている影はそのままなことも確認できました。
(LightのModeを今回はBakedにしたことによる現象です。ゲーム中に移動するキャラの影などリアルタイムに変化して欲しい時はMixedにすればこのようにはなりません)
Global Illuminationのベイク
次はスクショのようにEmission付きMaterialを設定した箱を右側の壁に2つ付けました。
箱が発光している様には見えますが、その光は地面を照らしてる様には見えません。
箱オブジェクトのMeshRenderer > Lighting > Contribute Global Illuminationにチェックをつけて
先ほどのGenerateLightingを押す前にRealtimeGlobalIlluminationにチェックをつけます。
ベイクが完了すると箱の出す光が壁にも映し出されて表現が少しリッチになりました
補足1
Sceneビューの上にあるShadingモード切り替えボタンからShaded -> Baked Lightmapに切り替えると
ベイクされたライトマップ情報だけを確認することもできます。
補足2
生成されたライトマップはオブジェクトごとに作られるので規模が大きくなるとその数も膨大になってしまいます。アプリのデータサイズは膨大になりますが静的な情報なので処理負荷はある程度軽く済むようです。
今回は試していませんが、アセットの「Mesh Baker」を使えばこのライトマップも一つにまとめることができるようです!
おまけ
ベイクされたライトマップを利用すればいい感じの夜を表現することもできます。DirectionalLightのIntensityをゆっくり0に近づけると夜に切り替わります。
参考サイト
(記事)
ライトベイクの基本を学ぼう
【Unity】ライトをベイクして軽量化しよう!ベイクのやり方
【Unity】グローバルイルミネーション(GI)基礎知識~STYLYへの反映方法
(動画)
ライトマップの基礎知識 #1 : リアルタイムライト | Unite Now 2020
ライトマップの基礎知識 #2 : ライトのベイク | Unite Now 2020
ライトマップの基礎知識 #3 : リアルタイムとベイクの合成 | Unite Now 2020
【Unity】照明の基本を勉強する【ベイクって何??】
Unity Lightmap:一緒に見てくと意外と簡単【Unity】