基礎知識

Autodesk® Maya® はオープン プロダクトです。つまり、Autodesk 社外の方でも、既存の機能の変更やまったく新しい機能の追加が実施できます。Maya でこれを行うには 2 つのインタフェースがあります。Maya のコマンドと Maya の API です。これら 2 つのインタフェースで、異なる言語を実装することもできます。

Maya コマンド

次のいずれかの言語を使用してスクリプトを作成します。

MEL および Python の概要については、『Maya ユーザ ガイド』の「スクリプティング」のセクションを参照してください。また、MEL/Python の各コマンドについてのリファレンスは、「テクニカル ドキュメント」のセクションを参照してください。

Maya API

次の 3 つの API を使用してプラグインを作成します。

『Maya 開発者ヘルプ』は、Maya API、Maya Python API、Maya .NET API に関する技術的な概要を提供します。

Maya API の概要

Maya API は、Maya への内部アクセスを提供する C++ API で、Microsoft® Windows®、Linux®、Apple® Mac OS® X などのプラットフォームで使用できます。API を使用して、Maya の機能を拡張するプラグイン、または Maya モデルへアクセスし、操作するコンソール アプリケーションなどのスタンドアローンの 2 つのコード リソースを実装することができます。

プラグインは、以下の 2 つの方法で構築できます。

Maya Developer Kit では、API を使用したプラグインのサンプルを提供しています。多くのサンプルが C++ と Python の両方のソースコードで提供されています。Maya に両方のバージョンを同時にロードできるようにするには、Python API 1.0 のプラグインでコマンド名の接頭辞とノードに sp (たとえば、spHelix) と表記するようにします。ユーザが、この規則に従う必要はありません。Developer Kit に含まれている Python API 2.0 のサンプルの名前には、py という接頭辞(たとえば、pyBlindDoubleDataCmd)が付いています。

ダイナミック ライブラリを使用する場合、開発に使用したオペレーティング システムにより、プラグインの構築と名前付け方法にさまざまな制約が課されます。コンパイルされたプラグインは、プラットフォームに応じて次のようなファイル拡張子を使用します。

また、プラグインと API アプリケーションの作成ルールは、プラットフォームによって異なります。「ビルド環境を設定する」を参照してください。

Maya API に加え、Bifröst API を利用することもできます。これは Maya のインストール フォルダ内にある bifrostapi フォルダに見つかります。たとえば、次の場所です。

C:\Program Files\Autodesk\Maya2016\plug-ins\bifrost\include\modules\bifrostapi

開発キット

開発キットは https://apps.exchange.autodesk.com/MAYA/ja/Home/Index の Autodesk Exchange からオンラインで入手できます。Developer Kit には、インクルード ファイル、ライブラリ、サンプルの主要な 3 つのコンポーネントが含まれます。

Developer Kit は、devkit とも呼ばれます。

サンプル ファイル

ローカル フォルダに Developer Kit のアーカイブをコピーして解凍すると、devkitBase という名前のフォルダが作成されます。Maya API のサンプルは devkitBase¥devkit フォルダに保管されています。このフォルダには、applications フォルダと plug-ins フォルダが含まれます。applications フォルダにはスタンドアローン API アプリケーションのサンプルが、plug-ins フォルダには Maya API プラグインのサンプルが入っています。スタンドアローンやプラグインの構築に使用される手法は、プラットフォームによって異なります。ほとんどの場合、Makefiles が使用されます。Windows と Mac OS X には、提供されているサンプルの大半を構築するための IDE ソリューションが用意されています。Maya Developer Kit をインストールして設定する方法については、「ビルド環境を設定する」を参照してください。

Python API 1.0 および API 2.0 のサンプルは、ともに devkitBase¥devkit¥plug-ins¥scripted フォルダ内にあります。Python API 2.0 のサンプルは、そのファイル名に接頭辞 py が付いていることで識別できます。

Maya のインストール DVD にはコンパイル済みのプラグイン バイナリとアプリケーション バイナリは入っていません。ユーザがビルドする必要があります。Developer Kit のサンプルのビルドの詳細については「ビルド環境を設定する」を参照してください。

インクルード ファイル

ヘッダー ファイルは、include/maya フォルダにあります。Maya のヘッダー ファイル名は、通常、接頭辞 M で始まります。特定の種類のヘッダー ファイルでは、M の後の 2 文字がヘッダー ファイルの種類を示します。Fn は関数セット、It はイニシエータ、Px はプロキシ クラスです。この命名規則については、後で詳しく説明します。

TinyXML

Maya では、現在、TinyXML バージョン 2.5.3 が使用されています。

ライブラリ

この API は、Maya のさまざまな機能領域に対応するライブラリのセットとしてパッケージ化されています。ライブラリは以下のとおりです。

OpenMaya: ノードとコマンドを定義してプラグインに組み立てるための基本的なクラスが含まれています。

OpenMayaUI: マニピュレータ、コンテキスト、ロケータなどのユーザ インタフェース要素を新規作成するために必要なクラスが含まれています。

OpenMayaAnim: デフォーマやインバース キネマティクス(IK)などのアニメーション用のクラスが含まれています。

OpenMayaFX: Autodesk® Dynamics™ のクラスが含まれています。

OpenMayaRender: レンダリング機能の実行に必要なクラスが含まれています。

これらのライブラリは共有ライブラリなので、多数のプラグインが同時に使用できます。ライブラリは、lib ディレクトリにあります。

プラグイン対スクリプト

前述のように、プラグインを使って Maya の機能を拡張することができます。たとえば、次のような操作を実行できます。

C++ プラグイン対 Python プラグイン

コンパイル済みの C++ プラグインは、プラットフォームや Maya のバージョンごとに異なります。バージョンごと、あるいはプラットフォームごとに個別のプラグインをコンパイルする必要があります。また、コンパイル済みの C++ プラグインは、プラットフォームごとに異なるファイル拡張子を使用します。詳細については、上記の「Maya API の概要」を参照してください。

Python プラグインはプラットフォーム固有で、使用する API が Maya のバージョン間で一貫している場合は、これもまたバージョン固有になります。

C++ プラグインは Python プラグインよりも高速に動作するため、パフォーマンス重視のプラグインでは C++ プラグインを作成する方が良いでしょう。一般的に、Python プラグインは、コンパイル済み C++ プラグインの 70~80% 程度の速度で実行できます。

Python プラグイン対スクリプト

先に説明したように、Maya で操作を実行する場合には 2 つのインタフェースがあり、Maya のコマンド、または Maya の API を使うことができます。さらに、この両方のインタフェースに対して Python を使用することもできます。Python API を使用してプラグインを作成することも、単にスクリプトを作成することもできます。Maya を拡張するには、Python プラグインを定義するだけで済みます(たとえば、新しいノードを追加したり、新しいコマンド タイプを追加することなどを行えます)。あるいは、maya.cmds モジュールで行う場合は、スクリプト内で API を使用することができます。Maya Developer Kit の devkitBase¥devkit¥pythonScripts フォルダにある widgetHierarchy.py のサンプルを参照してください。このサンプルでは OpenMayaUI モジュールを読み込み、MQtUtil クラスのメソッドを呼び出します。これはプラグインではないため、Python の execfile コマンドを使って、このスクリプトを直接実行できます。

Maya のコマンド対 Maya の API

スクリプトとプラグインのどちらを作成すべきか、Maya の API と Maya のコマンドのどちらで操作を実行すべきかを決定する場合に検討することが必要ないくつかの要因について説明します。

  • 多くの場合、Maya API は、Maya のコマンドよりも高速です。一般に Maya の API は Maya に対して低レベルでアクセスするため、Maya への広範なアクセスを行うことができます。フィルタを使ってグラフ上で反復するようなタスクは、Maya のコマンドを使うよりも Maya の API を使って実行したほうが簡単です。さらに、たとえば、非常に多くの頂点を同時に操作するペイント ツールをプログラムするような場合は、Maya の API を使って大規模なデータセットを処理することが有益です。Python の実装による速度が十分でない場合は、そのプラグインを C++ に移植することができます。

  • Python のプラグインと Python のスクリプト(API またはコマンドのいずれかを使用)のどちらを作成すべきかを決定するには、Maya を拡張する必要があるのかどうか、または、そのスクリプトをロード/ロード解除することが必要なのかどうかを考慮してください。

ドキュメント

次のドキュメントのコンポーネントが提供されています。

この Maya API の技術的基礎知識には、Maya Python API と Maya .NET API のセクションが含まれています。また、C++ API リファレンスのクラスを説明するドキュメントには、C++ と Python API の両方の開発アプローチに関する情報が含まれているため、これらの両方の開発に使用できます。Maya Python API 2.0 リファレンス ドキュメントも利用可能です。

Maya .NET API には、C++ のリファレンス ドキュメントに基づいて作成された Visual Studio の統合ドキュメントも同梱されています。また、このリファレンス ドキュメントの .chm バージョンを、http://www.autodesk.com/me-sdk-docs から入手することができます。

関連マニュアルには次のものがあります。

最初の 4 つの項目は『Maya ヘルプ』からアクセスすることができます。『リリース ノート』は、http://www.autodesk.com/maya-releasenotes で入手できます。

その他の要件

Maya API は C++ API なので、以下を理解しておくことが最善でしょう。

さらに、プラグイン、またはスタンドアローンを構築するときには、そのリリースに対して推奨されているコンパイラとリンカーを使用する必要があります。この情報は、このドキュメントの「新機能と変更点」または「 ビルド環境のセットアップ」で確認できます。