はじめに
今回はUnity2022でライトベイクを行いライトプローブを確認する方法を紹介します。
↓みたいな球を物体の周りに表示させる方法です。

【用語の整理】
・ライトベイク → 光源の情報を動かない物体の表面と空間に記録する処理
・ライトプローブ → 空間に記録された光源情報(物体の周りにある球)
こちらのシーンはPixiv Fanboxの方で無料配布しました。
↓急ぎの方はこちらをDLしてお使いください。

これ以降は0から学習したい人、ライトベイクを学びたい人向けです。
ある程度Unityが使えることを前提に進めます。
基本操作はこちらをご覧ください。
3D空間の用意
(必要であれば)プロジェクトを右クリック。
作成 → シーンを追加。


シーンを追加すると、今作ってるUnityの画面にあるデータが消える可能性があります。
バックアップなどを取ってから操作してください。
ヒエラルキーを右クリックして下記のものを作成。
・3Dオプジェクト → 平面(Plane)
・ライト → ポイントライト2つ
ポイントライトを選択。
Wキーで矢印を出して2つのライトを離して配置。

右上の旧マーク(ギズモ)が有効化されてるか確認。
これで光のアイコンやガイド線が表示されます。

制作したポイントライトを選択。
インスペクターで適当な色を設定。

世界全体を照らす光が眩しすぎるので消します。
Directional Lightを選択しインスペクターでチェックを解除で非表示化。
あと初期ライトはやや黄色味かかってるので腹いせに白色にします。


Directional Lightの初期色 is 技術的負債
(2回ぐらいBoothの商品モデルが色違う問題でお問い合わせ来た)
もう1つのポイントライトの色も変えました。
↓するとこんな感じの画面になります。

あとは空間上で動かすための物体として「Cube(立方体)」を作成。

これで3D空間の用意が完了です。
光源の設定
Shift+クリックでPoint Lightを複数選択。
インスペクターのLightからモードを「ベイク」に変更。
これで動かないものに対して光源の影響情報を記録できます。

これで、俗にいうStatic(静的)オプジェクトに影響を与えれます。

ここのベイク設定はあくまで「やります」という宣言です。
ベイクに設定したからといってライトベイクが始まるわけではないので注意。
コンポーネントを追加を選択。
→ 「Light Probe Group」を検索して追加。

これで “空間に” 光の影響情報を記録できます。
→ この情報を元に動くモノにも疑似的に光の影響が与えれます。

動くものは光源の色情報を焼き付けれません。
リアルタイムで変化します。
そこで、空間に色情報を配置して操作する形になってます。

↓その結果、このような動く物体に光源が当たってる感じの絵を作れます。

Light Probe Groupを追加したらPoint Lightの単体を選択。

するとシーンに黄色い丸が表示されます。
これが空間に対して記録した光源情報です。

表示されない方はギズモ横の「▼」を選択。
Light Probe Groupを有効化。

もう1つの光源も選択。
黄色い丸が8個あることを確認。

これで8×2=16個の光源制御点の情報が生成されました。

以上が光源の設定です。
動かないオプジェクト設定(Static)
ライトベイクは動かない物体に対して光源の色情報を残せます。
平面(Plane)は動かないので選択。
インスペクターで静的(Static)にチェックを入れて動かさない宣言をします。


Static(静的)は光源の色情報を記録します。
→ テクスチャという形で記録されます。
逆に動くモノのCubeには静的を無効化します。(そのままでOK)
これでライトベイクの色影響を記録させない設定にできます。

以上が動かないオプジェクトの設定です。
ライトベイクを行う(光源情報の記録)
光源に設定した「ベイク」はあくまで宣言です。
→ 実際にはまだベイクされてません。

まずヒエラルキーから動くものを非表示化。


表示されたままだとライトベイクに悪影響が出ます。
そこでウインドウ → レンダリング → ライティングを表示。

そしてシーン → Lighting Settings Asset横の「新規」を選択。

この画面になったらとりあえず「ライティングを生成」を押します。


だいたいは初期設定でうまくいくと思います。
上手くいかない場合は…
この画面と違うところがあれば合わせてください。
すると右下に進捗がでます。

進捗バーをクリックすると「%」と「およそ残り時間」が分かります。

完了すると「ベイクしたライトマップ」で静的オプジェクトに反映された光の影響が分かります。

また、ほかの情報はシーンフォルダの中に格納されます。

ポイントライトの範囲を上げるとライトベイクの時間が長くなりやすいです。
1~2時間と言われたら範囲を下げたりして調整してください。

ライトベイク完了後、立方体を再表示。
選択すると謎の球が出ます。

これが出たらライトベイクが完了です。
有料ライトベイクツールについて
Unity付属のライトベイクは性能が低いと “言われて” ます。
VRChatアバターなどの挙動確認や最低限のライトプローブ表示には十分です。

ただVRChatのワールドなどを作る際には性能不足と言われてます。
なのでちゃんとやるなら「Bakery」などを買ってやった方が良いです。


ただしBakeryはRadeonグラボだと動かないので注意。
↓このような販売ワールドには「Bakery対応」みたいなことが行われてたりします。

またUnity 2022のライトベイクは性能が上がったので…
Radeon GPUでやるならBakeryが無くてもそこそこ行けるっぽいです。
なので最初はUnity付属のライトベイクでいいと思いますが…
NVIDEAグラボでちゃんとライトベイクやりたくなってきた人はBakeryの導入を検討してください。
動くオプジェクト周りに出る球について
ライトベイクすると動くオプジェクトの周りに謎の球が出ます。
この球がライトプローブです。(照明効果の計算情報)

これは… 光源が空間に記録したライト情報を元に表示されてます。

この球に周囲の光源情報が格納されてます。
そして動くオプジェクトから近い位置にあるモノを計算で自動選択。
→ オプジェクトに光源的な影響を与える処理が行われます。

1つの球には複数の光源の影響が入ります。
青い点光源で作った黄色い丸が元ネタでも…
別光源の赤い光の影響が入ってることに注目。

そして、オプジェクトの周りにある3~4個球を参照。
これらを元に物体に当たる光が決まるような処理が入ります。

物体中央にあるのは複数の球を参照した結果できたモノと考えてください。
光源が生成した黄色い丸とは別物なので、黄色い丸が無い場所にも生成されます。

そして光の当たり方は球の場所で計算してます。
→ なので平面の遮蔽などは計算されません。

リアルタイムライトでも遮蔽は計算されないっぽいです。
これはUnity的に仕方ないようです。

ただ… リアルタイムライトは距離で明るさが変わります。

ベイクした光は球の位置を参照してるので…
距離で明るさが変わらなくなります。


細かく明るさの変化を作りたいなら…
その分の黄色い丸が必要です。
試しに赤い方の光源を「強さ:100」に設定。
すると… 1回でもしたモノはベイクされた状態が記録されます。
なので光の影響で違いが生まれなくなります。

この状態で再ベイク。
すると、変化した値が反映されます。

これで球の色が分かりやすくなりました。

2光源おすすめ設定
2光源は私の環境だと範囲10、強さ6~8あたりが上手くいきました。

↓こちらのような設定です。

これでようやく球(ライトプローブ)を確認する環境ができました。

以上がライトベイクを行いライトプローブを確認する方法です。

黄色い丸の動かし方+増やし方
光源にある黄色い丸は光の強さを変えても場所は変わりません。

範囲を変えても変わらないです。

ではどうすればいいかというと…
光源を選択 → インスペクターで「ライドプローブの編集」を実行。

これで黄色い丸の位置を動かせます。(手動)

あとは黄色い丸は追加や削除ができます。
編集が終わったら「ライトプローブの編集を終了」を選択。

これで黄色い丸を動かしたり、増やしたりできます。

まとめ
今回はUnityでライトベイクを行いライトプローブを確認する方法を紹介しました。
・ライトベイクは動かない物体に光源による色変化の情報と空間に光源情報を記録する
・この空間に記録された光源情報がライトプローブ
・ライトプローブは光源に「Light Probe Group」してはじめて生成される
・ライトベイクされた空間の動く物体はライトプローブを参照し位置で光の変化が計算される
また他にもUnityや3DCGについて解説してます。

ぜひ、こちらもご覧ください。
コメント