皆さま、スープカレーは食べていますか。
ヨセミテ
です。
先日、スープカレーShantiに行ってまいりました。
関東の店舗数が多く、そこそこ通い易い距離なので何度か食べに行ってます。
とてもおしゃれな店内が印象的なお店です。
さっぱり目のスープカレーでチキンがやわらかく、美味しく頂きました。
皆さんの快適なスープカレーライフ
を心より望んでおります。
▼Pymelの話
以前のブログで書かさせていただいたとおり、今回からPythonについて書いていこうかな、と思っていました。
Maya上でスクリプトを利用する場合、mel、cmds、Pymelなどがあります。
入社時はcmdsを利用していたのでが、
最近制作の主軸はめっきりPymelになってきています。
MEL → cmds に乗り換えたときも作業工程を短縮できた実感があったのですが、
Pymelはその時と比較にならないほど工程を短縮できているように感じます。
Pymelでblogを書くにあたって毎回一つ、
自分の勉強のためにも簡単なMayaのスクリプトを作成していこうかと思います。
今回ブログのために作成したスクリプトは、
Mayaのツール作成の際に不可欠な機能のひとつ、
選択機能についてスポットを当てたスクリプトです。
mayaのスクリプトエディタに貼り付けて実行すればウィンドウが作成されると思います。
import pymel.core as pm import pymel.core.nodetypes as pmnode class simpleTypeSelector(object): def __init__(self): self.windowManageName = "simpleTypeSelectorWindowName" self.windowTitle = "simpleTypeSelector" self.windowSize = [400,300] # ウィンドウのサイズ self.addButtonSize = [400,30] # ボタン追加ボタンのサイズ self.singleButtonSize = [100,30] # ボタンのサイズ self.buttonsGridColumnNum = 4 # ボタンの横の並びの数 # 初期に作成するノードのタイプ self.selectionTypeList = [pmnode.Transform,pmnode.Mesh,pmnode.Joint,pmnode.CurveShape] def selectButtonAction(self, nodeType): # === 選択ボタンの挙動 === selectTarget = pm.ls(type= nodeType) pm.select(selectTarget) def createSingleSelectionButton(self, nodeType): # === ボタン作成 === pm.button(l = nodeType, c = pm.Callback(self.selectButtonAction,nodeType)) def checkWindowOverlap(self): # === windowの重複確認 === if pm.window(self.windowManageName, ex = True): pm.deleteUI(self.windowManageName) def buttonCreateButton(self): # ボタンを作成するボタン pm.button(u"選択からノードタイプを作成", w = self.addButtonSize[0], h = self.addButtonSize[1], c = pm.Callback(self.buttonCreateButtonAction)) def buttonCreateButtonAction(self): # ボタン作成ボタン動作 # 選択オブジェクトの先頭のノードタイプからボタンを作成 selection = pm.ls(sl = True) nodeType = selection[0].nodeType() # ------ ※ with self.buttonField: pm.button(l = nodeType, c = pm.Callback(self.selectButtonAction,nodeType)) def main(self): # === windowの作成 === self.checkWindowOverlap() window = pm.window(self.windowManageName, t = self.windowTitle, w = self.windowSize[0], h = self.windowSize[1]) with pm.columnLayout(): self.buttonCreateButton() self.buttonField = pm.gridLayout(cw = self.singleButtonSize[0], ch = self.singleButtonSize[1], nc = self.buttonsGridColumnNum) with self.buttonField: for nodeType in self.selectionTypeList: self.createSingleSelectionButton(nodeType) window.show() # 実行文 simpleTypeSelectorIns = simpleTypeSelector() simpleTypeSelectorIns.main()
ノードタイプを一括選択するためのウィンドウを作成するツールです。
ノードタイプのボタンをクリックするとそのノードタイプが選ばれます。
足りないものは上のボタンを押すと選択したノードタイプがUI上に追加されるようにしました。
Pymelで組むことの利点として、(※印の部分)
なんとPymelのlsで取得したノードは、自らのノードタイプを自分で取得する機能を持っているのです!
ノード名だけに限らず頂点グループだったらそのインデックス番号を持っていたり、
フェースだったら隣接するフェースの取得や、自らの法線方向を取得する機能を使えたりします。
MELやcmdsではわざわざ取得する専用の関数を判定モードで呼びだして・・・。
いくつも手順も踏んでいたような・・・。
Pymel、すごい便利!
ドキュメントが英語しかないのが日本人には少し難点なのですが・・・。
予定外で作成要望のでたDCCツールは大体がとにかく今必要!
というものがほとんどな気がします。
ですので、要望から完成までの期間はとにかく早い方がよい、と考えています。
その点へのPymelの貢献力はとても大きいと感じています。
cmdsユーザーは是非使ってみてください!
MELユーザーも(Pythonを覚えるとこからになっちゃいますが・・・)
使ってみるとその効率に驚けると思います。
▼次はどんなネタにしよう
次回はmayaでPySideを使ってUIを作る、をしてみたいなぁと思う今日この頃。
次回までにPySideを覚えていなければ引き続きPymelで何かすると思います。