
追記:サンプルファイル公開しました。下記のリンクからDLしてください。
https://www.dropbox.com/sh/v4f6eausqigcvaf/FxReT2i4dM/IteratorStudy_v004.zip
前回の解説で、IteratorにはNumberNormalizeというアウトプットがあって、カウントされた数字を0〜1の範囲で出力するということを説明しました。

今回はこれを使いつつSurfacePosと併用することでオブジェクトのサーフェイス上に規則正しくパーティクルシェイプを発生させて行きたいと思います。ちなみにSurfacePos単体でもオブジェクトのバーテックス上にパーティクルを並べることができるので態々そうしなくてもと思うかもですが、この方法だとパーティクルの位置が固定されてしまうので密度を変化させることができません。なので今回の方法は知っておくと何かと便利だと思います。
さてそれでは早速今回の作例のセッティングの説明に入りたいと思います。以下の画像を見てください。

まずはティーポットの方です。今回はオブジェクトのUV座標上にパーティクルを配置する方法を取ります。その為にはオーバーラップしていない適切なUVが必要なのですが、ティーポットはデフォルトでUVが色々被っているのでフラッテンマッピングを使って適当にばらけさせます。
次にIteratorのセッティングです。今回はIteratorUにU座標の増加分、IteraotrVにV座標の増加分を設定するのですが、密度のコントロールをしやすくする為Countは別々の数値を用意します。NumberNormalizeアウトプットからは0〜1の間の数値がアウトプットされます。Point3ヘルパーのXインプットはU座標の代わり、YインプットはV座標の代わりとして利用できます。VectorアウトプットからでるUV値がそのままSurfacePosのUVWインプットに使うことができます。SurfacePosはその情報を受け取りUV座標上のどこにパーティクルが発生するかを計算しPositionとしてアウトプット、PositionBornがその情報を受け取りパーティクルをサーフェイス上に発生させることとなります。
次に発生したパーティクルに対してシェイプやスケールを与えるのですが、今回はティーポットにはコーン状のオブジェクトを、トーラスにはキューブ状のオブジェクトを発生させています。今回の場合は、一つのGeomeInstanceノードに二つのオブジェクトを登録しているのですが、ShapeNumberをIntegerヘルパーで指定してあげることでどちらかを選択できるようになっています。GeomeInstanceに登録されたオブジェクトの左には0や1のように0スタートの番号が登録されるのでそのいずれかを選ぶという感じです。
最後にAlignmentでコーンオブジェクトをサーフェイスのノーマル方向に向かせるのですが、これはSurfacePosのNormalアウトプットからノーマル情報を取り出しDirectionに繋いでAlignmentの設定をUser DefinedにすればOKです。あとはScaleで大きさを整えるだけです。
以上がティーポットの側の設定になります。

次にトーラスですが、これも殆ど同じです。設定はほぼ変わらないんですが、GeomeInstanceでキューブオブジェクトを選ぶ際にIntegerを0にすることで登録された二つのオブジェクトからキューブオブジェクトだけを選択しています。後はスケールを調整して少し薄いキューブになるようにしています。
以上がIteratorの応用です。実はこれとほぼ同じ設定をこのムービーでもやっています。
このような方法でパーティクルを配置するやり方を覚えると今後表現の幅が広がるのでぜひ挑戦してみてください。