GPUレンダリング時のGPUメモリ使用量を最適化するためのヒント
この記事では、V-Ray GPU使用時のGPUメモリ使用量の最適化について説明します。CUDAエンジンまたはRTXエンジンを使用する場合、レンダリングされるシーン全体 (ジオメオトリ、テクスチャ、バッファなど) が GPUメモリに完全に収まる必要があります。シーンに十分なGPUメモリがないと、レンダリングが大幅に遅くなったり、メモリ不足エラーでクラッシュしたりする可能性があります。
十分なGPUメモリがないためレンダリングが遅くなる
V-Rayログでは、このエラーは以下の様に示されますが、レンダリングが大幅に遅くなる為このエラーは無視すべきではありません。この警告が表示された場合は、この記事のヒントを使用してシーンの GPU メモリ使用量を最適化することをお勧めします。
Num samples per thread reduced to xxxxx, rendering might be slower
メモリー飽和エラー (Out of memory)
このエラーは以下の様にログに出力されます。もしくは場合によっては DCC ホストアプリケーションのハングアップになるケースもあります。
[GPU Light Cache]couldn't allocate buffer of size xxxMB
V-Ray GPU の GPUメモリ最適化
それぞれの項目を詳しく見ていきます
プログレッシブ・イメージサンプラー
V-Ray GPU のレンダリングには「プログレッシブ イメージサンプラー」を使用することをお勧めします。プログレッシブ・イメージサンプラーは、使用する GPU メモリが少ないだけでなく、通常はバケット モードよりも高速です。プログレッシブ・イメージサンプラーを使用すると、テストでは GPU メモリの使用量が約2GB 削減されます。
V-Ray GPU CUDA エンジン
エンジンを RTX から CUDA に交換すると、シーンに応じて GPU メモリの使用量が約 2~3 GB 削減されます。なお、これは CUDAエンジンが RTXエンジンよりもメモリ効率が優れているという意味ではありません。(GPUメモリ不足の問題が発生していない場合は) RTXエンジンでシーンをテストし、どのエンジンがシーンをより速くレンダリングするかを確認することをお勧めします。
テクスチャの圧縮
このモードではビットマップに特別な圧縮を使用して、品質を犠牲にする事無くメモリ使用量を大幅に削減します。これは、多くの高解像度ビットマップを使用するシーンやアセットに非常に役立ちます。このオプションでは全てのテクスチャが圧縮されるわけではなく、ビットマップの使用状況に基づいて例外が発生します:
- ビットマップがNormal/Bumpマップとカラーマップの両方に使用されている場合、通常圧縮されたマップはカラーマップに適切ではなく、その逆も同様です。
- ディスプレイスメントに使用されるビットマップは除外されます
- レンズ効果に使用されるビットマップは除外されます
テクスチャ圧縮は、レンダリングプロセスが開始される前のプリパス処理として行われます。このモードはシングルGPUを搭載したマシンのレンダリング パフォーマンスにわずかに影響します。
ノート: 圧縮テクスチャモードはアニメーションのレンダリングに適しており、ちらつきが軽減されることに注意してください。
テクスチャのアウトオブコア (V-Ray 6.2 以降でのみ利用可能)
この機能を使うと、V-Ray GPU はテクスチャをシステムメモリ側にオフロードし、パフォーマンスにほとんど影響を与えずに GPUメモリの使用量を大幅に削減できます。 UIでは“Use System Memory for Textures”のチェックを有効化します。この機能の詳細についてはこちらをご覧ください。
GPU Light Cache サブディビジョン
この値を大きくすると、より多くのGPUメモリが使用されます。理想的には LCサブディビジョンはレンダリング解像度に基づいて 1000 ~ 3000 にする必要があります。4K 解像度のレンダリングまたはアニメーションの場合は 3000 が理想的です。
レンダーエレメント
より多くのレンダーエレメント、特にライトミックスを使用するとGPUメモリの使用量が増加します。可能な限り最小限のレンダーエレメントを使用するようにしてください。最終レンダリングに必要でないものは全て削除する必要があります。
V-Ray Standaloneでレンダリング
ホストアプリケーションは、シーンを開いたままにする為にある程度のVRAMが必要です。シーンの複雑さに応じて、ホストアプリケーションは数ギガバイトの VRAM を占有する場合があります。これは、レンダリングに十分なメモリがない場合に V-Ray GPUにとって非常に貴重になる可能性があります。シーンを .vrscene ファイルにエクスポートし、V-Rayスタンドアロンでレンダリングすると、ホストアプリケーションを起動している必要が無い為、VRAM の消費が最小限に抑えられます。
V-Rayメニューから .vrscene をエクスポートできます。
レンダリングを行うには、コマンドプロンプトで以下の様に実行します
"C:\ProgramData\Autodesk\ApplicationPlugins\VRay3dsMax2023\bin\vray.exe" -sceneFile="C:\Users\muham\Desktop\NewFolder\GPU_CAM_B_MH_002.vrscene" -rtEngine=7 -display=1 -verboseLevel=3 -showProgress=1
- 最初のパスをご自身の vray.exe のあるパスに置き換えます。この場合は V-Ray for 3ds Max 2023 パスです。
- 2 番目のパスを .vrscene へのパス (ホストエクスポートしたもの) に置き換えます。
- -rtEngine=7 は RTX エンジン用、-rtEngine=5 は CUDA エンジンを使用する事を意味します。
- このテキストをコピーしてテキストエディタ(メモ帳)に貼り付けテキストファイル(.txt)として保存します。.txtファイルの拡張子を .bat に変更します。.bat ファイルをダブルクリックして Vrayスタンドアロンでレンダリングできます。
メモ:Vrayスタンドアロン用のGPU レンダリングデバイスを設定するには、V-Rayのインストールに同梱されている、スタンドアロンのデバイスセレクターツールを使用してください。(Windowsスタートで GPU Device Selection を検索して実行します)
GUI描画専用にGPUデバイスを割り当てる
RTX 3060 12 GB等のミッドレンジGPUを、もう1つワークステーションに追加すると、モニター表示に役立ちます。V_Ray GPUのデバイス セレクターツールでは、モニター表示用のGPU が * 記号で強調表示されます。こうすることで、3ds Max などのホストDCC (およびその他の開いているアプリケーション) がレンダリング用デバイスのGPUメモリを使用しなくなります。 表示用のGPUデバイスを設定するには、Nvidiaコントロールパネルを開き、“OpenGL レンダリング GPU”をこのデバイスに設定します (この例では、ワークステーションに2つの 3090 があります)。
ノート:3ds max、Maya、Cinema 4D、Houdini などのアプリケーションはビューポート表示にこの“OpenGL レンダリング GPU”デバイスを使用することに注意してください。
ビューポート表示用GPUデバイスを設定するもう1つの方法は、[スタート] ボタンを選択し、[設定] を選択します。[設定] で、システム >表示 > グラフィックス > [既定のグラフィックス設定を変更する] を選択します。ここで、デフォルトの高性能 GPU を好みのデバイスに変更します。
ディスプレイスメント
ディスプレイスメントとサブディビジョンサーフェスのあるモデルは大量のGPUメモリを消費する傾向があり、分割数は画像の解像度に依存します。解像度が高くなるほどメモリ消費量も多くなります。
特にディスプレイスメントを「ビュー依存」に設定している場合、この機能によって生成されるジオメトリが適切なポリゴン数であることを確認してください。そうしないとメモリ全体を簡単に消費してしまう可能性があります。
[設定] タブのグローバル スウォッチからディスプレイスメントを無効/有効にして、GPUメモリ使用量への影響を確認できます。
ターボスムースと3dsMaxのディスプレイスメントモディファイアを使用して、ディスプレイスメントマップを実ポリゴンとしてベイクし、V-RayProxyとして出力して使用すると、GPUメモリの消費を抑える事ができる可能性があります。
CPUをGPUデバイスとして使用したV-Ray GPUレンダリング
CPUをGPUデバイスとして利用したV-Ray GPUレンダリングは、高速化のメリットが得られない為、効果的なアプローチではありません。ただし、シーンが大規模で GPU メモリに収まる方法がない場合でも、システムメモリを使用する CUDA-x86 エンジンでは V-Ray GPU でレンダリングする事が可能です (ページングがサポートされています)。CPUをV-Ray GPUのデバイスとして使用するには、デバイス選択で C++/CPU を選択してください。
V-Ray GPUのレンダリングは、CUDA-x86 エンジン(C+ +/CPUデバイス)を使用する事で、GPUを搭載していないマシンでもレンダリングできます。最終的に CUDA および RTX エンジンと同じ結果を生成します。
Chaos Cloud を利用する
Chaos Cloud は、ローカルマシンのメモリに収まらないプロジェクトをレンダリングする1つの解決方法です。これは、追加のハードウェアに投資したり、シーンの最適化に時間を費やしたりすることなく、ワンクリックでシーンをレンダリングできる長所もあります。
現在、Chaos Cloud は Nvidia Tesla T4 16 GB GPU を使用しているため、Chaos CloudのGPUで利用できるメモリは 16 GB となります。
GPUメモリを消費する他のアプリケーションを閉じる
プロジェクトで作業するときに複数のアプリケーションを開いていることは珍しいことではありません。必要なアプリケーションを全て起動して実行すると非常に便利ですが、これによりV-Ray GPU で使用できる GPU メモリの量も減ります。 Substance Painter や Nuke などのアプリケーションは大量のGPUメモリを使用します。
起動アプリケーションを最小化する事で、前述のようにモニター表示用 GPU デバイスの VRAM 使用量が削減されます。