キッチンシーンをGPUレイトレーシングでレンダリング

  • キッチンシーンをGPUレイトレーシングでレンダリングできるように調整


Shade3D Ver.22 Professional版以降で追加された「GPUレイトレーシング」を使い、チュートリアルの「キッチンを作る」のシーンをレンダリングしていきます。
チュートリアルでは、イラディアンスキャッシュ処理に時間がかかるためイラディアンスキャッシュをオフにしていました。

Shade3Dでレンダリングした後、他のペイントツールでノイズ除去を行っていました。
Ver.22ではAIノイズ除去があるため、いくつかShade3D内で完結できるようになります。

AIノイズ除去を使用

この従来の640 x 480ピクセルのパストレーシングのレンダリングを、改めて以下の環境でレンダリングしました。
当時より環境を入れ替えているため、レンダリングは速くなっています。

OS : Windows 10 (64bit)
CPU : 12 x AMD Ryzen 5 3600 6-Core
GPU : NVIDIA GeForce RTX 3060
Memory : 32 GB
Shade3D : Ver.22 Professional

↓ 21分17秒(1277秒) (手法 : パストレーシング、大域照明 : パストレーシング、イラディアンスキャッシュなし、AIノイズ除去なし)

↓ 21分15秒(1275秒) (手法 : パストレーシング、大域照明 : パストレーシング、イラディアンスキャッシュなし、AIノイズ除去を使用)

AIノイズ除去を使用することで、レンダリングはイラディアンスキャッシュなしと同一時間、かつ、高周波ノイズの除去は満足のいく結果になりました。

GPUレイトレーシングを使用

このシーンは、現在のVer.22のGPUレイトレーシングで対応していない以下の機能を使用しています。

  • Shade3Dマテリアル
  • 表面材質のマッピングの「適用率」の調整(1.0以外を使用)
  • 面光源

まず、これらの部分をGPUレイトレーシングである程度反映できるように修正していきます。
また、法線マップはVer.22のGPUレイトレーシングでは使用できないため、今回は表面の凸凹については表現しません。

そのままGPUレイトレーシングでレンダリングすると以下のようになりました。

↓ 1秒以内 (手法 : GPUレイトレーシング、AIノイズ除去を使用)

いくつか問題を確認できるため、順番に調整していきます。
どこの修正が必要かというのは、前回の「GPUレイトレーシング」もご参照くださいませ。

Shade3DマテリアルをPBRマテリアルに置き換える

Shade3DマテリアルをPBRマテリアルに置き換える機能はないため、これらは手動で再割り当てします。
このキッチンのシーンでは小物をアセットとしてそれぞれ別shdファイルにしており、それぞれを外部参照しています。

また、すべてのマテリアルをマスターマテリアル(マスターサーフェス)にしています。
そのため、ブラウザのマスターマテリアルパートでShade3Dマテリアルを探し、これを置き換えていくことにします。

外部参照の参照元のshdでも同様の処理を行います。

Shade3Dでは形状に対して独立して(マスターマテリアル化せずに)表面材質を割り当てることができますが、
マテリアルの置き換えが発生した場合は手間がかかります。
そのため、できるだけ独立した表面材質は持たないようにして、マテリアルの継承も使わないようにして、マスターマテリアル(マスターサーフェス)でまとめることをお勧めします。

ここではキッチンルームの天井はShade3Dマテリアルを割り当てていました。
また、テクスチャマッピングを使用しており「イメージ/拡散反射」の「適用率」を0.4としています。
「反復」は5×5の指定です。

GPUレイトレーシングではマッピングの「適用率」は1.0で扱われるため、この天井のマテリアルでテクスチャを使用すると模様が色濃く出てしまいます。
そこで、テクスチャを使用しないようにしました。
単色の灰色を指定します。
PBRマテリアルを割り当て、「ベースカラー」RGB(150, 150, 150)、「ラフネス」0.5としました。

余裕があれば、Shade3Dマテリアル時の拡散反射色とテクスチャを適用率を加味して乗算合成、という作業をペイントツールで行うのもいいかもしれません。
ですが、今後のバージョンアップで修正される必要がある部分ですので、この段階でテクスチャのベイクはしないほうがいいと思われます。

窓ガラスもShade3Dマテリアルを指定していたため、PBRマテリアルに置き換えました。

このように、キッチンシーンのマスターマテリアルをPBRマテリアルに統一しました。

表面材質のマッピングの「適用率」の調整

個々のアセットでも、大部分はPBRマテリアルを使用していますがマッピングの「適用率」で1.0以外を使用している箇所があります。

これは汚れをノイズテクスチャで表現していたのですが、微々たる効果ですので今回はこの汚れのマッピングを削除しました。

同様に、すべてのマテリアルについてPBRマテリアルへの置き換えと、
マッピングの「適用率」が1.0ではない表現を調整しました。

マスク処理が必要なマテリアルを調整

「おろし金」では、マテリアルでテクスチャを使ったマスク処理により穴の表現を行っています。

この部分はGPUレイトレーシングではうまく反映できません。
そのため、マテリアルを調整します。

ベースカラーのテクスチャは使用せず、白寄りの灰色を指定。
マッピングは「イメージ/透明度」のみを使用しました。
テクスチャの白色部分が透過になるため、マッピングの「反転」をオンにしています。

おろし金単体をGPUレイトレーシングでレンダリングしました。

ただし、穴の部分は屈折の影響が出てしまう点に注意してください。
Ver.22ではPBRマテリアルの「αブレンド」「αマスク」がGPUレイトレーシングに対応していないため、現状このαマスクを表現する対応策はありません。

キッチンのシーンに戻り、ここでいったんGPUレイトレーシングでレンダリングします。

↓ 1秒以内 (手法 : GPUレイトレーシング、AIノイズ除去を使用)

1秒以内でレンダリングできました。
「サンプル数」は8を指定しています。
このままではぼやけていますので、これは後々調整します。

光源が作る影がやわらかくないため、次に面光源をPBRマテリアルの発光に置き換えます。

面光源をPBRマテリアルの発光に置き換え

キッチンシーンでは、窓の外からの強い光の入射と床の照り返しの光、この2か所で面光源を使用していました。

面積を持った光源はライティングの重要な要素になります。
そこで、面光源の明るさを0にして「閉じた線形状」に置き換えた後、PBRマテリアルの発光を使って面光源を再現します。

ブラウザで面光源を選択し、形状情報ウィンドウで面光源としての「明るさ」の値を0にします。

これで「閉じた線形状」になりました。
「閉じた線形状」にPBRマテリアルを割り当てます。
「発光」を1.0としました。

GPUレイトレーシングで仮レンダリングしました。

↓ 1秒以内 (手法 : GPUレイトレーシング、AIノイズ除去を使用)

これは照り返し用の光源ですが、光源としては見えてしまっています。
不可視にする手段はVer.22では存在しないため、視点から見えにくい位置に配置したほうがいいかもしれません。

同様に、窓の外からの面光源もPBRマテリアルの発光に置き換えました。
発光の値を1.6としました。

これで面光源を発光で置き換えました。
いったんレンダリングします。

↓ 1秒以内 (手法 : GPUレイトレーシング、AIノイズ除去を使用、サンプル数 8)

サンプル数の調整

サンプル数は8としていたため、現状はいろいろなところがぼやけています。
もっとサンプル数を上げていきます。
レンダリング設定の「その他」タブで「サンプル数」を500としました。

↓ 3秒 (手法 : GPUレイトレーシング、AIノイズ除去を使用、サンプル数 500)

まだぼやけているため、サンプル数を1000にしました。

↓ 6秒 (手法 : GPUレイトレーシング、AIノイズ除去を使用、サンプル数 1000)

タイル部分が少しぼやけています。サンプル数を2000にしました。

↓ 12秒 (手法 : GPUレイトレーシング、AIノイズ除去を使用、サンプル数 2000)

これでよい具合になりました。
オリジナルがパストレーシング+AIノイズ除去で21分15秒(1275秒)であったため、GPUレイトレーシングで12秒、106倍速ほどになりました。
非常に効果が大きいです。

別の視点からもレンダリングしました。

↓ 13秒 (手法 : GPUレイトレーシング、AIノイズ除去を使用、サンプル数 2000)

↓ 17秒 (手法 : GPUレイトレーシング、AIノイズ除去を使用、サンプル数 2000)

レンダリングが速いため、試行錯誤が格段にしやすくなりました。
現状、法線マップやαマスクなど未対応の機能もありますが、今後のバージョンアップでGPUレイトレーシングは作品作りの強力な味方になりそうです。

以上で、AIノイズ除去とGPUレイトレーシングの解説は完了です。
次回は別のテーマにチャレンジしていきます。

カテゴリー: GPUレイトレーシング+AIノイズ除去