プログレッシブライトマッパー
公式サイト:
プログレッシブライトマッパー | Unity マニュアル [公式]
概要
参考:
開発中のプログレッシブライトマッパーのご紹介 | Unity Technologies Blog [公式]
プログレッシブライトマッパー 2019 (SangYun Yi) – SlideShare
導入
参考:
Progressive Lightmapper – 確認までに長い時間を要求するライトのベイクを、素早く確認する | テラシュールブログ
設定
- Prioritize View:ビューに表示されている範囲を優先的に計算する。
- Multiple Importance Sampling:環境光のサンプリングに重み付けを行う。通常は収束が早くなるが、特定の条件でノイズが増える場合がある。(デフォルト:無効)
- Direct Samples:直接光をサンプルするために各テクセルから投影されるレイの数 (デフォルト:
32) - Indirect Samples:間接光をサンプルするために各テクセルから投影されるレイの数。屋外のシーンでは
100程度で十分。Emission を使用した屋内シーンでは大きな値が必要。(デフォルト:500) - Environment Samples:環境光をサンプルするために各テクセルから投影されるレイの数 (デフォルト:
500) - Light Probe Sample Multiplier:ライトプローブのサンプル数に係数を掛ける。プロジェクトの設定で「Editor > Graphics > Use legacy Light Probes sample counts」 (従来のライトプローブサンプルカウントを使用する) を無効にした場合に使用される。(デフォルト:
4) - Bounces:間接光の反射回数を指定する。通常は
2で十分。一部の屋内シーンで多くのバウンスが必要となる場合がある。(デフォルト:2) - Filtering:ノイズ除去フィルターの設定
- None:ノイズ除去を使用しない。
- Auto:プラットフォーム毎に定義されたプリセットを使用する。OptiX が使用できる場合は半径が
1テクセルのガウシアンフィルターを適用する。OptiX が使用できない場合は、直接光1テクセル、間接光5テクセル、アンビエントオクルージョン2テクセルの半径のガウシアンフィルターを適用する。 - Advanced:ノイズ除去フィルターの設定を手動で構成する。
- Direct Denoiser:直接光の計算で使用するノイズ除去フィルター (OptiX / OpenImageDenoise / Radeon Pro / None)
- Direct Filter:Gaussian / A-Trous / None
- Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:
1) - Sigma:A-Trous フィルターのシグマ (単位:シグマ/デフォルト:
0.5)
- Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:
- Indirect Denoiser:間接光の計算で使用するノイズ除去フィルター (OptiX / OpenImageDenoise / Radeon Pro / None)
- Indirect Filter:Gaussian / A-Trous / None
- Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:
5) - Sigma:A-Trous フィルターのシグマ (単位:シグマ/デフォルト:
2)
- Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:
- Ambient Occlusion Denoiser
- Ambient Occlusion Filter
- Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:
2) - Sigma:A-Trous フィルターのシグマ (単位:シグマ/デフォルト:
1)
- Radius:ガウシアンフィルターの半径 (単位:テクセル/デフォルト:
- Indirect Resolution:間接光をサンプルする解像度 (単位:単位距離当たりのテクセル数/デフォルト:
2) - Lightmap Resolution:ライトマップの解像度 (単位距離当たりのテクセル数:デフォルト:
40) - Lightmap Padding:ライトマップに設ける隙間 (単位:テクセル/デフォルト:
2) - Lightmap Size:ライトマップのサイズ (デフォルト:
1024) - Compress Lightmaps:ライトマップテクスチャを圧縮する。
- Ambient Occulusion:アンビエントオクルージョンの計算を行う。(計算負荷が高い)
- Max Distance:オブジェクト間の距離が指定した値より小さい場合にアンビエントオクルージョンを生成する。
0を指定すると無限に長いレイが投影される。(デフォルト:1) - Indirect Contribution:間接光の影響度を
0~10の間で指定する。(デフォルト:1) - Direct Contribution:直接光の影響度を
0~10の間で指定する。(デフォルト:0)
- Max Distance:オブジェクト間の距離が指定した値より小さい場合にアンビエントオクルージョンを生成する。
- Directional Mode
- Non-Directional:単一のライトマップに全ての計算結果を格納する。
- Directional:Main Directional Light の方向を格納するライトマップを生成する。
- Indirect Intensity:間接光の影響度を
0~5の間で指定する。(デフォルト:1) - Albedo Boost:マテリアル表面での反射光の強さを
1~10の間で指定する。1を指定した場合に物理的に正確な反射となる。(デフォルト:1) - Lightmap Parameters:ライトマップパラメーターアセットを指定する。(デフォルト:
Default-Medium)
ベイク
ライトマップをベイク中は完了までの予定時間 (ETA/Estimated Time of Arrival) が表示される。
参考:
Unity のライトマップ設定の各項目の説明 Progressive Lightmapper 編 | LIGHT11
室内シーンのライティング調整 | Shade3D チュートリアル
プログレッシブライトマッパー | Unity マニュアル [公式]
ライトマッピング – はじめに | Unity 2018.4 マニュアル [公式]
プログレッシブ CPU ライトマッパー | Unity 2018.4 マニュアル [公式]
GPU ライトマッパー
GPU 版の制限 (2018.3 ~)
- 両面グローバルイルミネーションが無効 → 全てのジオメトリが片面のみと仮定して計算される。(2019.1 以降でサポート)
- 影の投影は常に行われる → Cast Shadows / Receive Shadows の設定は無視される。(2019.1 以降でサポート)
- LOD が設定されたオブジェクトではベイク済みライトマップは適用できない。(2020.1.0a20 以降でサポート)
- A-Trous フィルタリングは無効 → ガウシアンフィルタリングが使用される。(2020.1a15 以降でサポート)
- サブメッシュの複数マテリアルは考慮されない → ライトマッパーは最初のサブメッシュのマテリアルのみを用いてライトマップのベイクを実行する。(2019.3 以降でサポート)
参考:
Progressive Lightmapper の GPU Acceleration でライトマップのベイクが爆速に | テラシュールブログ
プログレッシブ GPU ライトマッパー (プレビュー版) | Unity 2019.4 マニュアル [公式]
プログレッシブ GPU ライトマッパー (プレビュー版) | Unity 2018.4 マニュアル [公式]
GPU プログレッシブライトマッパー | Unity [公式]
Progressive GPU Lightmapper Preview | Unity Forum
デノイズ
参考:
Denoise を使用してライトマップのベイク時間を劇的に抑える | テラシュールブログ
指向性モード (Directional Mode)
「Directional Mode」を Directional に設定すると、ライトマップの生成時にノーマルマップを考慮する。ライトマップの容量は2倍になり、ベイク時間が延び、実行時の描画負荷も大きくなる。
設定
Non-DirectionalDirectional
複数シーン
「Directional Mode」で Directional を使用する場合、複数シーンのロード時には全てのシーンが Directional として設定されていなければならない。
参考:
使用する GPU を指定する
Unity 2020 以降の場合
- 「ライティング」 (Lighting) ウィンドウを開く。
- 「Workflow Settings > GPU Baking Device」で使用する GPU を選択する。
Unity 2018 / 2019 の場合
- 使用したい GPU のプラットフォームとデバイス番号を調べる。Unity エディターのログ (
C:\Users\[User Name]\AppData\Local\Unity\Editor\Editor.log) を開いて「Listing OpenCL device(s)」が出力された箇所を見つけ、DEVICE_NAME = ...の欄が対象のグラフィックスカードとなっている項目の* OpenCL platform x, device yのxとyの数字をメモする。 - Unity Hub でプロジェクト項目の右端にある縦に連なった3点ドットアイコン をクリックし、「詳細なプロジェクト設定」を開く。Unity Hub 3.x の場合は、3点ドットアイコン をクリックし、メニューから「コマンドライン引数を加える」を選択して「コマンドライン引数」ダイアログを開く。
- 追加のコマンドライン引数として
-OpenCL-PlatformAndDeviceIndices x yの形式でプラットフォームとデバイス番号を指定する。
参考:
Unity 2018 で VRChat ワールドを GPU ベイクしてみた – Qiita
どの GPU をライトマッパーに使用するかの設定 | Unity 2018.4 マニュアル [公式]
プログレッシブ GPU ライトマッパー (プレビュー版) | Unity マニュアル [公式]
The Progressive GPU Lightmapper (Preview) | Unity Manual [Official]
直接光の影
直接光の影をベイクする場合は、「混合ライティング」 (Mixed Lighting) の「ライティングモード」 (Lighting Mode) を、シャドウマスク (Shadowmask) または 減法 (Subtructive) に設定する。
直接光による影が粗くならないように、「Direct Samples」の値を 16 ~ 32 程度に設定する。「Lightmap Resolution」を大きくしてはっきりとした影をベイクする場合、ある程度のサンプル数が必要となる。
参考:
ノイズ対策
室内で隙間から光が差すシーンなど、レイトレーシングでノイズが発生しやすい状況でライトマップを生成する場合、「Indirect Samples」を 128 ~ 512 程度に大きくする必要がある。屋外の明るいシーンなどでは、8 ~ 16 程度で十分である。
参考:
パストレーシングでノイズが生まれる原因/生まれやすいケース | LIGHT11
アンビエントオクルージョン (Ambient Occlusion / AO)
屋外の大規模シーンなどで、「Lightmap Resolution」が 1 ~ 5 程度の場合は、ほとんど効果がないので無効にしておいてよい。
設定
- Max Distance
- Indirect Contribution
- Direct Contribution
参考:
アンビエントオクルージョン | Unity 2020.3 マニュアル [公式]
チュートリアル
→ 「Lighting Optimization with Precomputed Realtime GI 」
入手:
Lighting Optimisation Tutorial | Unity Asset Store [Official]
参考:
7.5時間を約3分に/ライトマップのベイク時間を短縮する為のチュートリアル | テラシュールブログ
Lighting Optimization with Precomputed Realtime GI | Unity Learn [Official]
Tips
参考:
プログレッシブライトマッパーの最適化に役立つ8つのヒント | Unity for Pro
資料
プログレッシブライトマッパー 2019 (SangYun Yi) – SlideShare
プログレッシブライトマッパーの真価を発揮する秘訣 (Ciro Continisio) – SlideShare
Lightmapping for Beginners (Jennifer Nordwall) – SlideShare
Progressive Lightmapper: An Introduction to Lightmapping – SlideShare