dskjal
広告
広告

Blender でレンダリング時間を短縮する方法まとめ

カテゴリ:blender

Blender レンダー以外の項目はバージョン 2.83 以降を前提としている。

目次

概要

バージョン 3.0 以降は高速な GPU(nVidia のものが推奨される)を使うのが早い。高速な GPU を使えば、Cycles X でも Eevee でもレンダリングが速くなる。レンダリングを速くしたいなら CPU より GPU を強化したほうがいい。

バージョン 2.93 以前

レンダリングを高速化する方法は大きく分けて2種類ある。Eevee を使う方法と Cycles でデノイザノードを使う方法だ。バージョン2.90 からは Maxwell 以降(GeForce 700, 800, 900, 1000)の GeForce でも Optix によるビューポートデノイズやレンダリング高速化の恩恵が受けられる。

Cycles ならライトパスの最適化を行う方法もある。

スチル・ルックデブ(ルック開発)

スチル・ルックデブならEeveeデノイザノードOptiX Viewport Denoisingビューポートデノイズ高速 GI 近似E-Cycles アドオンが候補になる。

Eevee はヘアー、ボリューメトリックス、透過などの品質はよくないが、リアルタイムでレンダリングできる。

デノイザノードは画質は悪化するがレンダリング速度は劇的に速くなる。OptiX Viewport Denoisingビューポートデノイズを使えば Cycles でもビューポートのレンダリングに数秒しかかからない。

アニメーション

デノイザノードCycles のデノイズはアニメーションさせると時間方向のノイズやちらつきが発生するため、アニメーションでは使用されない傾向にある。ヘアー、ボリューメトリックス、透過などの品質が許容できるなら Eevee が選択肢に入る。Cycles なら Adaptive Sampling を使い、ハードウェアに投資する。

Eevee を使う

Eevee はゲームエンジンで使われているラスタライズ法でレンダリングするリアルタイムレンダラーだ。透過や反射の表現に制限はあるが、それが許容できるならば最終的なレンダリングにも使える。

Eevee は基本的に物理ベースの表現しかできないが、Shader to RGB ノードを使えばセルルックも可能だ。

Eevee の使い方

レンダラーを変える

セルルックならば Cycles より Blender レンダーや Eevee の方がレンダリングが速い。

フリーの物理ベースレンダラーは Cycles 以外にも選択肢がある。クオリティーやレンダリング時間の比較はRender Engine Comparison: Cycles vs The Restを参照。

その他にも POV-RayKerkythea やモンテカルロレイトレーサーの Y・A・F・A・R・A・Y がある。

有料のレンダラー

Arnold For Blender($45~)

V-Ray for Blender(1年ライセンス¥80,000~)

Redshift 3.0 & Blender 2.82 Plug-in Alpha Testing Preview($500~)

マルチ GPU

Eevee はマルチ GPU をサポートしてない。アニメーションをレンダリングする際に複数インスタンスを作成して、複数の GPU を利用する方法はある。

Cycles におけるマルチ GPU

GPU Rendering - NVIDIA GeForce RTX 30 Series Multi-GPU Scaling

上記のリンクは Redshift, Octane, V-Ray のベンチだが、2枚挿しで 1.9 倍以上のパフォーマンスが出ている。マルチ GPU は Cycles のレンダリングを高速化したい場合には有力な選択肢だが、メモリ容量の問題がある。

GPU のメモリ容量問題

レンダリングの際に GPU 間でデータを共有できないため、それぞれの GPU のメモリにデータが複製される。なのでメモリの少ない GPU を追加すると巨大なシーンがレンダリングできくなる可能性がある。

Distribute Memory Across Devices(NVLink)を使えば、GPU 間でメモリを共有できる。ただし NVLink に対応する GPU は Quadro もしくはハイエンドの GeForce になる。

そのためマルチ GPU を利用する場合は、同じメモリ容量の GPU を使うことが推奨される。ただし NVLink が利用できるならば、GPU の選択は自由だ。

NVLink BridgeでGPUを繋いでも1GPUにはなりません

Cycles X(3.0)

Cycles X は Cycles の後継のレンダラーだ。GPU を使ったレンダリング速度は最大で7倍(Quadro RTX 6000(OptiX) でbarbershop をレンダリングした場合)になる。平均では2~3倍速くなる。CPU を使ったレンダリング速度はほとんど変わらない。ただし CPU レンダリングであってもビューポートの応答性がよくなっている。

nVidia の GPU は OptiX に対応している必要がある。AMD の GPU は RDNA(RX5000番台)と RDNA2(RX6000番台)が対応している。

サンプリング

バージョン 2.93 以前の Cycles はサンプル数を指定していたが、Cycles X ではノイズしきい値を指定する。これはバージョン 2.93 以前の適応サンプリングが既定の動作になったようなものだ。ノイズしきい値のチェックを外せば、従来どおりのサンプル数を指定したレンダリングもできる。レンダリング時にはタイルサイズごとの制限時間を指定することもできる。

スクランブリングディスタンス(Scrambling Distance)

光源を探索する際に光線をランダムに反射させるのは、キャッシュのヒット率が悪い。ここで隣接するピクセルは似たような特性(マテリアルや法線など)をもつ、という仮定を置くと、隣接するピクセルと似た方向に光線を反射させれば、キャッシュのヒット率をあげられる。

スクランブリングディスタンスの Multiplier はこの光線の反射の相関(correlation)を制御する。Multiplier を0にするとレンダリング時間は短くなるが、不自然な結果が多くみられるようになる。Multiplier を1にするとスクランブリングディスタンスを無効にしたのと同じ結果になる。

注意点

スクランブリングディスタンスを使うにはノイズしきい値のチェックを外す必要がある。

スクランブリングディスタンスは GPU のレンダリングは速くなるが、CPU のレンダリングはあまり変わらない。

外部リンク

スクランブリングディスタンスの Multiplier を 0.1 にすると GPU のレンダリングが約2倍速くなる

Distance Scrambling for for Cycles X - Sobol version

Cache-friendly micro-jittered sampling(pdf)

タイルとメモリ使用量

高解像度のレンダリングはメモリ使用量が多くなるので、タイルごとにストレージに保存することで、メモリ使用量を節約している。

バージョン 2.93 以前の Cycles は速くレンダリングするためにタイルサイズを手動で最適化する必要があった。Cycles X ではそれが自動化されている。しかし以下の状況では手動でタイルサイズを小さくするのが有効だ。

  1. 解像度が巨大なのでメモリが足りない
  2. 透過のある髪などの GPU 負荷の高いオブジェクトが存在する

削除された機能

OpenCL

Cycles X では OpenCL はメンテナンスコストが高いのでサポートされない。Cycles X の最初のリリースでは Intel の内蔵 GPU を使ったレンダリングはできない。

分岐パストレーシング

適応サンプリングと Light Importance の改善により、分岐パストレーシングは不要になる。

NLM デノイザ

OpenImageDenoise が高性能なので NLM デノイザは削除される。

Cycles X・Cycles 共通

GPU を使う

CPU と GPU と両方を同時に利用してレンダリングする

User Preference のシステムタブで Cycles 演算デバイスを選択し、プロパティパネルのレンダータブで「パフォーマンス > デバイス」を GPU 演算にする。

Blender 2.8 Alpha での設定

Blender 2.8 Alpha での設定

バージョン 2.92

バージョン 2.92 以降では CPU と OptiX 対応 GPU と両方を同時に利用してレンダリングできる。

タイルサイズ

Boost Clock によると Blender 2.80 で nVidia の GPU を使って Cycles のレンダリングをする場合、タイルサイズでレンダリング時間はほとんど変化しない。

Blender 2.79

User Preference のシステムタブで Cycles 演算デバイスを選択し、プロパティパネルのレンダータブでデバイスを GPU 演算にする。

GPU を有効にする(AMD の GPU の場合)

GPU を有効にする(AMD の GPU の場合)

GeForce(Optix)を使う(2.90)

バージョン 2.90 からは Maxwell 以降(GeForce 700, 800, 900, 1000) の GeForce でも Optix(Cycles のハードウェアアクセラレーションと Viewport Denoising)が使える。

GeForce RTX を使う

GeForce RTX を使うと Cycles のレンダリング速度が最大で 110 %高速になる。「プリファレンス > システム > Cycles レンダーデバイス」で Optix を選択するとハードウェアアクセラレーションが有効になる。

OptiX Viewport Denoising

GeForce RTX を使用している場合は、Cycles で AI によるビューポートデノイズが使える。「プリファレンス > システム > Cycles レンダーデバイス」で Viewport Denoising ドロップダウンの OptiX AI-Accelerated を選択すると使えるようになる。

OptiX を使ってデノイズする場合、CPU 等のほかのレンダーデバイスにレンダリングさせられる。その場合、選択したレンダーデバイスのレンダリングと OptiX 互換 GPU のデノイズとが同時に行われる。

高速 GI 近似(2.93)

高速 GI 近似は背景色の AO でディフューズ色の間接光を近似する。画質が悪化するため、ビューポートや間接光の影響力が小さいシーンでの使用が推奨される。

場所は「レンダータブ > ライトパス > 高速 GI 近似」。

高速 GI 近似の場所

高速 GI 近似の場所

Fast Global Illumination Approximations on Deep G-Buffers(pdf)

G バッファを使った Fast GI Approximation。Eevee でも Fast GI Approximation は実装可能。

プリンシプルシェーダを速くするテクニック

下記の動画ではカメラから見える部分にプリンシプルシェーダを使い、見えない部分はディフューズと光沢(Glossy)とを組み合わせたノードを使っている。

ライトパスの最適化

各ライトパスの説明は【Blender】【Cycles】Cyclesでノイズを防ぐ方法の総まとめを参照。

全パスを有効にしてチェックすれば、ノイズが乗っているライトパスを特定できる。あとはノイズの多いライトパスのサンプル数を増やし、ノイズの少ないライトパスのサンプル数を減らす。

全ライトパスを有効にする

全ライトパスを有効にする

インテグレータを分岐パストレーシングにすると、AO や SSS のサンプル数を直接設定できる

ベイクする

ノイズになりやすい AO、間接光、レンダリングに時間がかかるベベルノードの法線をベイクする。ただし AO、間接光はアニメーションしない場合に使える。

データ保持オプションを使う

これはアニメーションを高速化するオプションだ。これが有効な場合、フレーム間で更新が不要なオブジェクトのモディフィア適用・ BVH 構築・OpenGL 頂点バッファの更新などを省略できる。

場所は「プロパティパネルのレンダー > パフォーマンス > 最終レンダー」のデータ保持。

データ保持

データ保持

外部リンク

Render: faster animation and re-rendering with Persistent Data

ノイズ対策

デノイザノードを使う

Blender 2.81 からはコンポジットで Intel の Open Image Denoise ベースのデノイザノードが使える。場所は Shift + A > フィルター > Denoise。

間接光の影響力が小さく、オブジェクトのマテリアルに透過が含まれていない場合、サンプル数1でも高い性能を発揮する。面積を持つ光源やガラス、暗所、SSS、モーションブラーは苦手で、サンプル数は 16 以上が必要になる。

使い方

イメージを渡すだけでも機能するが、法線やアルベドを渡すとより高性能になる。パスのデノイズデータにチェックを入れるか、法線とディフューズのカラーとにチェックを入れるかすると必要なパスを取得できる。derek barker 氏の検証ノードのように光沢や透過パスごとにデノイズする方法もある。

Cycles で法線やアルベドを取得

Cycles で法線やアルベドを取得

ノード

ノード

ガラスオブジェクトのデモ

ガラスオブジェクトのデモ

モーションブラーのあるガラス+エリアライト

モーションブラーのあるガラス+エリアライト

細部がつぶれてしまう場合は、サンプル数を上げるよりレンダリング解像度を上げて縮小するとよい。

パスの保存

OpenEXR を使えばパスを保存できる。

パスの保存

パスの保存

外部リンク

デノイザアドオンを使う

Super Image Denoiser(€0+)

D-NOISE

ディープラーニングを使ったデノイザアドオン。GeForce 600 系以降かつ Windows でしか実行できないが、高速で高品質な結果が得られる。

E-Cycles($111.75~$749.25)

ディープラーニングを使ったデノイザアドオン。最新のバージョンではビューポートデノイズに対応している。D-NOISE に比べて以下の利点がある。

K-Cycles($49)

GeForce 10 以降に最適化された Blender。

デノイズ

Blender でノイズリダクション(デノイズ)

バージョン 2.79 以降で有効。

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

ディフューズマテリアルのみ存在する場合の設定

ディフューズマテリアルのみ存在する場合の設定

ビューポートデノイズ(2.90)

バージョン 2.90 からは SSE 4.1 をサポートする CPU(Core i や Ryzen)で、Intel OpenImageDenoise を使ったビューポートデノイズが使える。

デノイズ中はビューポートがロックされるので、極端に少ないサンプル数を設定すると使いづらい。

設定

設定

Path Guiding(3.4)

Path Guiding は光源が窓から入ってくる太陽光のみのような、なかなかノイズがなくならない状況で効果がある。バージョン 3.4 の時点では CPU レンダリングの時にしか使えない。将来的には GPU レンダリングもサポートする予定だ。

Path Guiding はディフューズ BSDF(Diffuse BSDF)と異方性(Anisotropy)や等方性(Isotropy)をもつボリュームとのみサポートしている。

場所

場所

異方性と等方性

ある対象の性質や分布が方向に依存しないときそれは等方的(とうほうてき、isotropic)であるといい、一方で、方向に依存するときは異方的(いほうてき、anisotropic)であるという。

つまり等方性=ボリュームノードの異方性が0、異方性=ボリュームノードの異方性が0以外。

外部リンク

Follow the light: Introducing path guiding in Cycles

Scattering and anisotropy usage

Light Sampling(3.5)

Light Sampling はサンプル単位の処理時間は少し長くなるがノイズを劇的に減少させる。light tree を使うことでライトが大量にあるシーンでも効率的にサンプリングできる。

バージョン 3.5 で新規にシーンを作成した場合は Light Sampling がデフォルトでオンになっている。「プロパティパネルのサンプリング > ライト(Lights)」で無効にできる。

Light Sampling を有効にした場合にレンダリング結果が異なる場合は、ライトクランピング(light clamping)が原因の可能性が高い。クランピングの結果はサンプリングのアルゴリズムによって変わる。light tree がうまく機能している場合は小さいクランピングでバイアスなしの結果に近くなる。

light tree は物理的に正しいライティングの時に効率的に機能する。なのでカスタムフォールオフやレイの可視性を変更するトリックは避けた方がいい。これらの物理的に正しくないライティングは light tree が使うヒューリスティックなアルゴリズムとの相性が良くない。

発光(emission)マテリアルの Multiple Importance Sampling は新しいサンプリング設定に置き換えられた。Auto がデフォルトで、ヒューリスティックなアルゴリズムを使う。このアルゴリズムは、メッシュをサンプリングのための光源とみなすかどうかを決定するために、放出された光源の強さを推定する。閉じたメッシュや片面のみ発光する場合は、表面にのみこの設定にしておくとノイズを減らせる。

SSS のノイズ対策

サンプル数を増やす。インテグレータを分岐パストレーシングにすると、SSS のサンプル数を直接設定できる。

SSS のサンプル数を設定

SSS のサンプル数を設定

外部リンク

What value should I increase to reduce noise for subsurface scattering, volume scatter, etc.?

輝点ノイズの除去

7 Ways to Get Rid of Fireflies Once and For All

1. 光源を大きくする

2. 光源のシャドウサイズを大きくする

シャドウサイズの設定

シャドウサイズの設定

3. 多重重点(Multiple Importance)を有効にする(デフォルトで有効になっている)

光源と環境とで設定できる。

光源の多重重点

光源の多重重点

ボリュームの多重重点設定

ボリュームの多重重点設定

外部リンク

多重重点的サンプリング (Multiple Importance Sampling)

4. 光沢フィルターの数字を増やす

光沢フィルターはぼかすことで光沢を消す。

光沢フィルター

光沢フィルター

5. コースティックスを無効にする

コースティックスを無効にする

コースティックスを無効にする

6. 制限(Clamping)を使う

制限(Clamping)はシーンの明るさが変化するため、他の方法で問題が解決できなかった場合に使う。

Clamping

Clamping

7. サンプル数を増やす

4 Easy Ways to Speed Up Cycles

Reducing Noise

【Blender】【Cycles】Cyclesでノイズを防ぐ方法の総まとめ

Introduction to Bidirectional Path Tracing (BDPT) & Implementation using OpenCL追加資料 (CEDEC 2015)

Cycles

適応サンプリング

Cycles で適応サンプリングが有効な場合、ノイズが少ない場所でサンプル数を自動的に減らす。「プロパティパネル > レンダータブ > サンプリング」で設定できる。

サンプル数の閾値はデフォルトではアンチエイリアスのサンプル数と同じに設定されている。この設定で画質を悪化させずに、テストシーンでのレンダリング時間が 10~30 %減少した。

最小サンプル数(Min Samples)

適応サンプリングが実行される前に行うサンプル数。デフォルトは0で、その場合は合計サンプル数の平方根が設定される。

ノイズしきい値(Noise Threshold)

サンプリングの継続を判断するエラーの閾値。一般的には 0.1~0.001 の間の値を設定する。数値が少ないほどノイズが少なく、レンダリング時間が長くなる。0の場合は合計サンプル数に基づいて適切な値が設定される。

外部リンク

RenderMan: An Advanced Path Tracing Architecture for Movie Rendering(pdf)

レンダラー非依存

13 Ways to Reduce Your Render Times

Rendering » Cycles » Render Settings » Performance

レンダーファーム

Google Colaboratory--非力なPCでもBlenderで高速にレンダリングする方法

Amazon EC2を使って、3Dレンダリングをしてみたメモ

RenderFlow

RebusFarm

GarageFarm.NET

RenderStreet

blendergrid

Blender Farm

レンダーファームを管理するアドオン。

BlendFarm, A free, cross-platform, stand-alone, open-source Network Renderer(Blender Artist)

SHEEPIT

[Blender] Sheep it Render Farm がすごい

SHEEPIT はレンダリング画像が不特定多数の人に見られてしまう欠点がある。そのためポルノコンテンツのような 18 才未満が閲覧するのに適さない画像はレンダリングしてはならない。

Google Colab

ハードウェア

  1. RAM の容量を追加する
  2. CPU のコアを追加する
  3. CPU のクロックを上げる
  4. 別の OpenGL のドライバを試す
  5. 速い RAM 使う

OS

  1. プロセスの優先度を上げる
  2. スワップ/ページファイルの容量を上げる
  3. 64bit にする
  4. 不要なアプリ/バックグラウンドサービスを終了させる
  5. ネットワークを遮断する
  6. Linux を使う
    Linux は WDDM がないため Windows より数%レンダリングが速い。

Blender レンダー

Blender 自体の設定

Memory Cache Limit を上げる。

Memory Cache Limit の設定

Memory Cache Limit の設定

最適化されたビルドを使う

レンダーウインドウを小さくする

シーンとオブジェクト

不要なライトを削除するかレンダリングしない

影を生成しない。影のみが必要な時は「影のみ(shadow only)」を使う。
影の設定

影の設定

バッファシャドウを使う

動かないものはライティング情報をテクスチャにベイクする

ベイク

ベイク

メッシュを単純にする
重複頂点を削除する・距離でマージ(Remove Doubles, Merge by Distance)。ポリゴン数削減(Decimate)モディフィアを使う
細分割曲面(Subsurf)モディフィアや多重解像度(Multiresolution)モディフィアの分割数を少なくする
不透明オブジェクトの見えない部分のポリゴンを削除する
分割してレンダリングする。

背景と動くものとを別々にレンダリングし、動くものは背景を透明にしてレンダリングする。後でコンポジットで合成する。

カメラを動かさない。背景とキャラとを別々にレンダリングする際に特に有効
エリアライトの使用を避ける
マテリアルを陰影なし(Shadeless)にする
Shadeless にする

Shadeless にする

マテリアルを陰影なし(Shadeless)にして、AO をベイクする
スポットライトにクリップを設定して、ライトが照らす範囲を狭くする
Clip distance の設定

Clip distance の設定

カメラのクリッピング(clipping):を小さくする
カメラの撮影範囲を狭くする

カメラの撮影範囲を狭くする

ワールドのアンビエントオクルージョン(AO)、環境照明(Environment Lighting)、間接照明(Indirect Lighting)を無効にする
world の設定

world の設定

マテリアルの SSS(Subsurface Scattering)を無効にする
マテリアルの SSS を無効にする

マテリアルの SSS を無効にする

テクスチャサイズを小さくする
背景をビルボード(板ポリにテクスチャを張り付けたもの)にする
モデリングの時に面複製(DupliFace)頂点複製(DupliVert)を利用する
Adaptive Subdivisionを利用する

Render タブ

Render タブの設定

Render タブの設定

  1. レンダリングの解像度を下げる
  2. アンチエイリアス(AA)を無効にする
  3. モーションブラー(Motion Blur)を無効にする
  4. レイトレーシング(Ray Tracing)を無効にする
  5. 影(Shadows)を無効にする
  6. SSS(Subsurface Scattering)を無効にする
  7. バッファを保存する
  8. タイルサイズを最適化する
  9. 辺(Edge)を描画しない

タイルサイズ(Tile Size)を最適化する

最適なタイルサイズはハードウェアによって異なる。いくつかのタイルサイズでレンダリングしてみて、最適なものを採用する。2012 年ごろのハードウェアでは、CPU を使う場合 16~32、GPU を使う場合では 256 あたりが最適だ。2016 年の GPU では 512 や 1024 のほうが速いことも多い。

標準アドオンの Auto Tile Size を使えば余りの出ないサイズを計算してくれる。

Auto Tile Size アドオン

Auto Tile Size アドオン

関連記事

Blender 記事の目次


広告
広告

カテゴリ