最終更新 2024/9/1 Unity2022.3.22f1 VRCSDK3.6.1 環境

ご意見はhttps://x.com/InPlanariaまで。



前置き

この記事は「VRChatのワールドがリアルタイムライトのせいで重いらしいけど、どうしたらいいかわからん人」がなんとなくライトベイクできるようになる方法を説明するものです。

「綺麗なベイク」「映える間接照明」を知りたい人は別の詳しい説明記事とかインテリアデザインの本とか読んでください。正直自分もよくわかりません。

VRChatのワールドを想定していますが、Unity環境のほかのライトベイクでも応用できる内容だと思います。

前置きはいいから早くベイクしたいって人は実践編まで読み飛ばしてください。

当記事で使用したUnity設定のサンプルは下記にて配布中です。

雑にやるライトベイク Unity設定サンプル

そもそもライトベイクってなんで要るの?

光の表現を綺麗に保ちつつ、描画の軽いワールドを作るために要ります。 重くても気にしない人、ワールドに置いてあるライトが1個くらいしかない人、ライトベイクすることで求める表現ができなくなる人はライトベイクしなくても良いでしょう。

何故ライトが重いかというと、「このライトがどのくらい周囲を照らしているか」の計算をゲーム中ずっと=リアルタイムにすることになるからです。

その重さを避けるために使うのがライトベイクです。ライトの照らし方をワールド制作時点で計算しておくことで、毎フレームの計算が不要になり、軽くなるという仕組みです。

ライトベイクの計算結果は、「ライトマップ」と呼ばれる画像データ、あるいは「ライトプローブ」という空間の明るさの記録データとしてワールドに組み込まれます。

大量のライトがありながらライトベイクされていないワールド。
Batches=243 Setpass Calls=236 (描画の重さの指標)

大量のライトがありながらライトベイクされていないワールド。 Batches=243 Setpass Calls=236 (描画の重さの指標)

上記をライトベイクしたもの。
Batches=55 Setpass Calls=23

上記をライトベイクしたもの。 Batches=55 Setpass Calls=23