Unity 2019.1で追加されたDenoiseを使ってみます
Denoiseでライトマップのノイズを除去
Progressive Lightmapperはレイトレースベースのライトマッパーです。そのサンプリング数が高い場合は非常に正しくライトマップがベイクされるのですが、非常に時間がかかります。一方、サンプリング数を減らす事でベイクの時間は大幅に向上しますが、ライトマップはノイズだらけになります。
時間が無限にあるならばサンプル数は多い方が良いですが、実際にはある程度のバランスを取る必要があります。
タイプ | 効果 |
---|---|
サンプル数が多い | ベイクに時間がかかるが、ノイズは少なく正しく表示される |
サンプル数が少ない | ベイク時間は短いが、ノイズが表示される |
以前はこの問題を、ノイズにフィルターをかけることでボカしていました。これはある程度の効果がありますが、やはりサンプル数が非常に低い場合は見た目が悪くなります。
Unity 2019.1ではさらにノイズ除去というテクノロジーを追加することで、より少ないサンプリングでも綺麗に表示出来るようになったという感じみたいです。
下のライトマップは、サンプル数は最低でベイク時間が殆ど無いにも関わらず、それなりに綺麗に表示されています。勿論、よく見ると違和感のある部分はあるので使うかどうかは相談となるでしょうが、それでもサンプル数を減らすという選択肢は取りやすくなりそうです。
Optix AI Denoiser
Optix AI DenoiserはNvidiaの機械学習ベースのノイズ除去システムみたいです。論文はコチラ
動作のためにNvidiaのGPUを積んだWindowsのマシンが必要です。
使ってみる
実際に使ってみます。…といっても、Unity 2019.1では特に何もしなくても使えるならDenoiserが有効になります。
例えば Window > Renderer > Lightmap
の Direct Sample
やIndirect Samples
、Environment Sample
の数を劇的に下げてベイクしてみます。
項目 | 変更前 | 変更後 |
---|---|---|
Direct Samples | 32 | 1 |
Indirect Samples | 512 | 8 |
Environment Samples | 256 | 8 |
これでベイク時間が超短縮されます。
Denoiserの有効・無効は、現在はFilterの項目に含まれます。初期設定では Auto
で有効になっていますが、無効にしたい等の場合はFilterの設定を Advance
に変更すれば設定が可能になります。
なおUnity 2019.1ではProgressive LightmapperのCPUのみで使用可能、2019.2からGPUにも対応するっぽいです。
感想
ライトマップのベイクに40分とか1時間とかかかっていたのが、本当に5秒とか30秒レベルで終わる割にソレナリに綺麗なので、非常に楽しいです。
とりあえずUnity 2019.1からはライトマップを焼く時にはSampleを減らす系の作業が入りそうな(…プロジェクト生成時に初期設定を手前に作らせろという意見も無きにしもあらず。何故かLightmapの設定はPreset使えないんですよね…)
関連
ライトマップをGPUで焼こうぜって手法。事前準備はありますが焼き始めるとかなり早いです
Preset
2019.1リリースノート