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-2016 を参照してください。
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 Service Pack リリースでロードすると、ロードに失敗するか、予期しない動作を示します。
Extension for Maya 2015 以降、23 の新しいクラスが Python API 2.0 に追加され、追加の Developer Kit サンプルも Maya Developer Kit の plug-ins\scripted フォルダで使用できるようになりました。すべての Python API 2.0 Developer Kit サンプルには、プリフィックス py を使用した名前が付きます。
Extension for Maya 2015 以降に追加された Python クラスのリストについては、「Maya 2016 の新しい Python API 2.0 クラス」を参照してください。
Python の Learning Path は、Python API 2.0 のサンプルを含むように更新されました。
詳細については、Maya Python API 2.0 のリファレンスを参照してください。
UI 描画マネージャの機能強化
UI マネージャ インタフェースによって行われる呼び出しの順序が、旧式の既定ビューポートで使用されていた順序と同じになりました。
内部で指定されたアイコンの描画をサポートするために、次のインタフェースが追加されました。
getIconNames( MStringArray &iconNames ): このスタティック メソッドを使用すると、プラグインで icon()メソッドを使用して、利用可能なアイコン名のリストを照会することができます。
uiDrawManager Developer Kit サンプルが修正され、アトリビュート エディタからアイコン名とスケール係数を選択する機能と、ロケータごとにアイコンを描画するオプションが含まれるようになりました。アイコン(icon)オプションは、UI タイプ(UI Type)ドロップ ダウンリストに表示されます。また、Icon アトリビュートと Icon Scale アトリビュートのドロップダウン リストが含まれているアイコン パラメータ(Icon Parameters)セクションを使用することができます。
次のイメージは、一連のアイコンを描画したもので、各アイコンは uiDrawManager Developer Kit サンプルを使用して作成されたロケータです。
MShaderInstance の機能強化
MShaderManager の機能強化
MRenderItem の機能強化
シェーダ フラグメントの機能強化
v2pFragment.xsd はシェーディング フラグメントの XML スキーマであり、「シェーディング フラグメントの XML スキーマ」でも説明されています。
vp2FragmentGraph.xsd はフラグメント グラフの XML スキーマであり、「フラグメント グラフの XML スキーマ」で説明されています。
MFrameContext の機能強化
「ハードウェア フォグ固有のセマンティック」および「ビューポート 2.0 によってサポートされるシェーダのセマンティック」も参照してください。
MDrawContext の機能強化
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 イメージを出力するようになりました。
MSceneRender::MDisplayMode に MSceneRender::kFlatShaded および MSceneRender::kShadeActiveOnly が追加されました。MSceneRender::kTextured が個別の enum になり、MSceneRender::kShaded または MSceneRender::kFlatShaded とともに使用できるようになりました。これらの変更により、ユーザはシーン レンダー オーバーライドで設定可能な表示モードを詳細にコントロールできるようになりました。
viewRenderOverride Developer Kit サンプル(viewRenderOverrideOperations.cpp)の関数 viewRenderSceneRender::displayModeOverride() が、kFlatShaded と kShadeActiveOnly の使用法を示すように更新されました。
MRenderOperation の機能強化
MRenderUtilities の機能強化
新しい API を使用してスウォッチ レンダリングを実装するには、次の 3 つの方法があります。
MPxHardwareShader::renderSwatchImage() および MPxHwShaderNode::renderSwatchImage() から、shape パラメータとして meshSphere、cameraMode パラメータとして MRenderUtilities::kPerspectiveCamera、lightRig パラメータとして MRenderUtilities::kSwatchLight を指定して MRenderUtilities::renderMaterialViewerGeometry() を呼び出して、スウォッチをレンダリングします。
shape パラメータとして meshPlane、cameraMode として kOrthogonalCameraCloseUp を使用して、MPxHardwareShader::renderImage() および MPxHwShaderNode::renderImage() から UV エディタを生成することもできます。
renderSwatchImage() を実装して MStatus::kNotImplemented を返します。
2 番目と 3 番目の場合は、既定のスウォッチのレンダーにこの API が使用されます。
次のデベロッパー キット サンプル プラグインが適宜更新されました。
MPxSubSceneOverride の機能強化
MRenderTarget の機能強化
MTexture の機能強化
MTextureManager の機能強化
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)」の平行モードの説明を参照してください。
MPxDrawOverride の機能強化
MPxShaderOverride の機能強化
次の新しいメソッドでは、プラグイン作成者が非テクスチャ モードで使用されるシェーダを指定することができます。このメソッドを指定しない場合は、固定のグレーのシェーダが常に使用されます。
MVertexBuffer および MIndexBuffer の機能強化
SubSceneOverride バージョンのプラグインは、次の手順でテストすることができます。
次の MEL コマンドを実行します。
loadPlugin apiMeshShape; createNode apiMesh; createNode apiMeshCreator; connectAttr apiMeshCreator1.outputSurface apiMesh1.inputSurface ; sets -edit -forceElement initialShadingGroup |transform1|apiMesh1;
ビューポート 2.0 からバウンディング ボックス モードに切り替えると、バウンディング ボックスが正しく表示されます。
MPxGeometryOverride の機能強化
MDrawRegistry の機能強化
MPxSubSceneOverride の機能強化
新しいクラス MSelectionContext、MIntersection、MSelectionInfo、MPxComponentConverter が、ビューポート 2.0 でのコンポーネントの選択をサポートするために追加されました。
注: コンポーネントの選択の新しいクラスとインタフェースは、次の条件のどちらかが true になっていて、ハードウェアの選択が有効になっている場合にのみ有効になります。
多くの組み込みプロシージャ テクスチャ(ノイズ、フラクタル、ボリューム ノイズ、ソリッド フラクタルなど)の計算に使用される定数ノイズ ルックアップ テーブルにアクセスするために、いくつかのメソッドが MRenderUtil に追加されました。
MGeometryUtilities::acquireReferenceGeometry() が修正され、MGeometryUtilities::releaseReferenceGeometry() を呼び出したときにメモリが適切に解放されるようになりました。
beginDrawable(unsigned int name, bool nameIsPickable) メソッドの新しいバリエーション MUIDrawManager::beginDrawable() が追加されました。これにより、MPxManipulatorNode::colorAndName()とよく似た方法でマニピュレータを選択できるようになりました。
新しいメソッド MPxManipulatorNode::shouldDrawHandleAsSelected() が追加されました。これは、マニピュレータ ハンドルがビューポート 2.0 で選択またはハイライトされたときに描画されたかどうかを照会します。
MUiMessage で提供されるインタフェースと同様に、プラグインでもレンダー前とレンダー後の通知を追加できるようになりました。
MHWRender::MRenderer に次の新しいインタフェースが追加されました。
存在する通知の数を照会する機能:
void GPUmaximumOutputTargetSize(unsigned int& w, unsigned int& h) const
プラグインで最大許容出力ターゲット サイズを照会することができます。
void setOutputTargetOverrideSize(unsigned int w, unsigned int h)
プラグインで出力ターゲット サイズのオーバーライドを設定することができます。
void getOutputTargetOverrideSize(int & w, int & h)
プラグインでオーバーライド サイズの値を照会することができます。何も設定していない場合は、(-1, -1) が返されます。
void unsetOutputTargetOverrideSize()
プラグインでオーバーライド サイズをセット解除またはリセット(-1, -1 に設定)することができます。
MStatus outputTargetSize(unsigned int& w, unsigned int& h) const
このメソッドは、任意のオーバーライド出力サイズを考慮します。これは新しいメソッドではありません。
新しいプラグイン サンプル blast2Cmd は、ディスクにイメージをキャプチャするポスト通知の使用例を示します。サポートされていない blastCmd に似ています。詳細については、以下の Developer Kit サンプルを参照してください。
次の便利なメソッドが MRenderer に追加されました。
「ビューポート 2.0 でサポートされるセマンティック」のリストが更新されました。
新しい viewObjectSetOverride デベロッパー キット サンプルが追加されました。このサンプルについては、「複数パス シーンのレンダリング」で説明します。
新しいプラグイン onbShader がデベロッパー キットに追加されました。これは、Maya で onbShader と呼ばれるサーフェス シェーダとしてディペンデンシー ノードを作成します。
このプラグインは、ディペンデンシー ノードを実装するだけでなく、ビューポート 2.0 でサーフェス シェーダの完全な実装を示します。
シェーディング フラグメントを定義して登録し、最終的なフラグメント グラフを作成する方法を例示します。
この例は、Maya の組み込みのフラグメントを再利用しない lambertShader や phongShader サンプルとは異なり、プラグインを介して独自のフラグメントを定義します。
このプラグインは、ディペンデンシー ノードを実装するだけでなく、ビューポート 2.0 でテクスチャ シェーダの完全な実装を示します。
シェーディング フラグメントを定義して登録し、最終的なフラグメント グラフを作成しディペンデンシー ノードに関連付ける方法を例示します。さらにこの例は、Maya のプロシージャ テクスチャの計算に使用されるノイズ ルックアップ テーブルを作成してアクセスする方法も例示します。
1 番目のシェーディング フラグメントは、ノイズ ルックアップ テーブルのテクスチャとサンプラ パラメータのペアを定義します。ノイズ ルックアップ テーブルは 3D テクスチャの作成に使用されます。3 D テクスチャは、ピクセル シェーダが最終的な '波' ノイズ結果の計算のために抽出することができるものです。注: 新しい MRenderUtil メソッドの noiseTableSize() と valueInNoiseTable() は、ノイズ ルックアップ テーブルの値にアクセスするために使用します。詳細については、simpleNoiseShader Developer Kit サンプルを参照してください。
MUIDrawManager を使用するプラグイン コードには、次のような利点があります。
rawfootPrintNode の例が更新されました。メソッド MFrameContext::renderingDestination() を使用して M3dView を取得し、目的の名前を見つける方法や、その後に M3dView::getM3dViewFromModelPanel() を使用して、指定された目的の名前を持つパネルの対応する M3dView を取得する方法を示します。
新しいプラグイン footPrintNode_GeometryOverride が追加されました。これは、同時に表示する必要があるロケータの数が多いときにも良好な描画パフォーマンスを得るために、MPxGeometryOverride を使用してロケータを実装します。Python バージョンも使用できます。
blast2Cmd デベロッパー キット サンプルは、ビデオ キャプチャを実行する新しいプラグインです。出力ターゲット サイズを設定およびオーバーライドしたり、レンダラの通知コールバックをアタッチします。コールバックはコマンドが出力する必要がある各フレームで呼び出されます。レンダー ターゲットをテクスチャにコピーして戻すときに既存のインタフェースを使用し、ディスクに保存するときに組み込みのテクスチャ保存機能を使用します。レンダー ターゲットが固定された点である場合は、プラグインは IFF フォーマットでイメージを保存します。それ以外で、浮動小数点である場合は、プラグインは EXR フォーマットで保存します。
次に、このサンプルで使用されるロジックの概要を説明します。
SubSceneOverride バージョンが、DirectX11 モードのサポートを例示すために更新されました。詳細については、上記の MVertexBuffer および MIndexBuffer の強化機能セクションを参照してください。
「フレームと描画のコンテキスト」トピックが追加されました。
「複数のパス シーンのレンダリング」セクションが追加されました。
postEvaluation() 関数の使用法を示す simpleEvaluationDraw Developer Kit サンプルが追加されました。
プラグインは、スケジュールする方法について評価マネージャにヒントを与えることができるようになりました。
Python プラグインのスケジュールが改善されました。以前は、Python ノードは並列で実行され、ロック競合に関する問題や評価速度が遅くなる原因になっていました。
Python プラグインは、グローバルにシリアル化されるようになり、GIL (グローバル インタプリタ ロック)に関する問題を回避し、全体的なパフォーマンスが向上しました。
プラグイン ノードのスケジュールを指定するために、次の新しい enum と仮想メソッドが MPxNode に追加されました。これらは、次のとおりです。
GPU オーバーライド デフォーマをサポートするために次の新しいクラスが追加されました。
プラグインで MMatrixArray アトリビュート タイプを使用することができる新しい MFnMatrixArrayData クラスが追加されました。これは、MMatrix タイプを複数作成するのではなく、よりコンパクトなグラフを生成するために使用することができます。このタイプを 1 回即座に使用することは、新しい DeltaMush デフォーマによって計算されたキャッシュ フレーム情報を読み取ることに相当します。
新しい MPxMotionPathNode クラスが追加され、ユーザ定義の motionPath ノードのベース クラスになりました。ユーザ独自のモーション パス クラスを作成できるようにするために、接続されたノードの位置、方向などのアトリビュートをパス沿いの位置に基づいて変換する方法を指定するメソッドが提供されています。MPxMotionPathNode クラスを使用するには、次のいずれかのワークフローを実行します。
組み込み motionPath ノードに対する MPxMotionPathNode の利点は、計算の実行方法をコントロールできることです。次に、MPxMotionPathNode ノードを使用してエフェクトを作成する方法の例をいくつか示します。
MPxMotionPathNode クラスを使用して洗練されたパス アニメーション エフェクトを作成する方法のサンプルについては、motionPathNode Developer Kit サンプルを参照してください。
MPxAnimCurveInterpolator は、ユーザ定義のアニメーション カーブの補間タイプを作成するときに派生元にすることができる新しいクラスです。アニメーション カーブで 2 つのキーフレーム間を評価する方法を示します。
GPU オーバーライド デフォーマをサポートするために次の新しいクラスが追加されました。
デフォーマのクラスが再編成されました。新しいクラスは次のとおりです。
MPolyMessage の機能強化
MFnMesh の機能強化
メッシュの「固定された」UV と、それらの UV に関連付けられたピン ウェイトを取得するメソッド MFnMesh::getPinUVs()が追加されました。**
thickness オプションと offset オプションが MFnMesh::extrudeFaces() 関数と MFnMesh::extrudeEdges() 関数に追加されました。これらのパラメータは、フェースの押し出しのアトリビュートとエッジ ノードに直接マップされます。
新しいコンテキスト プロキシ クラス
新しいコマンド プロキシ クラス
MPxContext の機能強化
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 ビット整数をサポートするようになりました。次のインタフェースが追加されました。
このクラスは、Python API 2.0 からも使用できます。
制限事項:
新しい MDGModifier::pythonCommandToExecute() が追加されました。これにより、ディペンデンシー グラフ モディファイアに対して Python コマンド/スクリプトを実行する処理を追加できます。
これは、MDGModifier::commandToExecute() メソッドに相当する Python メソッドです。
サポートされていない旧式のクロス MCloth クラスが削除されました。
非仮想で保護された MPxShaderOverride メソッドは、.NET API で現在公開されており、ビューポート 2.0 でマテリアルをレンダリングするのに使用できます。