スポンサーリンク
最適化・パフォーマンス

Unityのライトベイク(Lightmapping)入門|リアルな陰影を作る基本手順

最適化・パフォーマンス

Unityでゲームやワールドを作っていると、「動かしてみたら急に重くなった」「なんだかアバターや家具が不自然に暗い」といった悩みにぶつかったことはありませんか。

とくにライトをたくさん置いた空間では、この重さや暗さの原因がどこにあるのか、初めのうちはなかなか掴みにくいものです。

この記事では、そんな悩みの解決につながる「ライトベイク(Lightmapping)」について、UV2の準備からライトの設定、ベイクの実行、Reflection ProbeやLight Probeの配置、うまくいかないときのチェックポイントまで、実際の手順に沿って解説していきます。

ライトベイクが必要な理由|リアルタイムライトが重くなる仕組み

Unityのライトには、実行中ずっと光と影の計算をし続ける「リアルタイムライト」と、あらかじめ計算結果を焼き付けておく「ベイクされたライト」の2種類があります。この違いを知っておくと、なぜ重くなるのかが見えてきます。

リアルタイムライトは、毎フレームごとに光がどこに当たり、どこに影ができるかを計算し直しています。ライトの数が増えたり、複雑な形のオブジェクトが多かったりすると、その分だけ計算量も増えていく仕組みです。

この負荷は、単に動作が重くなるだけでは終わりません。プラットフォームによっては、次のような不具合につながることもあります。

  • 同時に使えるリアルタイムライトの数に制限があり、一部のライトが反映されない
  • 本来落ちるはずの影が表示されない
  • アバターやオブジェクトが不自然に暗く見えてしまう

こうした問題を解決してくれるのが、ライトベイクという仕組みです。ライトが当たったときにできる光と影の結果を、あらかじめ計算して「ライトマップ」というテクスチャに焼き付けておきます。

イメージとしては、光と影の結果を一度写真に撮っておいて、実行中はその写真を貼り付けるだけにする、といった感じです。毎回計算し直す必要がなくなるので、たくさんのライトを配置した豊かな空間でも、動作を軽く保つことができます。

ただし、この仕組みが使えるのは、床や壁、天井、固定された家具といった「位置が変わらない静的なオブジェクト」に限られます。プレイヤーや動く小物など、位置が変化するものには別の対応が必要になる点は、後ほどの見出しで触れていきます。

ライトベイク以外にも、Unityの動作を軽くする方法はいろいろあります。処理落ちや重さが気になる場合は、こちらの記事もあわせて参考にしてみてください。




ベイク前の下準備|UV2生成とStatic設定のやり方

ライトベイクを始める前に、実はやっておくべき下準備が2つあります。それが「UV2の生成」と「オブジェクトのStatic設定」です。

この2つが整っていないと、いくらライトやベイク設定をがんばっても、影がうまく焼き付かなかったり、ベイク自体の対象として認識されなかったりします。まずはここから確実に押さえていきましょう。

FBXのインポート設定でUV2を生成する手順

ライトマップは、見た目のためのテクスチャを貼るUV(UV1)とは別に、光と影の情報を配置するための専用UV(UV2)を必要とします。まずはこのUV2を用意するための設定をおこないます。

  1. Projectウィンドウから、ベイクしたいオブジェクトのFBXモデルファイルを選択する
  2. Inspectorウィンドウの「Model」タブを開く
  3. 「Import Cameras」と「Import Lights」のチェックを外す
  4. 「Generate Lightmap UVs」にチェックを入れる
  5. 最下部の「Apply」ボタンをクリックして適用する

ここまで進めると、ライトマップ用のUV2が自動的に生成された状態になります。

ワンポイント

Blenderなどの外部ソフトですでにライトマップ用UV2を手動で展開してある場合は、「Generate Lightmap UVs」のチェックは外したまま読み込みましょう。Unity側で自動生成すると、せっかく手作業で整えたUVが上書きされてしまいます。

オブジェクトをStatic・Contribute GIに設定する手順

UV2の準備ができたら、次は「このオブジェクトはベイクの対象です」とUnityに伝える作業です。動かない床や壁、固定家具などを選んで設定していきます。

  1. シーン上またはHierarchyウィンドウから、ベイク対象とする動かないオブジェクトを選択する
  2. Inspectorウィンドウ右上の「Static」にチェックを入れる(自動的に「Contribute GI」もオンになります)
  3. Mesh Rendererの「Contribute GI」が有効になっているか確認する
  4. 「Receive Global Illumination」が「Lightmaps」になっているか確認する
  5. 影を落としたい場合は「Cast Shadows」を「On」にする
  6. 影を受け取らせたい場合は「Receive Shadows」にチェックを入れる

Staticにするかどうか迷ったときの判断基準

「このオブジェクトはStaticにしていいのかな」と迷う場面は、実際の制作でもよくあります。判断のポイントはシンプルで、実行中に位置や角度、大きさが変わる可能性があるかどうかです。

床や壁、天井、固定された家具のように、ゲームが始まってから一切動かないものはStatic対象にして問題ありません。一方で、次のようなオブジェクトはStaticのチェックを外し、ベイク対象から外しておく必要があります。

  • 開閉するドアや引き出し
  • プレイヤーが持ち運べる小物やアイテム
  • 位置やサイズが変化するUI要素

これらを誤ってStaticにしてしまうと、動かした後も影だけが元の位置に焼き付いたまま残ってしまい、見た目がちぐはぐになってしまいます。迷ったときは「実行中に位置が変わるかどうか」を基準に考えると判断しやすいです。


ライトのモードをBaked/Mixedに切り替える設定

下準備が終わったら、次はシーンに配置したライトそのものの設定を見直していきます。ライトの種類によって、切り替えるモードが異なるので、ここを間違えるとベイクがうまく反映されません。

Light Explorerでのモード変更手順

まずは、シーン内のライトをまとめて確認できる画面を開き、それぞれのモードをベイク用に切り替えていきます。

  1. Unityメニューの「Window」>「Rendering」>「Light Explorer」を開く
  2. シーン内に配置されているライトの一覧を確認する
  3. Directional Light(太陽や月明かりを表現するライト)は「Mode」を「Mixed」に変更する
  4. Point LightやSpot Light(ランプやスポット光源)は「Mode」を「Baked」に変更する

なお、Area Lightはもともとベイク専用のライトなので、モード変更の必要はありません。

ワンポイント

Directional Lightを「Mixed」にすると、直接光はリアルタイムのまま、間接光だけがベイクされる状態になります。太陽の角度を変えて時間帯の演出をしたい場合にも扱いやすいモードなので、昼夜表現に興味がある方は下記の記事もあわせてチェックしてみてください。

明るさ(Intensity)と影(Shadow Type)の調整

モードを切り替えただけで満足してしまうと、実は思わぬ落とし穴があります。ライトをベイク設定に切り替えると、シーン全体が想像以上に暗く見えてしまう性質があるのです。

  1. Point LightやSpot Lightの「Intensity」の値を確認する
  2. リアルタイムで使っていたときの数値から、目安として2倍程度まで引き上げる
  3. 「Shadow Type」を選ぶ。柔らかい影にしたい場合は「Soft Shadows」、輪郭をくっきりさせたい場合は「Hard Shadows」にする
  4. Soft Shadowsを選んだ場合は、「Baked Shadow Angle」の数値で影のぼやけ具合を調整する

この「2倍程度」という数値はあくまで目安です。空間の広さやライトの数によっても見え方は変わってくるので、実際にベイクを実行しながら、明るさが自然に見えるところまで少しずつ調整していくのがおすすめです。




Lighting設定ウィンドウで必須の項目を設定する

ライトそのものの設定が終わったら、次はベイク全体のルールを決める「Lighting設定ウィンドウ」に移ります。ここでは主に、計算方法・解像度・ノイズ処理・影の締まり具合という4つの要素を目的に応じて調整していきます。

  1. Unityメニューの「Window」>「Rendering」>「Lighting」を選択し、Lighting設定ウィンドウを開く
  2. 「Scene」タブ上部の「Lighting Settings」で「New」ボタンをクリックし、ライティング設定ファイルを作成・アサインする
  3. 最下部の「Auto Generate」のチェックを外す
  4. 「Realtime Global Illumination」のチェックを外す
  5. 「Baked Global Illumination」にチェックを入れる
  6. 「Lighting Mode」を「Baked Indirect」に設定する

「Auto Generate」をオフにしておくのは、設定を変えるたびにエディタが自動計算を始めて重くなるのを防ぐためです。この状態では、設定が完了した後に自分で「Generate Lighting」を押すまでベイクは実行されません。

Lightmapper(Progressive CPU/GPU)の選び方

Lightmapping Settings内の「Lightmapper」では、ベイクの計算をCPUで行うかGPUで行うかを選べます。どちらを選ぶかは、今が作業中の確認なのか、それとも本番の仕上げなのかで判断するとわかりやすいです。

Progressive CPUは、計算に数十分から数時間かかることもありますが、そのぶん高品質に仕上がります。配置を微調整するたびに待たされるのは現実的ではないので、最終的な仕上げの段階で選ぶのが向いています。

一方のProgressive GPU(Preview)は、GPUを使って計算するため劇的に速く、ライトの配置を確認しながら試したいときに向いています。ただし計算精度の面ではCPUに劣る部分があるため、最終的な書き出しはCPU側で行うのが安心です。

もっと高速で高品質なベイクを求める場合は、Progressiveの代わりに使える有料のGPUライトマッパーという選択肢もあります。標準機能で物足りなさを感じたときの候補として、知っておくと良いかもしれません。

Lightmap ResolutionとMax Lightmap Sizeの決め方

この2つは名前が似ているため混同しやすいのですが、役割はまったく別物です。「Lightmap Resolution」はオブジェクトの表面1メートルあたりにどれだけ細かく光の情報を描き込むかという密度の設定で、「Max Lightmap Size」は出力される画像そのものの最大サイズを指します。

Lightmap Resolutionは、作業中の確認段階では5程度の低い数値にしておくと、ベイクにかかる時間を大きく節約できます。仕上げの本番ベイクでは、10〜40あたりの数値まで上げると、影の輪郭がなめらかで高画質な仕上がりになります。

Max Lightmap Sizeは、書き出し先のプラットフォームによって目安が変わります。Questなどのモバイル向けであれば512〜1024(大きくても2048まで)、PC向けの広い空間であれば2048〜4096を目安にすると、容量と画質のバランスが取りやすくなります。

Filtering・Ambient Occlusionの設定

最後に、仕上がりの見た目に関わる2つの項目を設定します。どちらも、そのままにしておくと不自然な結果につながりやすい部分です。

  • 「Filtering」は「Auto」に設定する(「None」のままだと斑点状のノイズが出やすくなります)
  • 「Ambient Occlusion」にチェックを入れる(床と家具の接地部分や壁の角に影が加わり、空間が締まって見えます)

環境光と環境反射(Environment)の設定方法

ライトの設定が終わっても、光が直接当たらない場所は真っ暗になってしまいます。その暗さを埋めてくれるのが、Environmentタブにある「環境光」と「環境反射」の設定です。

屋外/室内でのSource選択(Skybox・Color)

まずは、光が届かない部分の明るさをどこから持ってくるかを決めていきます。

  1. Lighting設定ウィンドウの「Environment」タブを開く
  2. 「Environment Lighting」の「Source」を選択する
  3. 屋外の空間であれば「Skybox」を選ぶ
  4. 室内の空間であれば「Color」を選び、照明の色に近い色を設定する

屋内なのにSkyboxのまま進めてしまうと、空の色に引っ張られて意図しない色味の影が付くことがあります。「Gradient」を使えば、空・水平線・地面の3段階で色を分けて設定することもできるので、より繊細な調整をしたい場合はこちらも試してみてください。

光が届きにくい場所の暗さが気になる場合は、こちらの記事でも別の角度から対処法を紹介しています。

環境反射をCustomに設定する理由(Reflection Probe設置前の準備)

次に、金属や窓、水面などに周囲の景色を映り込ませるための「環境反射」を設定します。ここで一つだけ、少し戸惑いやすいポイントがあります。

  1. 「Environment Reflections」の「Source」を「Custom」に指定する
  2. この時点では「Cubemap」のスロットは「None」のまま進める

ワンポイント

Cubemapが空欄のままだと少し不安になるかもしれませんが、ここは一時的な状態で問題ありません。次の見出しで解説するReflection Probeを設置してベイクを実行すると、反射マップが自動的に生成されるので、そのタイミングでCubemapスロットに割り当てていきます。




Generate Lightingでライトベイクを実行する手順

ここまでの準備がすべて整えば、あとはボタン一つでベイクを実行するだけです。作業自体はシンプルですが、待ち時間の目安や確認方法を知っておくと、迷わず進められます。

  1. Lightingウィンドウの右下にある「Generate Lighting」をクリックする
  2. 画面下部の進捗バーが100%になるまで待つ
  3. 完了したら、Lightingウィンドウの「Baked Lightmaps」タブを開く
  4. 生成されたライトマップテクスチャが表示されているか確認する

計算にかかる時間は、Lightmapperの選択やLightmap Resolutionの値、シーンの広さによって大きく変わります。Progressive CPUで解像度を高めに設定している場合は、数十分から数時間かかることも珍しくありません。

進捗バーが動いている間はエディタの操作が制限されることがありますが、これは正常な状態です。焦らずに完了を待ちましょう。


Reflection ProbeとLight Probe Groupを配置する

ベイクが一通り完了したら、仕上げとして2種類のプローブを配置していきます。どちらも名前が似ていて混同しやすいのですが、担っている役割はまったく違います。反射を映り込ませたいのか、動くオブジェクトに光を届けたいのかで、選ぶものが変わってきます。

Reflection Probeの配置手順と設置目安

Reflection Probeは、金属や窓、鏡、水面といった反射するマテリアルに、周囲の景色を映り込ませるための反射マップを生成してくれます。

  1. Hierarchyウィンドウで右クリック>「Light」>「Reflection Probe」を追加する
  2. 部屋の中心付近、かつキャラクターの目線の高さ(壁や床にめり込まない位置)に配置する
  3. Inspectorの編集モードを起動し、黄色いドットをドラッグして影響範囲のボックスが部屋の壁を覆うように調整する
  4. 「Type」が「Baked」になっていることを確認する
  5. 室内であれば「Box Projection」にチェックを入れる(屋外では不要)
  6. 配置が終わったら、再度「Generate Lighting」を実行する
  7. Projectウィンドウの「Scenes」フォルダ内に出力された反射マップを、Environmentタブの「Environment Reflections」>「Cubemap」スロットにアサインする

設置数の目安としては、廊下や部屋ごとに最低1つずつ置いておくと、場所によって反射が不自然に途切れることを防げます。

Light Probe Groupの配置手順と密度の目安

一方のLight Probe Groupは、反射のためではなく、Staticではない動的なオブジェクト(プレイヤーや持ち運べる小物など)に、周囲の間接光や環境光の明るさ・色味をサンプリングして届けるためのものです。

  1. Hierarchyウィンドウで右クリック>「Light」>「Light Probe Group」を追加する
  2. Inspectorから「Edit Light Probe Positions」ボタンをクリックし、編集モードに入る
  3. 黄色い点のプローブを選択し、「Ctrl+D」で複製しながら、キャラクターや動的ギミックが通過するルートに沿って配置を広げる
  4. 窓際など、明るさや光の色味が大きく変化する境界付近には、プローブを密に配置する
  5. 変化が緩やかな広い場所や背景部分は、間隔を広げてプローブ数を減らす
  6. 配置が完了したら、再度「Generate Lighting」を実行してベイクを反映させる

役割の違いをまとめると、反射を映したいならReflection Probe、動くものに光を届けたいならLight Probe Groupと覚えておくと、配置に迷いにくくなります。

Light Probeの配置数は、全体で目安として200〜300個程度に抑えておくのがおすすめです。増やしすぎると、間接光の精度が上がる一方で、処理負荷が積み重なってしまいます。

Unity6ならAPV(Adaptive Probe Volumes)で自動配置も可能

ここまで手作業での配置手順を紹介してきましたが、Unity6ではAdaptive Probe Volumesという機能を使うことで、ジオメトリの密度に応じてUnityが自動的にプローブを配置してくれるようになりました。Light Probe Groupを一つずつ手で置いていく手間を省きたい場合は、こちらの機能もあわせて検討してみると良いかもしれません。




ベイク結果がおかしいときのチェックポイント

手順通りに進めたつもりでも、ベイク後に「あれ、思っていた見た目と違う」ということは起こり得ます。ここでは症状ごとに原因を切り分けられるよう、チェックすべきポイントをまとめていきます。

影が焼けない・光が反映されないときの確認項目

影がまったく付かない、あるいは光がうまく反映されない場合は、次の項目を上から順に確認してみてください。

  • ✅ 対象オブジェクトの「Static」(特に「Contribute GI」)にチェックが入っているか
  • ✅ Mesh Rendererの「Cast Shadows」「Receive Shadows」がオフになっていないか
  • ✅ マテリアルの「Metallic」の値が1(最大値)になっていないか
  • ✅ ポイントライトが壁や床、モデルの内側にめり込んでいないか

とくに見落としやすいのが、Metallicの値です。Metallicが最大値に近いと反射が強くなりすぎて、見た目上ベイクされていないように映ってしまうことがあります。この場合は数値を少し下げてみると、焼き付いた影が確認しやすくなります。

マテリアルの反映まわりでつまずきやすい方は、こちらの記事も参考になるかもしれません。

上記を一通り見直しても改善しない場合は、過去のベイクデータが残っていて計算が競合している可能性があります。Lightingウィンドウの「Generate Lighting」ボタン横のプルダウンから「Clear Baked Data」を選び、一度データをクリアしてから再実行してみてください。

それでも原因がつかめない場合は、ライトの設定そのものに問題が起きているケースも考えられます。次の記事もあわせてチェックすると、切り分けがしやすくなります。

UV Overlap(重複UV)の見分け方と対処法

影の境目に黒ずみや不自然な線が出ている場合は、「UV Overlap(UVの重複)」が起きている可能性があります。これは、ライトマップ用のUV2が別の部分と重なってしまい、明暗の情報が正しく描き込めなくなっている状態です。

まずは、実際に重なっている箇所を目で確認するところから始めます。

  1. シーンビュー右上の描画モード切り替えアイコンを開く
  2. 描画モードを「UV Overlap」に変更する
  3. 赤いチェック模様で表示されている部分(重なっているUV)を探す

重なりが見つかった場合、対処法としてまず試したいのが、該当オブジェクトを個別に調整する方法です。

  1. 問題のあるオブジェクトを選択する
  2. Mesh Renderer>Lightmapping>「Scale in Lightmap」の数値を上げる(例:1から23に変更)

シーン全体のLightmap Resolutionを上げる方法もありますが、それだと関係のないオブジェクトまで解像度が上がってしまい、ファイルサイズやベイク時間が余計に膨らんでしまいます。問題のあるオブジェクトだけを個別に調整する方が、効率よく改善できます。

それでも解消しない場合は、Lighting設定全体の「Lightmap Padding」を上げてUV同士の余白を広げる、あるいはFBXのインポート設定にある「Lightmap UV’s settings」の「Margin Method」を「Manual」にして「Pack Margin」を上げる、といった方法も試してみてください。自動展開だと限界がある場合は、Blenderで手動によりUV2を展開し直すのが根本的な解決につながります。

まだら模様・ノイズ・Bakery競合時の対処法

見た目の仕上がりに関する、その他の症状についてもまとめておきます。当てはまる症状があれば、対応する対処法を試してみてください。

  • ✅ ギザギザしたまだら模様(バンディング)が出る → 生成されたライトマップテクスチャのInspectorで「Format」が「Automatic」になっているか確認する。RGB16bitなどになっている場合は変更してApplyする
  • ✅ 圧縮によるノイズが気になる → Lightingウィンドウの「Lighting Compression」を「None」または「High Quality」に変更する
  • ✅ 斑点のようなノイズが出る → 「Filtering」が「None」になっていないか確認し、「Auto」に変更する
  • ✅ 発光マテリアルの光に変な線が入る・GPUベイクで誤差が出る → 「Progressive CPU」に切り替えて焼き直す
  • ✅ メッシュの裏側から光が漏れたようににじむ → Mesh Rendererの「Cast Shadows」を「Two Sided」に設定する

注意

「Bakery」など外部のGPUライトマッパーで作られた配布ワールドやアセットを、Unity標準のライトベイクで計算し直そうとすると、専用ライトが正しく認識されず、光と影がほぼ消えてスカイボックスからの環境光だけが焼かれてしまうことがあります。この場合は、該当ライトをUnity標準のライトに手作業で置き換えるか、Bakeryを導入して同じ環境でベイクし直す必要があります。

また、ボーンやブレンドシェイプを持つSkinned Mesh Rendererは、Staticを設定してもライトベイクの対象として扱われません。この場合は、ライト設定を「Mixed」にしてリアルタイムに影を落とさせるか、外部の拡張ツールを使って動かないMesh Rendererに変換するといった対応が必要になります。


まとめ

ライトベイクは、一度手順を覚えてしまえば、あとはシーンごとに同じ流れを繰り返すだけの作業になります。最初は設定項目の多さに戸惑うかもしれませんが、UV2の準備、Static設定、ライトのモード切り替え、Lighting設定、ベイク実行、プローブの配置という順番さえ押さえておけば、迷ったときに戻る場所がはっきりします。

もし焼き上がりに違和感があっても、それは設定のどこか1か所を見直せば解決できるサインです。焦らず一つずつ確認しながら、自分のワールドやゲームに合った明るさを見つけていってください。


よくある質問

Q
ベイク後、オブジェクトを少しだけ動かした場合も再ベイクは必要ですか?
A
必要です。Static設定されたオブジェクトの位置や角度、大きさを変更すると、焼き付けられているライトマップの情報と実際の見た目がずれてしまいます。動かした後は再度「Generate Lighting」を実行して、変更を反映させてください。
Q
ベイクしたライトマップデータは他のシーンでも使い回せますか?
A
基本的には使い回せません。ライトマップはシーンごとの配置や光の当たり方に紐づいて生成されるデータのため、別のシーンに持っていっても正しく合致しないことがほとんどです。新しいシーンでは、そのシーンに合わせて改めてベイクを実行してください。
Q
Static設定を、本来は動かすはずのオブジェクトに間違えて付けてしまうとどうなりますか?
A
その位置に影が焼き付いたまま固定されてしまいます。実行中にオブジェクトを動かすと、影だけが元の位置に取り残されて浮いたように見えるため、動かす可能性のあるオブジェクトはStaticのチェックを外しておく必要があります。

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク