_581x100.png CGsyomei_583x102.gif 訪問者 無料カウンター ページビュー 無料カウンター

2012年05月29日

thinkingParticlesエフェクト実践テクニックセミナー フォローアップ tP PinArt example編

 もう大体の人は知ってると思いますが、去る5月2日にTMSさん主催でインディーゾーンさんと合同のエフェクトセミナーを実施しました。 https://www.tmsmedia.co.jp/index.php?name=News&file=article&sid=260
普通いの一番にここでセミナーの開催を告知するのが当ブログの役目なんですが^^;色々忙しくて怠慢してました。

 さてお陰様で好評のうちに終了した本セミナーですが、一回聞いただけでは分からないという人やもっと詳しく聞いてみたいという人、後はセミナーに参加できなかったという人に向けてセミナーの内容をフォローアップして行きたいと思います。とは言え当日喋った内容とあんまり変わらないんですが^^;

 今回はまずtP PinArt exampleから始めたいと思います。ムービーは以下の通りですね。あとサンプルシーンもDLできるようにしたので参加できなかった人はそちらから落としてみてください。





https://www.dropbox.com/sh/v4f6eausqigcvaf/f3nQSHZnBz/PinArt.zip
 

 今回のこのピンアートのアニメーションは、ムービーの左下にあるように、グレースケールのテクスチャの輝度情報を利用してピンを移動させるという仕組みになっています。テクスチャが白ければピンが押し出され、黒ければピンは引っ込みます。

 それではダイナミクスセット内の設定を説明します。今回は色々削りに削ったところたった2つのダイナミクスセットだけになってしまいましたが、たったこれだけの設定でこういう複雑なアニメーションができるのがTPの魅力だと思います。

Pinart_01.jpg

 さて最初のBornPrtAndStoreDataダイナミクスですが、ここではNodeヘルパーでピックアップしたPinGuideオブジェクト上にSurfacePosヘルパーを用いてバーテックス上にPositionBornでパーティクルを発生させて、Positionノードで位置を確定してあげます。そこにGeomInstanceでPinGeoのモデルをアサインしてあげ、Sizeノードでサイズを調整してあげます。

Pinart_02.jpg

 そしてここで出てきたMemoryInitialPosとMemorySurfaceUVWの2つのMEmoryオペレーターですが、これが今回のピンアートアニメーションの肝の部分になってきます。今回白黒の動画テクスチャでピンの動きを制御してるんですが、その際に、ピンがテクスチャが真っ黒の場合常に元の位置に戻るようにしたいんです。単純に等倍に逆方向に動くようにするとダメです。例えば白黒のテクスチャの完全に白の値でプラスX方向に1に、完全に黒の値でー1移動するように設定すればいいように思いますよね?でもこれだと、最初のフレームで白でX方向に1移動して次のフレームで黒でー1に移動すれば元に戻るんですが、最初グレーで0.5移動して次のフレームでテクスチャが真っ黒でー1移動したらピンが土台から突き抜けることになるんですね。なので、テクスチャが真っ黒の場合は「最初の位置」に戻るという条件が必要なんですね。

 またテクスチャを使ってコントロールするには後で説明するTexmapcolorというヘルパーを使うんですが、ピンがGuideオブジェクト上のUV座標のどの位置にあるのかの情報が必要になってきます。以下の図を見てもらうとわかりやすいと思います。このピンの位置はUV上ではどこでテクスチャは何色なんだという情報が必要なんですね。MemorySurfaceUVWではそういった情報を記憶しています。

Pinart_03.jpg

 Memoryオペレーターを作ったら、ロールアウト内で右クリックをして各要素を出します。PositionはPositionのように。で、今回はUV情報が必要なんですが、この中にはUVWはないんですね。でもVectorで代用できます。

Pinart_04.jpg

 では次のPositionダイナミクスの流れを説明します。ここは大きく2つの流れになっています。まず上の流れですが、MemoryInitialPosで記憶したPinの初期位置を常にPositionノードに送り込んでいます。間に挟まっているPoint3ヘルパーは後でX軸方向のみピンを移動させるために使います。ここでテクスチャに変化がない時は常にピンは最初の位置をキープすることになります。

 そして下の流れですが、Texmapcolorで各ピンの位置のテクスチャの色を読み取ります。ここでさっきのMemoryDurfaceUVWの情報が必要になります。Texmapcolorは0から1の範囲でカラー値をアウトプットします。これにMovingValueのFroatノードで3.5センチ分の移動量を乗算してあげて移動量を調節します。最後にPoint3ヘルパーのXvalueのインプットにつなげてあげてこの値を足してあげることでX軸のみの移動量をコントロールします。

Pinart_05.jpg

 ちなみにテクスチャが常に白の部分は常にピンの移動量が加算されていくように思えますが、tPは毎フレームごとダイナミクスツリーを上から下に計算しているので、常に最初にMemoryInitialPosによるポジションのリセットがかかった上でX軸移動することになります。なのでピンは最大でも3.5cmの移動量に収まることになります。

 ここで「なぜMemoryInitialPosは次のフレームでピンが移動した後のポジションを初期状態として記憶しないのか?」という疑問が出てきます。ダイナミクスツリーが上から下に計算されているのだったら毎フレーム初期位置が異なってきそうに思えます。これはPositionBorn等のパーティクルを発生させるノードから直接つないだ場合は「ワンタイムサンプル」と言ってパーティクルが発生した直後の一度しかサンプリングしないからなんですね。Particle Ageコンディションノードを繋げてパーティクルが発生した時だけノードをオンにするのと同じ感じです。従ってMemoryInitialPosはパーティクルが発生した最初の状態だけを記憶していることになります。

Pinart_06.jpg

 以上がPinArtの説明になります。おそらく最初のうちはMemoryオペレーターを使う局面を理解するのは難しいと思います。でも色々チュートリアルをやっていったりしていると段々こつが分かるようになってきて、実際に自分がオペレーションする際に「普通のやり方だとデータが引っ張れない。これはMemoryオペレーターの出番かな?」という感覚が分かるようになってきます。とりあえず「このパーティクルのデータ使いたいんだけど。」と思ったら即Memoryオペレーターの出番と思ってもいいかもです。まずはチュートリアル等で場数を踏んで実戦に備えたいものですね。
posted by けゑ at 04:23| Comment(0) | TrackBack(0) | Thinking Particles
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/56124067

この記事へのトラックバック