夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

MayaでPythonを実行する

本日は3Dモデリング枠です。

本ブログではBlenderを用いたPythonのコード実行については2023年に入り多々実行していました。

今回はMayaでPythonを実行していきます。

筆者はMayaに関しては前職時代に触っていたのですが、Blenderを習得してしまったためほとんど触らずにいました。

今回は久しぶりのMayaを触っている際に「あれ?MayaもPython動かせるはずだけど」ということを思ったので実際に触っていきます。

〇Mayaのスクリプティング

Blenderではスクリプティングウィンドウ(スクリプト実行)からPythonを入力、実行できます。

Mayaの場合MelおよびPythonを実行することができます。

MelはUnixシェルスクリプトに似ている言語です、こちらもいずれ触っていきたいと思います。

①上部ワールドメニューWindowから一般エディタ→スクリプト エディタを選択します。

これによってスクリプトエディタが起動します。

Pythonタブへと切り替えます。

Pythonコードを入力します。

print("Hellow!")

④上部の実行ボタンを押します。

これによってスクリプトが実行され実行結果がコンソールに表示されます。

なおMayaの場合子のコンソールウィンドウのことをヒストリーペインと呼称します。

対して入力で使用するフィールドのことをインプットペインと呼称します。

〇ポリゴン数の表示

次に応用として現在選択されているオブジェクトのポリゴン数を出力します。

これを行うためにはMayaAPIを使用する必要があります。

Blenderの場合はimport bpyでbpyのライブラリを使用しますが、Mayaの場合はimport mayaを使用します。

コードは以下になります。

import maya.cmds as cmds

def get_selected_object_poly_count():
    # 選択されたオブジェクトのチェック
    selected_objects = cmds.ls(selection=True, dag=True, shapes=True)
    
    if not selected_objects:
        print("選択されたオブジェクトがありません。")
        return

    # ポリゴン数を合計する変数
    total_poly_count = 0

    for obj in selected_objects:
        # オブジェクトのシェイプノードを取得
        shapes = cmds.listRelatives(obj, shapes=True, fullPath=True) or [obj]

        for shape in shapes:
            # シェイプノードのタイプがポリゴンメッシュであるか確認
            if cmds.nodeType(shape) == "mesh":
                # ポリゴン数を取得して合計に加算
                poly_count = cmds.polyEvaluate(shape, face=True)
                total_poly_count += poly_count

    print(f"選択されたオブジェクトの合計ポリゴン数: {total_poly_count}")

# 関数呼び出し
get_selected_object_poly_count()

考え方はBlenderの場合と同じでMayaのAPIで選択されているオブジェクトのチェックを行い、内部のデータにアクセス、ポリゴン数を抽出しています。

コードを実行することでポリゴン数がヒストリーペインに出力されます。

〇参考

Mayaでスクリプトウィンドウを初めて開いたため今回はこちらの記事にお世話になりました。

cgpipeliner.info

BlenderだけでなくMayaにも少しづつ慣れていきたいです。

本日は以上です。