MayaのPythonでスマートにコンバイン

こんにちは!Rhinoです。
久々の更新になります。相変わらずの不定期で申し訳ございません。

今日はMayaのコンバイン時に残るヒストリの問題を、Pythonを使ってちょっとだけスマートに解決してみようかと思います。

コンバイン後のヒストリ

コンバインは複数のオブジェクトを結合し、新しいオブジェクトを生成する機能です。
モデリングでは非常に便利で重要な機能の1つですね。
ですが、コンバインを使用すると、このようにヒストリが残ったりしないでしょうか?
これは所謂ゴミと呼ばれるものですね。消したいです。

コンバイン後のヒストリを削除

ヒストリを消すには[Edit][Delete by Type][History]を使用します。
または、ステータスライン上のConstruction Historyのボタンをオフにしてヒストリがそもそもつかないにします。
ちょっと面倒ですね。

Pythonを使ってコンバイン

polyUniteという結合に関する関数が用意されていますので、こちらを使ってコンバインしたいと思います。その際にフラグのchFalseを渡してあげることで、ヒストリを残さないようにすることができます。

# -*- coding: utf-8 -*-
import maya.cmds as cmds

selection = cmds.ls( sl=True, fl=True )
objects = cmds.filterExpand( selection, sm=12 )
cmds.polyUnite( objects, ch=False )

スクリプトに機能を追加

さきほどの簡単なスクリプトでもコンバインはできるのですが、ピボットが原点になってしまうと思います。ちょっと嫌ですよね。
そこで新しい機能を追加してみたいと思います。
objectPivot(op)というフラグを追加してTrueを与えて有効にします。
こちらのフラグは、コンバイン後のオブジェクトのピボットを最後に選択したオブジェクトのピボットに設定するものになります。
こちらの方が現実的かもしれませんね。

# -*- coding: utf-8 -*-
import maya.cmds as cmds

selection = cmds.ls( sl=True, fl=True )
objects = cmds.filterExpand( selection, sm=12 )
cmds.polyUnite( objects, ch=False, op=True )

これでも良いのですが、ついでにコンバイン後のオブジェクトの名前を最後に選択したオブジェクトの名前にリネームしてみたいと思います。
最後に選択したオブジェクトはリストの-1で取得してみました。

# -*- coding: utf-8 -*-
import maya.cmds as cmds

selection = cmds.ls( sl=True, fl=True )
objects = cmds.filterExpand( selection, sm=12 )
combinedObject = cmds.polyUnite( objects, ch=False, op=True )
cmds.rename( combinedObject, objects[-1] )

このような具合に独自のショートカットを作成していくことで作業の効率化や無駄のない綺麗なデータの作成に繋がるのではないかと思います。
簡単な内容ですが、宜しければお試し下さい。
では、また!

コメント

タイトルとURLをコピーしました