ライトベイクの基本を学ぼう

この記事ではワールドの軽量化と共に陰影表現が可能になる「ライトベイク」の基本的な使い方を、奇麗なワールドを多く制作しているclusterクリエイター・高千穂マサキさんが解説します!まだ試したことがなかった方はぜひ記事を読んで挑戦してみてください。

ライトベイクとは

リアルタイムのライトは負荷が高く、ワールドの動作が重くなる原因となります。またclusterでは同時に2つまでのリアルタイムライトしか動作せず、負荷軽減のためリアルタイムライトの影は描写されません。

ライトベイクを行い光と影の情報をライトマップに書き込むことで多数のライトを使った表現をしながら負荷を軽減し、影も描写することができます。

ライトベイクはこだわりようによってはさまざまな表現をすることができます。本記事では、まず基本の設定を紹介するので、手順を覚えたら、あなただけのライトベイクを模索してみてください!

今回はリアルタイムライトでワールドのライティングが済んでいる状態からのライトベイクの手順を解説します。
それぞれの工程で押さえておくべき設定を紹介するので、ぜひ試してみてください!

  • ライトベイクの基本的な作業の流れ
    • 1.動かないオブジェクトをStaticにする
    • 2.ライトモードをBakeにする
    • 3.ベイク開始ボタンを押す

準備

1. 動かないオブジェクトにstaticチェックを入れる

動くオブジェクトや持てるアイテム、インタラクトできるアイテム以外、ベイクをしたい全ての動かないオブジェクトにStaticのチェックを入れていきます。Inspectorの右上にあるStaticのチェックボックスにチェックを入れましょう。

ライトベイクで影をつけたいならCast ShadowsをONReceive Shadowsにチェックをいれます。

2.ライトモードの変更

次はシーンに配置されているリアルタイムライトをベイク用ライトに変更します!

Window >Rendering >Light Explorerを開きます

シーンに配置されたライトの一覧が表示されました!

現在ライトのModeはRealtimeとなっていますのでライトベイク用に変更します。

  • Directional LightはMixed
  • PointLight、SpotLightはBakedに変更

Intensityでライトの明るさを調整します。ライトモードをBakeにした場合はポイントライトとスポットライトのIntensityはRealtimeのときの数値から2倍程度に変更するといい感じにbakeされます!

ライトの影をつけたいならShadowsをSoft Shadowsに変更しましょう。エッジのくっきりした影をつけたいなら「Hard Shadow」がおすすめです。

ライトの種類とライティングモードについてはこちらの記事でも解説されていますので詳しく知りたい方は参考にしてみてください。

3.ライティング設定

最後にライティングの設定をしていきます!

まずは環境光 (Environment Lighting)の設定をしましょう。

Window→RenderingからLighting Settingを選択します。

ライティング設定画面が表示されます。

Environment

Environment Lighting(環境光)を設定しましょう屋外のワールドならSourceの部分にSkyBoxを選択、室内でしたらcolorを選択して部屋の照明の色にするのがおすすめです。環境光についてはこちらの記事に詳しく書かれていますので参考にしてみてください。

4.Lightmapping Setting

設定項目が沢山ありますが重要な部分だけを解説します。

Lightmapper
ライトベイクの計算処理には主に2つの種類があります。

Progressive CPU
高品質なライトベイクができますが計算処理に長い時間(場合によっては数十分~数時間)がかかります。

Progressive GPU(Preview)
高速でライトベイクができますがベイク結果の品質はProgressive CPUに劣ります。

作業確認のためのベイクではProgressive GPUを使い、本番のベイクではProgressive CPUを使うのがおすすめです。またProgressive GPUで変なベイク結果になった場合、Progressive CPUでやり直すと奇麗にベイクされることもよくあります…

Lightmap Resolution
ライトマップの解像度です。ライトベイクの全体品質はここで設定します。解像度を高くすると高品質になりますが、ベイク完了までの処理時間は膨大になりライトマップの容量も大きくなります。作業確認のためのベイクでは数字を小さく、本番では大きくしましょう。

Auto Generateのチェックを外しましょう。
シーンの状態を少しでも変更するたびライトの計算処理が自動で行われるためUnityの動作が重くなります。作業中は外しておくのがおすすめです。

ライトベイクは計算処理にとても時間がかかります。そこでまずはベイク処理が早く済むようベイク品質を落とした設定で試しに1回ライトベイクを行います。ベイクが完了したら上手くいってない箇所を直してもう一度ライトベイクを行いましょう。再度チェックをしてみてうまくできそうならライティング品質設定を高くして本番のライトベイクをします。以下の設定を参考にしてみてください。

プリベイク用の参考設定
LightmapperProgressive GPU
Lightmap Resolutionに設定

1回目のライトベイク実行

ではGenerate Lightingを押してライトベイクを開始します!完了までしばらく待ちましょう。

ライトベイク後の修正

さてライトベイクが完了したらシーンをチェックしてみましょう

うまくできていない箇所が見つかると思います。私も1回で上手くいったことは一度もありません…ここから修正をおこなっていきます!

オブジェクトに光or影がベイクされていない

1.staticのチェック漏れがないか見てみましょう
意外とよくあるパターンですね

2.ライトベイクに対応していないシェーダーを使っている
unlit系シェーダーなどライトベイクに対応していないシェーダーを使用しているとベイクされません。対応するシェーダーに変更しましょう。シェーダーって何?という方はこちらの記事を参考にしてみてください。

3.Metallicの数値が1になっている
マテリアル設定でMetallic(光の反射の強さ)の数値が最大値の1になっていると見た目ベイクされていないように見えます。数値を下げてみましょう。

ポイントライトが光っていない

オブジェクトにライトが埋まっていないかチェックです。

リアルタイムライトだと埋まっていても光りますがベイク設定では光りません。

オブジェクトの外にライトを移動して再度ベイクしてみてください。

ライトが当たっているはずのオブジェクトが暗かったりまだらになったりする

ライトベイクを正常に焼くためにはオブジェクトにライトマップUVが設定されている必要があります。ライトマップUVが無いオブジェクトはベイク結果が異常になります。

その場合

  • ①BlenderなどのソフトでライトマップUV(UV2)を手動で作成する
  • ②Unityの自動ライトマップUV作成機能を使う

2つの方法があります。

今回はUnityでライトマップUVを作ってみましょう

ProjectからオブジェクトのFBXファイルを探して選択します

InspectorにFBXモデルのインポート設定画面が表示されます

Generate Lightmap UVsをチェック。

applyで設定完了です!

再度ライトベイクをしてみましょう。

今度は奇麗にベイクできましたね!

それでもまだベイク結果がおかしい…?

LightmapperにProgressive GPUを使っている場合、Progressive CPUで再ベイクすることで奇麗になる場合があります!

モデルのUVが重なっている

シーンタブの下にある描画モードをUV Overlapに変更して確認してみましょう。

モデルが赤く表示されていたらライトマップUVが重なっています。

こちらはライトマップの解像度を高くすることで直ります!ひとまず解像度をあげた本番のベイクを行ってみてまだ直らないようならLightmap Resolutionの数値を高くしてみましょう。またPack Marginを増やす、Scale in Lightmapの数値をあげるなどの方法もあります。

ここまでの作業でベイク結果がおかしかった場所をすべて修正できたらいよいよ本番のライトベイクです!

ライティング設定からLightmap Resolutionの数値を高くしてベイクしましょう!

Lightmap Resolutionの数値は大きい方が高品質になりますがライトマップ容量も大きくなりベイク完了まで時間がかかります。10〜40あたりで調整してみてください!

うまくベイクできたでしょうか?
以上でライトベイクの作業は終了です!

ここからはさらに高品質のライトベイクをするための方法を2つ紹介します

影がぼんやりしている、くっきりさせたい

影を受けるオブジェクトのライトマップ解像度が低いと影の描写もボケたものになります。影を受けるオブジェクトのScale in Lightmapの数字を上げて調整してみましょう。

ベイクされた影を受けるオブジェクトのInspectorからMesh Rendererを見てみます。

Lightmappingという項目にBaked Lightmapという項目があります。ダブルクリックしてみるとライトマップ上でこのオブジェクトが占めているライトマップの解像度がわかります。解像度が不足していそうならScale in Lightmapの数字を上げることで個別に解像度を高くできます。

この例では床のScale in Lightmapを1から3に変更してみましょう

Scale in  Lightmapによって影を受ける床のライトマップ解像度が上がったことで影がくっきり描写されました!ただしライトマップの容量もその分大きくなっています。ポイントを絞って数値調整することでライトマップ容量増加をおさえつつ解像度を高めるのが大切です!

Ambient Occlusion

ライティング設定からAmbient Occlusionを有効にするとオブジェクトの接合部分や穴、折り目などを暗くしてくれます。リアル感を出すのに有効です!

今回説明は省きましたが、光の反射回数 ”Bounces” やノイズ除去”Filtering”などを細かく設定することでより美しいワールドを作ることができます!もっと知りたい方はこちらを参考にどうぞ!

ライトベイクを使いこなすことでワールドのビジュアルは格段にアップします。ちょっと難しい作業になりますがぜひ挑戦してみてください!