テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】Denoiseを使用してライトマップのベイク時間を劇的に抑える

Unity 2019.1で追加されたDenoiseを使ってみます

Denoiseでライトマップのノイズを除去

Progressive Lightmapperはレイトレースベースのライトマッパーです。そのサンプリング数が高い場合は非常に正しくライトマップがベイクされるのですが、非常に時間がかかります。一方、サンプリング数を減らす事でベイクの時間は大幅に向上しますが、ライトマップはノイズだらけになります。

時間が無限にあるならばサンプル数は多い方が良いですが、実際にはある程度のバランスを取る必要があります。

タイプ 効果
サンプル数が多い ベイクに時間がかかるが、ノイズは少なく正しく表示される
サンプル数が少ない ベイク時間は短いが、ノイズが表示される

f:id:tsubaki_t1:20190416225721j:plain

f:id:tsubaki_t1:20190416225753j:plain

以前はこの問題を、ノイズにフィルターをかけることでボカしていました。これはある程度の効果がありますが、やはりサンプル数が非常に低い場合は見た目が悪くなります。

f:id:tsubaki_t1:20190416230839j:plain

Unity 2019.1ではさらにノイズ除去というテクノロジーを追加することで、より少ないサンプリングでも綺麗に表示出来るようになったという感じみたいです。

下のライトマップは、サンプル数は最低でベイク時間が殆ど無いにも関わらず、それなりに綺麗に表示されています。勿論、よく見ると違和感のある部分はあるので使うかどうかは相談となるでしょうが、それでもサンプル数を減らすという選択肢は取りやすくなりそうです。

f:id:tsubaki_t1:20190416225732j:plain

Optix AI Denoiser

Optix AI DenoiserはNvidia機械学習ベースのノイズ除去システムみたいです。論文はコチラ

動作のためにNvidiaGPUを積んだWindowsのマシンが必要です。

developer.nvidia.com

使ってみる

実際に使ってみます。…といっても、Unity 2019.1では特に何もしなくても使えるならDenoiserが有効になります。

例えば Window > Renderer > LightmapDirect SampleIndirect SamplesEnvironment Sampleの数を劇的に下げてベイクしてみます。

項目 変更前 変更後
Direct Samples 32 1
Indirect Samples 512 8
Environment Samples 256 8

これでベイク時間が超短縮されます。

f:id:tsubaki_t1:20190416231959j:plain

Denoiserの有効・無効は、現在はFilterの項目に含まれます。初期設定では Autoで有効になっていますが、無効にしたい等の場合はFilterの設定を Advanceに変更すれば設定が可能になります。

f:id:tsubaki_t1:20190416232324j:plain

なおUnity 2019.1ではProgressive LightmapperのCPUのみで使用可能、2019.2からGPUにも対応するっぽいです。

感想

ライトマップのベイクに40分とか1時間とかかかっていたのが、本当に5秒とか30秒レベルで終わる割にソレナリに綺麗なので、非常に楽しいです。

とりあえずUnity 2019.1からはライトマップを焼く時にはSampleを減らす系の作業が入りそうな(…プロジェクト生成時に初期設定を手前に作らせろという意見も無きにしもあらず。何故かLightmapの設定はPreset使えないんですよね…)

関連

ライトマップをGPUで焼こうぜって手法。事前準備はありますが焼き始めるとかなり早いです

tsubakit1.hateblo.jp

Preset

tsubakit1.hateblo.jp

2019.1リリースノート

blogs.unity3d.com