[Unity]ライトベイクを試してみる

# 概要
ライトのベイクをちょっと試してみたい人用の記事です。
DirectionalLightのベイクとEmissiveのベイクをやっていきます。
# 本文
サンプルとしてこのような環境を作ってみました。照明はDirectionalLight一つだけです。
![スクリーンショット 2023-09-17 22.51.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/991b13b3-4515-f437-87ec-a6878658efc2.png)
壁のオブジェクトはStaticのチェックを入れてCastShadowsはOn。StaticShadowCasterにチェックを入れておきます。今回の場合は全ての壁をまとめて選択していっぺんに設定しました。
![スクリーンショット 2023-09-17 22.53.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/913c757a-5cef-ae1b-7e4e-45b39ad39dcc.png)
DirectionalLight等「ベイクされたライトマップとリアルタイム処理された影を合わせたい場合」はModeにMixedを選びます。間接照明などはBakedが良さそうです。
今回は動作確認のためにBakedを選択しました。
![スクリーンショット 2023-09-17 22.58.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/8700c1c9-fcad-4387-6f9c-451bd4ccd1d7.png)
Lighting設定画面を表示します。
Window > Rendering > Lighting
![スクリーンショット 2023-09-17 23.17.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/5137784b-dbfd-7bb4-720a-1e5fba3b3ffa.png)
Sceneタブが選ばれていることを確認して、一番下にあるGenerateLightingボタンを押すとライトのベイクが始まります。
![スクリーンショット 2023-09-17 23.15.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/d02aa520-7fd5-65b8-6466-a371b52814f8.png)

# ベイク結果の確認
シーンフォルダの中にライトマップファイルが生成されたことが確認できました。
![スクリーンショット 2023-09-17 23.28.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/4843d145-eb1c-927d-d5e8-a1849c504c87.png)
ライトマップはテクスチャに直接影を描くわけではありません。テクスチャは元の画像のままでした。
![Cube_BakeJob_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/b9c75349-e854-9188-7bfc-7e7d754513e7.png)
試しにDirectionalLightをOFFにしてみます。光源が無くなってもオブジェクトの表面に光源情報が焼きついているので影は消えません。（空は暗くなります）
![スクリーンショット 2023-09-17 23.32.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/153fdafc-31aa-89f7-27d4-9ed7c89f05b4.png)
さらに右側の壁を非表示にしてみると壁が作っていた影だけは残されていることが確認できます。市松模様のブロックは移動させても乗っている影はそのままなことも確認できました。
(LightのModeを今回はBakedにしたことによる現象です。ゲーム中に移動するキャラの影などリアルタイムに変化して欲しい時はMixedにすればこのようにはなりません)
![スクリーンショット 2023-09-18 9.01.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/e61140e4-1f07-7d40-1854-577781c18606.png)

# Global Illuminationのベイク
次はスクショのようにEmission付きMaterialを設定した箱を右側の壁に２つ付けました。
![スクリーンショット 2023-09-19 21.02.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/dcb9dafd-aa25-b0cb-e47d-2e129bffa133.png)
![スクリーンショット 2023-09-19 21.02.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/b77c0732-dea4-effd-014d-e307e1ca33d0.png)
箱が発光している様には見えますが、その光は地面を照らしてる様には見えません。

箱オブジェクトのMeshRenderer > Lighting > Contribute Global Illuminationにチェックをつけて
![スクリーンショット 2023-09-19 21.08.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/25f0095a-deac-36fe-da93-695b140224f4.png)
先ほどのGenerateLightingを押す前にRealtimeGlobalIlluminationにチェックをつけます。
![スクリーンショット 2023-09-19 21.10.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/bd85eaad-3964-40ec-51d3-c04690acc45b.png)
ベイクが完了すると箱の出す光が壁にも映し出されて表現が少しリッチになりました:raised_hands_tone2:
![スクリーンショット 2023-09-19 21.16.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/ae90b568-b6a5-b91e-a2b6-0382cd058303.png)

# 補足1
Sceneビューの上にあるShadingモード切り替えボタンからShaded -> Baked Lightmapに切り替えると
![スクリーンショット 2023-09-19 21.23.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/258c5a5e-d265-05a4-e785-ea445cd29f4f.png)
ベイクされたライトマップ情報だけを確認することもできます。
![スクリーンショット 2023-09-19 21.24.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/91fb24c2-134a-427d-61be-87f4baf3e267.png)


# 補足2
生成されたライトマップはオブジェクトごとに作られるので規模が大きくなるとその数も膨大になってしまいます。アプリのデータサイズは膨大になりますが静的な情報なので処理負荷はある程度軽く済むようです。

今回は試していませんが、アセットの「Mesh Baker」を使えばこのライトマップも一つにまとめることができるようです！

# おまけ
ベイクされたライトマップを利用すればいい感じの夜を表現することもできます。DirectionalLightのIntensityをゆっくり0に近づけると夜に切り替わります。
![スクリーンショット 2023-09-19 22.13.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/4af9163f-731e-4b46-3290-196d2fc1e8da.png)


# 参考サイト
(記事)
[ライトベイクの基本を学ぼう](https://creator.cluster.mu/2022/04/19/masaki-light-bake/)
[【Unity】ライトをベイクして軽量化しよう！ベイクのやり方](https://umistudioblog.com/lightbake/)
[【Unity】グローバルイルミネーション（GI）基礎知識～STYLYへの反映方法](https://styly.cc/ja/tips/gi-room_yosh_gi/)
(動画)
[ライトマップの基礎知識 #1 : リアルタイムライト | Unite Now 2020](https://www.youtube.com/watch?v=sA7AQPbXdZ4)
[ライトマップの基礎知識 #2 : ライトのベイク | Unite Now 2020](https://www.youtube.com/watch?v=8QM6ZCEsFXE)
[ライトマップの基礎知識 #3 : リアルタイムとベイクの合成 | Unite Now 2020](https://www.youtube.com/watch?v=i27Gsm-33rA)
[【Unity】照明の基本を勉強する【ベイクって何？？】](https://www.youtube.com/watch?v=Fbwlpu9AXD4)
[Unity Lightmap：一緒に見てくと意外と簡単【Unity】](https://www.youtube.com/watch?v=0sokvFM41EY)