Generate Lightmap UVs=On/Off の考察
Generate Lightmap UVs の On/Off 設定について、以下の動画を作りました。本記事はその結果についての考察となります。
ライトマップに関する私の認識
Unityで綺麗なライティングのために、また、描画負荷軽減のためにも、動かさないオブジェクトはStatic設定にした上で、ライトをベイクすることが良いのは知っています。
その際、外部アプリケーションからインポートしてきたオブジェクトに対しては Generate Lightmap UVs を On に設定すると、ライトをベイクした時に綺麗になると一般的に言われているように思います。
しかし、私の場合、Generate Lightmap UVs = Onに設定すると逆に汚くなってしまうケースがあります。Sceneビュー左上のプルダウンから、Baked Lightmap と Show Lightmap Resolution を選んで、綺麗にライトがベイクできているかを確認できます。できるだけ正方形なグリッドが、細かく並んでいる方が綺麗にベイクできているという認識をしています。
加えて、VRChatでいつも美しいワールドを作られている @rootgentle 様に以下のようなコメントをいただきました。
Generate〜をしなければテクスチャを貼るときに作ったUVを利用します。
— rootgentle (@rootgentle) 2018年3月15日
ミラーなどで同じテクスチャ座標を複数のUVで流用している時や、タイリングでUVが範囲外まで伸びている時は正常に動作しないのでGenerate〜で新規UVを作成します。
3Dソフトで2つめのUVを作ればそれを利用しますよ。
あ、でもその為のGenerate〜ですよ。
— rootgentle (@rootgentle) 2018年3月15日
テクスチャマップ用のUVでそれをやると、必然的にパーツに割けるテクスチャの解像度が下がるので。
それまで私は、Generate~をOnにすると必ず綺麗になるものだと誤解していて、Onにした結果、絵が汚くなるということを不思議に思っていましたが、いただいたコメントで今までの疑念が腑に落ちました。必ずしもGenerate~をOnにする必要はないと認識を改めました。
マテリアルの用い方と、それぞれへのライトマップ設定への方針
それらを踏まえて、マテリアルの使い方に関して、私のケースでは以下のように分類と対応をすることにしました。
- 壁や床のように、小さいサイズのテクスチャをタイリングして敷き詰めている使い方
→Generate Lightmap UVs = On にする - Blenderでモデリング&UV展開してFBX形式でエクスポート。テクスチャはSubstanceDesignerで作成しPNGでエクスポート。そのFBXとPNGをUnityにインポートして、メッシュ&マテリアルとして利用するもの。そのUVについて、ミラーや同じテクスチャ座標を複数のUVで使用しているケース(case:A)と、そういうことはせず、すべてのメッシュのUVを、重なりなく展開しているケース(case:B)の2つに分類されます
→case:A の場合、Genarate~ をOnを検討する
→case:B の場合、Generate~ をOffにする
※case A,Bそれぞれ、逆の設定をした方が綺麗な場合や部分的に優劣決めがたい場合も見られます。
ひとまずはこれを指針とし、改めてGenerate Lightmap UVs のOn/Offの切り替え、さらにLighting設定項目にある Lightmap Size 設定と Lightmap Resolution 設定の効果ついて比較してみたのが、冒頭の検証動画となります。
検証結果を見る限り、現時点での私の考えとしては、上の方針で良いかなと思っています。またLightmap Sizeは最終的なファイルサイズ肥大にも影響する割にはライト結果への効果は薄く、どうせベイク時間が長くなるのであれば、Lightmap Resolutionの設定値を上げるほうが、綺麗な画像が得られると思います。
その他、Lightmapping SettingsのLightmapper設定(Enlighten / Progressive)のことや、LightingパネルのObject mapsについては、まだ不勉強ですし、引き続き調査していきたいと思います。
参考:
参考:Unity 2017だと下記の機能もあるそうです。これならソファの継ぎ目が汚い症状を改善できるかもしれません。私はVRChat用にUnity5.6を使用していて、5.6だとこの設定は実装されていないように思います。