![]()
|
情報
これを書いている時点でSoftimage2011SAP の Lagoa についてのヘルプ情報は英語版のドキュメントにありましたが。その後、日本語のドキュメントがダウンロード出来るようになりました。 デフォルトのインストール先のディレクトリー C:\Program Files\Autodesk\Softimage 2011 Subscription Advantage Pack\Doc\jp内にxsidocs.chmを上書きコピーします。 検索項目にLagoaって入れるとドバーっと100個以上の候補が表示されます。 ![]() |
布のシミュレーション
Lagoa Setup Cloth Meshからの発展どのくらいの布シュミレーションが出来るのか探ってみました。 ユーザーガイドには『動くキャラクターにかけるクロスとしては適していません』 と書かれているのですが、 機能としてあるからには探ってみたいものです。 設定方法は、左の項目からするとあっと言う間に構築してくれます。 デフォーム > シミュレート > Lagoaクロスメッシュの後、衝突するものをピックします。(グループも接続可能) ![]() それはピンで止めてないからです。 Nullを取り出し、主表示を環に、仮に Constraints という名前のGroupを作成します。 そのグループ名をLagoa Setup Cloth MeshのInNameNullに接続します。 Nullの半径をスケール値調整すると、赤い点が表示される範囲が変化し、ピン止めした範囲指定できます。 再生すると、もう布っぽい動きになっています。 ![]() 下図左のLagoaMainMaterial ノードは扱う機能に限定した LagoaMateriaCloth ノードじゃなくて フル機能 のノードを接続しているだけです。 後の調整でどの機能も利用できるようにしておいたということです。 とにかく設定箇所がいっぱいあるのですが、使わないであろう設定は外しておくとか・・。 例えば ・ちぎれる必要が無いなら、ELasticitySetting のElasticBreakingPoint の値は要らないので、 Lagoa Simulate MultiphysisのAllowTearingチェックを外します。 ・黄色に表示している構造表示を無しにするには、Lagoa Simulate Multiphysisの Debug項目のDisplay Structure チェックを外します。 さて、ここまでの設定でかなりいけてると思って動かすと、あることに気が付くはずです!! 布として形状変形させているGrid自身に回転値を付けると・・・・ おや??、重力設定したはずの下への垂れ下がりが効かないで、回転したままになります。しかも、固定点がズレていきます。 ![]() 今は形状(階層構造体)が回転しても、下への垂れ下がって欲しいところです。 では、どうするんか??・・・ICELagaoが設定している所自身が回転してしまっている・・・と考えると、 このICEを設定しているものは別の所、回転しないところに設定する・・・、と考え・・、 そう・・、今までサンザンやって来た、PointCloudにICELagaoを設定するのです。 そのサンプルシーンがLagoa_Transform_Constraint.scnで、開くと下図のようになっています。 ![]() もちろん、LagoaSetupConstraint はコンパウンドであり、その中身は今までやってきた内容とほぼ同じですが、 違いがある部分を今作成している布のシミュレーションに設定します。 まずは、プレミティブ > ポイントクラウド > 空でPointCloudを取り出し、ICESimulationのICETreeノードを設定します。 実は、ICEのノード群はコピー&ペーストできるので、 今までGridに設定していたICEノードをSimulationRoot以下を全選択してコピー(Ctrl+C)し、 新しく作成したPointCloudのICETreeノード以下の場所にペースト(Ctrl+V)します。 元のICETreeは削除しておきます(右下のフリーズを使用)。 さて、ここでコピーして来たノード群は真っ赤なはずです。それは、発生源(Emmiter)用のノードを変える必要があるからです。 使うのはLagoa Init Geometry ではなくて、Lagoa Emit Meshです。 それに置き換えて、EmiterInNameの接続部に布として形状変形するGridノードを接続します。これで青くなって動き出します。 が!!!あれ? 今度は、頂点の移動でシミュレーションが動いているが、ポリゴンの形状がそれに伴って動かないという現象になります。 これはPointCloudでシュミレーションした結果をポリゴンに反映してないからです。 これも上記サンプルシーンで良く見るとそうなっているのですが、Lagoa Advect Simulated Mesh(Lagoaシミュレーションメッシュ移流)ノードを使用します。 Lagoa Advect Simulated MeshのノードのInNameに布として形状変化するGridノードを接続し ExecuteをSimulationRootのPostSimExecute1に接続します。 これは頂点シミュレーションの結果後、一番最後にその計算された頂点位置にポリゴンの形状を付着させている、ということですね。 これで、回転値が付いても下に布が垂れ下がります。しかもピン止めした位置も変化しません。 では、もう一回、少しキャラに使用しているポリゴンに近い形状で試作してみます。・・・・こんな感じです。 Lagoaの各設定は調整でどんどん良くなりますが、急がずじっくりテストしてみてください。 PointCloudを使ってLagoaを設定している場合、ポリゴンをLagoa Advect Simulated Meshノードを使って変形させるのですが、 幾つかのパターンでうまく動作しないことがありました。 ・斜め字のICETree(Pointcloud) というノードが、きちんとSimulationコンストラクションモード以下にあることを確認してみてください。 そんなのが無い・・という場合は、一旦そのポリゴンにIceTree設定画面からシミュレーションICETreeノードを作成すると出来ます。 Simulationコンストラクションモードの階層が出来たらIceTreeノードを削除します。 ・この設定作業前にICETreeを作成したことがあった場合、Simulationコンストラクションが残っているが、
改めてICEシミュレーションをもう一回作成してからそのノードを削除すると、動作する場合もありました。これをリフレッシュする意味で、一旦削除し、 ![]() Lagoa Main Material では、Inelastic Setting で自己作用、Elasticity Settingで元形状に戻ろうとする値。 ![]() ![]() 衝突判定に重要な項目が、TimeStep 項目のSubsteps です。 ここはポリゴン数(頂点数)の問題ではなく、衝突判定の精度を決める値です。 ここは 3 以上ないと頂点が当たり判定物に突き抜けてしまうのですが、 値を大きくすると 処理が重くなってきたり、衝突した際の振る舞い (アニメーション) も変わるので、 フレキシブルさが欲しい時は低い値の方が良いという板挟み状態です。 あと、ちょっとだけでもCollisions 項目の Offset Collision 値を入れておくと考慮されます。 ![]() この場合、何処に置くのが正常動作して扱いも便利か悩むところです。 動きも速いとめり込みが発生し、Substeps が3くらいのままで動くよう、各所調整が入ります。 Lagoa Main Material で Interfaces > Material Collision Offset が0.006 Lagoa Simulate Multiphysics で Collisions > Offset Collision が0.095 そして、初期位置からのスタートの場合うまく動作するのですが、いきなりあるポーズをした状態(位置)からのスタートだとうまく形にならないなど、 まだまだ・・・研究の余地がありそうです。 一旦ここまでとして、また話題を変えます。 |
Lagoaのキャッシング
Lagoa Emit Mesh の場合さて、Substeps が上がったりすると結構シミュレーションが重いです。 そこで、動きが良いようなら、キャッシュに保存して、タイムラインをスクラブしても動くようにして最終的な動きの確認をします。 その後はレンダリングに移れますね。 以下に記述するキャッシングの例は、Lagoaのパーティクルを発生しているノードがLagoa Emit Mesh の場合です。 < つまり、Lagoa Setup JelloのようにLagoa Emit Volume の場合は別です。 > スカートだけのシーンに戻ります。 キャッシュする方法は、現在3つくらいはありますが、ここではガイドに載っている例で。 1)ICETreeシミュレーションのあるPointCloudノードを選択した状態で パーティクル > シミュレーション > 選択項目でキャッシュを保存を実行します。 するとキャッシュの保存が開始されます。 ここで勝手に始まるのですが、保存される場所は、今作業しているプロジェクトの\Simulation\skirt1\pointcloudとなったりします。 ![]() パーティクル > シミュレーション > 選択項目からキャッシュをロードを実行します。 すると新しいCache_モデル名_pointcloud というノードが自動的に作成され、 そこにミキサーオペレーターが作られ、同時に、元のpointcloud が非表示になります。 3)Cache_モデル名_pointcloud ノードを選択した状態で パーティクル > エミッションシ後 > キャッシュ済みシミュレートポストエフェクト > ポイントの移流を実行します。 すると、選択画面で表示されるので、そのままの設定であるSelected cloud is already cached でOKボタンを押します。 Lagoa_Advect_points が作成されます。 ![]() この状態で、黄色い点はもう動いていますが、ポリゴンがその動きを追従しません。 ![]() 5)まず最初に、元々のPointcloudのICETreeを開き、発生するポリゴンをGetノードで指定している接続を解除します。 これで、ポリゴンに方に付いている斜め文字のICETreeが消え、シミュレーションではポリゴンが動かないようになります。 ここから無効にしてけばシミュレーションも実行されない状態になります。 ![]() DataAccess > Cache on fileノードを取り出して、FileModeをReadCacheにして、先ほど保存したキャッシュファイルを指定します。 なんと、実はこのCache on fileノードを使ってもキャッシュの書き出しが可能なんです。 面白いのは複数のキャッシュをブレンドすることも可能です。 これでOKな、あれ、となるはずです。ポリゴンの位置が合ってない場合は、 以下図のようにSRTtoMatrixを使ってポリゴン位置にオフセット値を付けてしまうのはどうでしょうか。ここでは0.0.0.です。 ![]() |
本当は、この先も記述したかったのですが、探求している時間がもったいない。。。。 そんな時間を待っているよりは、一旦皆さんに情報を公開してしまおうと考えました。 ここまでのものですが、どうぞ参考にしてください。 |
という訳で、次回はまた、モデリングもしたいな。
乞う、ご期待!! |