UnityのProgressive Lightmapperの設定項目についてまとめました。
- はじめに
- 一覧
- Direct Samples
- Indirect Samples
- Lightmap Resolution
- Lightmap Size
- Ambient Occlusion
- Directional Mode
- 参考
- 関連
Unity2018.3.1
はじめに
本記事ではUnityでライトマップをベイクする際のLighting Settingsの項目について検証しています。
LightmapperはProgressive CPUを使って検証しましたが、
他のLightmapperでも共通する部分はあるかと思います。
一覧
まずは項目ごとの説明を簡単に書きます。
重要な設定項目に関しては次節から個別に説明を書きます。
設定項目名 | 説明 |
---|---|
Lightmapper └Priortize View |
チェックするとシーンビューに映っているオブジェクトを優先的に計算する |
Lightmapper └Direct Samples |
直接光のサンプリング数(後述) |
Lightmapper └Indirect Samples |
間接光のサンプリング数(後述) |
Lightmapper └Bounces |
レイの跳ね返りの最大数 大きい値を設定するとベイク時間が長くなるもののクオリティは上がる。 ライトまでの障害物が多い室内などのシーンでは大きくするべき |
Lightmapper └Filtering |
最後にノイズを軽減するためのフィルタリング方法 |
Lightmap Resolution | 1Unitあたりのライトマップのテクセル数(後述) |
Lightmap Padding | オブジェクト毎のライトマップ間の余白 どういうケースで調整する必要があるのか不明 フィルタとか圧縮の設定によっては大きくしないとなのかも? |
Lightmap Size | 1枚のライトマップテクスチャの最大サイズ 入りきらなければ2枚目以降もつくられるので注意(後述) |
Compress Lightmaps | 生成したライトマップを圧縮するか |
Ambient Occlusion | AOを有効化するか(後述) |
Directional Mode | Directionalモードを有効化するか(後述) |
Indirect Intensity | ライトマップの明るさを調整する どういうときに使うのか不明 |
Albedo Boost | ベイクの計算時に反射率(アルベド)の値を強める どういうときに使うのか不明 |
Direct Samples
Direct Samples
は直接光のサンプリング数です。
Lighting Mode
をSubtractive
にしている場合など、シャドウをベイクしているときに
この値を小さくしすぎると、シャドウが荒くなるようです。
特に理由がなければ初期値でいいと思います。
Indirect Samples
Indirect Samples
の値は小さすぎると結果が汚くなるケースがあります。
効果を知るために、パストレーシングのレンダラでノイズが生まれやすいような状況を再現してみます。
下記のシーンは隙間から光が差し込む閉鎖された空間を表しています。
このシーンでSample数を変えてライトマップをベイクしてみます。
サンプリング数が低いとかなりノイズが生まれることがわかりました。
ちなみにFiltering
をNone
にすると結果の違いはより顕著になります。
全てが参考になるわけではありませんが、パストレーシングでノイズが発生しやすい状況については
下記の記事でまとめていますので参考にしてください。
上記の内容から基本的にIndirect Samples
の値を大きくすれば結果は綺麗になりますが、
ベイクする時間が大幅に長くなるという問題が起こります。
ノイズが生じやすいかどうかもシーンごとに異なるので、
最適な設定値はシーンごとに調整する必要がありそうです。
Lightmap Resolution
Lightmap Resolution
は1Unitあたりにライトマップの何テクセルを割り当てるかを表します。
上図の通り、この値が大きいほどライトマップの品質は上がりますが、サイズも大きくなります。
この値を2倍にするとライトマップテクスチャの容量は4倍になるので注意深く設定する必要があります。
ライトマップの総容量はLighting Settings
ウィンドウの下部の統計情報から見れます。
Lightmap Size
ライトマップ1枚当たりの最大サイズです。
あくまで最大サイズであることに注意が必要です。
つまり、そこまでのサイズが不要であればライトマップは小さくなるし、
逆にそれ以上のサイズが必要な場合は2枚目、3枚目…とライトマップが作られます。
ライトマップの総容量を小さくしたい場合には前節のLightmap Resolution
を調整する必要があります。
前節にも書きましたが、ライトマップの総容量はLighting Settings
ウィンドウの下部の統計情報から見れるので、
ライトマップを総合したサイズを見るときはこちらを見る必要があります。
Ambient Occlusion
Ambient OcclusionをONにすると他のオブジェクトにより光が遮蔽されている部分がより暗くなります。
またONにした場合、「どのくらい離れているオブジェクトまでを遮蔽の対象にするか」とか、
生成される影の濃さなどを設定できます(詳細はここでは割愛します)。
Directional Mode
ライトマップをベイクするときには、通常ノーマルマップは影響しません。
しかし、Directional Mode
をDirectionalにするとノーマルマップの影響を受けるようになります。
これはEnvironment Reflection
を単色にしてみるとよくわかります。
よってDirectionalに設定するほうがクオリティは上がります。
しかし「対応するライトマップのテクセルにおいてライトが入ってくる方向と強さ」を表すテクスチャを生成するので、
テクスチャの容量が2倍になるという大きなデメリットがあります。処理負荷も若干増えます。
また、環境光の計算にはノーマルマップは反映されるので、
Environment Reflection
をSkyboxにすればそれなりにノーマルマップが反映されているようには見えます。
テクスチャ容量とクオリティとのトレードオフを考えて検討すると良いと思います。
ちなみにマニュアルは下記です。