Maya 2016 の API の新機能

Maya 2016 Developer Kit は、オンラインの Autodesk Exchange (https://apps.exchange.autodesk.com/MAYA/ja/Home/Index)で利用できるようになりました。

次のセクションにジャンプします。

API の互換性

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 リリースでロードすると、ロードに失敗するか、予期しない動作を示します。

Python API 2.0

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 のリファレンスを参照してください。

レンダリング

OpenMayaRender

UI 描画マネージャの機能強化

次のイメージは、一連のアイコンを描画したもので、各アイコンは 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 形式では単一の深度ターゲットを定義することができます。

viewRenderOverride Developer Kit サンプル(viewRenderOverrideOperations.cpp)の関数 viewRenderSceneRender::displayModeOverride() が、kFlatShadedkShadeActiveOnly の使用法を示すように更新されました。

MRenderOperation の機能強化

MRenderUtilities の機能強化

新しい API を使用してスウォッチ レンダリングを実装するには、次の 3 つの方法があります。

  1. MPxHardwareShader::renderSwatchImage() および MPxHwShaderNode::renderSwatchImage() から、shape パラメータとして meshSpherecameraMode パラメータとして MRenderUtilities::kPerspectiveCameralightRig パラメータとして MRenderUtilities::kSwatchLight を指定して MRenderUtilities::renderMaterialViewerGeometry() を呼び出して、スウォッチをレンダリングします。

    shape パラメータとして meshPlanecameraMode として kOrthogonalCameraCloseUp を使用して、MPxHardwareShader::renderImage() および MPxHwShaderNode::renderImage() から UV エディタを生成することもできます。

  2. renderSwatchImage() は未実装のままにします。
  3. renderSwatchImage() を実装して MStatus::kNotImplemented を返します。

    2 番目と 3 番目の場合は、既定のスウォッチのレンダーにこの API が使用されます。

    次のデベロッパー キット サンプル プラグインが適宜更新されました。

    • 既定のスウォッチをレンダリングする: glslShader
    • 明示的に renderMaterialViewerGeometry() を呼び出す: hwPhongShaderhwColorPerVertexShaderpyHwColorPerVertexShader

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 バージョンのプラグインは、次の手順でテストすることができます。

  1. apiMeshShape.cpp の行 2289 で sUseSubSceneOverride を true に設定します。
  2. プラグインを再コンパイルします。
  3. ビューポート 2.0 で、Maya を DirectX11 モードで起動します(プリファレンス(Preferences)ウィンドウの表示(Display)セクションでこのオプションを選択します)。apiMeshShape.mll が MAYA_PLUG_IN_PATH 環境変数で指定したフォルダ内に配置されていることを確認します。
  4. 次の MEL コマンドを実行します。

    loadPlugin apiMeshShape; createNode apiMesh; createNode apiMeshCreator; connectAttr apiMeshCreator1.outputSurface apiMesh1.inputSurface ; sets -edit -forceElement initialShadingGroup |transform1|apiMesh1;

  5. ビューポート 2.0 からバウンディング ボックス モードに切り替えると、バウンディング ボックスが正しく表示されます。

コンポーネントの選択

MPxGeometryOverride の機能強化

MDrawRegistry の機能強化

MPxSubSceneOverride の機能強化

新しいクラス MSelectionContextMIntersectionMSelectionInfoMPxComponentConverter が、ビューポート 2.0 でのコンポーネントの選択をサポートするために追加されました。

注: コンポーネントの選択の新しいクラスとインタフェースは、次の条件のどちらかが true になっていて、ハードウェアの選択が有効になっている場合にのみ有効になります。

ユーティリティの機能強化

マニピュレータの機能強化

変更パラメータの機能強化

ハイパーシェードのサード パーティ製レンダラの実装

レンダラーの機能強化

レンダラの通知

レンダラ出力ターゲット サイズ オーバーライド

次の便利なメソッドが MRenderer に追加されました。

カラー管理の機能強化

ビューポート 2.0 でサポートされるシェーダのセマンティック

ビューポート 2.0 でサポートされるセマンティック」のリストが更新されました。

Developer Kit サンプル

このプラグインは、ディペンデンシー ノードを実装するだけでなく、ビューポート 2.0 でサーフェス シェーダの完全な実装を示します。

シェーディング フラグメントを定義して登録し、最終的なフラグメント グラフを作成する方法を例示します。

この例は、Maya の組み込みのフラグメントを再利用しない lambertShaderphongShader サンプルとは異なり、プラグインを介して独自のフラグメントを定義します。

このプラグインは、ディペンデンシー ノードを実装するだけでなく、ビューポート 2.0 でテクスチャ シェーダの完全な実装を示します。

シェーディング フラグメントを定義して登録し、最終的なフラグメント グラフを作成しディペンデンシー ノードに関連付ける方法を例示します。さらにこの例は、Maya のプロシージャ テクスチャの計算に使用されるノイズ ルックアップ テーブルを作成してアクセスする方法も例示します。

1 番目のシェーディング フラグメントは、ノイズ ルックアップ テーブルのテクスチャとサンプラ パラメータのペアを定義します。ノイズ ルックアップ テーブルは 3D テクスチャの作成に使用されます。3 D テクスチャは、ピクセル シェーダが最終的な '波' ノイズ結果の計算のために抽出することができるものです。注: 新しい MRenderUtil メソッドの noiseTableSize()valueInNoiseTable() は、ノイズ ルックアップ テーブルの値にアクセスするために使用します。詳細については、simpleNoiseShader Developer Kit サンプルを参照してください。

MUIDrawManager を使用するプラグイン コードには、次のような利点があります。

rawfootPrintNode の例が更新されました。メソッド MFrameContext::renderingDestination() を使用して M3dView を取得し、目的の名前を見つける方法や、その後に M3dView::getM3dViewFromModelPanel() を使用して、指定された目的の名前を持つパネルの対応する M3dView を取得する方法を示します。

次に、このサンプルで使用されるロジックの概要を説明します。

  1. MRenderer::addNotification() を呼び出して、ポスト レンダー コールバックを追加します。
  2. MRenderer::setOutputTargetOverrideSize() を呼び出して、出力ターゲット サイズのオーバーライドを設定します。
  3. キューを更新します。オーバーライド サイズのターゲットに対してレンダーが実行されます。
  4. コールバックが出力ターゲットの内容を読み込みます。
  5. MRenderer::unsetOutputTargetOverrideSize() を呼び出して、出力ターゲット サイズのオーバーライド設定を解除します。
  6. MRenderer::removeNotification() を呼び出して、コールバックを削除します。

SubSceneOverride バージョンが、DirectX11 モードのサポートを例示すために更新されました。詳細については、上記の MVertexBuffer および MIndexBuffer の強化機能セクションを参照してください。

  1. ファイルを Effects11 フォルダ(通常は C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\Effects11)にコピーします。
  2. Effects11_vs2012.vcxproj プロジェクト ファイルをロードして、Effects11 フォルダからソリューションをコンパイルします。

ドキュメントの更新

アニメーション

OpenMaya

Python プラグインのスケジュールが改善されました。以前は、Python ノードは並列で実行され、ロック競合に関する問題や評価速度が遅くなる原因になっていました。

Python プラグインは、グローバルにシリアル化されるようになり、GIL (グローバル インタプリタ ロック)に関する問題を回避し、全体的なパフォーマンスが向上しました。

プラグイン ノードのスケジュールを指定するために、次の新しい enum と仮想メソッドが MPxNode に追加されました。これらは、次のとおりです。

GPU オーバーライド デフォーマをサポートするために次の新しいクラスが追加されました。

MPxMotionPathNode

新しい MPxMotionPathNode クラスが追加され、ユーザ定義の motionPath ノードのベース クラスになりました。ユーザ独自のモーション パス クラスを作成できるようにするために、接続されたノードの位置、方向などのアトリビュートをパス沿いの位置に基づいて変換する方法を指定するメソッドが提供されています。MPxMotionPathNode クラスを使用するには、次のいずれかのワークフローを実行します。

組み込み motionPath ノードに対する MPxMotionPathNode の利点は、計算の実行方法をコントロールできることです。次に、MPxMotionPathNode ノードを使用してエフェクトを作成する方法の例をいくつか示します。

MPxMotionPathNode クラスを使用して洗練されたパス アニメーション エフェクトを作成する方法のサンプルについては、motionPathNode Developer Kit サンプルを参照してください。

MPxAnimCurveInterpolator

MPxAnimCurveInterpolator は、ユーザ定義のアニメーション カーブの補間タイプを作成するときに派生元にすることができる新しいクラスです。アニメーション カーブで 2 つのキーフレーム間を評価する方法を示します。

OpenMayaAnim

GPU オーバーライド デフォーマをサポートするために次の新しいクラスが追加されました。

デフォーマのクラスが再編成されました。新しいクラスは次のとおりです。

OpenMayaUI

Developer Kit サンプル

モデリング

OpenMaya

MPolyMessage の機能強化

MFnMesh の機能強化

OpenMayaUI

新しいコンテキスト プロキシ クラス

新しいコマンド プロキシ クラス

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)

64 ビット整数のサポート

Maya の C++ API が 64 ビット整数をサポートするようになりました。次のインタフェースが追加されました。

このクラスは、Python API 2.0 からも使用できます。

制限事項:

一般

ノードの UUID (Universally Unique Identifier)

MDGModifier::commandToExecute() に相当する Python が追加されました

新しい MDGModifier::pythonCommandToExecute() が追加されました。これにより、ディペンデンシー グラフ モディファイアに対して Python コマンド/スクリプトを実行する処理を追加できます。

これは、MDGModifier::commandToExecute() メソッドに相当する Python メソッドです。

削除されたクラス

サポートされていない旧式のクロス MCloth クラスが削除されました。

.NET API

非仮想で保護された MPxShaderOverride メソッドは、.NET API で現在公開されており、ビューポート 2.0 でマテリアルをレンダリングするのに使用できます。