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

2012年05月20日

(TP Basic) Iteratorの基本

今回はIteratorオペレーターの使い方について説明します。

Iteratorとは何かというと、一言で言えば、文字通りある操作を「繰り返す」時に使用します。とは言ってもあまりピンと来ないと思うので簡単な例で説明してみます。例えば以下の画像のように、パーティクルシェイプを立方体状に積み上げたい時はどうすればいいか考えてみます。

IteratorXYZ.jpg

追記:サンプルファイル公開しました。下記のリンクからDLしてください。

https://www.dropbox.com/sh/v4f6eausqigcvaf/JZs-GBmkRC/IteratorBasic_v001.zip
 まずはIteratorの機能についての説明を以下の画像でまとめてみました。まずはこういうものだということを理解しておきましょう。

IteratorSpec.jpg

 さてそれでは具体的なセッティングに入りましょう。まずは横一列にシェイプを並べてみます。

 IteratorX.jpg

TPのセッティングは以下の通りです。

IteratorXSetting.jpg

 では順を追って説明してみましょう。このセッティングでやっていることは、PositionBornに4回Onの命令を送り込んで、その度に新しいパーティクルのポジションを指定してあげてパーティクルを発生させているという感じです。

 最初のTimeIntervalは最初の0フレのみIteratorをオンにする為のものです。CountはIntegerヘルパーでIteratorのCountに数字を送り込んでいます。今回は4です。IteratorのNumberアウトプットからは0,1,2,3の数字がアウトプットされることになります。DistanceValueはパーティクル間の間隔の値です。次に出てくるFloatヘルパーが何をしているかというと、これはValueでIteratorのNumberの数を受け取り、Value1でDistanceValueの値を受け取ってその値同士を掛け算してるんですね。Floatヘルパーのみでも値の加算と乗算が可能なのは覚えておいてください。その次のPoint3ヘルパーがNumberとDistanceValueの計算結果をXの値として受け取ってポジション用のベクトルを計算します。今回はNumberは0,1,2,3をアウトプットするのでそれぞれDistanceValueの2をかけて0、2、4、6がXの値に加算されることになります。Y,Zの値は常に0で変わりません。

 そしてPositionBornのPositionインプットがそれらの値を受け取ってパーティクルのポジションを確定し、IteratorのOnアウトプットからOnの命令を受けてパーティクルが発生します。Iteratorはカウントする度にOnの命令をアウトプットするので今回は4回Onがアウトプットされています。Memoryのデバッグ結果を参照してください。またここでPositionBornがPistolshotでPercallにチェックを入れるのを忘れないでください。(これに関してはあとで説明します。)パーティクルが発生したらGeomInstanceとShapeMaterialでシェイプとマテリアルをアサインして完了です。パーティクルのサイズは現状オブジェクトのオリジナルのサイズを引き継いでいます。DistanceValueが2に対して縦横高さ共に1.9にすることによって各シェイプ間にややギャップが空くようにしています。

 さてここでちょっとPositionBornのPistolshotについて触れておこうと思います。これはインプットのOnにオンの命令が来た時にパーティクルを発生させるものなんですが、通常の場合は一度オンの命令が来た場合は、一度オフの命令が来ない限り次のパーティクルが発生しません。今回のようにオンの命令が4回続けてきていても一度しかパーティクルを出しません。でもPer Callにチェックが入っていると、オンの命令が来る度にパーティクルを発生するようになります。Per Callのチェックの意味をこの際理解しておきましょう。

 では次に進みます。今度はXY面に対してシェイプを並べるようにします。

IteratorXY.jpg

セッティングは以下の通りです。

IteratorXYSetting.jpg

 設定はほぼ同じで、Yのポジションを決定する為にもう一つのIteratorがくっついているだけです。最初のIterratorが次のIteratorをOnにして最後のIteratorがPositionBornをOnにしています。(何故こうしないといけないか現状上手く説明できないのでとりあえずはこういうものだと覚えていてください。わかる方はぜひご一報を^^;)そしてPoint3ヘルパーでXの値とYの値が加算されて最終的なパーティクルのポジションとなります。Xの値は0,2,4,6と、Yの値も0,2,4,6と4つ増えるので4×4で16通りのポジションが得られるということです。

 これと同じ要領でZ軸に対してもパーティクルを生成してあげます。

IteratorXYZ.jpg

セッティングは以下の通りです。

IteratorXYZSetting.jpg

これも先ほどの流れと同様です。Z軸分のパーティクルを生成するIteratorを作りZのポジションの値を同様に加えてあげるだけです。



 以上がIteratorの基本的な説明になります。今後はさらに突っ込んで解説して行こうと思います。

posted by けゑ at 07:20| Comment(0) | TrackBack(0) | Thinking Particles
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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

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