CG・コンテンツ制作
  1. CG・コンテンツ制作トップ
  2. DAIKIN CG Channel
  3. UsersNotes
  4. ICE
  5. Lagoa ICEベースのシミュレーター 
SUITE USERS NOTES
Lagoa
ICEベースのシミュレーター
Lagoa_00

ritaro_ml

プロローグ
さて、今回はSoftimage 2011 SAPから搭載されたICEを使ったシミュレーターLagoaの機能紹介記事になります。
Thiago Costa さんが作り上げたこの機能は、オリジナルに組み上げたICEノード群なのです。
紹介ムービーが存在しますね。Lagoa Multiphysics 1.0 - Teaserhttp://vimeo.com/13457383

まだまだ日本語、いや英語でも詳しい説明が少ないのですが、
すごいムービーにだけ注目するのではなく、いったいどのような設定のものなのか基本から覗いてみたいと思います。
で、ICETree 左のタスク・タブ>Lagoaを開くと、どんだけーーー!!って数のICEノード が出て来ます。
えっと数えると、・・73個かなあります。
Lagoa_01
サンプルのシーンがあったり、4番目のSoftimage画面に昇格したICEイン画面の左メニューから設定すると、
ある程度の組み合わせで簡単に用意してくれます。
まずはそこらあたりから記述していきたいと考えます。

0) 情報
1) 基本
 > サンプルシーン
 > ICE の レンダリング
2) 布のシミュレーション
 > Lagoa Setup Cloth Meshからの発展
3) Lagoaのキャッシング
 > Lagoa Emit Mesh の場合

パソコンのスペックWindowsXP SP3、Intel Core2Duo 3G、RAM; 3G、NVIDIA Quadro FX1700

情報
これを書いている時点でSoftimage2011SAP Lagoa についてのヘルプ情報は英語版のドキュメントにありましたが。
その後、日本語のドキュメントがダウンロード出来るようになりました。
デフォルトのインストール先のディレクトリー
C:\Program Files\Autodesk\Softimage 2011 Subscription Advantage Pack\Doc\jp内にxsidocs.chmを上書きコピーします。
検索項目にLagoaって入れるとドバーっと100個以上の候補が表示されます。
lag_00



基本
サンプルシーン
まずは、基本のサンプルシーンがインストール時に用意されていますので、そこから始めると良いです。
が、ICEである以上、基本的なICE知識はあるという前提で話が進みます。
Alt+9キーでICE Tree を開き、ユーザーツール > サンプルをブラウズ... を選択すると、ICEのサンプルのあるところにブラウズしてくれます。
その中の Lagoa_Basic_Emission シーンを選択して、メイン画面上に ドラッグ&ドロップ すればシーンが開きます。
lag_01
シーンを再生してから止めてパーティクルを選択し、Alt+9キー で ICE Tree を開くとたった4つのICEノードが表示されます。
でも、こんな簡単なはずがありませんよね。↓
Lagoa_02
Lagoa Setup Basic Emission ノード コンパウンドなので展開して中身を見ます。すると、6個のノードが表示されます。↑
でも、こんな簡単なはずがありませんよね。

つまり、Lagoa という機能は、扱い易いようにコンパウンドとしてまとめてくれている ICEノード群である、と理解出来るのです。
でも、本当に簡単に色々な動作を設定できるようにまとめてくれているし、
同時に ICEで出来ているので、既存のノードと組み合わせればいくらでも改良が出来るものだと解ります。
高機能で柔軟性に富んだ素晴らしいシミュレーションシステムなのです。

では、ここにある各コンパウンドをもう少し探求していきましょう。
そのノードの見た目よりも、ずっと面白くアニメーションを設定出来るんです。



Lagoa Emit Volume(Lagoaボリュームの放出)
ノードをダブルクリックするとパーティクルを生成する設定PPGが表示されます。(これもコンパウンドなので、更に中があります)
EmitRate
・いっぺんに出すか[Once at Frame(フレームで1回)]
・各フレーム毎か[Every Frame(すべてのフレーム)]を簡単設定出来ます。
Fitting項目は放出の仕方が変わります。 一番下 Initial Force は方向です。
これだけでも色々と放出方法が変えられる面白いノードです。
Lagoa_03


Lagoa Add Forces(Lagoaフォースの追加)
その下のフォースも独自のノードで組み合わせられたコンパウンドです。
重力は既存ですが、その下のAir Density(空気密度)は強さと効果度合いが調整出来ます。
例えば、行き場が無くてどんどん溜まっていくというアニメーションが作成出来るので、
まるで シャボン玉 や 泡 が 次々と積み重なっていくようにな動きになります。
Lagoa_04


Lagoa Main Material(Lagoaメインマテリアル)
その下のマテリアル(材質感)も独自のノードで組み合わせられたコンパウンドです。
その横のLagoa Phaseのはトリガーとして ID値を変えることの出来るノードです。

Lagoa Main Materialノードは面白いです!!!
パーティクルに材質的な設定を行います、
  • 圧力 (Pressure Settings):流体の非圧縮性を制御
  • 粘着性 (Viscosity Settings):流体の滑らかさ
  • 非弾力性 (Inelastic Settings):摩擦や自己衝突(クロス)
  • 弾性 (Elasticity Settings):元の形に戻ろうする能力(伸縮性)
  • プラスティック流 (Plastic Flow):元の形に戻らない能力;可塑性(かそせい;荷重を完全に除いた後に残るひずみ(伸び、縮みのこと))[プラスチックってこの可塑性物質という意味らしい]
等々の各項目があり、細かく材質設定が可能です。

サンプルシーンを見ていくと、
ElasticitySettings項目のSolveElastic とElasticity at Boundarues を ONにしていて、
ポリゴンの外形が衝突物に接触すると"くっ付く"という風な動作例になっています。
このような振る舞いは、従来作るのが難しいアニメーションだと思います。
Lagoa_05


Lagoa Simulate Multiphysis(Lagoa複数の物理特性のシミュレート)
その下のコリジョン用のポリゴンが接続されているノードは衝突物の振る舞いを設定出来るノードで、コンパウンドではありません。
これ1つでコリジョンの際の動きが細かく設定出来ます。
Optimization and Debug項目に各機能を有効にするかを選択します。
上から
・圧力・密度・弾性・非弾力性・粘着性・可塑性等をチェックで無効/有効が設定されます。

下図例は、衝突したパーティクルが中々前に進まず、どんどんと後から来るものに押しのけられるように積み重なっていく、という動作です。
Lagoa_06


これだけの設定でまだベーシックです。
コンパウンドの中身がものすごい複雑なノードの組み合わせになっている・・・・なんて知らなくても、
いくらでも面白い動きが作成出来てしまいます。

サンプルシーンは10個用意されています。
順に開いてみて、動きがどのように変化するのか見てみて、各ノードの機能を理解していくと良いと思います。
中でもLagoa Setup Pouring Liquid、Lagoa Setup Cloth Meshなど流体や布の設定をしているコンパウンドがありますが、
その内訳をみると、やはり上記で紹介したような基本の各ノードの設定値がそれっぽくなるように設定されているものだ、と気が付きます。
なので、サンプルシーンからでも、その理解がすすめば、そこからどんどんアレンジしていけるものになっています。
 
このようなシーンは簡単に作成できます↓。衝突判定も外形を成しているポリゴンをグループ化して設定しているだけです。
(うわー!!やな音だな、絶対ブツカりたくないね、ってぶつからないってXSI)



ICE のレンダリング
さて、ここでICE の レンダリングTIPSです。
上ムービーのように、ICEパーティクルに色と形状を設定した場合、以下↓のようになっています。
色はLagoaGradient のカラー形状はSphereになっています。
これをこのままレンダリングしたいと思った時の設定です。
Lagoa_10
爆発とか煙とかICEパーティクルで色を付けた状態で、ちゃんとレンダリング出来るのです。
また、ここではSphere形状のままのレンダリング方法です。
pointcloudを選択して、適当なマテリアルを一旦付けます。
そうした後、RenderTree(7キー)にてノード > パーティクル > Particle Rendererを取り出します。
なんとRenderTree上のノードも、ICETree上のように、Particle Renderer はコンパウンド になっていますね。
Particle Renderer をダブルクリックして、ボリューム密度を20000くらい、
ボリュームカラー・タブのアンビエンスを真っ白にして、強度も1にします。
ディフューズの色も真っ白にしてその強度は0にしておきます。
続いて、ノード > パーティクル > Particle Shaper を取り出します、これもコンパウンドです。
そのDensity(密度)をParticle Rendererの DensityShape に接続し、
フラクタルの強度を0にします。つまりぼけた感じを無しにしたのです。
もし、ぼかしたパーティクルにしたいなら、プリセットのタブに”もくもく”と”フワフワ”があります。何の翻訳?
Lagoa_11
RenderTreeの設定画面
ここで、さっきからなんで、コンパウンドだ!コンパウンドだ!!って言ってるかというと、
ICEノードと同じく、これらを展開するとやはり複数のノードでレンダリングの設定しているわけなので、
それらの個々のノードを取り出してユーザーが自由に組み替えれば、オリジナルのレンダリングの設定がいくらでも作れるようになっている・・・
ってことを言いたかったからです。

Particle ShaperParticle Rendererを展開した図
Lagoa_13
さて、これをレンダリングすると、このようになります。↓
Lagoa_12



布のシミュレーション
Lagoa Setup Cloth Meshからの発展
どのくらいの布シュミレーションが出来るのか探ってみました。
ユーザーガイドには『動くキャラクターにかけるクロスとしては適していません』 と書かれているのですが、
機能としてあるからには探ってみたいものです。
設定方法は、左の項目からするとあっと言う間に構築してくれます。
デフォーム > シミュレート > Lagoaクロスメッシュの後、衝突するものをピックします。(グループも接続可能)
Lagoa_20
これで基本的な設定は出来ているのですが、生成するとただ落ちるだけです。
それはピンで止めてないからです。
Nullを取り出し、主表示をに、仮に Constraints という名前のGroupを作成します。
そのグループ名をLagoa Setup Cloth MeshのInNameNullに接続します。
Nullの半径をスケール値調整すると、赤い点が表示される範囲が変化し、ピン止めした範囲指定できます。
再生すると、もう布っぽい動きになっています。
Lagoa_21
でも、結局細かい設定をするのなら、コンパウンドを展開して各ノードの設定をすることになります。
下図左のLagoaMainMaterial ノードは扱う機能に限定した LagoaMateriaCloth ノードじゃなくて フル機能 のノードを接続しているだけです。
後の調整でどの機能も利用できるようにしておいたということです。
Lagoa_22
とにかく設定箇所がいっぱいあるのですが、使わないであろう設定は外しておくとか・・。
例えば
・ちぎれる必要が無いなら、ELasticitySetting のElasticBreakingPoint の値は要らないので、
Lagoa Simulate MultiphysisAllowTearingチェックを外します。
・黄色に表示している構造表示を無しにするには、Lagoa Simulate Multiphysisの Debug項目のDisplay Structure チェックを外します。

さて、ここまでの設定でかなりいけてると思って動かすと、あることに気が付くはずです!!
布として形状変形させているGrid自身に回転値を付けると・・・・
おや??、重力設定したはずの下への垂れ下がりが効かないで、回転したままになります。しかも、固定点がズレていきます。
Lagoa_23
またバネみたいにビヨヨーンが設定できるかもとか思いますが、
今は形状(階層構造体)が回転しても、下への垂れ下がって欲しいところです。
では、どうするんか??・・・ICELagaoが設定している所自身が回転してしまっている・・・と考えると、
このICEを設定しているものは別の所、回転しないところに設定する・・・、と考え・・、
そう・・、今までサンザンやって来た、PointCloudにICELagaoを設定するのです。
そのサンプルシーンがLagoa_Transform_Constraint.scnで、開くと下図のようになっています。
Lagoa_24
このシーンでは、形状変化するTorus を回転しても下方向に変形していきます。
もちろん、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_25
これで、回転値が付いても下に布が垂れ下がります。しかもピン止めした位置も変化しません。

では、もう一回、少しキャラに使用しているポリゴンに近い形状で試作してみます。・・・・こんな感じです。
Lagoaの各設定は調整でどんどん良くなりますが、急がずじっくりテストしてみてください。
Lagoa_26
PointCloudを使ってLagoaを設定している場合、ポリゴンをLagoa Advect Simulated Meshノードを使って変形させるのですが、
幾つかのパターンでうまく動作しないことがありました。
・斜め字のICETree(Pointcloud) というノードが、きちんとSimulationコンストラクションモード以下にあることを確認してみてください。
そんなのが無い・・という場合は、一旦そのポリゴンにIceTree設定画面からシミュレーションICETreeノードを作成すると出来ます。
Simulationコンストラクションモードの階層が出来たらIceTreeノードを削除します。
・この設定作業前にICETreeを作成したことがあった場合、Simulationコンストラクションが残っているが、
これをリフレッシュする意味で、一旦削除し、
改めてICEシミュレーションをもう一回作成してからそのノードを削除すると、動作する場合もありました。
Lagoa_27
この試しデータをWindフォースに強弱のアニメーションを付けると、このようなアニメーションになります。
この時の設定は以下の通り。
Lagoa Main Material では、Inelastic Setting で自己作用、Elasticity Settingで元形状に戻ろうとする値。
Lagoa_28
Lagoa Add Forces では、AirDensity で戻ろうとする時の抵抗値、のアニメーション値。
Lagoa_29
Lagoa Simulate Multiphysis では、TimeStep値の増し、Optimization and Debugで有効にしている機能を設定しています。
衝突判定に重要な項目が、TimeStep 項目のSubsteps です。
ここはポリゴン数(頂点数)の問題ではなく、衝突判定の精度を決める値です。
ここは 以上ないと頂点が当たり判定物に突き抜けてしまうのですが、
値を大きくすると 処理が重くなってきたり、衝突した際の振る舞い (アニメーション) も変わるので、
フレキシブルさが欲しい時は低い値の方が良いという板挟み状態です。
あと、ちょっとだけでもCollisions 項目の Offset Collision 値を入れておくと考慮されます。
Lagoa_30
では、もっとキャラの階層構造体に設定してみました。
この場合、何処に置くのが正常動作して扱いも便利か悩むところです。
動きも速いとめり込みが発生し、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となったりします。
Lagoa_31
2)PointCloudノードを選択した状態で
パーティクル > シミュレーション > 選択項目からキャッシュをロードを実行します。
すると新しいCache_モデル名_pointcloud というノードが自動的に作成され、
そこにミキサーオペレーターが作られ、同時に、元のpointcloud が非表示になります。

3)Cache_モデル名_pointcloud ノードを選択した状態で
パーティクル > エミッションシ後 > キャッシュ済みシミュレートポストエフェクト > ポイントの移流を実行します。
すると、選択画面で表示されるので、そのままの設定であるSelected cloud is already cached でOKボタンを押します。
Lagoa_Advect_points が作成されます。
Lagoa_32
4)設定画面も表示され、以下のような赤線の設定にします。
この状態で、黄色い点はもう動いていますが、ポリゴンがその動きを追従しません。
Lagoa_33
では、その動きをポリゴンに付ける設定をします。

5)まず最初に、元々のPointcloudのICETreeを開き、発生するポリゴンをGetノードで指定している接続を解除します。
これで、ポリゴンに方に付いている斜め文字のICETreeが消え、シミュレーションではポリゴンが動かないようになります。
ここから無効にしてけばシミュレーションも実行されない状態になります。
Lagoa_34
変形する方のポリゴンにICETreeノードを作成し、
DataAccess > Cache on fileノードを取り出して、FileModeをReadCacheにして、先ほど保存したキャッシュファイルを指定します。

なんと、実はこのCache on fileノードを使ってもキャッシュの書き出しが可能なんです。
面白いのは複数のキャッシュをブレンドすることも可能です。

これでOKな、あれ、となるはずです。ポリゴンの位置が合ってない場合は、
以下図のようにSRTtoMatrixを使ってポリゴン位置にオフセット値を付けてしまうのはどうでしょうか。ここでは0.0.0.です。
Lagoa_35
これでタイムラインをスクラブすると負荷なく動き出します。

本当は、この先も記述したかったのですが、探求している時間がもったいない。。。。
そんな時間を待っているよりは、一旦皆さんに情報を公開してしまおうと考えました。
ここまでのものですが、どうぞ参考にしてください。

という訳で、次回はまた、モデリングもしたいな。
乞う、ご期待!!
戻る 次へ

お気軽にお問い合わせください

Daikin CG News お申し込み

CGクリエイター向けのセミナー・イベントやキャンペーン、製品情報をメールマガジンでお届けします。(登録無料)

Twitter

ページの先頭へ