<< TOP



emPolygonizer  (version 2.05) ICEベースのプラグイン
                 

 プロローグ
      さて、今回は少し趣向の異なり、ICEをベースのプラグイン、emPolygonizer2 の機能紹介記事になります。
    何をするツールかと言いますと、Softimageにある一般的なオブジェクト;(Null・カーブ・ポリゴン・ICEパーティクルまで) から
    メタボールのようなポリゴンを生成し、尚且つ結合したり、伸びたり、ちぎれたりする動きをアニメーション化させることができます。
     液体みたいな表現に向いているのかも知れません。
    今回は、この emPolygonizer2 を使ってモデリングから色々紹介できたらと思います。
    <記事製作途中でSoftimageのバージョンが変更されています。>
     
    1)  ポリゴンモデリング
     > レトロな蛇口
    2)  ICEパーティクル
     > ホースからの水
     > 流れる水の透かし
     > 流体マークの飛び散り
      パソコンのスペック WindowsXP SP3、 Intel Core2Duo 3G、 RAM; 3G、NVIDIA Quadro FX1700


ポリゴンモデリング

 レトロな蛇口
     デザインってその時代を象徴するようなこともあり、
    ふと気が付けばちょっと前まではいっぱいあった学校のこんな形↓の蛇口が、いつの間にか無くなっているんですよね。
     <この形だと上向かないし・・>


     車のデザインにも通じるものがあるのですが、なんか丸っこい造形 <例えば、ダンテ・ジアコーザさんが生み出したFiat500なんか・・・>
    に 懐かしさ・優しさ・落ち着いた雰囲気 みたいなものを感じるのってありますよね。
    そういうのって、最近 レトロ ってひっくるめて表現しているみたいですが、
    あの玉をくっ付けたような蛇口の取っ手・・・なつかしいですね・・・・それを再現してみました。

     emPolygonizer は、ポリゴン・モデリングにも使えて、そんな ”丸っこいもの” を作るのが得意です。
    で、取っ手は ポリゴンのトーラスとカーブとNullを元に
    emPolygonizer でAddを押してから次々とピックするとあっという間に出来上がりです。
    ポリゴンが生成してからNullやカーブやトーラスのスケールと位置を変更すると、リアルタイムのポリゴンモデリングが可能なのです。
    調整が済んだら フリーズ をかけ、普通のポリゴンになります。
     蛇口の取っ手以外の部分は、SUNのモデリング編で紹介している ポリゴンの サブディビジョンサーフェイス機能を使って作っています。



     emPolygonizer で作成されるちょうど良いスケール値というものがありそうです。
    シーンが小さく、そのスケールに大きさを合わせるには、ポリゴンを作成するNullのスケールとPolygonizerのポリゴンのスケールの両方で調整できます。
    ですが、その場合ポリゴンを生成したNullとは表示位置がずれたことになりますが、アニメーションは保持されて動きます。



    モデルだけでも結構いい感じの形に・・、でも色も付けたい・・・



     ということで、ついでに、これまでSUN記事ではあまり扱ってないリアルっぽいシェーダー関係も書いてみましょう。(Toonだけ、やたら記述てますし・・)
    アニメでも3D表現多くなりましたが、水とか金属とかはToonじゃなくて リアルなシェーダー設定が必要な場合もあることでしょう。

     このシェーダーは simbiontMR というノードを通じて 
    DarkTree用のシェーダー metalTinFoil.dsts と metalRustySteel.dsts を設定したものです。



    うっすら青いのは、既に環境Mapを付けているからですが、そのテクスチャー以外は絵がない、
    いわゆる、プロシージャル・シェーダーです。バンプやリフレクションなどが簡単に設定できます。



     このシェーダー情報については こちらを参考にしてください。
    英語の解説でシェーダーを入れ置く場所設定等も必要です。DarkTree Shader for XSI http://www.darksim.com/html/softimagexsi.html
     <ソフトのバージョンがどんどん進歩していってしまうので、不安定さなど、自己責任にてお願いしますよ・・>

      で、次の話は、この水なんです、蛇口じゃなくて・・・



      水滴のシェーダー設定です。
    環境マップからの RGBA_Keyer でカラコレしています。
    あと、反射とか透明度、屈折設定部分に工夫を入れていてFront-Back_Swich で表と裏でその設定が違います。
     これで背景が入ると、こうなります。↓(つまり、背景があることが前提のシェーダー設定です)



     アニメーションは emPolygonizer で作成してるポリゴンの源である Null を動かしているだけで、 
    それっぽく、でも少し誇張した動き等も付ることをしています。


     レンダリングした画像です。 <っていうか、この水玉でかい。>






ICEパーティクル

 ホースからの水
      さて、今度は簡単なパーティクルから emPolygonizer を使ってポリゴン化したもので何か表現できるのか試してみました。
    上記シェーダーを使ってレンダリングし、コンポジットもしてみます。

     まずは、ホースを作成します。モデリングは単なる円柱からの加工ですが。形状は ICEを使っています。
    ICEKinematicsのその1 を参照していください。そこに解説しているカーブに沿って変形する ICE設定 そのもです。
    カーブの先端には、クラスターセンターを作成し、別Nullにそれを位置コンストレイントを付けれてやり、自由に動かせるようにします。



    今度はシェーダーです。
    それっぽいものをDarkTreeシェーダーで用意してみました。 <なんとなくゴム/プラスチックでザラついた質感と広い範囲の光沢です。>



     次はパーティクルです。 ・・が、その前に、Emitte=発生部分の構築について。
    カーブの先端に付け、その先端に位置する円盤ポリゴンからパーティクルを発生させるのですが・・・、
    この円盤ポリゴンの方向は、カーブの押し出しから導かれた方向を向くようにし、その法線方向で発生させる、ということを考えておきます。
    これも何かスクリプトで考えると難しいかもしれませんが、そう、ICEです。しかもホースを作ったやつです。



     つまり、こうです。 円盤ポリゴンをカーブに沿って移動させるのですが、カーブの先端が 値1 の少し前の位置にとどめておけば良いと。
    たったこれだけです。ICEって便利で処理が速いし、ぜひぜひICEを色んなところで応用しましょう。



     さて、記事書いている間にSoftimageのバージョンが変化し、画面も少し変化しました。
    パーティクルを発生させる標準的な接続方法はこのようになります。
    SimulationRootという大きなノード以下に EmitやForceやSimulateParticlesが置かれています。
    今回のこの設定では、Speedにばらつき、フォースに重力を、放出方向にランダムを設定しています。



     動きに満足したらその動きをキャッシュ化し、アニメーションが即再生するようにします。
    2つ方法があります。
    ・パーティクルの動きをキャッシュ化して、emPolygonizer はその場生成でも高速なのてそのままレンダリングしてしまうか、
    ・emPolygonizer 自身のキャッシュ化機能を利用して即再生し、パーティクルの生成は無効にしておくか、
    です。

    以下はパーティクルをキャッシュ化した方法です。
    Writeタブにて書き込み、それを選択したPointcloudに読み込ませると
    AnimationMixer上にClipとして登録されます。



     さて肝心の emPolygonizer ですが、
    ポリゴン化するのに使う主な値は Parameter項目の ISOlevel と Level Of Detail の2つです。
    パーティクル同士の距離と細かさで生成されるポリゴンがくっ付くので、ここの値で表現はかなり変わります。




     emPolygonizer のキャッシュ機能を使う方法は、
    Caching タブ内で、最初に書き出ししておいて、次にそれを読み込むようにします。



     お次はコンポジットです。
    またまた FXTreeを使用します。Softimageユーザーはぜひ試しに使ってみてください。きっと目から鱗ですよ。
    残念ながら、FXTreeで利用できるモーションベクターのブラープラグインを持ってないので、
    かなり多くのプレーム数分レンダリングしておいて、Retiming処理をしてぶれているように見せます。



     という訳で、コンポジットの全体としては、このくらいになりました。
    勝手に地面の影書いたり、カラコレ、追加の色など、この作業は本当に楽しいのですが、あっという間の5分くらい。。。



     動かすと、こんなんでした。もっと細かい飛び散りと、キラキラが欲しいところです。


     おまけで、キャラと遊ぶとこんなところ???・・・



ICEパーティクル

 流れる水の透かし
     ちょっとした思い付きで・・・、
    昔の某劇場版アニメの演出で、流れる水の向こう側に写る顔が、すっごく歪んで愉快な映像だったのを思い出した。
    それは当然2Dのセルアニメなのですが、同じような映像がCGでも再現するのか試してみたくなったのです。

     まー、ずばりこんなようなシーンをこしらえます。
    キャラクターが間に挟まるような感じにしておいて、ICEのパーティクルを設定します。
     <背景は、去年大阪に行った時に地下通路の壁をデジカメで撮ったものを、ライオンはヨーロッパからのを加工したものです。>



     おニューなICEパーティクルの標準接続方法は、SimulationRoot というノードが設定されます。(従来通りの接続も稼動します。)
    パーティクルの寿命を 3 として、その寿命が来たら削除します。
    何かに当たって跳ね返るのを想定した場合は Bounce off Surface が便利です。(ここでは結局使わなかった・・)



    emPolygonizer で水を作成、水じぶきとか別エフェクトが欲しいところです。
    下半分は使用しなかったのですが、ここまで用意はしてたものです。背景との組み合わせ、おもしろいでしょ。



     レンダリングした素材を使用して組み合わせます。
    今回は、出来上がる ”素材” を見せたかったので、エフェクトとかのせてない状態として見てみてください。


     
    もっと ブサイク になるかと思った♪



ICEパーティクル
 
 流体マークの飛び散り
     次に紹介するのは ”特定の形の流体的なかたまりが流れ落ち始めて、地面に衝突して水っぽく飛び散る” っというのを作成してみます。
    これも他のエフェクトとか入れず、emPolygonizer だけで作れた画像をお見せします。

    まずは、ICEのパーティクルのシュミレーションで 以下のような状態を作ることを考えます。
    • マークの形にくっ付いていて、全体として特定の形を成しているようにする
    • タイムラインが進むに連れて、下から順番に距離に応じて崩壊するアニメーションの設定をする
    • 床を想定したポリゴンの板に当たって跳ね返るコリジョンの設定をする
    また、考察として、
    • バーテックスカラーの設定をパーティクルにして emPolygonizer にその色が反映するようにする
    • 床にレンダリングの反射設定をして 影のような演出にする
    • FXTreeにてカラコレをして色を水っぽくし直す
    • 音を付けてみる

     まずはポリゴンで最初の形を作りバーテックスカラーを設定します。 <XSIっすね>
    そのポリゴンを発生源とするICEパーティクルを作成します。
    2011SAPでの標準接続では SimulationRoot というのが設定されています。
    発生数は 2000 個として、Speed にすると その発生源の形にくっ付いている状態が作成出来ます。
    バーテックスカラーをパーティクルに設定するには、
    GetData で Self.PointPosition で取得して Get Closest Location で ClosestSurfaceに設定し、発生位置を特定し、
    そのLocationの cls.UV_Cluster_AUTO.Vertex_Color.Colors をGetDataで色を拾って Color に接続します。



      次は少し工夫が入ります。参考になると思うので、この設定は覚えておくと良いです。
    レンダリングされないようにレイヤ分けしたポリゴンのグリッドを下に置きます。
    ここからの距離で、まずは順次消える設定をします。 AgeLimit ですね。
    Get Distance to Surface で GetDataしたポリゴングリッドを Surfaceに接続し、そのDistanceを RescaleノードのValueに接続します。
    Rescaleノードは実際の距離を 0~1 までの値変化に変換してくれます。(35.184は一番上までのたまたまの距離)
    Randomize Value by Range ノードを取り出し、Multiply by Scale で Rescale から得た値と組み合わせ、
    もう一回の Multiply by Scale は 1 × になっていて調整用です。
    その値を SetParticleAge で Self.AgeLimit / Seconds を設定して 寿命とします。
     動作を確認するため、一旦 Delete Particle at Age Limit を接続して動きを見てみます。
    下から順次、少しランダムに消えていくはずです。



     次はその第一の寿命に達成したパーティクルから順次次の動作、
    つまり落下する ということが行えるように State番号が変化するようにします。
    そのState番号が変化する条件は、書いた通りその寿命です = トリガーの条件 となります。
     Softimageのバージョンになるべくよらないようにも設定しました。
    StateMachineノードを取り出しておき、そこの最初の Execute State1 に Stateノードを接続します。
    Stateノードの設定は StateID 0 が トリガーとその結果で State1 になるとします。
    その条件;Trigger1 は 実際のパーティクルの寿命が その制限の値を超えた時 と設定すれば良いので、
    Get Particle Age が Get Particle Age Limit よりも  ならば を Trigger1に接続します。
    で、その条件になった時の動作を Spawn on Trigger ノードで設定しますので、State の Execute on Trigger1 に接続します。
    Spawn on Trigger ノードでは State 1 に IDを設定し、色を付け (ここでの紫色が反映されてますね) 解りやすくしておきます。
     すると消えるのでは無く、下から順次色が変化するはずです。



     では、今度は紫色に変わったパーティクルに動きを付けます。
    勝手にバラバラに散るのではなく、少し収束して欲しかったので、目的の場所を設定して その縮尺を小さくして集まるような感じにしました。
    床を想定したポリゴンの下に 少し小さいサイズの別ポリゴングリッドを用意し、それを SetParticleGoal としてジオメトリーに接続しました。
    Move Toward Goal ノードを取り出し、Spawn on Trigger の Execute on Spawn1 に接続します。
    すると 色が変化したら落下し始めます。
     色が変化しつつも 全体も落下する ということ と このあとのコリジョン後の下への動きを設定する為 重力を設定しました。
    AddForce を通じて Gravity Force で 重力を -5 くらいに設定します。



     さて、最後に 床への衝突です。
    Bounce off Surface ノードを取り出し 床を想定したポリゴングリッドをSurface1 に接続します。
    Bounce off Surface では 抜けたりしないように少し 距離のオフセット値 (ここでは 0.406) を入れておくと良いです。
    あとは跳ね返る大きさなどを変えると動きが全く変わって来ます。
     さて、StateID値が変化しても パーテックスカラーが反映されるようにしたかったので、
    クラスターの色を Spawn on Trigger ノードの Colorに接続しました。



     で、ようやく emPolygonizer の話へ。
    pointcloud ノードを選択した状態で emPolygonizer を設定するとポリゴン化します。
    Dataタブ内で VertexColors 項目にて [Recrate] ボタンを押すと、ポリゴンにバーテックスカラーの色が反映されます。
    最初は形に沿った形状にしたいので 緻密性が欲しいのですが、
    そのまま再生し続けると今度はパーティクルが散って距離が開くので、単にパーティクルになってしまいます。
    そこで、Isolevel と Level of Detal にアニメーションを付けて 序々に大雑把になるようにアニメーションを設定します。



     全部を再生して見ながら調整というのは処理時間的に無理なので、
    パーティクルだけの表示にしてアニメーションを再生させ、
    プレビューしたいフレームで emPolygonizer2 ポリゴンを表示 にすると、そのフレームでの形状が描画されます。
    床に反射の設定をしたり、背景にHDR画像を使用してみたりしてみました。



     さて、レンダリング作業に入りますが、
    パーティクルは生成しているは、ポリゴンが生成しているは、メンタルレイは動くはでもメモリーも処理時間もかかります。
    そこでキャッシュを使用します。ICEパーティクルのキャッシュをするとどうやらバーテックスカラーを失うようでしたので
    emPolygonizer のキャッシュを使います。
     Caching タブ にて最初は ◎Simulate and Write を ON にして全フレームシーン再生をします。
    レンダリングする時は、◎ ReadOnly にして行いますが、キャッシュの書き出し先がシーン名付きになっているのがデフォルトなので、
    保存したシーン名を変えた時はキャッシュファイル先のディレクトリーに注意してください。



     カメラは、手で持ったカメラが現象を追って撮ったような・・少し変に。
    さてレンダリングし終わったら、FXTreeにて ブラーやボケやカラコレをしました。



     音を付けてムービー化します。 か、雷怖い・・・






     という訳で、使い方の手始め的に紹介してみました。液体みたいなものを簡単に作成できる例になっていますでしょうか。
    emPolygonizer の操作が難しい訳ではなく、その素材作りの方に時間と工夫が要るといった感じです。
    なので、今後紹介予定の Lagoa と組み合わせて使うと、より流体らしい動きをポリゴン化出来ると思います。
    今回は emPolygonizer2 を使用しましたが、メモリー管理とか処理部分での改善がなされているバージョンだそうです。
     ( と将来バージョンの提供もしてくれると思われます。)
    現在は 2011SAPにて V1.7相当の Polygonizer が付属していますので、操作は似たようになっていると思われます。




     という訳で、次回は Lagoa かな?
      乞う、ご期待!!