【MotionBuilder】 MotionBuilderプラグイン作成チュートリアル動画をエキサイト翻訳してみた

はじめに

MotionBuilderのプラグイン作成を頼まれたので今急ぎで勉強中の自分が、
MotionBuilder公式サイトのプラグイン作成チュートリアル動画を頑張ってエキサイト翻訳してみました。
以下のサイトの「 DevTV: Intro to MotionBuilder OpenReality SDK Programming(MotionBuilder OpenReality SDK プログラミング入門)英語版のビデオ - パート 1」です。
ダウンロード出来ますのでゆっくり見てみてください。
www.autodesk.co.jp

Let's エキサイト翻訳

目次

  • Part1 SDK Introduction
  • Part2 The MotionBuilder Plug-in Environment
  • Part3 Plug-in Fundamentals
  • Part4 Looking Beyond the Plug-in Structure
    More Learing Resources
Part1 SDK Introduction

MotionBuilderをプログラミングする理由は何?

  • 反復的で時間のかかるタスクの自動化
  • 既存の機能を拡張
  • MotionBuilderに接続するカスタムツールと機能を作成
  • プロジェクト固有の機能を作成
    ↳プロジェクト特有のカスタムフロー、要件、カスタムファイルを含む

MotionBuilderには2つのSDKがある

  • PythonSDK
  • OpenRealitySDK (c++)

PythonSDKはOpenRealitySDKのラッパーSDK

各SDKのイメージ図
SDKのイメージ図
Pythonを使うメリット

  • 速い開発スタイル
  • VisualStudioなどのエディタは不要
  • 多くのモジュールが使える ←重要!!!
  • ポインターを使用する必要はありません

C++を使うメリット

  • Pythonより10倍処理速度が速い
  • 多くのクラスと関数が公開されている (カスタムデバイス、マニピュレータ)
  • 基底クラスから派生できる (FBBox, FBConstraint, FBDevice, FBShader...)
  • オブジェクトを特殊なクラスにキャストして特定の機能にアクセスできる
  • DLLでコードを隠せる

SDKデザインの概要
内部(MotioBuilder ?)をしっかりラッパーした設計
抽象レイヤーは外部プラグインと内部コードを分離します

各レイヤーのイメージ図
各レイヤーのイメージ図

OpenRealitySDKのPluginTypes

  • Relation Constraint Boxes
  • Constraints
  • Devices
  • File Translators
  • Manipulators
  • Shaders
  • Commands
  • Custom Shapes / User Object
  • Tools / Popups

Part2 The MotionBuilder Plug-in Environment


SDKのドキュメント

www.autodesk.com

[http://www.autodesk.com/motionbuilder-sdkdoc-[version]-enu]
[version] = 使用しているMotionBuilderのバージョン

プラグインの開発環境
OS : Windows
拡張子 : .dll
開発環境:VS2008 with service pack 1
プラグインのバイナリの互換性は保証されません
※各メジャーリリースのプラグインを再コンパイルする必要があります
MotionBuilder2016,MotionBuilder2017それぞれでコンパイルし直す

VisualStudioプロジェクト設定
VisualStudioプロジェクト設定

MotionBuilderSDKのファイルパス
MotionBuilderSDKのファイルパス

MotionBuilderの起動コマンド
MotionBuilderの起動コマンド

Part3 Plug-in Fundamentals


プラグインTODOリスト

  • ライブラリ宣言
  • ライブラリ登録
  • ライブラリ関数
  • クラスオブジェクト生成
  • オブジェクト宣言
  • オブジェクト実装
  • オブジェクト登録
  • クラス関数の定義

ライブラリ宣言

FBLibraryDeclare(LibName)

※LibNameはユニークな名前にすること(被ってはいけない)
クラスを識別するために使用
ロード時に作成される (MB立ち上げ時?)

ライブラリ登録

FBLibraryDeclare(orTool_template){
  FBLibraryRegister(ORTool_template);
}
FBLibraryDeclareEnd;

特定のプラグインはMotionBuildder プロフェッショナルレジストリに登録するクラスが必要です・・・?
上記のプログラムのようにクラスを登録する必要があります。

ライブラリ関数

  • bool FBLibrary::LibInit()
    ライブラリを初期化 DLLをメモリにロード
  • bool FBLibrary::LibOpen()
    ライブラリを開き、エクスポートされたシンボルを読み込む
  • bool FBLibrary::LibReady()
    ライブラリを読み込み、アクセスを開始。アクティベーションコードはこの関数に書く
  • bool FBLibrary::LibClose()
    ライブラリを閉じる
  • bool FBLibrary::LibRelease()
    ライブラリを解放

クラスオブジェクト生成

class ORTool_Template : public FBTool

クラスオブジェクトを生成するとき 、同様のクラスを継承する必要がある

オブジェクト宣言

FB<objecttype>Declare

マクロを使ってクラス内で宣言する必要があります
< objecttype > は、 FBTool, FBBox, FBDeviceとかのTool, Box, Deviceのこと

オブジェクト実装

FB<objecttype>Implementation

マクロを使ってオブジェクトタイプを実装する

オブジェクト登録

FBRegister<objecttype>
FBRegisterTool(
ORTOOLTEMPLATE_CLASS,
ORTOOLTEMPLATE_LABEL,
ORTOOLTEMPLATE_DESC,
FB_DEFAULT_SDK_ICON);

マクロを使ってオブジェクトタイプを登録

クラス関数の定義(作成する必要のある関数)

  • FBCreate
    オブジェクト作成
  • FBDestroy
    オブジェクト破棄
  • FbxStore
    シーンにオブジェクトコンポーネントを保存
  • FbxRetrieve
    シーン内のオブジェクトComponentを取得

おわりに

Part4はどこ・・・?
開発環境ですが、MotionBuilderのバージョンによってVisualStudioのバージョンを変える必要があります。
自分が確認している開発環境は、
MotionBuilder2016 : VisualStudio2012
MotionBuilder2019 : VisualStudio2015
です。
結局サンプルを見るのが理解しやすいのかなと思いますので、

C:/Program Files/Autodesk/MotionBuilder 2019/OpenRealitySDK/samples

プラグインのテンプレートとサンプルがあります。
.slnで開発できるVisualStudioのバージョンも確認できます。