GPUレイトレーシング

  • GPUレイトレーシング
  • 「サンプル数」による変化
  • GPUレイトレーシングの制限事項
  • 発光を面光源の代わりにする


Shade3D Ver.22 Professional版以降で「GPUレイトレーシング」が追加されました。
今回はこのレンダラについて記載していきます。
Ver.22のGPUレイトレーシングはまだ制約が多いため、現状使用できる機能/使用できない機能について列挙していきます。

GPUレイトレーシングとは?

パソコンもしくはスマートフォンやタブレットなどのコンピュータ機器のグラフィック描画は、グラフィック描画専用のハードウェアが使用されています。
3DCGだけではなく、2次元の画面の描画自身(UI、ユーザインターフェースの描画自身)もこのグラフィック描画のハードウェアで行われます。
パソコンでは、グラフィックカードとしてこの描画プロセッサ/装置を入れ替えることができます。
この描画プロセッサのことを「GPU(Graphics Processing Unit)」と呼びます。

GPUは3DCGの表現に長けています。
また、ハードウェアの力を借りて大量の並列計算を行うような仕組みも実装されています。
これはCGに限らず「計算」であればルールに従って並列実行することができます。
GPUはCPUでの計算よりも並列数が多く、一般的にはGPUを使用するほうが速く計算できます(ですが、アルゴリズムによってはCPUで計算したほうが速いこともあります)。
ただし、1つの計算自身はGPUの方が速いとは限りません。
処理を最適化したい場合は、「並列化できる計算」に置き換える必要があります。
CPUに比べてGPUのほうが並列数が圧倒的に多いため、GPUの計算は高速になります。

CPU上での計算は、物理的なコア数や仮想的なスレッド数でどれだけ並列させるかを決めることができます。
2021年現在は、多くて64コア(128スレッド)ほどの並列数になります。
一般的には4-16スレッドあたりが多いかと思われます。
GPU上ではコア数が多く、数千を超える並列化もできます。

「GPUレイトレーシング」はこのGPUのハードウェアを使用して3DCGのレンダリング工程の「レイトレーシング」を高速に行います。
レイトレーシングはグラフィックのための処理ですが、計算の塊になります。
また並列化すればするほどレンダリング時間を短縮できることになります。

GPUレイトレーシングの注意点

GPUレイトレーシングはグラフィックハードウェアの機能を使用するため、GPU(グラフィックカード)の性能に依存します。
古いグラフィックカードの場合は対応していない場合があります。

対応しているグラフィックカードは「Shade3D Ver.22 動作環境」( https://shade3d.jp/ja/products/shade3d/ver22/environment.html )をご参照くださいませ。

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

GPUレイトレーシングはShade3D Ver.22 Professional版以降で使用できます。
Basic/Standard版では使用できません。

以下のシーンをレンダリングします。

640 x 480ピクセルでレンダリングして比較しました。

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

レンダリング設定を開き、「手法」で「GPUレイトレーシング」を選択します。

GPUレイトレーシングは間接照明の計算も含まれます。
また、「大域照明」タブでの設定は「反射係数」だけを使用します。

「その他」タブで「視線追跡レベル」と「サンプル数」を指定できます。

「視線追跡レベル」は視点からレイトレースしたとき、反射または透過でレイを追跡する回数の最大を指定します。
ガラスなどの透過表現の場合はこの数値を上げる必要があります。
「サンプル数」はGPUレイトレーシング特有のパラメータです。
これは、1ピクセルでいくつのレイを使用するかという指定になります。
この数が多いほどより正確なレンダリング結果に近づきます。
GPUでのレンダリング時は、計算自体が速いからかこの値が大きくなってもあまり速度には影響しないようです。
ただ、大規模シーンやサンプル数が大きくなるとレンダリング時間はかかることになります。
室内などの間接照明の影響が大きいシーンでは、この値は1000以上に上げたほうが良い結果となりました。

↓ 21秒 (手法:パストレーシング、大域照明:パストレーシング、イラディアンスキャッシュなし)
「レイトレーシングの画質」を50としました。

↓ 1秒以内 (手法:GPUレイトレーシング、AIノイズ除去を未使用)
「サンプル数」を50としました。

従来のパストレーシングのレンダリング時間と比較して、GPUレイトレーシングは1秒以内でレンダリングが完了しました。
GPUレイトレーシングは、はじめに背景のキューブマップが内部的に作成され、その後GPUに情報が渡されてGPU上でレンダリングされます。

GPUレイトレーシングに加えてAIノイズ除去を有効にしてレンダリングすると以下のようになりました。

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

「サンプル数」による変化

GPUレイトレーシングの場合、「サンプル数」を大きくしてもそれほどレンダリング時間は増加しません。
比較のため、AIノイズ除去を無効化して比べてみました。
サンプル数が大きいほど、高周波ノイズは緩和されていきます。

レンダリング時間は、サンプル数400の場合は1秒ほど。
それ以外は1秒以内のレンダリング時間でした。

十分に高周波ノイズが緩和された状態でAIノイズ除去を行うことで、より品質の良いレンダリング結果となります。
以下はサンプル数400でAIノイズ除去を有効にしてレンダリングしました。

背景の更新

Ver.22では背景ウィンドウで背景を入れ替えた場合、レンダリング結果に入れ替えが反映されないようでした。
この場合は、透視図のナビゲーションツールの右端をクリックしてポップアップメニューを表示し、「背景の更新」を選択します。

この後レンダリングを行うと背景が反映されました。

GPUレイトレーシングの制限事項

Ver.22のGPUレイトレーシングではいくつか制限事項があります。
制限事項についてはShade3Dオンラインヘルプの「GPUレイトレーシング」( http://help.shade3d.jp/shadehelp/source/ja/Manual/22.0NewFeatures/Rendering_Related/GPU_Raytracing/00.html )もご参照くださいませ。
いくつか制約のある個所を確認していきます。

使用できない機能

以下の機能はGPUレイトレーシングでは使用できません。

  • 部分レンダリング
  • レンダリングブーリアン
  • 線形状の「穴」
  • 色補正の「レンダリング画像に即時反映する」
  • レンダリング時のマルチパス情報
  • レンダリング時のアルファ値、Z値の取り出し

Shade3Dマテリアルは間接照明が反映されない

Shade3Dのマテリアルは「Shade3Dマテリアル」(旧来の表面材質)と「PBRマテリアル」があります。
Shade3Dマテリアルを使用した場合は、間接照明が反映されず直接照明だけ反映されるようでした。
以下は左がShade3Dマテリアル、右がPBRマテリアルを使用しています。

オブジェクト光源

「面光源」「線光源」「配光光源」は点光源に置き換えられます。
以下のように、光源として面光源のみを配置してレンダリングしました。

手法「パストレーシング」でレンダリングした場合は以下のようになります。

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

点光源に置き換えられたために、影の境界部分が滑らかになっていません。
また、同心円状に模様がついてしまっています。

ただし、面積のある光源(面光源や線光源)については、PBRマテリアルの「発光」で代用できます。
これは後述します。

カメラの被写界深度

カメラウィンドウで被写界深度を指定します。

被写界深度の割り当て方法は、ナレッジベースの「レンダリングでの被写界深度(DOF)の表現」をご参照くださいませ。

被写界深度を指定して、手法「パストレーシング」でレンダリングした場合は以下のようになります。

GPUレイトレーシングでレンダリングした場合は以下のようになります。
被写界深度は無効になっています。

PBRマテリアルの法線マップ

PBRマテリアルで「法線マップ」は反映されません。

手法「パストレーシング」でレンダリングした場合は以下のようになります。

PBRマテリアルのベースカラーと法線マップのマッピングを与えています。

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

法線マップが反映されていません。

PBRマテリアルのαブレンド/αマスク

PBRマテリアルでは「αブレンド」「αマスク」反映されません。
以下のようにPBRマテリアルで「αブレンド」「αマスク」を割り当てました。

手法「パストレーシング」でレンダリングした場合は以下のようになります。

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

PBRマテリアルのオクルージョン

PBRマテリアルのマッピングの「オクルージョン」は反映されません。

PBRマテリアルのマッピングで「イメージ」以外

PBRマテリアルのマッピングで「イメージ」以外(ストライプ、チェック、スポットなどのプロシージャルテクスチャ)は反映されません。

GPUレイトレーシングでPBRマテリアルとして使用できる箇所

GPUレイトレーシングでPBRマテリアルとして以下を使用できます。

  • ベースカラーとマッピングのベースカラー
  • メタリックとマッピングのメタリック
  • ラフネスとマッピングのラフネス
  • 屈折率
  • 透明度とマッピングの透明度(ただし、透明体の影が落ちないようです)
  • 発光とマッピングの発光
  • マッピングのタイリング指定での「リピート」(リピート以外は反映されません)

ただし、マッピング使用時は乗算合成のみで、「適用率」はどの値を使用しても1.0として扱われます。

発光を面光源の代わりにする

静物画のシーン」で作成したテーブルとリンゴのシーンでは、面光源を使用しています。
このシーンの表面材質をすべてPBRマテリアルに置き換えました。
面光源は以下のように3つ使用しています。

手法「パストレーシング」、大域照明「パストレーシング」、イラディアンスキャッシュなし、AIノイズ除去を有効にしてレンダリングすると、以下のようになりました。

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

AIノイズ除去を使用することで、従来のShade3Dのレンダリングよりもずいぶん高速になりましたが、
これに加えてGPUレイトレーシングを使用します。

↓ 1秒 (手法:GPUレイトレーシング、AIノイズ除去を使用)
「サンプル数」を50としました。

面光源が点光源化されたため、影が柔らかくありません。
そこで、面光源の「明るさ」を0にしてPBRマテリアルの「発光」を与えていきます。

面光源の明るさを0に変更

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

これで、「閉じた線形状」になります。

PBRマテリアルの発光を指定

PBRマテリアルの「発光」を50としました。

このシーンでは3つの面光源がありました。
それぞれを、PBRマテリアルの発光値をKeyLight 50/FillLight 40/BackLight 30としました。

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

影が柔らかくなりました。
ただ、ぼやけていいるのが目立ちます。
そこでサンプル数を500としました。

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

まだぼやけてる部分があります。サンプル数を1500としました。

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

手法「パストレーシング」のレンダリング結果にかなり近づきました。
レンダリング時間はパストレーシングとGPUレイトレーシングの比較で16倍速ほどになりました。

Ver.22のGPUレイトレーシングはまだ制約が多いですが、今後のバージョンアップで品質と速度の両立に期待できそうです。

Ver.22のGPUレイトレーシングについてまとめると、以下のようになるでしょうか。

  • PBRマテリアルを使用する
  • 面光源はPBRマテリアルの「発光」に置き換える
  • 法線マップやαブレンド、αマスクなど反映されない機能がある

次回は「キッチンを作る」を
GPUレイトレーシングを使用してレンダリングする流れを解説予定です。

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