« Hairをポリゴン化してfRでレンダリング | メイン | ルービックキューブ »
2006年11月27日
Hairまめちしき [ CINEMA 4D R10 ]
Hairをいじってて気付いたことなど(主に自分用メモ)。

◆Hairレンダラの毛は「2D絵」
Hairレンダラがレンダリングしている毛、照明効果等が加えられているものの、毛そのものは2D的に描画されたもののようだ。上の画像のように毛を太くすると、毛の根元−毛先方向はシェーディングされているが、断面方向はフラットなのがわかる。
もっとも、通常は毛はごくごく細く描画されるので、断面方向の立体感はあまり必要ない。2D絵としてそれらしく描いてしまうことで得られるシェーディングの自由度やレンダリング速度の向上のほうがはるかにメリットが大きい。
毛の描画のクオリティは、カメラから直接見えている部分とレイトレース越しに見える部分とでは異なる。レイトレースされている毛のクオリティが低いのでポリゴン生成してるのかと思ったが、描画そのものはHairレンダラの2D絵のようだ。専用のフレームバッファに描画してレイトレースに割り込ませているんだろうか?
レイトレース越しの毛(下の画像の右半分)は、アンチエイリアス設定を「ジオメトリ」にしているとアンチエイリアスがかからない。

つまりレイトレース越しの毛のアンチエイリアス品質は「ベスト」でのサンプル精度に依存するということになる。微細な毛がレイトレースされると、常識的なアンチエイリアス設定ではHairレンダラのようなモフモフ感は得られないようだ。
アンチエイリアスがベスト/静止画/10%/最小1x1最大4x4の場合。明らかにジャギーが出ている。

ベスト/Catmull/1%/最小16x16最大16x16という常軌を逸した高精度の場合(閾値の1%は無意味か)。ジャギーは減ったがクオリティにはまだ差がある。なんとなく毛が細いような感じも。

古典的だが、レイトレースされた毛のクオリティ向上には、大きめにレンダリングした画像を縮小するほうが効果的かもしれない。
◆ダイナミクスの限界
ダイナミクスでは、デフォルトでは毛同士の衝突判定をしないが、それだと折り重なって流れている毛が不自然に交差する。
一応、ダイナミクスで毛同士の衝突判定を行うこともできるが、計算がものすごく重くなるので現実的ではない。つまりダイナミクスでは長毛の表現は難しいので、人間の髪の毛のようなものはダイナミクスによらず手作業でガイドを配置したほうがよさそうだ。
◆ポリゴン毛の配置
ポリゴン毛には生成タイプがいくつかあるが、生成されるポリゴン数が少ないものは断面が平面や三角のタイプだ。それがどういう向きで配置されるかが「生成/調整/整列」の設定だが、これがデフォルトは「フリー」になっている。「フリー」の場合は生成される毛のカーブに合わせて向きが決まるらしい。

これはポリゴン毛を「三角・フリー」で生成したもの。断面は三角のはずだが一見するときれいに丸くなっているように見える。

これをアニメーションさせると問題発生。フレーム単位で断面の向きが変化してしまうので、チラツキが生じる。
この場合、整列を「オブジェクト」にし、整列の基準となるオブジェクトにはHairのベースのポリゴンオブジェクトを指定する。

静止画で見ると何の変化もないが、毛の断面がベースに固定されるのでアニメーションでのチラツキが解消される。

それにしてもキモいなこれ。
◆板ポリゴンの毛
タイプを「平らに」にすると、厚みのない板ポリゴンとして生成される。板ポリゴンの場合、カメラとの角度によっては見た目がペラペラになってしまう。これは静止画でも問題だ。

板ポリゴンの場合、カメラから見てペラペラにならないことが大事なので、整列を「カメラを見る」にする。

これで常に板ポリゴンの平面がカメラを向くようになるので、ペラペラにならない。一見するとHairレンダラの2D描画に近い。Fast&Furもこれと同じことをやってるらしい。

アニメーションさせても大丈夫。これはSketch and Toonを使うと面白そうだ。
ただし反射像が見えるような場合は問題になる。横から見れば常にペラペラだからだ。

また、GIを使うと間接照明を受け取る方向が正面のみに偏ってしまうし、fRでは通常は裏面がレンダリングされない。板ポリゴンの毛の使い方はそのへん要注意だ。
◆ポリゴン化で失われるコントロール
外部レンダラの併用などが目的でポリゴン化した場合、Hairマテリアルの表現力や、いくつかの重要なコントロールが失われる。
下の画像では、テクスチャによる毛の長さのコントロールと、ベースポリゴンのサーフェスカラーを毛の色に反映する設定をしている。

ポリゴン毛ではそれらが失われる。毛の長さは変わらないし、マテリアルは通常のマテリアルを設定してやらないといけない。

通常のマテリアルでは毛を円筒に見立てたUVテクスチャの設定は可能だが、有効に使えるのは根元−毛先方向の一次元的な変化だけになる。

ポリゴン化した毛にHairマテリアルのような質感を与える「ポリゴンヘア」というシェーダもある(発光チャンネルに入れる)。Hairマテリアルの基本的な要素は持っており、Hairマテリアルの設定をそのまま受け継ぐスイッチもある。

質感はなかなか良いが、毛の長さや模様がテクスチャでコントロールできないことには変わりはない(質感を見やすくするために毛を全体に長くしております)。

そして、困ったことには特殊効果シェーダの常として外部レンダラでは無効なので(fRでは真っ黒になる)、毛をポリゴン化する場合の主たる目的である外部レンダラとの併用においては、ポリゴンヘアシェーダは全く意味が無い。
スペキュラなどの質感表現は、外部レンダラなら特殊なシェーダを作る等すればなんとかならないでもない(ポリゴンヘアシェーダ自体、それほど難しいことをやっているわけではないようだ)。しかし、毛の長さや模様のコントロールが困難になってしまうのは非常に痛い(一応、不可能ではなく、ガイドを手作業でカットして長さを調整する、複数のヘアオブジェクトを混在させて色分けする等、非効率な手段であれば選択肢は残されている)。動物等、連続的に毛が生えているものの制作では、かなり厳しい制約を受けることになる。
◆ファーオブジェクト
前はなかったような気がするのだが、いつのまにか「ファー」というオブジェクトがメニューに入っている。ヘアオブジェクトの機能を大幅に減らして短毛表現に特化したもののようだ。

毛の長さのコントロールはヘアオブジェクト同様ちゃんと機能してるが、ベースポリゴンのサーフェスカラーを毛に反映する機能のほうが妙な具合になっている。はて?

投稿者 ヒロツ : 2006年11月27日 23:32
トラックバック
このエントリーのトラックバックURL:
http://kowloo.net/hirotsu/mt/mt-tb.cgi/303