Doc:JA/2.6/Manual/Render/Cycles/GPU Rendering
GPU レンダリング
はじめに
GPU レンダリングは CPU の代わりにグラフィックカードを使用してレンダリングさせることができるようにします。最近の GPU は非常に多くの処理を行うよう設計されているため、これによりレンダリングのスピードアップが期待できます。一方、限られたメモリにより、複雑なシーンのレンダリングにいくつか制限があったり、表示とレンダリングに同じグラフィックカードを使用した時のインタラクティブ性に問題があります。
Cycles は二つの GPU レンダリングモードを持っています。CUDA は nVidia のグラフィックカードで望ましい方法で、OpenCL は AMD/ATi のグラフィックカードでのレンダリングに対応する意味であります。ただしその実装は実験段階で、現在アンビエントオクルージョンのような画像のレンダリングにのみ対応しています。
Userプリファレンスによる設定
GPU レンダリングを使用するには、Userプリファレンスに行き、System タブにある、Compute Device(s)を選択します。次に、各シーンで Render プロパティ内で使用する CPU もしくは GPU レンダリングを設定できます。
CUDA
NVidia CUDA は、NVidia のグラフィックカードでのGPU レンダリングに対応しています。GTX 2xx (shader model 1.3)以降のグラフィックカードに対応していますが、 GTX 4xx もしくは GTX 5xx(shader model 2.x)のカードの使用を推奨します。これらのみがスピードアップが期待でき、初期のカードでは大抵、単にCPU を使用するよりも遅いからです。
Cycles はすべての OS において、最新のドライバのインストールが必須です。皆さんの OS にあったバージョンの Blender をダウンロードしてください。つまり、64ビットの OS では64ビット版 Blender をダウンロードしなくてはなりません。
古いカード
Mac と Linux では実行時に、公式に対応していないカード用のカーネルのコンパイルができます。GeForce 8xxx、9xxx カードは公式リリースには含まれていませんが、Experimental(実験的)機能 を有効にすることで動作するかもしれません。
そのためには、CUDA toolkit version 4.0 (64ビット版)以降をインストールする必要があります。他のバージョンも動くかもしれませんが、非対応です。 初回のレンダリングの終了後、(Blender は)カーネルを皆さんの GPU アーキテクチャ用にコンパイルしないといけません。Cycles は標準的な GPU カーネルに比べ非常に複雑であるため、コンパイルは恐らく40秒から数分かかり、グラフィックカードモデルによっては、メモリ使用量が約2GBにもなるでしょう。
OpenCL
まだ実装は完了しておらず、実験的(Experimental)機能とされています。
OpenCLを使用したレンダリングはまだ完全には対応していません。ただし随時作業中であり、もっと多くのグラフィックカードに対応できるでしょう。AMD OpenCL コンパイラにより私たちのフル・カーネルがコンパイルされないため、現在、シンプルなクレイレンダリングのみ対応しています。
初回のレンダリング終了後、(Blender は)カーネルを皆さんの GPU アーキテクチャ用にコンパイルしないといけません。Cycles は標準的な GPU カーネルに比べ非常に複雑であるため、コンパイルは恐らく40秒から数分かかり、グラフィックカードモデルによっては、メモリ使用量が約2GBにもなるでしょう。
OpenCL version 1.1以上が必要です。
よくある質問と答え
レンダリング中、Blender が無反応になるのはなぜ?
グラフィックカードがレンダリング中、ユーザインターフェイスを再描画できなくなり、インタラクティブに反応しなくなります。私たちはこの問題を、GPUからコントロールをできるだけ頻繁に奪回することで回避しようとしていますが、特に重いシーンでは完全にスムーズなインタラクティブ性は保証できません。これはグラフィックカードの真の解決策が存在しない制限の一つですが、将来的には若干改善できるかもしれません。
できるなら、二つ以上のGPUを導入し、一つを表示用、もう一つをレンダリング用として使用するのがベストでしょう。
なぜCPU上でレンダリングされたシーンがGPU上ではレンダリングされないのでしょう?
おそらく原因は色々ありますが、もっとも一般的なのはみなさんのグラフィックカード上に十分なメモリがないことでしょう。現在、グラフィックカードのメモリ量にあったシーンのみレンダリングでき、これは通常 CPU より少ないです。例えば、8k、4k、2k、1kの画像テクスチャでは、それぞれ256MB、64MB、16MB、4MBのメモリを占めることに注意してください。
私たちは GPU メモリより大きなシーンに対応したシステムを追加する予定ですが、これはすぐには追加されません。
複数の GPU をレンダリングに使用できますか?
まだ対応していませんが、そう遠くないうちに追加することを計画しています。
複数の GPU では利用可能なメモリ量は増えますか?
いいえ。各 GPU は自身が保有するメモリのみアクセス可能です。
NVidia と AMD、CUDA と OpenCL ではどれがレンダリングが高速ですか?
現在、nVidia + CUDA がレンダリングが高速です。こうなる根本的な理由はなく、CUDA 固有の機能も使用していません。コンパイラがもっと成熟すれば、大きなカーネルにもっとよく対応できると思われます。OpenCL については作業を行うフルカーネルがまだないため、対応はまだ途中で、あまり最適化もされていません。
エラーメッセージについて
Unsupported GNU version! gcc 4.5 and up are not supported!
Linux では、GCCのバージョンによってこのエラーが出ることがあります。
/usr/local/cuda/include/host_config.h から以下の行を削除してください。
#error -- unsupported GNU version! gcc 4.5 and up are not supported!
CUDA Error: Invalid kernel image
このエラーが Windows 64ビットで出た場合、32ビット版ではなく、64ビットビルドの Blender を使用してるかを確認してください。
CUDA Error: Out of memory
これは大抵の場合、シーンを GPU 上に格納するためのメモリが足りないことを示します。現在、グラフィックカードのメモリ量にあったシーンのみレンダリング可能で、これは通常 CPU より少ないです。詳細は前述してあります。
The NVIDIA OpenGL driver lost connection with the display driver
…異常な Windows のタイムアウト制限の所為で続行が不可能になっています。
GPU を表示とレンダリングの両方に使用している場合、Windows は GPU がレンダリングを計算できる時間を制限します。特に重いシーンでは、Cycles は非常に多くの GPU 時間を使うことがあります。▼Performance の Tile Size を小さくすれば、この問題が軽減されるかもしれませんが、真の解決策は、表示とレンダリングに別々のグラフィックカードを使用することです。