Maya 2016 Developer Kit は、オンラインの Autodesk Exchange (https://apps.exchange.autodesk.com/MAYA/ja/Home/Index)で利用できるようになりました。
Maya 2016 Extension 2 と Maya 2016 には、バイナリ レベルで互換性はありません。Maya 2016 および Maya 2016 Extension 1 の Maya API ガイドを入手するには、http://www.autodesk.com/me-sdk-docs を参照してください。
Maya 2016 Service Pack リリースを含む Maya 2016 または Maya 2016 Extension 1 に対してコンパイルされた C++ プラグインが、Maya 2016 Extension 2 で認識されるようにするには、プラグインをこのバージョンの Maya に対して再コンパイルする必要があります。
また、Maya 2016 Extension 2 に対してコンパイルされたプラグインが Maya 2016、Maya 2016 Extension 1、または Maya 2016 サービス パック リリースにロードされた場合、ロードできないか、予測できない動作をします。
Extension for Maya 2015 以降、23 の新しいクラスが Python API 2.0 に追加され、追加のデベロッパー キット サンプルも Maya Developer Kit の plug-ins¥scripted フォルダで使用できるようになりました。すべての Python API 2.0 デベロッパー キット サンプルには、プリフィックス py を使用した名前が付きます。
Extension for Maya 2015 以降に追加された Python クラスのリストについては、「Maya 2016 の新しい Python API 2.0 クラス」を参照してください。
UI マネージャ インタフェースによって行われる呼び出しの順序が、旧式の既定ビューポートで使用されていた順序と同じになりました。
uiDrawManager デベロッパー キット サンプルは修正され、アトリビュート エディタからアイコン名とスケール係数を選択する機能と、ロケータごとにアイコンを描画するオプションが含まれるようになりました。アイコン(icon)オプションは、UI タイプ(UI Type)ドロップ ダウンリストに表示されます。アイコン パラメータ(Icon Parameters)セクションが使用できるようになり、このセクションには Icon アトリビュートと Icon Scale アトリビュートのドロップダウン リストが含まれています。
次のイメージは、一連のアイコンの描画で、各アイコンは uiDrawManager デベロッパー キット サンプルを使用して作成されたロケータです。
Maya インストールの ..bin/ShadeFragment フォルダのインストールの一部として、XML スキーマ ファイルが使用できるようになりました。
v2pFragment.xsd はシェーディング フラグメントの XML スキーマであり、「シェーディング フラグメントの XML スキーマ」でも説明されています。
vp2FragmentGraph.xsd はフラグメント グラフの XML スキーマであり、「フラグメント グラフの XML スキーマ」で説明されています。
新しい MFrameContext::getHwFogParameters()メソッドが追加されました。これにより、フレーム コンテキストからグローバル フォグ パラメータを取得できるようになりました。このメソッドは、ハードウェア フォグは有効かどうか、ハードウェア フォグ モード、フォグの開始、フォグの終了、フォグの密度、フォグ カラーが含まれている struct HwFogParams を返します。
また、「ハードウェア フォグ固有のセマンティック」および「ビューポート 2.0 によってサポートされるシェーダのセマンティック」も参照してください。
選択のために新しいパス セマンティック MPassContext::kSelectionPassSemantic が追加されました。このパスは、MPxShaderOverride で適切なエフェクトやパスを選択できるようにするために、ビューポート 2.0 の選択中に MRenderItem::OverrideNonMaterialItem のためだけに発生します。
以前は、MRenderOverride でオーバーライドのレンダー ターゲットが設定されていない場合は、使用されるターゲットはプリセット(固定)フォーマットでした。
この動作は、代わりに 浮動小数点レンダー ターゲット(Floating Point Render Target)とマルチサンプル アンチエイリアシング(Multisample Anti-aliasing)のためのビューポート 2.0 レンダリング オプションを使用するように変更されました。これらの設定を確認するには、レンダラ > ビューポート 2.0(Renderer > Viewport 2.0) > を選択してハードウェア レンダラ 2.0 設定(Hardware Renderer 2.0 Settings)ウィンドウを開きアンチエイリアシング(Anti-aliasing)カテゴリと浮動小数点レンダー ターゲット(Floating Point Render Target)カテゴリを展開するか、レンダー > レンダー設定(Render > Render Settings)を選択してレンダー設定(Render Settings)ウィンドウを開きMaya ハードウェア 2.0(Maya Hardware 2.0)タブをクリックしてアンチエイリアシング(Anti-aliasing)カテゴリと浮動小数点レンダー ターゲット(Floating Point Render Target)カテゴリを展開します。
たとえば、R32G32B32A32_FLOAT の浮動小数点形式が選択されている場合は、カラー レンダー ターゲットは同じ浮動小数点形式を使用しようとします。
プラグインで旧式の固定形式を使用する場合は、MHWRender::kR8G8B8A8_UNORM 形式では単一のカラー ターゲット、MHWRender::D42S8 形式では単一の深度ターゲットを定義することができます。
viewRenderOverrideFrameCache デベロッパー キット プラグインが修正され、クランプされていないカラー イメージ出力を取得するために、浮動小数点形式を設定して使用することができる浮動小数点 EXR イメージを出力するようになりました。
viewRenderOverride デベロッパー キット サンプル(viewRenderOverrideOperations.cpp)の関数 viewRenderSceneRender::displayModeOverride()が、kFlatShaded と kShadeActiveOnly の使用法を示すように更新されました。
MRenderOperation::targetOverrideList()の戻り値のタイプが MRenderTarget** から MRenderTarget* const* に変更されました。Maya では、返されるリストの個々の MRenderTarget* ポインタは変更されません。
新しい MRenderUtilities::renderMaterialViewerGeometry()メソッドが追加されました。これにより、ハイパーシェード(Hypershade)でマテリアル ビューア(Material Viewer)の ビューポート 2.0 実装を活用してスウォッチ レンダリングを描画することができます。
新しい API を使用してスウォッチ レンダリングを実装するには、次の 3 つの方法があります。
meshPlane を shape パラメータ、kOrthogonalCameraCloseUp を cameraMode として使用して MPxHardwareShader::renderImage()と MPxHwShaderNode::renderImage()から UV エディタ イメージを生成することもできます。
2 番目と 3 番目の場合は、既定のスウォッチのレンダーにこの API が使用されます。
次のデベロッパー キット サンプル プラグインが適宜更新されました。
新しいバージョンの MTextureManager::acquireTexture()が追加されました。これは、ディスク上のファイルからテクスチャを取得します。
MTextureManager::acquireTexture(const MTextureArgments& args)は、入力パラメータとして新しいクラス MTextureArguments を受け取ります。MTextureArguments を使用すると、取得する必要のあるテクスチャの引数(ファイルパスや mip マップレベルなど)を指定することができます。
基本的に、新しい MTextureManager::acquireTexture(const MTextureArgments& args) は、既存の MHWRender::MTextureManager::acquireTexture (const MString & textureName, const MString & contextNodeFullName, int mipmapLevels = 0, bool useExposureControl = true, const MString & layerName = MString(), int alphaChannelIdx = -1) とほぼ同一です。ただし、機能が 1 つ追加されています。テクスチャのバックグラウンド ロードを有効にする場合に必要なファイル テクスチャ ノードを受け入れることができます。ファイル テクスチャノードを設定するには、MTextureArguments のコンストラクタを使用するか、MTextureArguments::setFileTextureNode()メソッドを使用します。
詳細については、『Maya ユーザ ガイド』の「表示(Display)プリファレンス: マテリアルのロード モード(Material Loading Mode)」の平行モードの説明を参照してください。
次の新しいメソッドでは、プラグイン作成者が非テクスチャ モードで使用されるシェーダを指定することができます。このメソッドを指定しない場合は、固定のグレーのシェーダが常に使用されます。
MVertexBuffer および MIndexBuffer の機能強化
SubSceneOverride バージョンのプラグインは、次の手順でテストすることができます。
loadPlugin apiMeshShape; createNode apiMesh; createNode apiMeshCreator; connectAttr apiMeshCreator1.outputSurface apiMesh1.inputSurface ; sets -edit -forceElement initialShadingGroup |transform1|apiMesh1;
新しいクラス MSelectionContext、MIntersection、MSelectionInfo、MPxComponentConverter が、ビューポート 2.0 でのコンポーネントの選択をサポートするために追加されました。
多くの組み込みプロシージャ テクスチャ(ノイズ、フラクタル、ボリューム ノイズ、ソリッド フラクタルなど)の計算に使用される定数ノイズ ルックアップ テーブルにアクセスするために、いくつかのメソッドが MRenderUtil に追加されました。
MUIDrawManager::beginDrawable()メソッドの新しいバリエーション beginDrawable(unsigned int name, bool nameIsPickable)が追加されました。これにより、MPxManipulatorNode::colorAndName()とよく似た方法でマニピュレータを選択できるようになりました。
シェーディング ノード オーバーライド フラグメントに新しい colorset セマンティックが追加されました。4-float の colorset 変数パラメータは頂点カラーを表します。複数の colorset 変更パラメータがサポートされる点を除いて、fcolor セマンティックと同じです。「シェーディング ノード オーバーライド」を参照してください。
MUiMessage で提供されるインタフェースと同様に、プラグインでもレンダー前とレンダー後の通知を追加できるようになりました。
MHWRender::MRenderer に次の新しいインタフェースが追加されました。
利点の 1 つは、これまではアクセスする正しいバッファの判定はほとんどの場合勘に頼っていましたが、レンダリングに使用されるオフスクリーン バッファやターゲットを取得できるようになったことです。一般的に、これは OpenGL のバック バッファになります。ただし、Linux の統合バック バッファでは機能しません。新しいインタフェースには、プラットフォームと描画 API 診断からアクセスすることができます。
プラグインでオーバーライド サイズの値を照会することができます。何も設定していない場合は、(-1, -1) が返されます。
次の便利なメソッドが MRenderer に追加されました。
新しい viewObjectSetOverride デベロッパー キット サンプルが追加されました。このサンプルについては、「複数パス シーンのレンダリング」で説明します。
新しいプラグイン onbShader がデベロッパー キットに追加されました。これは、Maya で onbShader と呼ばれるサーフェス シェーダとしてディペンデンシー ノードを作成します。
このプラグインは、ディペンデンシー ノードを実装するだけでなく、ビューポート 2.0 でサーフェス シェーダの完全な実装を示します。
シェーディング フラグメントを定義して登録し、最終的なフラグメント グラフを作成する方法を例示します。
この例は、Maya の組み込みのフラグメントを再利用しない lambertShader や phongShader サンプルとは異なり、プラグインを介して独自のフラグメントを定義します。
このプラグインは、ディペンデンシー ノードを実装するだけでなく、ビューポート 2.0 でテクスチャ シェーダの完全な実装を示します。
シェーディング フラグメントを定義して登録し、最終的なフラグメント グラフを作成しディペンデンシー ノードに関連付ける方法を例示します。さらにこの例は、Maya のプロシージャ テクスチャの計算に使用されるノイズ ルックアップ テーブルを作成してアクセスする方法も例示します。
1 番目のシェーディング フラグメントは、ノイズ ルックアップ テーブルのテクスチャとサンプラ パラメータのペアを定義します。ノイズ ルックアップ テーブルは 3D テクスチャの作成に使用されます。3 D テクスチャは、ピクセル シェーダが最終的な '波' ノイズ結果の計算のために抽出することができるものです。新しい MRenderUtil メソッドの noiseTableSize()と valueInNoiseTable()は、ノイズ ルックアップ テーブルの値にアクセスするために使用します。詳細については、simpleNoiseShader デベロッパー キット サンプルを参照してください。
footPrintNode デベロッパー キット サンプルは単純化され、MUIDrawManager を使用して、ビューポート 2.0 で単純なロケータを描画する方法を例示するようになりました。
MUIDrawManager を使用するプラグイン コードには、次のような利点があります。
元のサンプルは、未処理の OpenGL/DX コールを使用してロケータを描画する方法を説明する rawfootPrintNode に名前が変更されました。
rawfootPrintNode の例が更新されました。メソッド MFrameContext::renderingDestination()を使用して M3dView を取得し目的の名前を見つける方法、次に、M3dView::getM3dViewFromModelPanel()を使用して指定された目的の名前を持つパネルの対応する M3dView を取得する方法を示します。
新しいプラグイン footPrintNode_GeometryOverride が追加されました。これは、同時に表示する必要があるロケータの数が多いときにも良好な描画パフォーマンスを得るために、MPxGeometryOverride を使用してロケータを実装します。Python バージョンも使用できます。
SubSceneOverride バージョンが、DirectX11 モードのサポートを例示すために更新されました。詳細については、上記の MVertexBuffer および MIndexBuffer の強化機能セクションを参照してください。
デベロッパー キットに提供される DX11 シェーダ プラグインを Visual Studio 2012 を使用してコンパイルするには、はじめに devkit/plug-ins/dx11Shader フォルダに提供されている Visual Studio 2012 プロジェクト ファイル(Effects11_vs2012.vcxproj)を使用して、次の手順で Microsoft DirectX SDK Effects11 ライブラリをコンパイルする必要があります。
「フレームと描画のコンテキスト」トピックが追加されました。
Python プラグインのスケジュールが改善されました。以前は、Python ノードは並列で実行され、ロック競合に関する問題や評価速度が遅くなる原因になっていました。
Python プラグインは、グローバルにシリアル化されるようになり、GIL (グローバル インタプリタ ロック)に関する問題を回避し、全体的なパフォーマンスが向上しました。
プラグイン ノードのスケジュールを指定するために、次の新しい enum と仮想メソッドが MPxNode に追加されました。次が追加されました。
GPU オーバーライド デフォーマをサポートするために次の新しいクラスが追加されました。
新しい MFnMatrixArrayData クラスが追加されました。このクラスでは、プラグインで MMatrixArray アトリビュート タイプを使用することができます。これは、MMatrix タイプを複数作成するのではなく、よりコンパクトなグラフを生成するために使用することができます。このタイプを 1 回即座に使用することは、新しい DeltaMush デフォーマによって計算されたキャッシュ フレーム情報を読み取ることに相当します。
新しい MPxMotionPathNode クラスが追加され、ユーザ定義の motionPath ノードのベース クラスになりました。位置、方向などの接続されたノードのアトリビュートをパスに沿った位置に基づいて変換する方法を指定するメソッドが提供されることで、ユーザ独自のモーション パス クラスを作成することができます。MPxMotionPathNode クラスを使用するには、次のいずれかのワークフローを実行します。
組み込み motionPath ノードに対する MPxMotionPathNode の利点は、計算の実行方法をコントロールできることです。次に、MPxMotionPathNode ノードを使用してエフェクトを作成する方法の例をいくつか示します。
入力と出力を複数作成することで、同じカスタム motionPath ノードに複数の出力をアタッチします。一列になって同じパスを移動する複数のスキーヤーをシミュレートするには、各スキーヤーのパスに沿って異なる相対オフセットを指定するだけです。行進しながらコーナーをすばやく曲がる兵士の小隊をシミュレートするには、パスと水平方向の両方に沿ってオフセットを指定します。
MPxMotionPathNode クラスを使用して洗練されたパス アニメーション エフェクトを作成する方法のサンプルについては、motionPathNode デベロッパー キット サンプルを参照してください。
MPxAnimCurveInterpolator は、ユーザ定義のアニメーション カーブの補間タイプを作成するときに派生元にすることができる新しいクラスです。アニメーション カーブで 2 つのキーフレーム間を評価する方法を示します。
GPU オーバーライド デフォーマをサポートするために次の新しいクラスが追加されました。
デフォーマのクラスが再編成されました。新しいクラスは次のとおりです。
UV セット修正メッセージ(UV セットの追加と削除や現在の UV セットの切り替えに関する通知を含む)のためのコールバックを登録する新しい MPolyMessage::addUVSetChangedCallback()メソッドが追加されました。
メッシュの固定された UV と、それらの UV に関連付けられたピン ウェイトを取得するメソッド MFnMesh::getPinUVs()が追加されました。
新しい MPxPolyTweakUVInteractiveCommand コマンド プロキシ クラスが追加されました。このツール コマンド プロキシ クラスは、インタラクティブなコンテキスト内でポリゴン オブジェクトの UV をインタラクティブに編集する単純化された方法を提供します。ユーザは、インタラクティブなコマンドの実行中に新しい UV を提供することができます。編集を完了することで、すべてのインタラクティブな更新が単一のコマンドとして記録され、元に戻すこともできます。
MProfilingScope を使用してプロシージャを計測するときに、関連付けられている DG ノードを登録することもできます。このようにして、プロファイラ(Profiler) グラフで計測したイベントを選択すると、その関連付けられている DG ノードも選択され、アトリビュート エディタ(Attribute Editor)、アウトライナ(Outliner )、ノード エディタ(Node Editor)で表示されます。
MProfilingScope::MProfilingScope()がオプションの入力パラメータ MObject を受け入れるようになりました。このパラメータは計測されているプロシージャに関連付けられているノードをポイントします。
MObject 入力パラメータは、DG ノードをポイントする必要があり、アトリビュートやコンポーネントをポイントすることはできません。
import maya.OpenMaya as OpenMaya import maya.cmds as cmds testCategoryIndex = cmds.profiler(addCategory = "testCategory") def associatedNode(): # Create a cone myCone = cmds.polyCone() mSelList = OpenMaya.MSelectionList() OpenMaya.MGlobal.getActiveSelectionList( mSelList) # Prepare the MObject to point to the cone. coneObj = OpenMaya.MObject() mSelList.getDependNode(0, coneObj) # Instrument the procedure and register its associated DG node; that is the cone node that was just created. profiler = OpenMaya.MProfilingScope(testCategoryIndex, OpenMaya.MProfiler.kColorE_L1, "associatedNode", "associatedNodeDesc", coneObj) cmds.select( myCone[0] ) cmds.rotate( '45deg', 0, 0, r=True ) cmds.profiler(sampling = True) associatedNode() cmds.profiler(sampling = False)
Maya の C++ API が 64 ビット整数をサポートするようになりました。次のインタフェースが追加されました。
新しい MDGModifier::pythonCommandToExecute() が追加されました。これにより、ディペンデンシー グラフ モディファイアに対して Python コマンド/スクリプトを実行する処理を追加できます。
これは、MDGModifier::commandToExecute() メソッドに相当する Python メソッドです。
非仮想で保護された MPxShaderOverride メソッドは、.NET API で現在公開されており、ビューポート 2.0 でマテリアルをレンダリングするのに使用できます。