Scale in Lightmap 0 の落とし穴
MeshRendererのScale in Lightmap
を0にすると、オブジェクト自体にライトマップは焼かないが、オブジェクトの影はベイクするということができる。これを行うことで小さいためにベイクすることで汚くなってしまうモデルをライトマップから除外しつつベイク影は落とせ、かつライトマップテクスチャの節約になりいいことづくめなのだが一つ問題がある。
Mixed Lightでの挙動
リアルタイムライトとベイクドライトを併用できるMixed Lightモードにおいて、ベイク直後はScale in Lightmap
が0のStatic
オブジェクトはリアルタイム影はオフになるのだが、なんとビルド時にリアルタイムライトが復活し、ベイクの影とリアルタイム影が2重で重なってしまう。
これはUnity側のバグらしく、少なくともUnity2019では解消されていない・・・。

Static object with lightmap scale 0 casting realtime shadow?

回避方法
現在のところ、Unityのバグなので直接的な方法でのこのバグの解決方法はない。回りくどい方法だが、ShadowOnly
でベイクするためだけのオブジェクトをコピーして作りEditorOnly
タグをつけてビルド時に含まれないように除外、かつ表示させるオブジェクトはCast shadow
をオフにするという方法を取るしかない。
Bakeryでの問題
この回避策を使用するときにBakeryではEditorOnly
タグがついたオブジェクトはベイクされないという仕様なため使えない。しかし、以下の部分をコメントアウトすることでEditorOnly
のオブジェクトもベイクできるようになる。
Assets/Editor/x64/Bakery/scripts/ftBuildGraphics.csの3203行目
1 |
|
をコメントアウト