BlendShapeのアトリビュート名取得

スクリプトを作り始めると、どうも他の事がそっちのけになってしまう。
で、Mayaのブレンドシェイプ。

シーン内に存在するブレンドシェイプを調べ、ブレンドシェイプとして登録されているノードを調べるには、

import pymel.core as pm
bShapes = pm.ls(type=pm.nt.BlendShape)
for b in bShapes:
	print b.getOutputGeometry()
	print b.getTarget()

こんな感じですぐにできる。

しかし、実際のアトリビュート名はターゲットの名前と同一であるとは限らない。
ブレンドシェイプを設定した後、ノードの名前もアトリビュートの名前も変えられる。
うーん、困った。
で、デフォルトのMayaに組み込まれているmelの関数。
editNormalizationGroupsを調べてみた。
すると、attributeNameというコマンドを発見。
早速テスト。

import pymel.core as pm

bShapes = pm.ls(type=pm.nt.BlendShape)
for b in bShapes:
	wCount = b.getWeightCount()
	for i in range(wCount):
		print pm.attributeName(b + '.w[%s]'%i)

思えば、pythonを使っていて、久しぶりにrange()関数を使った気がする。
やっていることは、ブレンドシェイプに設定されているウェイトカウントを取得し、
それをrangeで回してattributeNameで名前を取得。
なるほどねぇ。そんなコマンドあったのですね。
メソッドでもっと簡単に取得できる方法があるのだろうか?
全部試したわけではないので、分からない。ありそうな、なさそうな。

コメントする

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トラックバックする

トラックバック用URL:

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です