Unityでライトをベイクすると、物の表面の明るさや影を前もって計算し、ライトマップというテクスチャに保存できます。
ゲーム中に光の計算をしない分、処理が軽くなります。
ベイクの手順は、次の4つです。
- ベイクする物のMesh Rendererで Contribute Global Illumination をオンにする
- ライトのModeを Baked か Mixed にする
- Window → Rendering → Lighting を開き、Lighting Settingsのアセットを割り当てる
- Lightingウィンドウの下にある Generate Lighting を押す
この記事では、この手順と、ベイクしても暗いときの原因を説明します。
Unityのエディタでの実機での再現は含まず、Unity 6.3 LTSの公式マニュアルの記載(2026年10月18日に確認)に基づきます。
画面の名前は英語版の表記です。
ベイクで何が変わるか
公式マニュアルでは、ライトマップには直接光と、壁などに跳ね返った間接光の両方を入れられると説明されています。
一方で、ライトマップに焼き込んだ内容は、ゲーム中に変えられません。
マニュアルでは、ライトを動かせなくなる代わりに処理が軽くなり、スマートフォンなどの性能の低い機器に向くと説明されています。
Unityのライトマップは、Progressive Lightmapperで作られます。
ライトのModeを選ぶ
ライトをベイクするかどうかは、LightコンポーネントのModeで決めます。
| Mode | 直接光 | 間接光 | 向いているもの |
|---|---|---|---|
| Baked | ベイク | ベイク | 背景や環境の光 |
| Mixed | リアルタイム | ベイク | 動かないライト |
| Realtime | リアルタイム | なし(Enlightenを使う場合を除く) | 動く・壊れる・点滅するライト |
ゲーム中の負荷は、Bakedがいちばん小さく、Realtimeがいちばん大きいとされています。
マニュアルでは、Bakedのライトは、ゲーム中に設定を変えられず、鏡面の反射(スペキュラー)に関わらず、動く物には光も影も与えないと説明されています。
動くキャラクターにも光を当てたいライトは、Mixedにします。
MixedのライトはLighting Modeで動きが変わる
Mixedのライトの動きは、Lighting Settingsのアセットの Lighting Mode で決まります。
| Lighting Mode | 特徴 |
|---|---|
| Distance Shadowmask | 遠くまで影を表現できるが、負荷がいちばん大きい |
| Shadowmask | Distance Shadowmaskに近いが、リアルタイムの影が少なく負荷も小さい |
| Baked Indirect | 間接光をベイクし、影はリアルタイムで描く |
| Subtractive | 簡単な光と影になるが、負荷が小さい |
どのLighting Modeが使えるかはレンダーパイプラインによって違い、マニュアルでは機能比較のページを確かめるよう案内されています。
ベイクの手順
1. ベイクする物をContribute GIにする
公式マニュアルでは、ライトマップに入るのは、Mesh RendererかTerrainを持ち、Contribute GIが付いている物だけとされています。
- 壁や床など、動かない物を選ぶ
- InspectorのMesh Rendererの Lighting にある Contribute Global Illumination をオンにする
- Receive Global Illumination が Lightmaps になっていることを確かめる
マニュアルでは、Contribute Global Illuminationをオンにすると、Receive Global Illuminationも自動でオンになると説明されています。
Receive Global Illuminationの Light Probes は、小さい物や動く物に使う選択肢で、ライトマップではなく近くのLight Probeから光を受け取ります。
マニュアルでは、ベイクには時間がかかるため、Contribute GIにするのは、くぼみや自分の影で明るさが大きく変わる大きな物に絞り、小さい物はLight Probeで照らすよう勧めています。
2. ライトマップ用のUVを用意する
ライトマップには、重ならないUVが必要です。
モデルを選び、InspectorのModelタブの Geometry にある Generate Lightmap UVs をオンにすると、Unityが自動でライトマップ用のUVを作ります。
自分でUVを作る場合は、ベイク用のUVを2番目のUVチャンネル(Mesh.uv2、UV1とも呼ばれる)に入れます。
3. Lighting Settingsのアセットを割り当てる
- Window → Rendering → Lighting を開く
- Sceneタブの Lighting Settings が空なら、New Lighting Settings を押す
- Baked Global Illumination がオンになっていることを確かめる
- Lightmapping Settings の Lightmap Resolution で、ライトマップの細かさを決める
マニュアルでは、Baked Global Illuminationをオフにすると、BakedとMixedのライトはすべてRealtimeとして扱われると説明されています。
このとき、LightコンポーネントのInspectorに警告が表示されます。
4. Generate Lightingを押す
Lightingウィンドウの下にある Generate Lighting を押すと、ベイクが始まります。
エディタの右下に進み具合が表示され、終わるとSceneビューとGameビューが更新されます。
できたライトマップは、Lightingウィンドウの Baked Lightmaps タブで確かめられます。
マニュアルでは、ベイクを始めた後に行った変更は、そのベイクの結果には入らないとされています。
Unity 6では自動のベイクが無くなった
Unity 6.0へのアップグレードガイドでは、Lightingウィンドウの Auto Generate の設定が削除されたと説明されています。
古い版で自動のベイクに頼っていたシーンは、Unity 6で開くとベイクした光が無くなるため、Generate Lightingで焼き直す必要があります。
同じガイドでは、環境光(Ambient Probe)と空の反射も、既定ではベイクされなくなったと説明されています。
新しいシーンには、既定の空に合わせた環境光のデータが割り当てられますが、環境光の設定を変えた場合は、Generate Lightingを押さないと反映されません。
Lightingウィンドウの Bake on Scene Load は、新しいUnity 6のプロジェクトでは Never が既定です。
If Missing Lighting Data にすると、ライトのデータが無いシーンを開いたときに自動でベイクされます。
ベイクせずに見た目を確かめたい場合は、Sceneビューの描画モードを選び、Lighting Visualizationのオーバーレイで Lighting Data を Preview にすると、一時的なライトマップで表示されます。
ベイクしても暗いときの原因
公式マニュアルのトラブルシューティングでは、ベイクした光が出ず、影や全体が暗くなる原因として、次のものが挙がっています。
| 確かめる場所 | 見ること |
|---|---|
| Mesh Renderer | Contribute Global Illumination がオンか |
| LightのMode | Baked か Mixed か(Realtimeはベイクに入らない) |
| LightのColorとIntensity | 暗い色や弱い強さになっていないか |
| LightのIndirect Multiplier | 0になっていないか |
| Lighting Settingsのアセット | 割り当てられているか、Baked Global Illumination がオンか |
| Max Bounces と Indirect Intensity | 0になっていないか |
| シェーダー | 自作のシェーダーが原因でないか。標準のLitに替えてベイクできるか |
| URPの設定 | URPのアセットで Mixed Lighting が有効か |
| ライトの位置 | ライトが壁や床の中に埋まっていないか |
同じページでは、GPUでのベイク(Progressive GPU)で失敗してCPU(Progressive CPU)で成功する場合は、GPUやドライバーの問題の可能性があるとされています。
その場合は、GPUのドライバーを更新します。
Preferencesの GI Cache にある Clean Cache でキャッシュを消す方法も案内されていますが、シーンのベイク済みのデータも消えるため、もう一度ベイクが必要です。
動くキャラクターだけが黒い
ライトマップは動かない物にしか使われないため、動く物はLight Probeから光を受け取ります。
マニュアルでは、Light Probeが無いと、動く物はシーン全体の環境光(Ambient Probe)だけで照らされ、黒っぽく見えることがあると説明されています。
- GameObject → Create Empty で空のゲームオブジェクトを作る
- Component → Rendering → Light Probe Group を追加する
- SceneビューのToolsのオーバーレイで Edit Light Probe Group を選び、動く物が通る範囲を囲むようにプローブを置く
- Generate Lighting でもう一度ベイクする
金属のように反射の強い物が黒い場合は、Reflection Probeを置くよう案内されています。
あわせて、その物のMesh Rendererの Probes で、Light ProbesとReflection Probesが Off になっていないかを確かめます。
シーンを読み込んだら暗い
マニュアルでは、複数のシーンを使う場合、ライトのデータを持つシーンがアクティブなシーンになっているかを確かめるよう案内されています。
Unityは、最初に読み込んだシーンをアクティブなシーンにします。
LoadSceneMode.Additiveでシーンを追加で読み込んだ場合は、Light Probeの計算に使うデータが自動では組み直されないため、読み込みが終わった後で LightProbes.Tetrahedralize を呼んで組み直す方法が案内されています。
シーンの読み込み方は、Unityでシーンを切り替える方法で説明しています。
参考にした公式ページ
- Introduction to lightmaps and baking
- Set up your scene and lights for baking
- Bake lighting
- Choose a Light Mode
- Lighting Mode
- Generate lightmap UVs
- Lighting window reference
- Upgrade to Unity 6.0
- Troubleshooting no baked global illumination in the scene
- Troubleshooting objects appearing unlit by Light Probes
- Load Light Probes in multiple scenes
