このセッティングの流れは以下の図の通りです。

まずborn_emitterダイナミクス内のobj.TO Particleノードで発生元のエミッターとなるオブジェクトをピックアップします。グループはborn_emitterに。Trackをobject To particleにセットします。これでオブジェクトがアニメーションしている場合にTPのパーティクルのシェイプも同様にアニメートされます。そしてinstance shapeにチェック。これでエミッターオブジェクトのシェイプをTP内部でコントロールすることができます。↓

次にborn_from_surfaceダイナミクス内のPosition BornでchildグループのパーティクルをObj.To Particleで発生させたパーティクルのシェイプから発生させます。ここはぱっと見複雑ですが、流れを説明するとすればこうなります。
→born_emitterグループのパーティクルに対して処理をするという情報がPosition BornのParticleインプットに入る。
→Surface PosのParticleインプットがポジションボーンで発生したパーティクルを受け取りchildグループに対して処理をすることが決定される。UVWインプットからborn_emitterのパーティクルシェイプのUVW情報を受け取りParticle Shapeインプットからborn_emitterのパーティクルのシェイプ形状の情報を受け取る。UVWアウトプットから先ほど受け取ったUVW情報を次のTexmapColorノードに渡す。
→UVW情報を受け取ったTexmapColorノードでパーティクルシェイプのUVW上のカラー情報をチェックする。Textureスロットに使用するテクスチャをアサインする。Colorアウトプットから各UVW上のRGB(0から1の値)が次のColorノードに送られる。
→ColorノードのColorインプットから受け取ったRGBのデータを次のノードに渡す。今回使用するテクスチャはグレースケールなのでRGBのデータのRのアウトプットのみを使用でOK。Rの値がThresholdノードとVelocityノードをコントロールする為のAdd&Multiplyノードに送られる。
→Thresholdでは受け取ったRの値が0.1から1の間、つまり完全な黒を除く部分に収まる値の時に限りoutからbool値の1をアウトプットしPositionノードをオンにする。Positionノードの位置はSurface Posノードがもつpositionの情報が反映される。
→VelocityのSpeedノードにColorのRのデータを送るが、この値は0から1の小さい値であるため、Add&MultiplyノードでFloatの値と掛け合わせて適したスピードに調整する。
こういうそこそこ複雑なノード構成は、慣れないうちは実際に文章に書き起こして思考を具体化させると理解が深まると思います。

次にset_shapeダイナミクスでマテリアル、シェイプ、スケールを設定してあげます。ここはシンプルです。

そして最後のkill_pivot_particleダイナミクスなんですが、これはSurface Positonの性質上どうしてもエミッターオブジェクトのパーティクルのピボット付近にできてしまう余分なパーティクルを消す為の物です。PPassABノードを用いてGroupAにはborn_emitterグループを、GroupBにはchildグループを指定してあげてborn_emitterパーティクルとchildパーティクルの距離を調べます。Distanceを1.0と小さな値にしてお互いの距離が1.0以内にあるchildパーティクルがParticle Dieノードに送られて消去されます。

kill_pivot_particleダイナミクスをオフにした場合はエミッターオブジェクトパーティクルのピボット付近にはこういう感じでchildパーティクルが密集しています。どうやらSurface Positionが一旦ピボット付近でパーティクルを発生させた後に各サーフェイス上にパーティクルを移動させるのでそうなるのではとのことですが、また詳しく分かり次第追記したいです。

今回なぜmatter waveを使わずにこんなめんどくさいやり方をしているのかと言うと、この手法を取った方がいい場合があるからです。それに関しては追々具体例を挙げて説明していきたいと思います。