
見てください、リンカ先生!
部屋にライトをたくさん置いたら、すごくエモくなりました💡💡✨✨

……ずいぶん置いたね💦
でも、ライトは気をつけないとワールドの負荷が大きくなりやすいよ
Unityでは、Lightを配置するだけで簡単にワールドを明るくできます。
ただし、何も考えずにライトを増やしていくと、ワールドに大きな負荷を与えてしまう可能性があります。
この記事では、ライトによる負荷を抑える「ライトベイク」の仕組みと、Unityでの設定手順を初心者向けに解説します。
この記事を読み終えると、次のことができるようになります。
Lightのモード(Mode)
UnityのLightには、光の計算方法によっていくつかのモード(Mode)があります。
この記事では、基本となる以下の2つを扱います。
- Realtime
- Baked

Realtime Lightとは?
Realtime Lightは、ワールドの実行中に光を計算するライトです。
ライトの位置や色、明るさなどが変わると、その変化がその場で周囲へ反映されます。
そのため、たとえば次のような用途に向いています。
- 懐中電灯
- 持ち運ぶランタン
- 点灯・消灯する照明
- 点滅する蛍光灯
- 動くスポットライト
- ギミックによって色が変わるライト
Realtime Lightは、ライト自身やワールド内のオブジェクトの動きに対して柔軟に対応できる一方で、ワールドの実行中に光の計算が必要です。
そのため、ワールド内のライトやオブジェクトが多く複雑になると、描画負荷が増えやすくなり、パフォーマンスが低下する可能性があります。

うーん…それは困った

そこで「Baked Light」の登場だよ!💡
Baked Lightとは?
Baked Lightは、ライトによる明るさや影を事前に計算し、その結果をワールドへ保存して使用するライトです。
この事前計算を、ライトベイクと呼びます。
Baked Lightは、位置や色、明るさが変化しない照明に向いています。
たとえば、次のような用途です。
- 天井に固定された室内灯
- 街灯
- 廊下の照明
- 建物の外灯
- 石灯篭
- 常に同じ状態で点灯している照明

確かにこれらはずっと動かないですもんね…

そう!だから事前にどのように周囲が照らされるかを計算しておけるんだ
ライトベイクを行うと、光の計算結果が「ライトマップ」へ保存されます。
こうすることで、ワールドの実行中に同じ照明を毎回計算する必要がなくなるため、固定された照明を効率よく表現できます。
一方で、ベイクされた光は画像のように周囲へ焼き付けられます。そのため、実行中にライトを消しても、すでに焼き付けられた明るさは消えません。

「ベイク」は「焼く」って意味。
ライトを画像のように焼き付けておくから「ライトベイク」っていうんだ💡
どちらを使えばいい?
「Realtime」と「Baked」のどちらを使えばよいかの判断基準はシンプルです。
- ワールドの実行中に光を移動・変化させたいならRealtime
- 動かさず、同じ状態で使うならBaked
ライトベイクとは?
Realtime Lightは基本的に配置するだけで完了なのですが、Baked Lightの場合は「ライトベイク」という事前処理が必要です。
ライトベイクは、Baked Lightによる明るさや影などをUnity上であらかじめ計算し、その結果をワールドに保存する処理です。
ライトがオブジェクトをどのように照らすのかを事前に計算し、その結果をライトマップと呼ばれるテクスチャなどに焼き付けます。

LightコンポーネントのModeをBakedに変更すると、そのライトはライトベイクに使用できる状態になります。
しかし、ModeをBakedに変更しただけでは、ライトベイクは完了していません。
次のような手順でライトベイクを行う必要があります。
- 光を受けるオブジェクトをベイク対象にする
- Generate Lightingを実行する

詳しく見ていこう!
ライトベイクしてみよう
では、実際にライトベイクを行ってみましょう。
この記事では、「Point LightでCubeとFloorを照らす」というシンプルなシーンを設定してライトベイクを行います。
1. ライトの設定
LightのInspectorから、Modeを「Baked」に変更します。

2. ライトを受けるオブジェクトの設定
ライトベイクでは、ライトだけでなく、光を受ける床や壁などのオブジェクトも設定する必要があります。
まず、Hierarchyでライトベイクの対象にしたいオブジェクトを選択します。
そしてInspectorの右上の「Static」にチェックを入れます。

Staticは、Unityに対して「このオブジェクトは、ワールドの実行中に動きません」と伝えるための設定です。
ワールド内で動かないことが分かっていれば、Unityはゲームが始まる前に、さまざまな計算を済ませておくことができます。たとえば次のような内容を事前に計算します。
- オブジェクトのどこに光が当たるか
- どこに影ができるか
- 周囲からどのような反射光を受けるか
3. ライトベイクの実行
上部メニュー「Window > Rendering > Lighting」でLightingウィンドウを開きます。
そして、「Sceneタブ」の下の方にある「Generate Lighting」をクリックして、ライトベイクを行います。

ライトの数やSceneの広さによっては、計算に少し時間がかかります。処理が終わるまで待ちましょう。
ライトベイクが完了したら、Lightingウィンドウの「Baked Lightmapsタブ」を開きます。
ライトマップが作成されていれば、ライトベイクは完了です。

ベイク後の動きを確認しよう
最後に、Baked Lightの動きを確認します。
ClientSimまたはBuild & Testを起動し、CubeやFloorがライトで照らされていることを確認してください。

なお、ライトの位置や色、明るさを変えたり、光を受けるオブジェクトを移動した場合には、再度ライトベイクを行ってライトマップを作り直す必要があります。
Baked Lightの注意点
冒頭でも説明しましたが、Baked Lightは事前にライトの照らし具合を計算して画像のように焼き付けます。
したがって、ワールドの実行中にライトが移動したり色や明るさが変化しても、その変化を反映することはできません。
また、ライトを受けるオブジェクト側が移動した場合も、その変化に対応することはできません。
まとめ
今回は、ライトによる負荷を抑える「ライトベイク」の仕組みと、Unityでの設定手順を確認しました。
ライトベイクの流れは、次のとおりです。
- LightのModeをBakedにする
- 光を受けるオブジェクトの「Static」にチェックを入れる
- Generate Lightingを実行する
大切なのは、LightのModeをBakedにしただけでは、ライトベイクは完了していない、ということです。

動かない照明にはBaked Light、実行中に変化させたい照明にはRealtime Light。
まずは、この使い分けを覚えておこう!



コメント