パーティクルは1つのジオメトリとして扱われるため、1種類のマテリアルしか割り当てられないと思われがちなのですが、Group SOPとCopy SOPを活用することで、マテリアルや、パーティクルに割り当てるモデルも複数種類を割り当てることができます。
原理はパーティクルソースにGroup SOPで割り当てるモデル或いはマテリアルの数だけポイントグループを設定して、発生した各パーティクルにはグループが割り当てられているのでCopy SOPでテンプレートとして参照する際にグループを指定すると、グループに属しているパーティクルのみにコピーソースがコピーされるという仕組みです。
サンプルではパーティクルに3種類のモデルとマテリアルを割り当てているので、3つのGroup SOPでポイントのグループを設定します。ソースとなるモデルは83ポイント(0~82)あるので、ポイントナンバーを使ってグループを振り分けます。NumberタブのUse NumberパラメータをON、OperationパラメータをGroup By Rangeに設定します。これでグループに含めるポイントの指定をポイントナンバーの範囲で行う設定になります。 Start/Endパラメータは全ポイントの範囲になるよう、0 82を設定します。Select_of_パラメータには1 3を設定しますが、これでStart/Endで設定した範囲のポイントを3つ毎に1つ選択対象にします。この設定を他のGroup SOPではStart/Endパラメータをそれぞれ1 82、2 82にすることで選択範囲を1つずらすことで選択されるポイントが重複することなく3つのグループを設定することができます。 これに加えてSort SOPでポイント番号をランダムにすることで、パーティクルが発生する箇所にランダム性を加えます。
パーティクルとして発生させた後もグループ情報を保持するため、Particle SopのBehaviorパラメータをModify Source Geometryに設定します。これはソースモデルからパーティクルを発生させるのではなく、モデルのポイントがパーティクルのように動いて変形するようになります。この設定では、ジオメトリがパーティクルが発生する以前でも表示された状態になるので、後でDelete SOPで動いていないモデルを消去します。
割り当てるモデル或いはマテリアル毎にCopy SOPを設定します。Template Groupパラメータでグループを設定すると指定したグループのポイントのみにモデルが割り当てられます。モデルごとにランダムに回転させるため、Rotateパラメータに以下のExpressionを設定します。
$PT*10 + rand($PT) + $F*4
$PTは各ポイント番号、$Fはタイムスライダーのフレーム数を表します。
※このExpressionはTスクリプトモードで使用します。
ジオメトリコンポーネントレベルでマテリアルを設定すると1つのマテリアルしか設定できませんが、SOPネットワーク中で各グループ毎にMaterial SOPでマテリアルを割り当てて、最終的にリアルタイムレンダリングする箇所のレンダリングフラグをすべてチェックすることで1つのオブジェクトで複数のマテリアルを割り当ててレンダリング表示することができます。