<< TOP



リアルタイムシェーダーの ICE Particle と そのループの作成
(RealtimeShader ICE Particle & makeing it loop)
          

 プロローグ
      今回は、Softimage 2011インストール時に入っているサンプルシーンに手を加え、
    ICEで作成されるParticleをリアルタイムシェーダーで表示している仕組みをひも解きます。
     また、そのパーティクルをMixer上のClipとして扱えるキャッシュにして、永遠に湧き上がるループ映像を作成してみましょう。
    キャッシュ化されてループするリアルタイムのパーティクルは、そのまま色々な用途に使えそうです。

     ※ 上記キャラクターもRT-ToonShaderで表示させていますので、このシーンはリアルタイムに3D表示しています。

    1)  ICE Particle の作成
     > ICE Tree の設定
     > 色変化の設定
     > 追加的な値の設定
     > フォースの設定
    2)  リアルタイムシェーダーの作成
     > GLSL Shader ,Uniform の設定
    3)  RTShaderパーティクルのループの作成
     > キャッシュマネージャー
    4)  RTShaderICE Particle
     > シーンデータ
      パソコンのスペック WindowsXP SP3、 Intel Core2Duo 3G、 RAM; 3G、NVIDIA Quadro FX1700





ICE Particle の作成
 ICE Tree の設定
     まずは、ICEを使ってパーティクルを作成しましょう。
    また、後で色々と調整がきくようにも作っているので、ここでの手順でパーティクルの作り方が理解できると、
    色々な種類のパーティクルを自分で作っていけるようになると思います。
     それでは スタート!!

     ポリゴンの円盤を取り出し、少し湾曲させておきます。
    ここが少しポイントで、この法線方向でパーティクルを発生 させておけば、
    円盤の形状を変えることによってもパーティクルの発生アニメーションが変更出来るようになります。面白いでしょ。



     円盤を選択し、ICE>作成>選択からパーティクルの放出 を実行させれば、もうパーティクルが出来ます。 超簡単



     PointCloudノードを選択して、Alt+9 キー で ICE Tree 画面を表示させると、もうここまで作成してくれています。
    Emit form Surface ノードをダブルクリックして設定画面を表示させると、発生方向と速度の項目に 法線を使うになっています。
    まずは、Rate を 約1.7 、 Speed を 0.6 位にして 量と速度を減らします。



     このままでは、ずーっとパーティクルを表示してしまうので、寿命を設定します。
    ICEでは、2つの設定をします。 
    パーティクルの生まれてからの時間を制限と、その時間が来たら消す という設定をします。

     検索機能を使うと簡単に目的のノードを探せますが、
    Particlesのタスクにし、Setters > SetParticleAgeLimit と DeletingParticles>DeleteParticles at Age Limit を取り出します。
     赤いノードは設定がうまくいってない時の表示です。
    ここでは、AgeLimitが設定されていない状態なので、そのAgeLimitの時に動作するDeleteが出来ない と表示しています。



     SetParticleAgeLimit を Emit form Surface の ExecuteOnEmit1 に接続します。AgeのLimitを 20 とします。
    赤色が緑色になった DeleteParticles at Age Limit  ICETree の Port2 に接続します。
     ※ SimulateParticlesノード はいつも ICETree の 一番最後の Port に接続します。



     これで、ある時間範囲内で発生して消えるという、もっとも基本的なパーティクルの設定ができました。
     



ICE Particle の作成
 色変化の設定
     発生してから消えるまでの色の変化を付けます。
    Modifiers > Modify Particle Color ノードを使用します。ICETree の Port3 につなぎます。
     ソースパラメーター を AgePercentage にして 寿命全体のパーセンテージに対して色が変化する にします。
    左側が発生した時の色なので 白色でアルファー値 1 にし、序々に 黄色から赤色 そして 右側を 黒色の 0,0,0,0 にします。



     リアルタイムのシェーダーに接続しても、ここの色設定で変化するので、簡単で解り易いですね。
    これでここはおしまいなんです。



ICE Particle の作成
 追加的な値の設定
     ここからは、幾つか値の設定を追加させていきます。
    まずは、パーティクル毎に ランダムな大きさ、回転値(方向)を設定させます。
     ここは コンパウンドを用意してしまいました。> AssignRandomIDSizeOrientation_xsicompound.zip
    中身は パーティクル毎の設定を PoinCloud の ID値 を得ることで設定出来、そこにランダムな値を設定しています。
    それを ICETree の Port4 につなぎます。



    上記 回転値(方向)を設定するのに shaderdata というパラメーター値を設定しています。
    ここにはベクトル値になっているのですが、そこに追加的な値を差し込めるようにして 大きさを任意に変えられるようにしています。
    GetDataから この shaderdata を再度取得し、
    3DVector to Scalar と その逆の Scalar to 3DVector の間に 数値の追加できる Add ノードを差込んでいます。
    Addには 0.321 という値が入っています。
    SetData で shaderdata に設定して、それを ICETree の Port5 につないでいます。
     (後に出て来るリアルタイムシェーダーのGLSL_Uniformにて大きさ設定が出来るようにしています。)

     お次の rot もコンパウンドを用意しました。> rot_xsicompound.zip
    これもまた 位置と回転値から 回転値(方向)を追加設定していますが、そのままお使いください。
    それを SetData で Orientation に設定し、ICETree の Port6 につないでいます。
     


     次は フォースに移ります。



ICE Particle の作成
 フォースの設定
     風と乱流をフォースとして追加します。
    フォース>風 を実行し、wind が出来たら、ドラッグ&ドロップ で ICETree 上に持って来て、
    風速を 1.8 , サイズを使用 のチェックを外します。Particleタスクにある Forces > Add Forces ノードを取り出して Force1に接続し、
    それを ICETree の Port7 につなぎます。 複数のフォースを接続する時も、必ずこの Add Forces を経由してください。



    フォース>乱流 を実行し、turbuleance が出来たら、ドラッグ&ドロップ で ICETree 上に持って来て、
    振幅を 0.602 減衰 を 1.73 周波数 10 時間周波数 を 44.604 とします。
    Add Forces ノードの Force2に接続します。これで両方のフォースが反映されます。



    お次は、RTShader です。


リアルタイムシェーダーの作成
 GLSL_Shader、GLSL_Uniform の設定
     Explorerで PoinCloud を選択し、マテリアル>Phong と取りあえず独自のマテリアルを設定しておきます。
    7キー で RenderTree を表示させ、リアルタイム>OpenGLの項目から、GLSL_Shader を取り出します。
    それを Material の RealTime に接続します。



     GLSL_Shader ノード をダブルクリックすると、プログラム・タブ で 2つの空欄がある設定画面になります。
    上部 頂点プログラム に このテキストの内容を 記述します > VertexProgram.txt
    下部 フラグメントプログラム に このテキストの内容を記述します > FragmentProgram.txt
     ここは、テキスチャが縦横4分割しているものを タイレリングして取り出せるようにUV値を取得し、
    テキスチャーの色情報をパーティクル毎に追加設定しています。
    つまり、テキスチャーの模様をICEで設定した色情報と合わせて表示するのに使われている部分です。



     次に GLSL_Shader ノード の 描画・タブ で 
    ブレンド使用にチェックを入れ、
    ブレンドソース を GL_ONE_MINUS_DST_COLOR
    ブレンドデスティネーション を GL_DST_ALPHA に設定します。
    そして、下の パーティクルクラウドの使用 にチェックを入れます。



     次に GLSL_Shader ノード の アドバンス・タブ で 
    Color  color0.rgba
    shaderdata  color1.rgb
    に設定します。これでICEで設定しているパラメータにデータが行き渡るようになります。



     今度はテキスチャーを設定します。
    リアルタイム>OpenGLの項目から、OGL Texture を取り出し、GLSL_Shader 2個目の previous に接続します。



     OGL Texture ノード をダブルクリックして、ユニフォーム名 に spriteTexture と記述します。
    テキスチャーとして これ fig6.zip を貼ります。
    テキスチャー空間は PoinCloud なので設定出来ないです、多分、



     最後に 1つ空けていた previous に大きさの設定をここからも行えるようにしているノードを接続します。
    リアルタイム>OpenGLの項目から、GLSL_Uniform を取り出し、GLSL_Shader 1個目の previous に接続します。


     
    GLSL_Uniform ノード をダブルクリックして、変数 に sizeScalar と記述します。
    下の浮動少数 に 1 を入れておきます。



     さあ、全ての準備が整いました!!!
    SoftimageのView画面を OpenGLに切り替えて、パーティクスを生成してみてください。うまくできましたら、こんな感じになります。
     グルグルとカメラを回しながらパーティクルの動きが見れるので、色や動きを調整していける便利さが実感できるはずです。





RTShaderパーティクルのループの作成
 キャッシュマネージャー
     ある程度の長さを持ったパーティクルのアニメーションをループするような映像を作成したい場合、
    パーティクルの発生した動きをキャッシュという形で書き出し、それをアニメーションミキサー上で組み合わせることで
    簡単に作成することが出来ます。
    つまり動きを書き出すという機能において、プロットと同じなのですが、
    Softimage2011 では キャッシュマネージャーというものが用意されています。

     では、まずは 例えば 1000フレームで発生して消えるまでのアニメーションになるように 発生レートにアニメーションを設定します。



     シーンが出来たら、必ず保存しておいてください。キャッシュするとICEの設定は消されます。
    アニメートモジュールの ルーツ>プロット>Cache Manager... を起動させます。



     Simulation・タブ 内の シミュレーション・タブ は自動的に設定されていて、そのままで良いはずです。



     Simulation・タブ 内の ファイルのキャッシュ・タブ は設定が重要です。
    オブジェクトの名前とバージョン名が書き出されるファイル名になるのですが、最後の_[frame] はこのまま残しておいてください。
    フレーム数が代入されて、フレーム数分のキャッシュファイルが出来るのに必要です。



     つまり、下図のような記述にしておきます。
    現在のフレームを一番最初の1にして、繰り返し再生になっていない事を確認して、
    再生へキャッシュのチェックを入れて、最後のフレームまで1回だけ再生させます。



     再生終わったら、[ミキサにキャッシュを保存] ボタンを押します。
    ミキサに格納設定画面が表示されるので、ミキサにクリップを追加 にチェックを入れて [OK] を押します。
    すると、シミュレーション(ICE)があるが削除して良いか というので [はい] を押します。



     すると、アニメーションミキサー上の キャッシュファイル用のトラックに、Clipが設定されていて、
    フレームを前後するとキャッシュされたパーティクルが再生されます。



     次に、もう一つ、クリップを用意します。その重ね合わさった部分がループ映像になるという仕組みです。
    PointCloudを選択して、Ctrl+d キーで複製します。
    自動的に下にClipが追加されます。が、パーティクルが表示されない時があるので、
    その時はClipを一旦削除して、Ctrl+z で元に戻すと再生されるようです。(???)



     ちょうど半分のフレームの500フレームに2個目のClipの先頭を合わせ、
    501から1000フレームのリピート再生をすると うまくつながって、
    下のムービーのように、ずーーーと パーティクルが生まれ続ける映像になります。





RTShaderICE Particle
 シーンデータ
     という訳で、途中で解んなくなってしまったりするので、シーンデータも提供します。
    尚、ICEのパーティクル機能自体は SoftimageV7.5 から既に実装されている機能なので
    今回V7.5用のシーンも作成してみました。(少し色がピンク色なのは気のせいか??)




     という訳で、あとは各自の環境に合わせてカスタマイズすれば、色々と便利なのではと・・・

    また 次のネタを、乞う、ご期待!!