Blender でレンダリング時間を短縮する方法まとめ
目次
Eevee を使う
レンダラーを変える
Cycles
Scramble Distance + Dithered Sobol
レンダラー非依存
Eevee を使う
Blender 2.80 以降では Eevee が使える。Eevee はゲームエンジンで使われているラスタライズ法でレンダリングするリアルタイムレンダラーだ。透過や反射の表現に制限はあるが、それが許容できるならば最終的なレンダリングにも使える。
Eevee は基本的に物理ベースの表現しかできないが、Shader to RGB ノードを使えばセルルックも可能だ。
レンダラーを変える
セルルックならば Cycles より Blender レンダーの方がレンダリングが速い。
フリーの物理ベースレンダラーは Cycles 以外にも選択肢がある。クオリティーやレンダリング時間の比較はRender Engine Comparison: Cycles vs The Restを参照。
その他にも POV-Ray やモンテカルロレイトレーサーの Y・A・F・A・R・A・Y がある。
Cycles
4 Easy Ways to Speed Up Cycles
GPU を使う
Blender 2.8
Blender 2.8 以降は CPU と GPU と両方を同時に利用してレンダリングできる。
User Preference のシステムタブで Cycles 演算デバイスを選択し、プロパティパネルのレンダータブで「パフォーマンス > デバイス」を GPU 演算にする。
タイルサイズ
Boost Clock によると Blender 2.80 で nVidia の GPU を使って Cycles のレンダリングをする場合、タイルサイズでレンダリング時間はほとんど変化しない。
Blender 2.79
User Preference のシステムタブで Cycles 演算デバイスを選択し、プロパティパネルのレンダータブでデバイスを GPU 演算にする。
バウンス(Bounces)を減らす
レンダータブのライトパス(Light Paths)にある。 バウンスを減らすと若干暗くなる。 不透明オブジェクトのバウンスは 4 あれば品質は十分だ。 (半)透明オブジェクトは 4~8 ぐらいは必要になる。
Min が小さいと確率的に計算が打ち切られ、レンダリングが速くなる。 しかしそれはノイズになる。

サンプル(Samples)を減らす

デノイズを使う
バージョン 2.79 以降で有効。

シーンに存在しない属性のデノイズを無効にするとデノイズを高速化できる。

Blender と直接関係はしないが C/C++ から利用できる Intel® Open Image Denoise もある。
セノイザアドオンを使う
D-NOISEはディープラーニングを使ったデノイザアドオンだ。GeForce 600 系以降でしか実行できないが、高速で高品質な結果が得られる。
プリンシプルシェーダを速くするテクニック
下記の動画ではカメラから見える部分にプリンシプルシェーダを使い、見えない部分はディフューズと光沢(Glossy)とを組み合わせたノードを使っている。
Scramble Distance + Dithered Sobol
Scramble Distance と Ditherd Sobol が使えるビルドは Blender 2.79.6 - Scramble Distance + Dithered Sobol からダウンロードできる。
Scramble Distance についてはWhat happened to Scrambling Distance? It´s been used in Theory and it will help speed up rendering で議論や検証がなされている。Scramble Distance はレンダリングの精度が悪い。加えて Ambient Occlusion と同時に使うと赤みがかかったりする欠点がある。しかしレンダリング速度が 20 ~ 40 %高速になる。
レンダラー非依存
13 Ways to Reduce Your Render Times
Doc:2.4/Manual/Render/Performance
ハードウェア
- RAM の容量を追加する
- CPU のコアを追加する
- CPU のクロックを上げる
- 別の OpenGL のドライバを試す
- 速い RAM 使う
-
レンダーファームを使う
OS
- プロセスの優先度を上げる
- スワップ/ページファイルの容量を上げる
- 64bit にする
- 不要なアプリ/バックグラウンドサービスを終了させる
- ネットワークを遮断する
- Linux を使う
Linux は WDDM がないため Windows より数%レンダリングが速い。
Blender 自体の設定
- Memory Cache Limit を上げる。
Memory Cache Limit の設定
- 最適化されたビルドを使う
- レンダーウインドウを小さくする
シーンとオブジェクト
- 不要なライトを削除するかレンダリングしないようにする
-
影を生成しないようにする。影のみが必要な時は「影のみ(shadow only)」を使う
影の設定
- バッファシャドウを使う
- 動かないものはライティング情報をテクスチャにベイクする
ベイク
- メッシュを単純にする
- 重複頂点を削除する(Remove Doubles)。ポリゴン数削減(Decimate)モディフィアを使う
- 細分割曲面(Subsurf)モディフィアや多重解像度(Multiresolution)モディフィアの分割数を少なくする
- 不透明オブジェクトの見えない部分のポリゴンを削除する
- 分割してレンダリングする。 背景と動くものとを別々にレンダリングし、動くものは背景を透明にしてレンダリングする。 後でコンポジットで合成する。
- カメラを動かさない。背景とキャラとを別々にレンダリングする際に特に有効
- エリアライトの使用を避ける
- マテリアルを陰影なし(Shadeless)にする
Shadeless にする
- マテリアルを陰影なし(Shadeless)にして、AO をベイクする
- スポットライトにクリップを設定して、ライトが照らす範囲を狭くする
Clip distance の設定
-
カメラのクリッピング(clipping):を小さくする
カメラの撮影範囲を狭くする
-
ワールドのアンビエントオクルージョン(AO)、環境照明(Environment Lighting)、間接照明(Indirect Lighting)を無効にする
world の設定
-
マテリアルの SSS(Subsurface Scattering)を無効にする
マテリアルの SSS を無効にする
- テクスチャサイズを小さくする
- 背景をビルボード(板ポリにテクスチャを張り付けたもの)にする
- モデリングの時に面複製(DupliFace)や頂点複製(DupliVert)を利用する
- Adaptive Subdivision を利用する
Render タブ
- レンダリングの解像度を下げる
- アンチエイリアス(AA)を無効にする
- モーションブラー(Motion Blur)を無効にする
- レイトレーシング(Ray Tracing)を無効にする
- 影(Shadows)を無効にする
- SSS(Subsurface Scattering)を無効にする
- バッファを保存する
- タイルサイズ(Tile Size)を最適化する
最適なタイルサイズはハードウェアによって異なる。 いくつかのタイルサイズでレンダリングしてみて、最適なものを採用する。 2012 年ごろのハードウェアでは、CPU を使う場合 16~32、GPU を使う場合では 256 あたりが最適だ。 2016 年の GPU では 512 や 1024 のほうが速いことも多い。
標準アドオンの Auto Tile Size を使えば余りの出ないサイズを計算してくれる。Auto Tile Size アドオン - 辺(Edge)を描画しない
