CG・コンテンツ制作
  1. CG・コンテンツ制作トップ
  2. DAIKIN CG Channel
  3. UsersNotes
  4. シェーダ
  5. リアルタイムシェーダーの ICE Particle とそのループの作成
SUITE USERS NOTES
リアルタイムシェーダーの ICE Particle と
そのループの作成

RealtimeShader ICE Particle & makeing it loop
RT-ICE_P_00
プロローグ
今回は、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

ritaro_ml



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

ポリゴンの円盤を取り出し、少し湾曲させておきます。
ここが少しポイントで、この法線方向でパーティクルを発生させておけば、
円盤の形状を変えることによってもパーティクルの発生アニメーションが変更出来るようになります。面白いでしょ。
RT-ICE_P_01
円盤を選択し、ICE>作成 > 選択からパーティクルの放出を実行させれば、もうパーティクルが出来ます。超簡単
RT-ICE_P_02
PointCloudノードを選択して、Alt+9キーICE Tree 画面を表示させると、もうここまで作成してくれています。
Emit form Surface ノードをダブルクリックして設定画面を表示させると、発生方向と速度の項目に法線を使うになっています。
まずは、Rateを約1.7Speed0.6位にして量と速度を減らします。
RT-ICE_P_03
このままでは、ずーっとパーティクルを表示してしまうので、寿命を設定します。
ICEでは、2つの設定をします。
パーティクルの生まれてからの時間を制限と、その時間が来たら消すという設定をします。

検索機能を使うと簡単に目的のノードを探せますが、
Particlesのタスクにし、Setters > SetParticleAgeLimitとDeletingParticles > DeleteParticles at Age Limit を取り出します。
赤いノードは設定がうまくいってない時の表示です。
ここでは、AgeLimitが設定されていない状態なので、そのAgeLimitの時に動作するDeleteが出来ないと表示しています。
RT-ICE_P_04
SetParticleAgeLimitEmit form Surface のExecuteOnEmit1に接続します。AgeのLimitを20とします。
赤色が緑色になったDeleteParticles at Age Limit ICETreeのPort2に接続します。
※SimulateParticlesノードはいつもICETreeの一番最後のPortに接続します。
RT-ICE_P_05
これで、ある時間範囲内で発生して消えるという、もっとも基本的なパーティクルの設定ができました。



色変化の設定
発生してから消えるまでの色の変化を付けます。
Modifiers > Modify Particle Colorノードを使用します。ICETreeのPort3につなぎます。
ソースパラメーターをAgePercentageにして寿命全体のパーセンテージに対して色が変化するにします。
左側が発生した時の色なので白色でアルファー値1にし、序々に黄色から赤色そして右側を黒色の0,0,0,0にします。
RT-ICE_P_06
リアルタイムのシェーダーに接続しても、ここの色設定で変化するので、簡単で解り易いですね。
これでここはおしまいなんです。



追加的な値の設定
ここからは、幾つか値の設定を追加させていきます。
まずは、パーティクル毎にランダムな大きさ、回転値(方向)を設定させます。
ここはコンパウンドを用意してしまいました。 > AssignRandomIDSizeOrientation_xsicompound.zip
中身はパーティクル毎の設定をPoinCloudID値を得ることで設定出来、そこにランダムな値を設定しています。
それをICETreeのPort4につなぎます。
RT-ICE_P_07
上記回転値(方向)を設定するのに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につないでいます。
RT-ICE_P_08
次はフォースに移ります。



フォースの設定
風と乱流をフォースとして追加します。
フォース > 風を実行し、windが出来たら、ドラッグ&ドロップでICETree 上に持って来て、
風速を1.8 ,サイズを使用 のチェックを外します。ParticleタスクにあるForces >  Add Forces ノードを取り出してForce1に接続し、
それをICETreeのPort7につなぎます。複数のフォースを接続する時も、必ずこのAdd Forces を経由してください。
09
フォース > 乱流を実行し、turbuleanceが出来たら、ドラッグ&ドロップでICETree 上に持って来て、
振幅を0.602 減衰を1.73周波数10時間周波数を44.604とします。
Add Forces ノードのForce2に接続します。これで両方のフォースが反映されます。
RT-ICE_P_10
お次は、RTShaderです。



2)リアルタイムシェーダーの作成
GLSL_Shader、GLSL_Uniform の設定
ExplorerでPoinCloudを選択し、マテリアル > Phongと取りあえず独自のマテリアルを設定しておきます。
7キーで RenderTreeを表示させ、リアルタイム > OpenGLの項目から、GLSL_Shader を取り出します。
それを Material の RealTimeに接続します。
RT-ICE_P_11
GLSL_Shader ノードをダブルクリックすると、プログラム・タブ2つの空欄がある設定画面になります。
上部頂点プログラムにこのテキストの内容を記述します > VertexProgram.txt
下部フラグメントプログラムにこのテキストの内容を記述します > FragmentProgram.txt
ここは、テキスチャが縦横4分割しているものをタイレリングして取り出せるようにUV値を取得し、
テキスチャーの色情報をパーティクル毎に追加設定しています。
つまり、テキスチャーの模様をICEで設定した色情報と合わせて表示するのに使われている部分です。
RT-ICE_P_12
次にGLSL_Shader ノードの描画・タブ
ブレンド使用にチェックを入れ、
ブレンドソースをGL_ONE_MINUS_DST_COLOR
ブレンドデスティネーションをGL_DST_ALPHAに設定します。
そして、下のパーティクルクラウドの使用にチェックを入れます。
RT-ICE_P_13
次にGLSL_Shader ノードのアドバンス・タブ
Color color0.rgba
shaderdata color1.rgb
に設定します。これでICEで設定しているパラメータにデータが行き渡るようになります。
RT-ICE_P_14
今度はテキスチャーを設定します。
リアルタイム > OpenGLの項目から、OGL Texture を取り出し、GLSL_Shader2個目のprevious に接続します。
RT-ICE_P_15
OGL Texture ノードをダブルクリックして、ユニフォーム名にspriteTextureと記述します。
テキスチャーとしてこれfig6.zipを貼ります。
テキスチャー空間はPoinCloudなので設定出来ないです、多分、
RT-ICE_P_16
最後に1つ空けていたprevious に大きさの設定をここからも行えるようにしているノードを接続します。
リアルタイム > OpenGLの項目から、GLSL_Uniform を取り出し、GLSL_Shader1個目のprevious に接続します。
RT-ICE_P_17
GLSL_Uniform ノードをダブルクリックして、変数にsizeScalarと記述します。
下の浮動少数に1を入れておきます。
RT-ICE_P_18
さあ、全ての準備が整いました!!!
SoftimageのView画面をOpenGLに切り替えて、パーティクスを生成してみてください。うまくできましたら、こんな感じになります。
グルグルとカメラを回しながらパーティクルの動きが見れるので、色や動きを調整していける便利さが実感できるはずです。
RT-ICE_P_19



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

では、まずは例えば1000フレームで発生して消えるまでのアニメーションになるように発生レートにアニメーションを設定します。
RT-ICE_P_20
シーンが出来たら、必ず保存しておいてください。キャッシュするとICEの設定は消されます。
アニメートモジュールのルーツ > プロット > Cache Manager... を起動させます。
RT-ICE_P_21
Simulation・タブ内のシミュレーション・タブは自動的に設定されていて、そのままで良いはずです。
RT-ICE_P_22
Simulation・タブ内のファイルのキャッシュ・タブは設定が重要です。
オブジェクトの名前とバージョン名が書き出されるファイル名になるのですが、最後の_[frame] はこのまま残しておいてください。
フレーム数が代入されて、フレーム数分のキャッシュファイルが出来るのに必要です。
RT-ICE_P_23
つまり、下図のような記述にしておきます。
現在のフレームを一番最初の1にして、繰り返し再生になっていない事を確認して、
再生へキャッシュのチェックを入れて、最後のフレームまで1回だけ再生させます。
RT-ICE_P_24
再生終わったら、[ミキサにキャッシュを保存]ボタンを押します。
ミキサに格納設定画面が表示されるので、ミキサにクリップを追加にチェックを入れて[OK]を押します。
すると、シミュレーション(ICE)があるが削除して良いかというので[はい]を押します。
RT-ICE_P_25
すると、アニメーションミキサー上のキャッシュファイル用のトラックに、Clipが設定されていて、
フレームを前後するとキャッシュされたパーティクルが再生されます。
RT-ICE_P_26
次に、もう一つ、クリップを用意します。その重ね合わさった部分がループ映像になるという仕組みです。
PointCloudを選択して、Ctrl+dキーで複製します。
自動的に下にClipが追加されます。が、パーティクルが表示されない時があるので、
その時はClipを一旦削除して、Ctrl+zで元に戻すと再生されるようです。(???)
RT-ICE_P_27
ちょうど半分のフレームの500フレームに2個目のClipの先頭を合わせ、
501から1000フレームのリピート再生をするとうまくつながって、
下のムービーのように、ずーーーとパーティクルが生まれ続ける映像になります。




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

Softimage V7.5 とSoftimage2011用シーンデータ >> RT-ICE_Particle.zip

という訳で、あとは各自の環境に合わせてカスタマイズすれば、色々と便利なのではと・・・
また次のネタを、乞う、ご期待!!

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

Daikin CG News お申し込み

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

Twitter

ページの先頭へ