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

2012年01月16日

(TP Basic) RefernceとPAttachとSCの基本



今回はそれぞれ異なるグループのパーティクルとパーティクルをくっつける(Attach)する時に必要なReferenceの概念を説明します。これを理解するとパーティクルグループ同士の親子関係が簡単に作れる他、インスタンスジオメトリーのシェイプにもパーティクルをくっつけたりもできるので、最初からある程度の形状を持ったまま発生するFumeのパーティクルソースとしても使えたりします。また今回TPでRDBの計算をするときに非常に重要なSC(Shape Coliisonオペレーターの最新版)の説明も簡単にしておきたいと思います。

 まずは親子関係をどう作るのかを亀の親子モデルを使って説明したいと思います。上のムービーでは、親亀の上に小亀が乗っかっています。このような状態で、親亀が動いた時に小亀も一緒に動いて欲しい時はどうすればいいでしょうか。また親亀、小亀が特定のコンディション(エイジが50を過ぎたら、親亀のスピードが60以上超えたらなど)になった場合に親子関係を切るにはどうすればいいのか解説します。

 ちなみにただサーフェイスにくっつけるだけであればSurfacePositionで十分ですが、今回はSurfacePositionを使った方法は触れません。

 まずBornKouraダイナミクスでは親亀の甲羅のモデルをObj.To Particleで取り込みパーティクル化しています。(本当は親亀のパーティクルシェイプの甲羅部分にだけ小亀を発生させたかったのですがなぜかうまく行かなかったので今回は甲羅オブジェクトを分けました)グループはKouraです。この甲羅のモデルは親亀のモデルとリンクしていて親亀の動きに追従します。パーティクルも親亀の動きに追従させる場合はTrackをObject To Particleにします。そしてパーティクルのシェイプが次のダイナミクスで必要なのでInstance Shapeにチェックを入れましょう。元の甲羅オブジェクトは隠していていいのでHideをクリックしておきます。

RPS_BornKoura.jpg

 次にSetRefダイナミクスで、先ほどのKuraパーティクルのシェイプに小亀のChildパーティクルを発生させGeom Instanceで亀のシェイプを与えています。MoveZは何かと言うと、少し上方向に小亀を移動させて甲羅とのめり込みを回避していると言うことです。そしてSet RefでこのChildパーティクルKouraパーティクルの親子関係を設定します。ここで重要なのは、MAX標準の親子関係と違い、TPの親子関係はあくまでも関係性を決めているだけです。なのでこの時点では親が動いても子供は追従しません。マニュアルにも"There is no hierarchical implication, only a directional To/From relationship. "とありますね。

RPS_SetRef_A.jpg

 ではここでSet Refがどういう機能なのかを掘り下げたいと思います。Set RefにはPrticle FromとParticle Toの二つのインプットがあります。マニュアルには"It is often easiest to imagine a hierarchical relationship and consider the From particle as the parent and the To particle as the child."とあります。つまり、子供として扱いたいグループにはParticle Toを、親として扱いたい場合はPrticle Fromを使ってあげればいいということです。今回はKouraグループをPrticle Fromにコネクトし親として、PositionBornで発生するChildグループをPrticle Toにコネクトして子供として認識させます。これでこの2つのパーティクルグループの関係性が設定されました。とりあえずreferenceを使った親と子の関係性は以下の図をイメージしてください。

RPS_SetRef_B.jpg

 次にPAttachダイナミクスでは、実際に甲羅パーティクルに小亀パーティクルをくっつけます。まず先ほど設定した親と子の関係性を引き出す必要があります。それにはGet Refオペレーターを使います。Kouraグループに対する親子関係を引き出したいのでKouraパーティクルとGet RefのParticleを繋ぎます。

 Get Ref のロールアウトにはFrom Me,To Me, From&To Meと3種類の選択肢があります。これが一体何なのかというと、Particleインプットに繋がっているパーティクルグループとRef Particleから出力されるパーティクルの親子関係の方向性を指定してあげるということなんですね。さっきSet Refの説明でParticle From は親、Particle Toは子供として指定しました。なのでKouraグループは親の属性を持っています。なのでFrom Meは親から見た子供の関係性を持つパーティクルを指定することになります。なのでChildグループのパーティクルがアウトプットされるということです。To Meを指定した場合は、Kouraグループから見た親の関係性を持つパーティクルを探しますが、Kouraグループはそれより上の親を指定してないためにRef Particleからは何もアウトプットされません。From&To Meを指定した場合、kouraグループに対する親の関係性も子供の関係性も見ようとするので、Childグループがアウトプットされることになります。

Ref Particleできちんとパーティクルがアウトプットされたら、次はPAttachでパーティクル同士をくっつけます。ここでもどちらが親でどちらが子供かをきちんと指定してあげます。Kouraパーティクルが親なのでParticle Fromに、Ref Particleから出るChildパーティクルが子供なのでParticle Toに繋ぎます。これでKouraパーティクルにChildパーティクルが追従するようになりました。なんか非常にややこしいですが、Fromが親、Toが子供という癖をつけておけば大丈夫でしょう。

RPS_PAttach_A.jpg

 ちなみに親子関係の方向性さえ合っていれば、Childグループに対してPAttachをかけることも可能です。その場合は自分が子供なのでGet Refでは「子供から見た関係」つまりTo Meを指定してあげれば親のパーティクルがRef Particleで指定されることになります。従ってPAttachも繋ぎ変えてあげる必要があります。子供が親にくっつきに行く感じでしょうか。

RPS_PAttach_B.jpg

 次にClearRefダイナミクスの説明です。ここでは先ほど作った親子関係をリセットする為にClear Ref.オペレーターを使っています。今回はThresholdを使ってKouraパーティクルが特定のスピード(この場合は100)を超えたらClear Ref.が発動するようにしています。Clear Ref.の使い方も今までと同じです。Particle1インプットに繋いだパーティクルに対して親と子のどちらの方向性のパーティクルと関係性を絶ちたいのか指定してあげるだけです。今回はKouraパーティクルとChildパーティクルに対する関係なので親の自分からみた子供、つまりFrom Meを指定します。今回は43フレ付近でKouraパーティクルのVelocityが100を超えるので、このタイミングで小亀達は親亀から振り落とされることになりますw

RPS_ClearRef.jpg
 
 さて次のGravityダイナミクスですが、これはChildパーティクルに対して重力を与えているだけです。Point3ヘルパーでZの値に-1を入れてForceのDirectionに繋ぐことで下方向に力が働くように指定しています。

RPS_Gravity.jpg

 次にSCダイナミクスです。ここで小亀の小亀自身や甲羅に対する衝突や振り落とされた後の地面の衝突の時の物理演算をしています。SCは以前はShape Collisionオペレーターがあったのですが、色々改良が加えられて新たにSCオペレーターとして提供されました。Shape Collisionオペレーターも過去のバージョンとの互換性を持つ為に残されていますが、積極的に使う必要はないです。

 さてSCにはFloor Nodeインプットがありますが、ここでNodeヘルパーを使ってダイレクトに地面などのコリジョンオブジェクトを指定できます。groundオブジェクトをピックしコネクトします。これで地面オブジェクトがコリジョンオブジェクトとして認識されました。

RPS_SC_A.jpg
 
 次に肝心の小亀や甲羅のオブジェクトに物理演算を加えなければいけません。SCのParticleロールアウトにはGroupの選択肢があります。ここで物理演算をさせるグループを指定するのですが、見たとおり一つしか選べません。そこでパーティクルグループの作成の仕方を工夫する必要があります。以下のようにkouraグループとChildグループをSCグループの子供にしてあげます。こうしてSCグループに対してSCを適用してあげると、kouraグループとChildグループに対して同時に物理演算をかけることができるようになります。SCを使用する際にはこういうグループ分けの仕方もセットで覚えておきましょう。

RPS_SC_B.jpg

 さて物理演算の設定はできましたが、KouraパーティクルとChildパーティクルとではちょっと性質が異なります。Kouraパーティクルはそれ自身に当たり判定はあるけどキーフレームアニメーションが優先で、Childパーティクルは純粋に物理演算の影響を受けるという具合です。この性質の違いはパーティクルグループのShape Collision Dynamicsロールアウトから指定できます。この中にActive,Neutron,Frozenと3種類の設定があります。Activeは文字通り常に物理演算がかかっている状態になります。Neutronは重力やフォースなどの影響はうけないものの当たり判定は持つと言うものです。(Neutronは中性子の意味ですがなんでここで使われてるのかは謎です)Frozenは最初はNeutronと同じ働きをしてますが、VelocitiyやRotationなどが特定の値を超えるとActive化します。今回Childパーティクルは普通に物理演算をかけたいのでActiveに、kouraはただ当たり判定だけ欲しいのでNeutronに設定します。これで小亀は常に重力がかかりつつも甲羅にめり込むことなく、最終的に親亀から振り落とされた後はきちんと地面に衝突するようになりました。

RPS_SC_Child.jpg

RPS_SC_Koura.jpg

 さて次にRep.Bounceダイナミクスです。ここでは何をしているかというと、PPassABで範囲が20以内にあるChildパーティクル同士を判定させ、その中に納まっている物同士をRep.Bounceで反発させあっているんですね。これによってTPでの物理演算にありがちなパーティクルシェイプ同士のめり込みを軽減することができます。RepとはRepulsionの略で、物理用語で反発力のことです。

RPS_RepBounce.jpg

 以上がRefernceとPAttachとSCの基本的な説明です。SCに関してはさくっと説明しすぎな部分もあるので今後また掘り下げて行きたいと思います。RefernceとPAttachを使った実践的な方法も今後また紹介していきます。


 







posted by けゑ at 04:28| Comment(3) | TrackBack(0) | Thinking Particles
この記事へのコメント
お疲れ様です

かなり分かりやすかったですw
ボリュームもすごいw


■(本当は親亀のパーティクルシェイプの甲羅部分にだけ小亀を発生させたかったのですがなぜかうまく行かなかったので今回は甲羅オブジェクトを分けました)

↑↑↑↑↑↑↑↑
サーフェスのあるポリゴン部分を指定してアタッチしてみたいですね。
後、マップでの制御などw



■(ちなみにただサーフェイスにくっつけるだけであればSurfacePositionで十分ですが、今回はSurfacePositionを使った方法は触れません。)

↑↑↑↑↑↑↑↑
SurfacePosでくっつかせ動きを追従しようとする場合は毎回違う面が選べれるので、固定しての追従ができませんでした。やり方が悪いかもですw


■(Get Ref のロールアウトにはFrom Me,To Me, From&To Meと3種類の選択肢があります。)

↑↑↑↑↑↑↑↑
GetRefノードの考えとして、
--from meの場合はインプットの子供を出力
--to meの場合はインプットの親を出力
--from&toの場合、どちらも存在する場合は、どちらが優先で出力されるんでしょうか??


■(次はPAttachでパーティクル同士をくっつけます。ここでもどちらが親でどちらが子供かをきちんと指定してあげます。)

↑↑↑↑↑↑↑↑
pattachの場合混乱しますね。〜から(from)〜へ(to)の概念になると子供から親へアタッチという考え方になってしまうので逆になってしまいますね。
ここは一貫して、fromは親、toは子供をインプットするですね!
Posted by notchmen at 2012年01月16日 11:16
こんにちは。tP初心者新井です。
これやってみました。やっていたら小亀が地面を突き抜けちゃっておかしいなと思ったんですが、原因がわかりました。地面を板にしちゃってたんです。boxにしたら衝突してくれました。地面に当たったときに小亀の挙動はおかしいですけどそれはSCをちゃんと勉強するときに取っておこうと思います。
Posted by 新井 at 2012年05月06日 01:39
>notchmenさん 超遅レスすいません^^;もう諸々ここら辺のはマスターしてると思いますが、自分もまだTo Meとか混合させると混乱しますね。今後はもっと複雑なこともやっていきたいです。

>新井さん どもどもー。問題無事解決したみたいですね。確かにTPのSCはフロアーオブジェクトがボリューム持ってないとコリジョンうまくいかないんですよね。今後時間があればもっとSCも掘り下げたいところです。
Posted by けゑ at 2012年05月20日 07:34
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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

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