clothやってみた その2 3dsmax 2011
なんだか変な熱が出て昨日から寝込んでました・・・orz
ようやく熱もひいて体調も戻ったみたい。遅ればせながら本日の更新です。
前回は服飾メーカーモディファイヤと布地モディファイヤを組み合わせて服を縫い合わせる手順をちょっとやってみた。服を作ってシミュレートするならこの組み合わせが現実の服作りに近い方法なんだけど、通常のモデリングをしたメッシュに対して布地モディファイヤだけ適用してシミュレートすることも当然出来る。
例えば下の画像のように球体と平面を配置して、平面に布地モディファイヤを設定して、
布地モディファイアのオブジェクトロールアウトの「オブジェクトプロパティ」を押してパネルを出し、平面を布地に設定する。
さらに「オブジェクトを追加」ボタンを押して球体を追加し、それを衝突オブジェクトに設定する。
そしてシミュレーションパラメータはこのようにして、重力がON、個体衝突がONになっている状態にして、布地が重力の影響で下に落下し、衝突オブジェクトとして設定した球体に衝突するように設定して、
ローカルシミュレーション(ダンピング)ボタンを押すと、シミュレーションが開始されて、
しばらく待っているとこのような状況になった。放っておくといつまでもシミュレーションをし続けるので適当なところで再び「ローカルシミュレーション(ダンピング)」をクリックしてシミュレーションを終了させる。
このようにメッシュが粗いと布が衝突オブジェクトを貫通してしまったりする。ある程度の精度を得るにはそれなりの解像度が必要だ。
下の画像は「状態をリセット」ボタンを押して形状を元に戻し、モディファイヤパネルでPlaneを選んでセグメントを20×20に変えてから「ローカルシミュレーション(ダンピング)」をやり直したものだ。4×4の時よりはずっと布らしい振る舞いになっている。
ただ四角ポリゴンで布を構成した場合、変形が素直になり過ぎて規則的な皺ができやすい。その点、前回使った服飾メーカーは編集可能スプラインをドローネメッシュという不規則な三角ポリゴンに分割するから皺の寄り方や凹凸が不規則になってより布らしい振る舞いになるらしい。下の画像は左が通常の平面でセグメントを増やしたもの。右が編集可能スプラインを4角でブレークしたものを服飾メーカーでドローネメッシュ化したもの。
これを同一条件で球にかぶせてみたのが下の画像だ。ドローネメッシュの方がより強(こわ)い感じで、不規則な皺によって布が完全に下に垂れ下がらないように抵抗している感じだ。
これがレンダリング結果。
布のシミュレーション計算をさせるボタンは上記で使用した「ローカルシミュレーション(ダンピング)」と「ローカルシミュレーション」、「シミュレート」の3つあり、ローカルの方は現在のフレームのままシミュレーションだけ進めるもので、シミュレートの方はシミュレーション計算とともに現在時刻も更新されて、他のオブジェクトのアニメーションと連動した布のシミュレーションが行えるようになっている。
この2系統あるのは、ローカルの方が布の初期状態を作り出すのが目的で、シミュレートの方はその初期状態から布のアニメーションを作り出すのが目的だからだ。そうじゃないと服飾メーカーを使って服を生成した場合、アニメーションの冒頭に必ず生地が縫い合わされるアニメーションが入ることになっちゃうからね。
さらにローカルシミュレーションはダンピング付きと無しに分かれている。このダンピングは速度に対する抵抗力みたいなもので、例えば布が凄い力で引っ張られていた場合、シミュレーションを開始するとその力で布の各ポイントが勢いよく引っ張られて加速し、大きな速度が出たりする。布のシミュレータは時間をちょっとずつ進めて前の状態から次の状態を求める方式なんだけど速度が上がるとちょっと時間を進めただけなのにとんでもないところまでポイントがすっ飛んで行ってしまう事があるわけだ。現実にはそんな遠くまでポイントが吹っ飛ぶ前に布内部の抵抗力とかで抑えられるわけだけど、それを計算に入れるためにはその間の地点での計算も必要になり、ポイントの速度が上がるほどシミュレータは時間を細かく分割してちょっとずつ時間を進めて計算しなくちゃ正確な計算が出来なくなってしまうわけだ。これは非常に効率が悪いので(ダンピング)付きの方は、速度に対する抵抗(ダンパ)を計算に組み込んで布の速度が極端に上がらないように抑えて計算させる仕組みのようだ。だからダンピング無しに比べて布の反応は鈍くなるけど、速度超過による計算密度の不足みたいな事は起こらなくて済むわけだ。まあ待てない時間でもないからこっちを使っとけばいいんだろうね。
ローカルシミュレーションは前述した通り初期状態を生成するためのシミュレーションで、シミュレートは布アニメーションを作成するためのシミュレーションなので、結果としてローカルの方はシミュレーション結果の形状だけが残るけど、シミュレートの方は布が変形していく様子がフレーム単位で記録される。
例えば球体にこのようなアニメーションをつけて、
フレーム0で「ローカルシミュレーション(ダンピング)」ボタンを押すと、布のシミュレーションは刻々進んで行くけどタイムスライダはフレーム0のままなので球体は静止したまま布がかぶさる。適当なところでローカルシミュレーションを終了する。
次に「シミュレート」ボタンを押すと、今度はタイムスライダが進み始め、球体の移動アニメーションが再生され、それに伴って布の方も変形されて行く。
この動きは全て布地モディファイヤ内に記録され、
何フレーム記録したかはシミュレーションフレームとして表示される。シミュレーション結果のデータを消去したい場合はそのすぐ下にある「シミュレーションを消去」ボタンで消す事が出来る。途中まではOKだったけど、それ以降のオブジェクトの動きに変更があったりしてシミュレーションをやり直したいなんて場合は、やり直したい時刻にタイムスライダを移動して「シミュレーションを切断」を押せばそれ以降のシミュレーションデータだけ消去する事も出来る。
選択オブジェクトマニュピレータにはシミュレータで自動計算させるだけではコントロールしにくい部分の修正などをするためのツールが集まっている。
「初期状態にセット」は現在の布の状態をシミュレーション開始時の布の形状にセットする。布は「メッシュ編集」モディファイヤとか使って変形が出来るので、「ローカルシミュレーション」だけでは思った初期形状に出来なかった時にはメッシュ編集とかで変形してからこのボタンを押して初期形状として登録すればいい。ちなみにボタンを押すとメッシュがおかしな変形状態になる。これはメッシュ編集が布地の初期位置に対して相対的にかかるせいで、その相対的な変形を布に適用した場合、メッシュ編集される布の初期位置が変化後の位置に移動して、さらにそこからメッシュ変形で変形されるため、見かけ上メッシュ変形の適用量が2倍になったように見えるせいだ。もちろんメッシュ編集モディファイヤを削除すればちゃんとした変形結果が残ってるよ。
「初期状態にセット」がモディファイヤスタックトップの状態を布形状の初期形状にキャプチャしてくるのに対して、「状態をリセット」は布地モディファイヤより下の形状をキャプチャする。布地モディファイヤを適用した元のオブジェクトを変形しても、そのままでは布地に反映されない。その変形を布地に適用したければこのボタンを押して変形後の形状をキャプチャしてくる必要があるわけだ。そういう意味でこのボタンは布をシミュレーション前の初期状態に戻すことができる。
「オブジェクトのキャッシュを削除」は「シミュレーションを消去」と同じように布の変形アニメーションデータを消去するんだけど、その消去の対象となるデータの格納場所が異なる。布地のオブジェクトプロパティパネルで選択したオブジェクトを「非アクティブ」「布地」「衝突オブジェクト」に切り替えられるけど、「布地」から「衝突オブジェクト」に切り替える時、一緒に変形アニメーションのデータも移す事ができる。「シミュレーションを消去」はこの衝突オブジェクトに移された変形アニメーションのデータを消去するためのボタンだ。このように布の変形アニメーションのデータを布の変形シミュレーション用と衝突オブジェクトの変形用に分けることで、完成した部分のアニメーションは固定し、それを衝突オブジェクトとして使ってさらに上から布をかぶせてシミュレーション計算が出来るようになっている。例えばズボンをシミュレーション計算してアニメーションデータを作ってから、それを衝突オブジェクトとして上着のみのシミュレーション計算が出来るわけだ。
例えば下の画像のように先にシミュレーションしたシーンにさらに服飾メーカで新しいパネルを加えた。
この状態でオブジェクトプロパティパネルを開けてオブジェクトを追加で新しく作成したパネルを追加し、布地としてシミュレートしたものを衝突オブジェクトに切り替える。
そして追加したパネルを布地にする。
これでOKを押すとシミュレーションフレームが1に戻ってシミュレーションデータが消えている事がわかる(衝突オブジェクトに移された)。
この状態でシミュレートを開始すると、衝突オブジェクトに変更したオブジェクトは以前のシミュレート結果のデータで変形アニメーションされ、それを衝突オブジェクトとして追加したオブジェクトがシミュレーション計算される。
ここで「シミュレーションを消去」をしても衝突オブジェクトのアニメーションはそのまま残り、新しくシミュレーションした方のアニメーションだけ削除されるわけだ。そして衝突オブジェクトの方についているアニメーションを消去したい時には「オブジェクトのキャッシュを削除」を使うわけだ。ただし消去しても初期形状は残るよ。
「状態を確保」はフレーム単位でシミュレーションデータを修正するためのボタンだ。「初期状態にセット」が現在のスタックトップの形状をキャプチャしてシミュレーションの初期形状を修正したように、「状態を確保」は現在のスタックトップの形状をキャプチャして現フレームのシミュレーションデータを修正する。だから服がちょっと突き抜けちゃったとか変形がおかしいなんて場合に、そのフレームに移動してメッシュ編集モディファイヤを追加して、形状を修正し、このボタンを押せば、このフレームのシミュレーション結果だけその形状で修正される。ただしメッシュ編集モディファイヤが適用結果にさらにかかるから見た目は変形が倍になったように見えるよ。編集が全部終わったらメッシュ変形モディファイヤは削除してね。
長くなったので続きはまた次回。
今週は大事をとって明日も休みます。