Doc:JA/2.6/Manual/Render/Performance

提供: wiki
< Doc:JA‎ | 2.6‎ | Manual‎ | Render
移動先: 案内検索


Page status (reviewing guidelines)

Copy This page is a copy of the same page in 2.4 manual, need to be updated
Proposed fixes: none

Optimizing Render Performance

(レンダリング効率の最適化)

「待つ身は長い」は古いことわざですが、レンダリングに時間がかかりすぎたり、さらには途中でクラッシュしたりするのがなぜなのか、疑問に思ったことがあるかもしれません。レンダリングの高速化のために、あるいは複雑なレンダリングをやり遂げるために、できることはたくさんあります。それに「かしこいレンダリング」を行えば、平凡な PC で非常に複雑なシーンをレンダリングできます。以下はレンダリングの高速化のために、果てはシーン描画中のクラッシュ回避のために、すべきことすべきでないことの「トップ10」リストです。選択肢の中には描画品質を下げるものもありますが、試しレンダリング用途であれば気にならないでしょう。

「Malloc returns nil」というメッセージが出たら、メモリアロケータが Blender 用に物理メモリを追加取得しようとして手ぶらで帰ってきたということです。つまり、シーンのレンダリングに使うメモリが足りず、Blender が処理を続行できません。レンダリングを行うには、このページにあるタスクをひとつ以上行う必要があるでしょう。

Hardware Improvements

(ハードウェアの更新)

  1. PC(マザーボードや OS)の上限まで RAM を増やす。まもなく Blender は 8GG(ギガギガ)までの物理メモリ(64ビットアドレス空間)を使えるようになりますが、大半の PC は 4G の RAM だけを扱えます
  2. CPU をマルチコア/マルチプロセッサに更新
  3. OpenGL ビデオドライバの更新
  4. もっと速いメモリバスを入手
  5. マザーボードの上限まで高速なメモリを入手。667MHz のメモリは 800MHz のものより 30% 低速です
  6. 家にある使える PC をすべて使って render farm を始める準備をする。もしくは BURP のような render farm を使います

Operating System Configuration

(OS の設定)

  1. OS で Blender の処理優先度を上げる
  2. OS がメモリスワッピングに使用するスワップファイルの容量を増やす。仮想メモリのページファイルサイズとも呼ばれます。物理メモリサイズまで増やします
  3. 64ビット OS に更新(いまお使いでなければ)
  4. ウィルス検知、BOINC、Real、さらには Quicktime などの「活動中でない」もの(更新を調べるのにランダムで起動するため)なども含めた、バックグラウンド処理を終了させるか停止させます。バックグラウンド処理は RAM も使います
  5. ネットワーク接続を無効にして、ランダムな ping や更新用データの通信を止めます
  6. インターネットラジオを聴くのをやめてウェブブラウザを閉じる。特にマルチメディアサイト(音声/動画/ゲーム)は閉じます
  7. Word などの、実行中の他のアプリケーションをすべて閉じる
  8. すべての常駐プログラム(システムトレイにアイコンがあるもの)とウィジェット、バックグラウンド処理、ウィルス検知プログラムを終了させる

Blender Settings

(Blender の設定)

  1. ユーザー設定の、システム&OpenGLタブで最大メモリキャッシュ(Memory Cache Limit)を増やす
  2. 最適化された Blender ビルド に更新する。SSE2 をサポートする先進的なチップをお使いなら特に、最適化されたビルドを使います。レンダリング時間が 30% 高速化 します
  3. 平行投影(Orthographic)カメラに切り替え、シーンにある「部品」を別々の画像としてレンダリングし、GIMP で貼り合わせる。現実のカメラでパノラマ写真を作る古い方法として、1枚目を撮ったら右に向きを変えて別の写真を撮り、さらにもう一枚を撮るというやり方で、非常に幅広の(浜辺の日没の)風景を3枚ほどの写真に撮影する方法があります。写真を現像したら重ね合わせて、幅広の横長画像を作ります。Blender でも同じことをしましょう。1場面をレンダリングしてファイルに出力したら、シーンの別の場所にカメラを合わせてその場面をレンダリングします。撮影ごとの領域が狭くなるので、カメラの捉えるポリゴン/面の数も少なくなります。あとで貼り合わせられるように、重ね合わせの撮影に使うカメラをいつ動かすか、間違えないようにしてください。GIMP を使いたくない場合は、Blender のコンポジティングノードで Translate(移動)ノードを使って組み合わせることができます
  4. レンダリングウィンドウを(Blender 内部ウィンドウにレンダリングするなら Blender も)最小化。毎フレーム劇的に高速になるという ATI ユーザーの報告があり、これはフレームが増えるほど意味があります
  5. 「Big Render」スクリプトを使って画像を細切れにレンダリングし、それを貼り合わせる
  6. カスタマイズされたビルドを作る。たとえば、convertblender.c にある check_non_flat_quads への呼び出しをコメントアウトします。20-40% の顕著な違いが出ることがあります

Scene and Specific Objects

(シーンと特定のオブジェクト)

  1. 光源をなくす。または、レンダリングしないレイヤーに移動するかレイヤーに限定します
  2. 光源の影をいくつかオフにして、1つか2つのメインの太陽光源だけが影を作るようにする。少数の「影のみ」光源は、全光源が影を持つ場合よりも高速にレンダリングできます
  3. ray-traced Shadows ではなく buffer Shadows を使う
  4. 動かない面に、Full Render ベイクを使って影を焼き付け。できたテクスチャを同じメッシュに使って、このマテリアルに対する影を無効にします
  5. メッシュを単純化する(ポリゴンを減らす)。カメラに入る頂点が多いほど、レンダリングに時間がかかります
  6. 重複を取り除く(Remove Doubles)。または Decimator メッシュ編集機能を使う
  7. Subsurf や Multires モディファイアを外す
  8. メッシュの裏側を削除(見えないジオメトリを取り除く)
  9. 一度に少しのオブジェクトだけをレンダリングする。常に変更されることのない、常に背景にあるオブジェクトや舞台装置をプロジェクト開始時にレンダリングします
  10. 建物を別のレイヤーに置き、レンダーレイヤーを通してレンダリングしないようにする。あとで合成して戻します
  11. 上の二つのアイデアを達成しやすくするためカメラを固定する
  12. 範囲光源(Area lights)の使用を避ける
  13. マテリアルの陰影処理を外す
  14. AO と テクスチャをベイクして、マテリアルから陰影処理を外す
  15. スポットライトのクリップ距離を減らす
  16. カメラのクリップ距離を減らす
  17. world AO を切る
  18. Material SSS を切る
  19. 使用する画像テクスチャを小さくする。256x256 の画像は 2k 画像が使うメモリの 1% しか使いませんが、最終レンダリングの画質が劣化しないことはよくあります
  20. Subsurf を減らす。レベルを上げるたびに面数は前のレベルの4倍になります
  21. Multires を減らす
  22. 建物などの背景オブジェクトの matte render を行ない、シーン内にはオブジェクトそのものの代わりに、その画像を載せたビルボード(billboard)を置きます。これで頂点や面の数が減ります
  23. オブジェクトからリンクしたインスタンスがたくさんあるときは、インスタンス化されている DupliFace を使います。100あっても、Blender が保持するジオメトリは1つだけです(インスタンスそのものが少しメモリを使います)

Render Settings

(レンダリングの設定)

  • Output(出力)パネル
    1. Edge レンダリングの無効化
    2. Save Buffers(バッファ保存)
    3. ポップアップではなく Image Editor ウィンドウにレンダリングします。Render Window
    4. マルチコア CPU での複数 スレッド の使用(複数の 部品 を使います)
  • Render Layers(レンダーレイヤー)パネル (eng)
    1. 目的のレイヤーだけをレンダリング
    2. すべての光源を単純なスポット1つにしてレンダリング(Light: 欄にスポットの名前を入力)
    3. 1つのマテリアルで上書きしてレンダリング(Mat: 欄に名前を入力)
    4. Z などの必要でないレンダーパスの無効化。もしくは Diffuse などの目的のパスだけをレンダリング
  • Render(レンダー)パネル
    1. Shadows を切る
    2. Environment Mapping を切る
    3. Panoramic Rendering を切る
    4. Raytracing を切る
    5. SSS Subsurface Scattering を切る
    6. oversampling/aliasing OSA を切るか下げる
    7. Motion Blur を切るか下げる
    8. 部分別にレンダリングする。これで非力な PC でも巨大な画像をレンダリングできます。マルチコア PC では同様に各部分にスレッドを割り当てます
    9. octree resolution を増やす
    10. 最終的な解像度の縮小サイズでレンダリング(25%など)
    11. Fields レンダリングを切る
    12. Border レンダリングで全体画像の一部をレンダリング
  • Anim(アニメーション)パネル
    1. アニメーションのフレーム数を減らす(そして、同じ長さのアニメーションで低いフレームレートを使う)。たとえば3秒のアニメーションで、75枚のフレームを毎秒25フレームでレンダリングする代わりに、30枚のフレームを毎秒10フレームでレンダリングします
  • Bake(ベイク)パネル
    1. Full Render をベイクする。マテリアルをもとにオブジェクトに着色する UVテクスチャを作って、陰影なしでマテリアルの代わりに使います
    2. Ambient Occlusion だけをベイク
    3. オブジェクト用のテクスチャをベイク
    4. Normals(法線)や Displacement(ディスプレイスメント)のベイクはレンダリング時間を高速化せず、別の目的に使われます
  • Format(ファイル形式)パネル
    1. 低解像度でレンダリング。絵が小さいほどレンダリング時間は少なくなります
    2. 高速な CODEC か CODEC 設定を選ぶ
    3. 白黒でレンダリング(BW ボタン)
    4. FFMPEG を使っていれば、Multiplex audio を有効にしない
    5. FFMPEG を使っていれば、Autosplit Output(出力を自動分割する)(Video パネルボタン)
    6. 色だけが必要なら RGB だけをレンダリング。A チャネル(RGBA ボタン)はメモリ使用量を増やしますが、動画ファイルの保存時には使われません

Multi-Pass Compositing

(マルチパスのコンポジティング)

レンダリングの長期化問題に取り組むのに使えるもう一つの戦術は、「ポストプロダクション」の章で解説されている コンポジティング を積極的に利用できるように、作業工程を根底から組み立てることです。この方法では、各場面を、別々にレンダリングできる構成要素にまで分解し、別々にレンダリングされた要素を統合して、完成した動画を作り上げます。以下はその例です:

  • カメラが動かないのであれば、背景も動きません。必要なのはひとつのフレームだけです(同じことはフレーム内にある動かないものすべてに当てはまります)。こうした要素は 一度 生成されれば、必要とされる数のフレームをまたいで、必要な回数だけ再利用できます
  • 影とハイライトは、照明の当てられたオブジェクトや影で覆われたオブジェクトと別々に取得できます。intensity(強度)、色、効き目の強さのようなものはあとで、再レンダリングせずに調整できます
  • 影を作らない光源を使うことから始めてください(影の計算は大きく時間を削ぎます)。次に「影のみ」の光源を使って(影を作りますが光を差しません)、実際に必要に思えた箇所 だけ 影を作ります(ほとんどの場合実際に問題になるのはシーン内に存在する影のいくつかだけで、残りは単に気づかれません)
  • オブジェクトを別々に扱うことで、扱いにくいライティング条件を避けることができ、別々にレンダリングされたクリップを統合して、結果を微調整できます。

これは非常に一般的な考え方です。たとえば現代的な楽曲収録では常に「マルチトラック」方式を使います。曲のパートをそれぞれ別に隔離した状態で録音し、その後「ミックス」します。「最終ミックス」がさらなる処理工程であるマスタリングを経て、完成した製品が生まれます(実際に、現代的な音声処理ソフトウェアは Blender のノードベースのコンポジターと直接比較できるものです)。

この方法には圧倒的な長所があります:

  • 選ぶことができます。何かが「少しおかしい」とき、必ずしも一からやり直す必要はありません。
  • 実際、締め切りを破るのは「ある場面の'ちょっとしたこと'が間違っている」ために、普通は完成しているはずのものを(そっくりそのまま)レンダリングすることです。これを避けるためにコンポジティングは役立ちます。というのは(理想的には)間違いの見つかった特定箇所だけを再実行しなければならないからです(もしくは、間違った部分を「不要データマスク(garbage matte)」を使って除外して、直したものをその場所に差し込むことがおそらくできます。誰も気づかないでしょう!)。
  • 「わかったよ、こいつはほぼ 僕が欲しかったものだ。でも今度はこれを 足して あれを削り たいかな」となるかもしれません。コンポジティングベースのやり方でちょうどそういったことができます。さらには 非破壊で できます。言い換えれば、「追加分」(あるいは「マスク」)を別チャネルの情報として生成することで、全体の「ミックス」内でその影響を微調整できるようになり、あるいは気分が変わってそれを完全に取り除くことさえも、元に戻せない変更をすることなく行えるということです。
  • 概ね、この段階ではそれまでに「R、G、B、アルファ (透明度) と Z深度情報でできたラスタ画像」を操作することで 次元的に働くので、一貫して高速です。
  • 分離された各レンダリングタスクは単純化されているため、コンピュータはずっと少ないリソースを使って実行できます。
  • タスクは複数のコンピュータで分担することができます。処分できずに押入れに居座っているニ世代前のマシンのような、非力な PC でさえも参加できます。
  • 「結局のところ、シーンが 説得力を持つ ために、物理的に正確 である必要はありません」。コンポジティングベースのやり方はこれを最大限に利用します。本当に目立った違いを生むような、シーンのはっきりした特徴(aspect)に焦点を絞ることができます。重要性の低い特徴(aspect)を(「技術的には正しい」が)意識して選び除外することで、少なからぬ時間を節約することができますし、おそらくそれは気づかれないでしょう。

もちろん、このやり方はそれ自身の代償なしには存在しません。所持しているマテリアルとその場所、更新の必要性、それにきっちり同じものを作る方法、といったことを正確に追い続けるための、扱いやすいアセット管理システムを考案しなければなりません。綿密に編成されたファイルコレクションにあるオブジェクト、ノード、マテリアル、テクスチャ、シーンを参照するためには、Blender の「ライブラリリンク」機能を理解して使う必要があります。完成した撮影の構成がどうあるべきか、またタスクの内訳はどうあるべきか、あらかじめ 明確な見解を持たねばなりません。几帳面に記録を行い、記録を管理しなければなりません。しかししっかりとした製品を完成させるために、これはときに、唯一 ではなくとも最良の方法になります。