[pymel] パーティクルを固める

簡単な、ほんとにほんとに簡単なpymel事例のご紹介です。

パーティクルをシミュレーションさせて作ったある特定フレームの形を
そのまま固めて持っておきたいと気がたまにあります。ホントたまにですが。

たとえば僕が以前やった仕事で、矢がまとまって飛んでくるというショットがありました。
内容から考えてパーティクルインスタンサーで作ることにしたのですが、
あの当時マシンパワーもそれほどでなく僕の知識や技術もアレで、時間もあまりなかったということで、
何回もシミュレーションをかけるのが非常に危ない気がしていました。
ここはなんとかして手付けっぽいアプローチを取るしかない!と思って
パーティクルをばらまいて固め、キーフレームアニメーションをつけてなんとかしました。

まぁ今はそういうアプローチは取らないかも知れませんがあれはあれで上手くいったし割と扱いやすかったので、
パーティクルを固めるという方法は僕の中ではたびたび登場します。
ほんとにただ動かないパーティクルがばらまかれてるだけのものなんですが、
キャッシュとか考えずに普通のオブジェクトっぽく気軽に扱えるので便利に使ってます。

で、その固める用のMELをしばらく持っていたのですが、この間使おうと思ったら手元になかったので、
じゃあpymelで作ってみるかと思ってやってみたところ、べらぼうに簡単に終わったので一応紹介します。

from pymel.core import *
prt = selected()[0].getShape(type='particle')
pts = [p.position for p in prt.points]
particle(p=pts)

ビューから選んだパーティクルオブジェクトを、新しいパーティクルオブジェクトとして固めるという感じです。
とりあえず位置だけあればどうにでもなるし、PPAttrとかいらないのでとりあえずこんな感じで。
(PPAttrも一緒に固めるとかもやればできるんですかね?今は必要ないですが興味ありますね。)

pymelの素敵なところはselected()とかもそうなのですが、
パーティクルの位置情報をprt.pointsで取れてしまうところ。
そしてリストをそのままポイント情報として引数に与えられるところ。
でもこれはcmdsでも出来ますね:P

細かいことを話せるほど僕もpymelに詳しい訳ではないのですが、type(prt)としてみたところ、
pymel.core.nodetypes.Pointというクラスのインスタンスのようでした。

これを以前MELで書いたときはgetParticleAttrだかなんだか使ってforループ回して、、とか
あれこれもうめんどくせーめんどくせー。

最初に覚えるべきことはちょいちょいありますし、今でもリファレンスは手放せないですが、
やはりこの気楽さは素晴らしいなーと思います。

海外でも割と人気みたいですし、Resumeにもpymel使えるって書けばウケがいいかな?:)

以上、簡単なスクリプトをpymelで書いた事例(?)の紹介でした。
この短さの中にもpymelの良さはだいぶ見つかるんじゃないでしょうかね。

コメントを残す

メールアドレスが公開されることはありません。