【MotionBuilder】Python SDK 入門 第3回『Python関連のシステム』
この記事は、Python SDK 入門の第3回目の記事です。
今回は、MotionBuilderのPythonスクリプト環境と起動時の動作、およびmobupyの使用について説明します。
なぜPythonスクリプトが実行できたのか
Pythonをユーザーがインストールして環境構築を行ったわけではないのに、なぜMotionBuilderのPython EditorからPythonスクリプトが実行できたのでしょうか。sys
モジュールのbase_prefix
属性を使ってみます。
import sys
print(sys.base_prefix)
>>>
C:\Program Files\Autodesk\MotionBuilder 2025\bin\x64\python
実はMotionBuilderインストール時にPython実行ファイルも同時にインストールされています。
MotionBuilderフォルダー下に位置するPython
Python EditorではこのPython実行ファイルがUIから利用できるようになったもの、と捉えるとよいでしょう。また、上記のPython実行ファイルと同じパス下にはいつも最初の宣言で登場するpyfbsdk
モジュール(上画像のpyfbsdk.pyd
)があります。さらに、Python Editorの最初に表示されているのは、インストールされているそのPythonのバージョンです。以下のようにして確認できます。
import sys
print(sys.version)
>>>
'3.11.4 (tags/v3.11.4:d2340ef, Jun 7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)]'
MotionBuilder起動時の動作
At start up, MotionBuilder runs Python scripts in the following order:
- Running Python Scritps
MotionBuilderは起動時に特定のパス下にあるPythonスクリプトを実行します。実行されるファイルとその順序は上記リンクを参照してください。起動時のスクリプトの実行の様子を確認するには、以下のコマンドをターミナルから実行します。
motionbuilder.exe -console -verbosePython
-console
オプションをmode
を指定せず用いると新たな出力windowが作成され、-verbosePython
フラッグによってPythonスクリプトに関する出力をこのwindowに表示させることができます。ただし、このwindowを閉じると起動したMotionBuilderも閉じられてしまうので注意してください。
起動と同時にスクリプトを実行する
起動時に特定のパス下のスクリプトが実行されることを利用し、例えば以下を実装できます。
-
from pyfbsdk import*
を予め宣言 - ドキュメントの起動
- UIの追加(第9回で触れます)
# -*- coding: utf-8 -*-
# 起動時にpyfbsdkモジュールのインポートとドキュメントの起動を行う
from pyfbsdk import*
print(FBModelCube)
import webbrowser
webbrowser.open("https://help.autodesk.com/view/MOBPRO/2025/ENU/?guid=MOBU_PYTHON_API_REF_index_html")
print("\ntest_Startup.py was executed.")
上記スクリプトを<user>\Documents\MB\<version>\config\PythonStartup
に保存し、MotionBuilderを起動します。
起動と同時に表示されたドキュメントと出力
コンソールへの出力
これを応用すると、作成したツール等を起動時に表示・またはメニューに追加できるため、プラグインと同様の挙動をPythonで実現することができます。そのようなスクリプトを開発する上での動作チェックとしてコマンドラインからのmotionbuilder.exe -console -verbosePython
の実行が役立つのです。
補足
motionbuilder.exe
という実行ファイルはC:\Program Files\Autodesk\MotionBuilder 2025\bin\x64
に位置していますが、pcのpath
環境変数を調べると確かにこのパスが登録されていることが確認できるはずです。また、次章で解説するmobupyもmotionbuilder.exeと同じパス下に位置するため、これもコマンドラインから使用することができます。
motoinbuilder.exe
のコマンドラインでの実行についてはこちらを参照してください。
mobupyと外部パッケージの利用
この記事の最初で「MotionBuilderインストールと同時にPython実行ファイルもインストールされる」と書きましたが、これとは別にmobupyという実行ファイルもインストールされています。
MotionBuilder comes with its own external Python interpreter, mobupy.
mobupy is useful for batch processing and for accessing MotionBuilder's libraries from another application.
...
mobupy can also be used to install Python packages using the pip package management system.
- The MotionBuilder Python interpreter, mobupy
独自のPythonの外部インタプリタとのことで、pip
によるパッケージのインストールが行えます。ただし、コマンド実行時は管理者権限が必要です(参考)。外部パッケージの例としてmediapipeを利用してみます。
# ターミナルにて管理者権限で実行
mobupy -m pip install mediapipe
# Python Editorで実行
from pyfbsdk import*
import cv2
import mediapipe as mp
mp_pose = mp.solutions.pose
mp_drawing = mp.solutions.drawing_utils
pose = mp_pose.Pose(static_image_mode = True, min_detection_confidence = 0.5)
img_path = "C:/Posture.png" # Tポーズをした自身の画像
img = cv2.imread(img_path)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
results = pose.process(img_rgb)
if results.pose_landmarks:
for id, lm in enumerate(results.pose_landmarks.landmark):
h, w, c = img.shape
lx, ly = int(lm.x * w), int(lm.y * h)
print(f"Landmark {id}: ({lx}, {ly})")
m = FBModelMarker(f"Landmark {id}")
# OpenCVにおいて画像下側が正であるため"-ly"にする
m.Translation = FBVector3d(lx, -ly, 0)
m.Show = True
m.Scaling = FBVector3d(5,5,5)
Tポーズをした自身の画像から、各landmarkの位置をFBModelMarkerで再現しました。
実行結果
Python Telnet Console
蛇足とは思いますが一応紹介しておきます。Python Telnet ConsoleはMotionBuilderと接続されたtelnetコンソールです。Python Editor上部のアイコンをクリックして起動します。
Python Editorとtelnet consoleのアイコン
起動されたtelnet console
モジュールのインポートを行わなくともスクリプトが実行できます。
telnet consoleでのスクリプトの実行
さらにMotionBuilderが開いた状態で、telnet <host_name> 4242
をターミナル等で実行すれば同様にスクリプトの実行が可能です。
次回
今回は、Pythonに関係するMotionBuilderのシステムについて解説しました。次回は、MotionBuilderの内部(SDK)の概念について解説します。
それでは、今回はここまで。最後までお読みくださりありがとうございました。
Discussion