【MotionBuilder】Python SDK 入門 第2回 『サンプル・ドキュメントの活用』

2024/07/25に公開
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を例に説明します。

  1. ドキュメントで検索
    ドキュメント右上の検索バーにて「FBScene」と入力、検索結果の中のFBSceneを選択し、下画像赤枠の部分をクリック。※検索結果のうち、クラス名と全く同じものの中で最も上にあるものを選ぶとクラスの説明のトップが表示されやすいです。

    ドキュメントの検索結果

  2. 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内の各データにアクセスできるようです。


  3. メンバ関数・属性を一覧を見て、さらにその説明を見てみる
    FBComponents.pyサンプルで使われていたComponents属性を探してみると、近くにCharacters属性がありました。


ドキュメントより
この属性を用いるとScene内のCharacterたちが得られるようです。

  1. サンプルを改変してみる

    サンプルでは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のシステムについて解説します。
https://zenn.dev/nadegata_memo/articles/cfe0eead792a68
実のところ第3回と第4回は入門ではなく応用的な内容(これを知らないとPythonスクリプトが書けないわけではないがぜひ知っておきたい内容)なので、「スクリプトをただ使いたい」という方は第5回以降へ読み進めていただいて構いません。もしよければ後ほど第3・4回をご覧ください。

それでは、今回はここまで。最後までお読みくださりありがとうございました。

Discussion

sasanoriiisasanoriii

素晴らしいですね。MBのscriptの情報は少なくチャレンジしようにもどうしたら・・・と困っていたので良いスタートのきっかけを得られました。ありがとうございます!引き続きの記事の更新を楽しみにしています。
第3・4回の記事は非公開にされたのでしょうか?どんな内容なのか気になっちゃいました。

NdgtNdgt

sasanoriiiさん、記事を読んでくださってありがとうございます!
この記事が最初の一歩を踏み出すきっかけとなれたこと、大変うれしく思います。
3・4回についてですが、既に公開していた内容に不安な点があり、また5回と7回以降の記事が思うように完成していなかったので、現在は勝手ながら非公開にして一度再編しながら執筆を続けています。急にリンク切れとなってご心配をおかけしてすみません。近いうちに更新できればと思うので、またご覧いただけると幸いです…!