2012年09月

2012年09月28日

recoilのソフトボディアニメーションをMDDファイルに書き出してみた modo601 SP3

recoilのソフトボディには、今のところベイクの機能が無い。だから一度計算した結果もファイルを閉じれば無くなってしまい、次にシーンを開いたらまた計算が必要になる。

これはネットワークレンダリングにも影響するはずで、たぶん出来ないんじゃないかと思う。

そこでソフトボディアニメーションをMDDファイルに書き出してみようと思ったわけだ。

MDDファイルにしちゃえばMDD Influenceでファイルを読み込むことでいつでもアニメーションが再現できるようになるからね。

まだ思いついて数時間なので調査が間に合わなくて、例えばメッシュアイテムにバインドされているインフルエンスをどう調べたらいいかとかわからなかったので、プログラムが完璧とは言いがたいんだけど、とりあえず動くようにはなったのでアップしておくね。

使い方はこんな感じ。

1.ソフトボディーを使ったシーンを作成してrecoilメニューのシミュレーション実行を選んでシミュレーション計算をしておく。

fig01

2.ソフトボディを適用したメッシュアイテム1つとそのメッシュアイテムにバインドしたSoftbody Influenceアイテム1つを選択する。

fig02

3.「Bake_Softbody.py」スクリプトを実行する。

4.保存するMDDファイルを聞いてくるので入力する。

fig03

これでMDDファイルが生成される。

あとはこのMDDファイルをメッシュアイテムにMDD Influenceデフォーマで適用すればいい。

まず、Softbody InfluenceがONになっているならOFFにしておく。

fig04

次にメッシュアイテムを右クリックして、MDD Influenceを選択。

fig05

先に保存したMDDファイルを選択する。

fig06

これでシーンを保存して置けば、いつ開いてもMDDファイルからアニメーションが再生できる。

fig01

それではまた来週。

カテゴリー別ページ



take_z_ultima at 12:22|この記事のURLComments(0)TrackBack(0)modo | CG

2012年09月27日

2013の新機能を探る その33 3dsmax 2013 SP2

今回は「Interaction(対話)」ロールアウトで残った「High Velocity Accuacy(高速度の精度)」から。

fig01このパラメータは衝突判定の方法を切り替えるもので、ONにすると衝突判定の精度があがるけどそのぶんだけ処理速度は遅くなるらしい。マニュアルにはそれ以上の事が書いていないので何とも言えないけど、要するにこのパラメータは処理が重くならない限り常にONでいいみたいだ。

例えば下のように垂らした布に球体を衝突させる場合、球体が動き出して静止するまで30フレーム使っている下の例では衝突判定がうまくいって、布が動いているけど、

fig02

その間隔を10フレームにしてみると、球体が突き抜けてしまって、布の反応が球体のスピードが遅い時より少なくなってしまっている。

fig03

まったく同じシーンで「High Velocity Accuacy」をONにすると、布がしっかり反応するようになった。

fig04

さらにスピードを上げて1フレームで通過させてみるとOFFの状態ではほぼ反応が無くなった。

fig05

同じ状態で「High Velocity Accuacy」をONにすると10フレームの時より反応が鈍ったけど一応反応している。

fig07

上の例ではサブステップが3だったんだけど、これを10に引き上げてみるとこのように大きく反応するようになった。サブステップを3から10に引き上げる程度だと処理時間もそれほど増えないけど効果は大きい。

fig06

同じようにサブステップを10にした状態で「High Velocity Accuacy」をOFFにした場合はやはり反応はほぼ無い状態のままだった。

30フレームでサブステップ3の時ちゃんと反応していたから、球体が通過する時の30フレーム間の時間分割は30×3=90なので、1フレームで通過するならサブステップを90に上げてやればちゃんと反応するのかなと思ってやってみたのが下のGIFアニメだ。見ての通りちゃんと反応するようにはなったけど処理が非常に重たくなっているのがわかる。

fig08

逆に「High Velocity Accuacy」が処理を重くするのかどうか衝突する玉をちょっと増やしてベイクにかかる時間で比較してみた。

fig09

結果としてこの程度では「High Velocity Accuacy」のON/OFFで違いは見られなかった。

以上のように、「High Velocity Accuacy」は衝突の精度をあまり処理を重たくせずに上げてくれるようなので、常にONでいいみたいだ。

それではまた次回。

maxまとめページ



take_z_ultima at 11:56|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2012年09月26日

modo601が来た! その56 modo601SP3

前回までは物理演算アイテムを調べて来た。今回からはソフトボディーアイテムについて調べてみたい。

前回までの物理演算アイテムは「剛体(リジッドボディ)」という硬く変形しない塊だったのに対して「軟体(ソフトボディ)」は変形する塊だ。下のGIFアニメの平面がソフトボディーアイテムで、柔らかな布のように振舞っているのがわかる。

fig01

こういう効果を出すには、メッシュを構成する頂点1つ1つについて運動計算をする必要があって、布のような振る舞いをさせるためには、その頂点1つ1つが互いに力を及ぼしあって、構造が崩れないように拘束する必要がある。

fig02ソフトボディではその拘束力を頂点間のバネとしてモデル化していて、マニュアル掲載の画像を借りると左のような3つのタイプのバネで構成されている。

構造スプリングはエッジで接続された頂点間に働くバネで、頂点間の伸び縮みに対して変化を抑止する方向に力が働く。

シアースプリングはポリゴンの対角線に働くバネで、三角形ならエッジの長さが決まれば形が決まるけど、多角形の場合はエッジの長さが同じなだけでは同じ形状にならない。例えば4本の棒の両端を相互に回転できるジョイントで繋いだ正方形は、変形してひし形にしたり潰して棒のようにしたり出来てしまう。このような変形に対する抵抗力がシアースプリングで、ポリゴンの変形を対角線方向のバネによって防ごうとする。

これら2つのバネでエッジの伸縮、ポリゴンの変形は防げるけど、例えば1つのエッジを共有しているポリゴンとポリゴンはポリゴンを全く変形しなくても、エッジを蝶番のようにして折ることで全体として異なる形状になったり出来る。その折れ曲がりに対する抵抗力がベンドスプリングになる。

ソフトボディーはこらら3つのバネによって頂点の運動を拘束することで成り立っているんだけど、これらをあえて使わない事も出来るようになっている。

完全に使わなければ各頂点はバラバラに行動し、それはパーティクルとして振舞う。頂点だけだとレンダリングできないのでヴォリュームアイテムなどを使って可視化する。下のGIFアニメはBlobアイテムで可視化したもの。

fig08 

カーブやベジェなど2頂点ポリゴンしか持たない構造のものに対してはシェアスプリングは意味が無く、構造スプリングで頂点間の距離を保つようにして挙動させればロープとして振舞わせることが出来る。カーブやベジェをレンダリングする時はアイテムプロパティの「カーブをレンダリング」をONにする。

fig09

ソフトボディーはインフルエンスアイテムとしてメッシュアイテムにバインドされる。物理演算アイテムがアイテムの変換プロパティに作用するのに対してソフトボディはメッシュアイテムの頂点に作用するからこういう構造なんだろうね。

fig04

パラメータは以下の通り。  

fig03

「スプリング」ロールアウトには3つのスプリングのON/OFFのスイッチ、その強度、ウェイトマップが1セットとなって並んでいる。

これらの設定が、通常のソフトボディの場合は3つとも有効に設定され、

fig05

ロープの場合は構造を追加だけ有効に設定され、

fig06

パーティクルの場合は全て無効に設定される。

fig07

マップは全て頂点に対するウェイトマップが使われ、各頂点個別にパラメータの影響をコントロール出来るようになっている。

ピンマップはソフトボディーインフルエンスの対象としたくない頂点を除外するためのマップで、ウェイト値が100%のもののみを処理から除外する。マニュアルには0%以外と書いてあるけど、試してみた限りでは100%でなければ効果は得られなかった。

例えばソフトボディを設定したメッシュに新規にウェイトマップを作成し、

fig12

下のように3つの頂点に100%のウェイト値を与えて、

fig11

ピンマッププロパティにそのウェイトマップをセットすると、

fig14

このように100%のウェイトを設定した3つの頂点が空間に固定されて布がぶら下がるようになった。

fig10

続きはまた次回。

カテゴリー別ページ



take_z_ultima at 11:51|この記事のURLComments(4)TrackBack(0)modo | CG

2012年09月25日

2013の新機能を探る その32 3dsmax 2013 SP2

今回も「Interaction(対話)」ロールアウトの続きだ。

今回は「Attach to Colloders(コライダにアタッチ)」を調べてみたよ。

fig01

この設定は布が接触したリジッドボディに対しての付着具合を制御するものらしい。

まず「Attach to Colloders(コライダにアタッチ)」は、布がリジッドボディに付着する機能のON/OFFをするためのもので、これをOFFにすると次の2つのパラメータの効力が無くなる。

Influence(影響)」は布がリジッドオブジェクトに付着した時に付着力によってリジッドボディに与える影響力の大きさを調整するもので、0〜1までの値が採れる。

下のGIFアニメは球体の上に布をかぶせて右に引っ張ってみたものだ。手前からInfluenceの値を0.00.5 1.0に設定してある。奥のInfluenceが一番大きい布に引っ張られた球体が一番勢いよく転がっているのがわかる。

fig02

Detach Past(デタッチ対象)」は布がリジッドボディに付着した時にどの位まで付着力で伸びるかを設定するパラメータ。

下のGIFアニメは垂れ下がっている布に球体をぶつけてみたもの。左から順にDetach Pastを1.0 3.0 5.0にしてみたもの。Influenceは1.0にしてある。値が大きいほど球体の運動に追従しながら伸びて、球体に付着している時間が長くなっているのがわかる。付着している時間が長いほど球体は布から力を受けて減速するので、右側の球体は布に付着したままになった。同じシーンでもしInfluenceを0.0にすれば布が伸びるだけになる。

fig03

Attach to Collodersの機能は布とリジッドオブジェクトがしっかり密着している事と、互いの影響をしっかりと伝播させることが効果を生むために重要で、もし効果が出ないようなら両者を調節してみるべきだ。特に密着している事は重要で、「Interaction(対話)」ロールアウトの「Collide to RigidObjects(リジッドオブジェクトに衝突)」側の「Thickness(厚み)」が0に近いほど効果が出る。

例えば下のGIFアニメは上と同じシーンで全ての布のDetach Pastを5にして、布のThicknessを0.0, 0.05, 0.2にしてある。厚みが大きくなるほど接触が少なくなって効果が薄れていることがわかる。

fig05

「Thickness(厚み)」を小さくとると布をリジッドボディが突き抜けちゃうけど、そこは衝突するリジッドボディ側の物理シェイプの方をオブジェクトより大きくする事で対応すればいい。

fig07

fig06

下のGIFアニメは球体の物理シェイプをそのままにしたもの(右)と、ちょっと大きくしたもの(左)の比較だ。左側の物理シェイプを大きくした方は物理シェイプは布を突き抜けているかもしれないけどその内側にあるオブジェクトは布を突き抜けないで済んでいるのがわかる。

fig08 

また、サブステップは常に1より大きくないと効果が出ない。上の例では30くらいにとっている。

それではまた次回。

maxまとめページ



take_z_ultima at 11:58|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2012年09月24日

modo601が来た! その55 modo601SP2

601でネットワークレンダリングを試してみたんだけど、 ファイルの読み込みエラーでスレーブ側がシーンを読み込めない。同じ環境で501では出来るのでネットワークのトラブルじゃないと思うんだけど、なんか仕様が変わったのかな?

スレーブ側では「Scene load failed」が出て、

fig03

マスター側ではパケットだけ出るだけでスレーブ側からは結局レンダリングされない。

fig02

ちなみに501までは共有ディレクトリにマシン名のフォルダが出来て、その中にAssetフォルダやパケットフォルダが生成されたけど、601では共有ディレクトリに直接Assetフォルダーだけ出来上がった。ディレクトリ構造が1段階減ってるからこの辺でおかしな事になってるような気がする。

さて、今回は物理演算アイテムの「キャッシュ」ロールアウトだ。実はネットワークレンダリングをやってみたのはこのキャッシュと関係があって、それを試してみたかったんだけど、そのネットワークレンダリングがうまく行かなかったので検証できず終いだ。

fig01

で、そのキャッシュロールアウトなんだけど、物理演算はアイテムが増えていけばどんどん複雑になって計算量が増えていく重たい処理なのでアニメーション再生のたびに再計算していると処理が重くて大変になる。そこで計算結果は記録しておいて次からのアニメーションの再生にはその記録を使った方が効率的なわけだ。それがここで言う「キャッシュ」のことで、recoilはmodoとは別に記憶エリアを持っている。

物理演算アイテムの挙動はこのキャッシュに記録されて、それがアイテムのトランスファチャンネルに適用されることでアニメーションしている。

例えば下のようにドーナツを大量に空中に並べたシーンでドーナツをすべてアクティブリジッドボディにし、床にあたる平面をパッシブリジッドボディにして(オプション:「リアルタイムで再生」をOFFにして)再生すると、最初の1回は再生に時間がかかるけど、2度目からは素早いアニメーションになる。

fig04

これは1度目の再生の時に計算された挙動がキャッシュに蓄えられて、次の再生からは物理演算を省略してキャッシュを再生するだけになるためだ。

キャッシュが有効になって再生されている時にはビューポートの下にこのような表示が出る。

fig07

また、物理演算をしてキャッシュを更新している時はこのような表示になる。

fig05

だからこの表示を見れば今どっちの処理でアニメーションをしているのかがわかる。

逆に言えばキャッシュを再生するのかシミュレーションをやり直すのかはmodoが勝手に決めるので、この表示を見ないとどっちの処理になっているのかよくわからない。

本来ならシミュレーションに係わる何かが変更されたらキャッシュはクリアしてやり直さなきゃならないわけだけど、たまに更新がうまく行かない事がある。そんな時に強制的にキャッシュを消して再シミュレーションさせるのが「キャッシュの消去」ボタンの役割だ。キャッシュが無ければシミュレーションするしか無いからね。だからパラメータをいじってもアニメーションが変化せず、「cache:playback」と出るようならこのボタンを押せばいいわけだ。recoilを使ってみた限りでは、たまにそういう事態になるので、パラメータをいじってもアニメーションが変化しなかったからと言ってあわててさらにパラメータをいじる前に再シミュレーションが行われているかどうか確認した方がいいよ。

で、このキャッシュはmodoのシーンファイルには書き出されないのでせっかくシミュレーションをしてシーンを保存しても次のセッションでは再度シミュレーションをしなくちゃならなくなる。

例えば下の画像はシミュレーション計算終了後の108フレームの状況だ。このままシーンを保存して、

fig05

開きなおしたのがこの画像。同じ108フレームだけどアイテムが初期位置に戻ってしまっている。

fig06

もし、シミュレーション結果に満足して、これ以上変更するつもりが無いのなら、キャッシュをアイテムのキーフレームアニメーションに変換することで、シーンファイルに保存する事ができる。それがキャッシュのベイクで、「キャッシュのベイク」ボタンはシーンの全フレームにキーを打ち、「トランスフォームへベイク」は現在フレーム1フレームだけにキーを打つ。そしてどちらも物理演算モディファイヤの「有効」プロパティをOFFにして物理演算モディファイヤの影響をOFFにする。

全フレーム版と1フレーム版があるのは、キーフレームデータも数が増えるとファイルが無駄に肥大化するというのもあるし、1フレームだけ必要なこともあるからだ。

ベイクする時はベイクするアイテムを全て選択してベイクのボタンを押せばいい。でも元の状態に戻すのが大変だからベイクする前にシーンは保存しておいたほうがいいよ。

キャッシュの内容はベイクしない限りファイルに書き出されないわけだけど、それはネットワークレンダリングをする時も同様のようで、シーンを受け取るスレーブ側はキャッシュを受け取れないからスレーブ側のレンダリング結果がおかしくなってしまうらしい(確認できなかったけどね)。だからシーンをネットワークレンダリングする時もベイクは必須だ。

それから1フレームだけベイクする「トランスフォームへベイク」はアイテムの初期位置を決めるのにも使える。例えば先のシーンでドーナツが地面に大量に落ちているところに球体を落下させる場合、ドーナツの位置を手作業で並べてシミュレーションを開始しても力学的に均衡して動かない状態に持って行くのは至難の業だ。でも上の例のように上空に配置して落下させて積んでやるのは簡単だ。だからその落下後の状態がドーナツの初期位置に出来れば大変助かるわけだ。そこで使えるのが「トランスフォームへベイク」で、シミュレーション後に、ドーナツが安定したフレームにタイムスライダを移動させ、ドーナツアイテムを全部選んでボタンを押せばいい。

その時気を付けなくちゃならないのは、ドーナツ自体に最初からキーが打たれていると、トランスフォームへベイクボタンを押した時に現在のフレームにキーが打たれてしまうこと。これでは現在の状態が初期位置にならない。もちろんキー自体をドラッグして移動することも出来るけど、手間は減らしたいよね。だからシミュレーション前にアイテムのキーは削除しておいた方がいい。

もうひとつは物理演算モディファイヤが無効になっちゃうので、有効に戻しておくこと。

fig07

下のGIFアニメはドーナツを落下させた状態を初期状態にして、球体を落としてみたものだ。ちょっとまだ暴れているドーナツはあるけど、ほぼ安定した状態からシミュレーションを開始できている。

fig08

それではまた次回。

カテゴリー別ページ



take_z_ultima at 12:03|この記事のURLComments(0)TrackBack(0)modo | CG
Archives