« 文芸部室の謎 | メイン | Hairまめちしき »

2006年11月25日

Hairをポリゴン化してfRでレンダリング [ CINEMA 4D R10 ]

 Hairもポリゴンを生成させればfR等の外部レンダラに渡せるということが判明した(というかコロっと忘れてた)のでやってみた。できることはできたのだが、やや心許ない結果になった。

061124_hair_poly_11.jpg

◆Advanced Render

 まずはAdvanced Renderで試してみる。ヘアは5万本、「三角ポリゴン」タイプでポリゴン生成。予想どおりプレパスがサンプルポイントびっしり。しかしCINEMA 4Dの使用メモリは600MB程度で意外に食っていない。

061124_hair_poly_1.jpg

 レンダリング時間はかなり長くなった。G5 Quadで1時間超。Hairはポリゴンで生成されてるので、レンダリングは普通のGIとレイトレーシングだ。つまり常時4コアをフルに使ってこの所要時間。

061124_hair_poly_2.jpg

 絵的には、Hair固有のシェーダ効果がないので針金にペンキを塗ったようなソリッドな質感になっている。マテリアルに透明度を入れたりすればまた変わってくるんだろうが、レンダリング時間のことを考えるとやりたくないし、Advanced Renderでそれをやる意味はない。

◆finarRenderその1

 次は本命のfRで。事情によりまだSP1を使用中。
 ARと同じ条件、「三角ポリゴン」で5万本にしたところ、メモリ不足でレンダリングできなかった。タスクマネージャを見るとシステム全体のメモリにはまだ余裕があったのだが、コンソールではfRが駄目だと言っている。360万ポリゴンでギブアップか……。

061124_hair_poly_5.gif

 タイプを「平らに」にするとポリゴン数が減るのでレンダリングできるのだが、Fast&Furと違って板ポリゴンがカメラに向くとは限らないようで、横を向いてる毛はペラペラ、そしてfRでは通常は裏はレンダリングされないので、ボリュームがごっそり減って全然だめだった(※追記:後でよく見たらカメラに向かせるオプションもありました)。で、「三角」のまま、本数を4万本に減らしたらレンダリングできた。このときのポリゴン数は290万ポリゴンで、CINEMA 4Dの使用メモリは800MBぐらい。プレパスはAR同様サンプルびっしりだ。fRのプレパスは屈折や反射の先のサンプルも表示するので、見かけ上ARより多く見えるが、実質的には同じぐらいではないだろうか。

061124_hair_poly_3.jpg

 レンダリング時間はAthlon64 X2 4200(2.2GHz*2コア)で、なんと6分。ゼロ時間と6分だ。290万ポリゴンのシーンをフルGIで6分。またしてもドイツの科学力は世界一ィィィと言わざるを得ない(※fR作ってるCebasもドイツです)。

061124_hair_poly_4.jpg

 CINEBENCHのレンダリングスコアでいうと、G5機は1200、Athlon機は600で、2倍の差がある。これを考慮すると、このシーンのレンダリングではfRがARの24倍も速いことになる。それでいて出力されてる画像はARとほとんど同じというか、fRのほうがきれいだ(床とか)。
 ポリゴン化しているにもかかわらず、fRの超高速GIに救われてネイティブのHairレンダラ+ARのときと同等のスピードになった。とりあえず速度面ではOKのようだ。

◆finalRenderその2

 メモリ問題、「そういや床オブジェクト(無限平面)は良くなかった」と思い出し、平面オブジェクトに差し替えると、Hairが三角ポリゴンで5万本でもレンダリングできた。無限平面を使うとMSPツリーのスケールに影響してポリゴン数の割にメモリを食ったりするのかもしれない。あるいは単なる偶然かもしれない←オイ
 このときでCINEMA 4Dの使用メモリは1GBに達している。

 スピードはOK、メモリはギリギリ、あとは質感が大問題なので、以下のようにチューニングした。

・マテリアルで透明度とカラーを設定。毛先が明るく、根元が暗くなるようにグラデーションで(ポリゴン毛はUVのVが根元→毛先の方向になるようだ)。

・fR Objectタグで「Visible to GI」をオフ。これで毛がGIレイを遮らなくなる。光が毛の中に入り込むようになり、マテリアルの透明度がGIに与える影響が小さくなる。しかしGI影も無くなるので一長一短。

061124_hair_poly_8.gif

 で、結果がこれ。

061124_hair_poly_6.jpg

 レンダリング時間は20分でまだ許容範囲だが、ネイティブのHairレンダラ+ARと比べるとだいぶ遅くなってしまった。質感はまあそれなりに毛に見えなくはない。

◆finalRenderその3

 もうひと押し。その2ではGI影が消えたせいで毛に立体感が無くなってしまった。Hairマテリアルであれば半透明や影の設定をいろいろ調整できるのだが、実ポリゴンだと簡単にはいかない。
 で、少しだけGI影を出すためにダミーの毛ポリゴンを置くことにする。まずHairオブジェクトを複製して、少なめ(3000本)・短め・太めに変更。これがそのダミー。

061124_hair_poly_10.gif

 fR Objectタグは「Visible to GI」以外をオフにして、ダミーはGIレイを遮るだけのオブジェクトにする。

061124_hair_poly_9.gif

 ダミーのぶん毛の数が増えたらまたレンダリングできなくなったので、見えてるほうの毛をまた4万本に減らした。

 こんな感じでレンダリングすると、ダミーが控えめにGI影を作るので、毛にそこそこ立体感が出る。

061124_hair_poly_7.jpg

 この絵だけ見るとそれなりなのだが、ネイティブのHairレンダラによる画像と比べるとエッジがシャープすぎてモフモフ感が足りない。まだマテリアルで工夫する余地があるかもしれないが、最初から半透明にぼかして描画してるHairにはどうやっても敵わないような予感がする。
 実はHairレンダラでも、屈折や反射を通じて見える部分はモフモフ感がなく、ポリゴン化した毛と同じようなシャープな質感になっている。2次レイ以降は単純な2D絵でなく、レイトレースのサンプルに依存するようになってるのだろうか。

 使うCPUを1個に制限すれば使用メモリが減ってレンダリングできるようになるかと思ったんだが、これの場合はレイトレーシングの前のMSPツリー構築の段階で止まってるので効果がなかった。fRのRaytracing Accelerator/SceneMSP/Max Depthを小さくすると使用メモリが少し減るが、その代わりスピードがガツンと落ちる。そもそもそんなディープな設定をいじらなければいけないようではだめな気もする。なんにせよメモリ問題は小細工で解決できるようなものではなさそうだ。64bit OSに移行してメモリを16GB積むとか、抜本的な改革が必要だ。

◆まとめ

 Hairはポリゴン化すればfRと併用できるが、ポリゴン化してしまったら、メモリ効率・スピード・表現力といったHairレンダラの驚異的なパフォーマンスは全て失われてしまう。きれいな毛皮や頭髪をふんだんに表現できるわけではないので、Hair+ARと同じ次元では評価できない。ヘア/ファーというよりは、「ダイナミクスつきの細長いオブジェクトのジェネレータとして利用可」、というのが妥当な評価だと思う。
 このへんの事情は、Fast&Furのポリゴン毛、あるいは別な外部レンダラとの併用の場合でも基本的に変わらないはず。ヘア/ファー機能はレンダラと統合されてこそ本領を発揮するということで、「毛メイン」の絵は素直にHairレンダラが使えるARでやったほうが賢いといえそうだ。

投稿者 ヒロツ : 2006年11月25日 22:33

トラックバック

このエントリーのトラックバックURL:
http://kowloo.net/hirotsu/mt/mt-tb.cgi/302

コメント

ポリゴン化しちゃうとやっぱりヘアダイナミクスも効かないですよね。
それにしてもhairマテリアルのモフモフ感はいいですね。FastFurもファーっぽい特殊なスペキュラ等の設定はあるんですが、毛先に向かって半透明になるなどもう少し突っ込んだマテリアル設定がほしいですね。
思ったんですが、仮にFastFurをfRでレンダリングできたとしても、FastFurマテリアルは見れないと思うので、ベースオブジェクトの色参照も出来なくなってしまい、やっぱり表現力はがた落ちですね。

投稿者 kurosawa : 2006年11月26日 01:21

Hairのダイナミクスはポリゴン毛でも効きます。ポリゴンを生成する前にヘアのガイドオブジェクトでダイナミクスを計算してるようです。
テクスチャマップによるベースカラーのコントロールとかウェイトマップによる長さのコントロールは効かなくなりますね。動物の毛なんかだと部位によって色や長さを調節できないと話にならないので、ポリゴン毛だとかなりつらそうです。

投稿者 ヒロツ : 2006年11月26日 03:26

全然関係ないかと思いますが、
ポリゴン数だけじゃなくてオブジェクト数でもメモリ喰いますね
つまり、一体化するとメモリ喰わなかったりします。

ツリーの打ち切りが早くなるってことなのかな?

投稿者 hase : 2006年11月26日 05:05

ほえー そうですか。オブジェクト数が多くなるとそれだけ空間が分割されるんですかね。あるいはローカル座標の変換がオブジェクトごとに膨大に計算されるせいとか……。
fRのコンソールのレベルを上げて詳細なログを調べればわかるかもしんないですね。MSPのDepthをいじると確かにメモリ消費とスピードがトレードオフされるようなので、レイトレ計算量とオブジェクト物量のバランスが極端なシーンではいじる甲斐があるかもしれません。

投稿者 ヒロツ : 2006年11月26日 06:16

そういえば、cebasのフォーラムでR10についたオブジェクト接続を使うと一体化されるからメモリが少なくてすむとか、書かれていた気がします。

投稿者 T.Miyata : 2006年11月27日 00:00

そうか、接続オブジェクトだとレンダラに単一オブジェクトとして渡されることになるんですね。fRのAdaptive QMCの「Share samples」も、接続オブジェクトを使えば任意のグループにだけ同じ効果が得られるようになりますね。

投稿者 ヒロツ : 2006年11月27日 00:07

コメントしてください




保存しますか?


※URLが多数含まれているとコメントスパムとみなされることがあります
※投稿後すぐにコメントが反映されない場合はリロードしてみてください