どうも!Maya太郎です。
最近のシリーズとして、Shave and a Haircutというヘアプラグインを試用してるのですが
ヘアの衝突判定の機能を探ってるうちにおもしろい作例が出来たので紹介します。
ヘアを草のように表現し、その草をオブジェクトで踏みつけるようにすると
ミステリーサークルの様なものが出来ました。
ということで今回は頭部のオブジェクトでなく、地面からのスタートです!
板ポリゴンにヘアを作成します。
今回はプリセットでGrassを選びます。他のプリセットでも設定変えれば同じようになりますが…
色やスケール、ヘアの本数など調整します。
ダイナミクス計算をするので草の密度は、はじめのうちはスカスカな方がいいでしょう。
ちなみにシェルフのToggle Fallbackを押すと、レンダリング時と同じ密度の表示に切り替わります。
■衝突オブジェクトの作成■
ミステリーサークルを描く草を押さえつけるボックスを作成します。
そして下図のように一周するモーションを設定します。
(モーションの作成方法はご自由に、同じようなものが出来れば問題ありません)
■衝突オブジェクトの設定■
この操作が少し面倒です。
Shave hairノードと、地面(板ポリゴン)、草をなぎ倒すボックスオブジェクト
の3つを複数選択し、
Shave→Edit current→Update Collision Meshを選びます。
これで地面とボックスが、ヘアのコリジョンオブジェクトとして適用されました。
きちんとコリジョンに関連付けられたかを確認するには
ヘアノードを選択した状態でSheve→Reselect Surfaces→Collision polysの操作をします。
下図の通り、コリジョン対象となる二つのオブジェクトが選択状態になりました。
きちんと設定できているようです。(確認のみ)
■ダイナミクスを始める(Live Mode)■
ヘアノードのアトリビュートから
Dynamics Propertiesの内容を変更します。(下図参照)
Enable Collisionがオンになっていることを確認。Stiffness(剛性)=0.1ぐらい(草が倒れない程度の柔らかさ)
Root Hold(毛根のホールド) =0.1 (草が倒れない程度の柔らかさ)
Dampening(抑制)はマニュアルを見てもわかりにくいパラメーターでした。説明しにくいので…(割愛)
適当にいじってみただけですが、いろいろ調整してみてください。
Live Modeをオンにすると
重力や衝突などのシミュレーションがビューポートでリアルタイムに行われます。
設定がうまくいけば、草とボックスがぶつかって、その部分の草がなぎ倒されています。
草が硬い(設定)場合、すぐに草が起き上がってしまいます。
ですので上記のStiffness・Root Hold・Dampeningのパラメータ調整を
しっかりやって適度な硬さに調整する必要があります。
草の密度(本数)を増やしてのチェックです。重たくなりました。
■ダイナミクス結果を保存する■
Liveモードで結果に満足したら
本番のダイナミクスシミュレーションを行います。
まずは
ダイナミクスシミュレーションの保存場所を設定します。
ヘアを選択した状態で
Shave→Shave Globals→Dynamics内の
Stat File Directoryに、キャッシュファイルの保存場所を指定します。
(キャッシュの保存場所はお好きなように)
シミュレーションを開始します。
Run Dynamics All Nodesを実行します。
この一連のやり方は前々回の記事と同じですので、そちらも参照ください。
シミュレーション計算を行い、その結果がキャッシュファイルに保存されました。
Arnoldでレンダリングjしてみると、草の倒れ方が見事に表現できています。
キャッシュファイルが生成されているので、ボックスオブジェクトを取り除いても問題ありません。
草の本数やスケール等を変更してもきちんと反映されます。レンダリングで良く見えるように調整しましょう。
一周だけだと開始地点が倒しきれなかったので正確にはCの形になってますが…まあいいや。
アニメーションレンダリングしました。面白いですね。
しかしこの計算時に、メモリ16GのPCではメモリかなりギリギリのラインでした。(参考までに)
草を踏みつけるようなシーンの再現もできそうですね。