【Unity】LODグループに設定したモデルにライトをベイクする

投稿者: | 2021-07-01

LODグループとコライダーを併用するで作った猿のモデルにライトをベイクしてみました。

LODグループを設定

詳細さの違うすべての猿のモデルを空のゲームオブジェクトの子にして、そのオブジェクトにLODグループを付けました。

LODグループで各レベルに対応するオブジェクトを追加すると、距離によって表示されるオブジェクトが変わります。コライダー用のオブジェクトにはメッシュレンダラーとメッシュフィルターが付いていません。

ライトマップをベイク

3つの猿のオブジェクトをすべて選択して、インスペクタで「Static」のチェックを入れ、ライトマップからグローバルイルミネーションを受けるようにします。

この状態で、プログレッシブCPUライトマッパーでライトマップをベイクすると、LOD0~2のすべてのオブジェクトにライトがベイクされました。

LOD1では、メッシュレンダラーの「Scale In Lightmap」が自動でLOD0の半分に設定されていて、ライトマップのUVも小さくなっています。

LOD2ではさらにその半分になっていました。

ライトマップでの大きさを再計算する

「Scale In Lightmap」を1より大きくしたオブジェクトは、ライトマップ内で使われるピクセル数が上がり、1未満だと減少します。なので、詳細に表示したいものは値を上げ、そうでないものは下げることで最適化できます。

LODグループによって遠くでしか表示されないオブジェクトは、距離に応じてこの値を下げたほうが良いと思います。LODグループではこの値を自動で再計算できます。

そのためにまず、LODグループの各レベルのしきい値を、LODレベルボックスの左端をドラッグして調節しました。

その後「Recalculate Lightmap Scale」をクリックすると、各メッシュレンダラーの「Scale In Lightmap」の値が変わりました。

LOD0~2のしきい値はLODグループで100%、17%、7%に設定されています。メッシュレンダラーの「Scale In Lightmap」の値はそれに合わせて 1、約0.17、約0.07になっています。

ライトマップをベイクすると、LOD1と2のUVがかなり小さくなったがわかります。

コメントを残す

メールアドレスが公開されることはありません。