Maya Script Pymel – ピボットの修正

Substance、知れば知るほど凄い。
ハイモデルとローモデルを読み込んで、ワールドスペースでノーマルを焼いて、それをタンジェントに変更したりもできる。
更にはそれらを元に、Curvatureマップを作成できる。ZBrushのCavityに似ている。

 

SubstanceDesigner上で新規にビットマップを作成してペイントすることもできるし、
フォトショップのベタ塗りレイヤーのようなノードを追加することもできる。
で、カラーからノーマルやスペキュラを始め色々なマップを作ることができる。
なので、下手をするとフォトショップや様々なテクスチャ編集用のツールが必要なくなる。
これひとつあれば、一応ひと通りの作業はこなせる。

 

ただ、ノードベースなので、レイヤーのような手軽さに欠ける。
ノードを追加し過ぎるとグチャグチャして良く分からなくなる。ある程度でグラフを分ける必要があるだろうなぁ。
なんだかモジュールやクラスや関数といった形で構成されるプログラムのようだ。

 

で、今回はSubstanceの事ではなくて、Mayaのスクリプト。
しかも殆ど需要がないもの。
MODOでモデリングをすると、メッシュの中心点なんかは気にしない。
アクションセンターが強力なので、メッシュをアイテムとして動かすことは殆ど無い。
そんなメッシュをMayaに持って行った後、中心点がメッシュの真ん中に欲しい時がある。
そんな時に使うスクリプトです。

import pymel.core as pm

sel = [x for x in pm.ls(sl=1,type=pm.nt.Transform) if x.getShape() and type(x.getShape())==pm.nt.Mesh]
for s in sel:
	bbc = s.getBoundingBox().center()
	s.rotatePivot.set(bbc)
	s.scalePivot.set(bbc)

始めの行、
sel = ~
で、選択しているノードのリストアップ。
タイプはトランスフォームで、シェイプノードを持っており、尚且つそのシェイプノードがメッシュであるもの。
という念の入用のリスト作成。
その後、バウンディングボックス取得。pymelでバウンディングボックスを取得すると、
BoundingBoxというデータタイプで取得できる。
それの「center()」というメソッドを使うと、バウンディングボックスのセンターを取得できる。
それをローテイトとスケールのピボットにセット。それだけ。

 

エラーが帰ってくる場合は、アトリビュートがロックされているかもしれないので、
s.rotatePivot.unlock()
s.scalePivot.unlock()
などを追加すれば大丈夫。ピボットのロックってするのかな?
まぁ、いいや。

 

pymel便利です。

コメントする

post date*

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

トラックバックする

トラックバック用URL:

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

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

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