【MotionBuilder】Python SDK 入門 第1回 『導入』

2024/07/25に公開

はじめに

連載記事の第1回に訪れていただき、ありがとうございます。私は都内の学生で、MotionBuilder を趣味・サークル活動で使用しております。まずは今回の記事の作成に取り組んだ背景とその目的について説明いたします。

記事の背景・目的

MotionBuilder が他ソフトと比べて学習を難しくさせる(と思う)要因として、一般ユーザーの日本語の解説記事・およびネットへの投稿の少なさは致命的であるように思えます。私のような学生ライセンスで習得の機会を得た学生も、やさしい日本語の解説記事の少なさや公式ヘルプの難解さを前にほとほと手を焼いているのではないでしょうか。とりわけ SDK に関しては、特定の機能に焦点を当てた記事は存在するものの執筆時期が古く、「一般ユーザーの書いた比較的新しい包括的なチュートリアル」のようなものが存在しない気がします。

そのような中で、たとえ内容が良くなかろうが一般ユーザーとしてお手製のチュートリアル記事を世に出したい、また所属サークルでの開発ツールの保守のために知識を引き継ぎたい、というところが、今回「Python SDK 入門」という題で記事を執筆した背景になります。

今後の記事で紹介できる内容には偏りがあり、知識不足ゆえに見苦しい記述をお見せしてしまうかもしれません。誤謬等ございましたら遠慮なくご指摘いただけますと幸いです。また、この記事が少しでもどなたかの学習の一助になればと思います。

記事の構成

今後変更の可能性が大いにありますが、以下の流れで進める予定です。

第1回 導入
第2回 サンプル・ドキュメントの活用
第3回 Python関連のシステム
第4回 MotionBuilder内部の概念
第5回 スクリプト例と解説
第6回 VScode拡張機能の活用
第7回 UI・ツール開発-基礎編
第8回 UI・ツール開発-応用編
第9回 UI・ツール開発-実践編

内容の大きなくくりとしては、第1回・第2回が「入門」、第3回・第4回が「応用」、第5回以降が「実践」となっています。第7回以降では『UI・ツール開発』をテーマに、SDK のみで完結する方法、Qt(PySide) を利用する方法、PySide の使用例を解説します。また、読者の方が Python を触れたことがあることを前提としているため、SDK 以外の Python に関する解説はあまり行わないのでご了承ください。

それでは、本編に入ります。

第1回 導入

1. MotionBuilder SDKについて

SDK とは「Software Development Kit」の頭文字を取ったものです。『ユーザーがソフトウェア内で動作する独自の機能を作成できるようソフトウェア開発側が提供する、一連のプログラムやサンプルコード、ドキュメントなどをまとめたもの』を指します。

MotionBuilder SDK には OpenReality SDK(C++ SDK)Python SDK があります。

出典:Autodesk MotionBuilder Python Programming - MotionBuilder SDK Training WebCast 1

SDK の全体像について以下の点を押さえておきましょう。

  • MotionBuilder の一部の機能はSDKで公開されていないこと
  • OpenReality SDK もPython SDK も、主に「機能の自動化」と「独自の機能の追加」という目的で用いられること
  • Python SDK は OpenReality SDK のラッパー(wrapper)であり、OpenReality SDK で提供されているクラス・関数には Python SDK で公開されていないものがあること


OpenReality SDK は プラグイン(dllファイル) として主に新たなアニメーション評価の機能(独自の filter や constraint など)や外部デバイスとのリアルタイム連携(モーキャプシステムとの接続など)の開発に使用し、Python SDK ではその場での短かいプログラム(スクリプト)の実行や簡単なツール作成に用います。


2. 手元に用意するもの

MotionBuilderの Python SDK を学ぶ上で、すぐ見られるようにしておきたい4つの資料を紹介します。

  1. Python Reference Guide
  2. MotionBuilder SDK Programmer’s Guide
  3. Python Scripting in MotionBuilder - Alex Forsythe
  4. MotionBuilder Developer Help

1. Python Referene Guide

公式ドキュメントの最新版です。開発の際には常に参照することになります。
最新版であることが何よりのメリットである一方、クラス名やメソッド名しか検索にヒットしないために「"model"と入力してモデルに関する内容を調べる」ような抽象的な検索ができないのは少々不便ではあります。

右上の「Search」欄よりクラスやメソッドの検索が可能

2. MotionBuilder SDK Programmer’s Guide

2012年版の公式ドキュメントです。
最新版のドキュメントと違って、ドキュメント内の文章ほぼ全てが検索対象であるため、クラス名やメソッド名が分かっていなくても適当な語句で検索をかければ大抵の情報が見つかるのが強みだと思います。もちろん、2012年版なので情報は古いです(現在使われていないものは一部なので大体は問題なく使用できますが)。また、一度に大量の情報がヒットするため、欲しい情報がすぐ見つからない場合があります。


左上の「Search」欄より、同様に検索が可能

3. Python Scripting in MotionBuilder

Alex Forsytheという方がYoutubeに投稿された一連のチュートリアル動画です。
Python Scripting in MotionBuilder - 04 - Accessing Components: FBSceneより

余分な音が無く、入力は早送りになっており、無駄な情報を極限まで削ぎ落した良質なチュートリアル動画となっています。内容(SDK や Python の記述)が古いことと説明の速さ・英語に耐えられるのであれば Pythonスクリプトの入門としてはこのチュートリアルでほぼ事足りると思っています。

動画内で解説している内容はAlexさん自身が以下のサイトにまとめています。https://awforsythe.com/tutorials/pyfbsdk-1
動画の解説が早いと感じる方はこちらも参照するとよいでしょう。

4. MotionBuilder Developer Help

公式ヘルプにおいて開発者向けの内容を記載している項目です。

Developer Helpと各概念やクラスの説明
上記のReference Guide等とは異なり、スクリプトの詳細ではなくSDKの各概念とクラス・メソッドについて説明されています。はじめから順番に読むのは少々大変ですが、SDKの構造について理解を深められるので、スクリプト開発を本格的に始める前にこの資料に必ず目を通すことをおすすめします。通常のヘルプは日本語も対応していますが、このセクションだけはいつも英語版しかありません。


3. MotionBuilderでの準備

Pythonスクリプトに関しては特別な環境構築は基本何も要りません。
スクリプトの実行には、MotionBuilder 内の Python Editor という機能を用います。


Python EditorとScripting Layout

画面左上 Layout より「Scripting」を選択、または Ctrl + Shift + 2 を押すと、上画像のような表示に画面が切り替わるはずです。画像赤線で囲んだウィンドウが Python Editor と呼ばれるもので、ここでスクリプトを書きます。Python Editor の上側は所謂 Python の対話モードでの入力場所なのですがこちらは私は基本使わず、下側にスクリプトを書いて普段は実行しています。


character 内のボーン名とその Local Rotation座標を表示

ここで、重要なスクリプトの実行方法を書きます。

例えば、上画像の例では、実行したいスクリプトをshift + 上下方向キーで部分的に選択、またはCtrl + Aで全選択し、Enterキーを押します。すると該当箇所のスクリプトが実行されます。


スクリプトの選択と実行

また、Viewer上にPythonファイルをドラッグアンドドロップし、表示されたメニューのうち「Execute」を選択することでもスクリプトを実行できます。


サンプルをViewerにドラッグアンドドロップして表示されたメニュー


次回

今回は導入ということで、MotionBuilder SDK についての説明と、Pythonスクリプトの実行方法を紹介しました。次回は Pythonスクリプトとその実行に慣れるためにサンプルを使い、またサンプルを中心にした SDK の学習方法やドキュメントの活用の仕方について解説します。
https://zenn.dev/nadegata_memo/articles/e06fa6ee32ee60


また、私は MotionBuilder ユーザー向けの Discord サーバーを運営しています。学生の方が気軽に日本語で質問できるように、また仕事で使われている方や業界の方と情報共有ができるように、という思いから設立したコミュニティです。こちらでは資料のリンク共有や質疑応答を随時行っているので、ぜひご参加ください。

https://discord.gg/xRXj3EJHnS


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

Discussion