2014年12月24日水曜日

【Blender】Cyclesで静止画をレンダリングするときにメモリを節約する方法

このところ、MakeHumanからフィギュアをエクスポートして、Blender上でレンダリングを繰り返してしています。
MakeHumanから出力される人体モデルは細部にわたるまで、かなりリアルに作り込まれており、パラメータの変更だけでこんなにさまざまなフィギュアが作成できるツールがフリーで配布されていることは本当に驚きです。
ただ、開発者たちにとって、髪の毛は興味がないのか、あるいは手が回らないのか、あまり十分なものが準備されていません。
仕方がないので……というと失礼なのですが、MakeHumanを使っても髪の毛だけは一から作ることになります。
幸いにもBlenderのパーティクルヘアーを使えば、Blender上にかなり使い勝手の良い編集ツールがあります。なので、Blenderにインポートしてしまえば、髪の毛を作ること自体はそれほど難しくはありません。
ただ、調子に乗って、自然な髪型に見えるよう、あれこれ工夫をしはじめると、レンダリング時のデータ量が爆発的に増えてしまいます。
髪の毛一本一本をレンダリングしているのだから当然ですが、メモリーがいっぱいになり、キャッシュにあふれ出し、著しくPCのパフォーマンスを落としてしまいます。

一応、メモリは16ギガバイト搭載していますが、この絵のような髪の毛をレンダリングしようとすると、ほかに動かしているソフトを全て止めて、Blender単体で走らせてもメモリをキャッシュに大量に吐き出してしまいます。

一旦、キャッシュアクセスが始まると、HDDのアクセスを待って必要なデータをメモリに読み込んで演算し、結果をメモリからHDDに吐き出して……ということが繰り返されるため、演算時間のほとんどがHDDのアクセス待ちということになってしまいます。

ですので、できるだけメモリを使わずにレンダリングができれば、それに越したことはないのです。
Blender上でCyclesのレンダリングオプションをいろいろ変えてみたり、マテリアルの設定を変えてみたり試行錯誤した結果、一番効果があったのは、フレームの開始と終了を共に0にすることでした。
デフォルトの画面設定で、一番下に表示されているタイムラインウィンドウの中で、再生/レンダリング範囲のフレームの開始と終了を設定する箇所があります。
これを全て0にします。(全て1でもOK)
こうすると、BVH構築時に使用するメモリの量が減り、構築時間が大幅に改善します。
上の画像だと、一晩放置しないとレンダリングが終わらなかったものが、20分そこそこで完了しました。

静止画のレンダリングにのみ使える方法ですが、メモリ不足にお悩みの方、もしよければお試しください。

0 件のコメント:

コメントを投稿

人気の投稿(過去7日間)