[Omniverse] RTX-Real-TimeをPath Tracingの結果に近づける検証

Omniverse Create 2022.3.1(Kit.104.1)では以前よりも"RTX-Real-Time"での
間接照明含めた結果が綺麗に出るようになってるようでしたのでいくつか検証しました。

RTX-Real-TimeとRTX-Interactive (Path Tracing)との違い

まず、"RTX-Real-Time"と"RTX-Interactive (Path Tracing)"をおさらいしておきます。
簡単な検証シーンで試してみました。

RTX-Interactive (Path Tracing)

"RTX-Interactive (Path Tracing)"は間接照明も付加されたレンダリング結果になります。

奥の球は、左から以下のマテリアルを指定しています。

  • BaseColor RGB(0.8, 0.0, 0.002), Roughness 0.2, Metallic 0.0
  • BaseColor RGB(0.8, 0.8, 0.8), Roughness 0.25591, Metallic 1.0
  • BaseColor RGB(0.8, 0.8, 0.8), Roughness 0.0, Metallic 1.0

手前の球は、左から以下のマテリアルを指定しています。

  • OmniGlass, Roughness 0.0
  • OmniGlass, Roughness 0.3
  • OmniPBR, BaseColor RGB(0.2, 0.2, 0.2), Roughness 0.5, Metallic 0.0, Opacity 0.4

パストレーシングの場合はレンダリングが収束するまでに時間がかかります。
レンダリング時間の確認は、ビューポートの目玉のアイコンをクリックし"Heads Up Display"-"Progress"をOnにします。

すると、ビューポート右上にパストレーシングのサンプリング数とかかった時間が表示されます。
上記の場合は512サンプリング/ピクセルで11.11秒かかったことになります。

RTX-Real-Time

そのまま"RTX-Real-Time"に切り替えます(無調整)。

"RTX-Real-Time"は間接照明がパストレーシングで計算されるわけではないため、フォトリアルからは遠ざかることになります。
ただし、OmniGlassのガラス表現は実現できています(直接照明としてのレイトレーシングは行われている)。
レンダリングは速いです。RTXではリアルタイムで実用的な速度が出ています。

また、いくつか気づく点があるかと思います。

  • OmniGlassのRoughnessが効かなくなる
  • Opacityが1.0(完全な不透明)ではない場合に消えてしまう

いくつか解決できる点があるのでそれをどうにかしよう、というのが今回のテーマです。

"RTX-Real-Time"でOpacityを反映させる

"Render Settings"ウィンドウを表示し、"Ray Tracing"タブを選択します。
"Translucency"の"Enable Fractional Cutout Opacity"チェックボックスをOnにします。

これでOpacityの半透明が反映されました。

"RTX-Real-Time"で間接照明を反映させる

"Render Settings"ウィンドウを表示し、"Ray Tracing"タブを選択します。
"Indirect Diffuse Lighting"の"Indirect Diffuse GI"チェックボックスをOnにします。

これで、かなりの精度で間接照明が反映されました。

レイの追跡回数を調整

ただ、何回か反射が行われた先が暗くなっているのが見えます。
これを調整します。以下はパストレーシングとの比較です。

"Render Settings"ウィンドウを表示し、"Ray Tracing"タブを選択します。
"Reflections"の"Max Reflection Bounces"の値を5に変更しました。

Metallicの映り込みについては改善が確認できました。

OmniGlassの屈折先はまだ暗いところがあります。
"Direct Lighting"の"New Denoiser (experimental)"チェックボックスをOnにします。

OmniGlassの屈折先で暗くなっていた部分にも光が届きました。

屈折する場合の敷居値の調整

手前側のOmniGlassの球の周囲がRTX-Real-Timeの場合にのっぺりしています。
以下はパストレーシングとの比較です。

"Render Settings"ウィンドウを表示し、"Ray Tracing"タブを選択します。
"Translucency"の"Secondary Bounce Reflection Throughput Threshold"の値を0.1から0.0に変更しました。

これで屈折時もかなりパストレーシング時に近づきました。

間接照明の強さの調整

現段階で、"RTX-Interactive (Path Tracing)"と"RTX-Real-Time"を比較します。
左が"RTX-Interactive (Path Tracing)"、右が"RTX-Real-Time"です。

"RTX-Real-Time"が若干暗いのが分かりますでしょうか。
左右で並べてみました。

直接照明が当たる部分はそれほど色変化はなく、間接照明の箇所で若干暗くなっているように見えます。
明度を比較したいため、彩度を0にしてみました。

Ambient Occlusionの影響もありそうですが、とりあえずは正面の壁の明度が近づくように調整することにします。

"Render Settings"ウィンドウを表示し、"Ray Tracing"タブを選択します。
"Indirect Diffuse Lighting"の"Intensity"を1.0から1.2としてみました。

彩度を0にすると以下のような感じ。

ただ、天井部分は濃淡が逆転しているためちょっと比較は難しいですかね。

改めて、パストレーシング(左)とRTX-Real-Time(右)を並べました。

もう少し実用的なシーン

テストシーンはこれまでにして、もう少し実用的なシーンで確認します。
日本家屋の廊下のシーンで"RTX-Real-Time"を"RTX-Interactive (Path Tracing)"のレンダリング結果に近づけます。

以下は"RTX-Interactive (Path Tracing)"のレンダリング結果です。

"RTX-Real-Time"に切り替えた初期状態は以下。

"Render Settings"ウィンドウの"Ray Tracing"タブで以下を調整。

  • "Translucency"の"Enable Fractional Cutout Opacity"をOn
  • "Indirect Diffuse Lighting"の"Indirect Diffuse GI"をOn
  • "Direct Lighting"の"New Denoiser (experimental)"をOn

半分で分けて比較すると、"RTX-Real-Time"は間接照明がかなり暗いままになっています。

"Indirect Diffuse Lighting"の"Intensity"を1.0から3.0としてみました。

天井がパストレーシング時と比較するとのっぺりはしていますが、全体的には近い感じになりました。

"Direct Lighting"の"New Denoiser (experimental)"をOffのデフォルトにすると、影はぼやっとしますが天井は模様もはっきり出ますね。

まだ"New Denoiser (experimental)"は実験的な実装のようですので、のっぺりするのを避けるためにOffのままのほうがいいのかもしれません。

今回はここまでです。
"RTX-Real-Time"でもかなり間接照明がパストレーシング並みに出るのが分かりました。

"RTX-Real-Time"でOmniGlassのRoughnessが効かなくなるという問題は今回はクリアできていないです。
これは解決案を見つけていますので次回ブログに書いていく予定です。