【MotionBuilder】Python SDK 入門 第2回 『サンプル・ドキュメントの活用』
この記事は、Python SDK 入門の第2回目の記事です。以下を目標に解説します。
- Python Editorでのスクリプトの入力・実行に慣れる
- サンプルの実行の仕方を紹介し、その活用方法を知る
- ドキュメントの読み方・活用方法を知る
1. 基本練習
前回の第1回ではスクリプトの実行方法の紹介に留めたので、今回サンプルをいきなり使い始める前に、スクリプトを書いて実行するまでを一緒に練習しましょう。以下のスクリプトをPython Editorに入力してください。
from pyfbsdk import*
cube = FBModelCube("cube_test")
cube.Show = True
cube.Scaling = FBVector3d(10,10,10)
入力できたらCtrl + A
で全選択し、Enterで実行します。
画面左下Scene Browserに作成されたcubeが確認できます
次は、先ほどのスクリプトの下に以下を追記します。
cube.FBDelete()
入力できたら、この1行をShift + 上下キー
で選択し、Enterで実行します。
Scene Browserからcubeが削除されるのが確認できます
今度はモデルについてのスクリプトを書きます。先ほど入力したスクリプトは削除していただいて構いません。任意のキャラクタライズ済みモデルデータをMergeしたうえで下記のスクリプトを入力し、実行してください。
from pyfbsdk import*
chara = FBSystem().Scene.Characters[0]
print("character name : ", chara.Name)
for prop in chara.PropertyList:
if prop.Name.endswith("Link") and len(prop) > 0:
print(prop.GetName(), prop[0].Name, prop[0].Rotation.Data)
characterに関するデータを扱う際に同様の処理を頻繁に使います
以上でスクリプトの実行練習は終わりです。
ちなみに、Python Editorにはショートカットがあります。https://help.autodesk.com/view/MOBPRO/2025/JPN/?guid=GUID-42072BD9-ACD8-4E01-B53D-E1822BDF672A
from pyfbsdk import*
を一度実行した後は、Ctrl + Space
で候補を表示・選択することができます。
入力が正しくないと候補が表示されないので注意
2. from pyfbsdk import*
前回から登場しているこの記述について説明します。「pyfbsdkモジュールから全ての変数・関数をインポート」という意のこの記述は、Pythonスクリプトの実行に必須の宣言です。最初のスクリプトで書いたFBModelCube()
もpyfbsdkモジュールからインポートされ使用できます。
pyfbsdk Namespace Referenceより
他にも、from pyfbsdk_additions import*
という宣言が登場します。pyfbsdk_additions
モジュールは主にToolやUIに関する機能を提供します。単純なスクリプトであれば使いませんが、Tool作成のスクリプトでは必ず登場します。
以上の2つがPythonスクリプトの最初の宣言で登場するモジュールとなります。
3. サンプルの保存場所と実行
MotionBuilderをインストールすると、スクリプトのサンプルファイルも同時にインストールされています。インストール場所は、デフォルトではC:\Program Files\Autodesk\MotionBuilder <version>\bin\config\Scripts
です。また、このサンプルはUIからもアクセス可能です。
Pythonスクリプトのサンプルの場所
第1回で触れたように、サンプルはViewerにドラッグアンドドロップすれば実行できます。しかしこのままではスクリプト自体を確認できません。そこで、先ほど練習の際にスクリプトを入力した場所にサンプルをドラッグアンドドロップします。
Python Editorに表示されたサンプルのスクリプト
実行するには、先ほどと同様にCtrl + A
で全選択しEnterを押します。
4. サンプルの活用
サンプルは以下のように活用するとよいでしょう。
1.について、多くのサンプルが提供されているので、まずは片っ端から実行してみましょう。特にUI
フォルダ内のサンプルは簡単なものが多く、実行結果が視覚的に分かりやすいのでオススメです。
2.について、Topicは、サンプルファイルの最初に記載されているもので、「そのサンプルにおいてテーマとなるクラス」を指します。例えば先ほどの画像では、FBComponents.pyサンプルのTopicとしてFBScene
が書かれています。
サンプルに記載されているTopic
ぜひやっていただきたいのは、このTopicに書かれているクラスをドキュメントで調べることです。
3.について、ドキュメントを見ながらサンプルに新たな処理を加えたり、数値を変えたりして実行してみましょう。このサンプルの改変という作業はスクリプトが書けるようになるために重要だと思います。
5. ドキュメントの使い方
クラスについてのページは、以下のような構成になっています。
項目 | 内容 |
---|---|
Inheritance diagram | クラスの親子関係の図 |
Public Member Functions | メンバ関数一覧 |
(Public Member Functions inherited from ...) | 継承したメンバ関数一覧 |
Public Attributes | attribute(属性)一覧 |
(Public Attributes inherited from ...) | 継承した属性一覧 |
Detailed Description | クラスについての説明 |
Constructor & Destructor Documentation | コンストラクタ・デストラクタの説明 |
Member Function Documentation | メンバ関数の説明 |
Member Data Documentation | 属性の説明 |
実際の活用方法
先ほど登場したFBSceneを例に説明します。
-
ドキュメントで検索
ドキュメント右上の検索バーにて「FBScene」と入力、検索結果の中のFBSceneを選択し、下画像赤枠の部分をクリック。※検索結果のうち、クラス名と全く同じものの中で最も上にあるものを選ぶとクラスの説明のトップが表示されやすいです。
ドキュメントの検索結果 -
Detailed Descriptionを見る
FBScene class contains many attributes that you can use to access objects, e.g cameras, characters, lights, and takes, essentially everything you see in the Navigator in the UI.
ドキュメントよりどうやらScene内の各データにアクセスできるようです。
-
メンバ関数・属性を一覧を見て、さらにその説明を見てみる
FBComponents.pyサンプルで使われていたComponents
属性を探してみると、近くにCharacters
属性がありました。
ドキュメントより
この属性を用いるとScene内のCharacterたちが得られるようです。
-
サンプルを改変してみる
サンプルでは
Components
属性で得られるComponentのリストを反復処理していたので、これをCharacters
属性での反復処理にしてみます。Scene内にcharacterが無ければ何も表示されないはずなので、いくつかキャラクタライズ済みのモデルをMergeして実行してみます。for chara in gScene.Characters: print(chara) >>> <pyfbsdk.FBCharacter object at 0x00000224522F84A0> <pyfbsdk.FBCharacter object at 0x00000224522F83C0>
2体のモデルをMergeしたので、これらが表示されたのでしょう。
Characters
属性で得られる一つ一つの要素はFBCharacter
クラス型で、ドキュメントで調べるとcharacter名を返すName
属性があったので使ってみます。for chara in gScene.Characters: print(chara.Name) >>> Mia Original_01_01
確かにScene内のcharacterたちの名前が表示されました。
実行時のScene Browser内のcharacter
このようなプロセスでドキュメントに書いてあることを少しずつ試していくと、スクリプトでできることが増えていくはずです。また、第1回で紹介した2012年版のドキュメントのSearchを使って検索すれば関連事項をさらに調べられるかもしれません。
ちなみに、ドキュメントのメンバ関数・属性名の横にある四角い記号を右クリックすると、その場所のリンクを取得することができます。
次回
今回はサンプルスクリプトの実行と活用の仕方、ドキュメントの使い方を書きました。次回は第1回・第2回と比べて難易度が上がります。Pythonスクリプトを扱うMotionBuilderのシステムについて解説します。
実のところ第3回と第4回は入門ではなく応用的な内容(これを知らないとPythonスクリプトが書けないわけではないがぜひ知っておきたい内容)なので、「スクリプトをただ使いたい」という方は第5回以降へ読み進めていただいて構いません。もしよければ後ほど第3・4回をご覧ください。それでは、今回はここまで。最後までお読みくださりありがとうございました。
Discussion
素晴らしいですね。MBのscriptの情報は少なくチャレンジしようにもどうしたら・・・と困っていたので良いスタートのきっかけを得られました。ありがとうございます!引き続きの記事の更新を楽しみにしています。
第3・4回の記事は非公開にされたのでしょうか?どんな内容なのか気になっちゃいました。
sasanoriiiさん、記事を読んでくださってありがとうございます!
この記事が最初の一歩を踏み出すきっかけとなれたこと、大変うれしく思います。
3・4回についてですが、既に公開していた内容に不安な点があり、また5回と7回以降の記事が思うように完成していなかったので、現在は勝手ながら非公開にして一度再編しながら執筆を続けています。急にリンク切れとなってご心配をおかけしてすみません。近いうちに更新できればと思うので、またご覧いただけると幸いです…!