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 を参照してください。

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 サービス パック リリースにロードされた場合、ロードできないか、予測できない動作をします。

Python API 2.0

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 クラス」を参照してください。

Python の Learning Path は、Python API 2.0 のサンプルを含むように更新されました。

詳細については、Maya Python API 2.0 のリファレンスを参照してください。

レンダリング

OpenMayaRender

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

  • UI マネージャ インタフェースによって行われる呼び出しの順序が、旧式の既定ビューポートで使用されていた順序と同じになりました。

  • 多くのポイントまたはラインを描画するために、次の便利なメソッドが追加されました。
    • points (const MPointArray& points, bool draw2D): 2D または 3D でポイントを描画します。
    • lineList (const MPointArray& points, bool draw2D): 2D または 3D でライン セグメント(セグメントごとに 1 組のポイント)のリストを描画します。
    • lineStrip (const MPointArray& points, bool draw2D): 2D または 3D でライン ストリップ(接続されたライン セグメント)を描画します。
    • uiDrawManager デベロッパー キット サンプルは修正され、これら 3 つの新しいインタフェースを使用して描画するオプションが含まれるようになりました。
  • 内部で指定されたアイコンの描画をサポートするために、次のインタフェースが追加されました。
    • icon( const MString &iconName, float scale): このメソッドは、指定された名前の 3D スケールのアイコンを 1 つ描画します。
    • getIconNames( MStringArray &iconNames): このスタティック メソッドでは、プラグインが icon()メソッドを使用して、利用可能なアイコン名のリストを照会することができます。

    uiDrawManager デベロッパー キット サンプルは修正され、アトリビュート エディタからアイコン名とスケール係数を選択する機能と、ロケータごとにアイコンを描画するオプションが含まれるようになりました。アイコン(icon)オプションは、UI タイプ(UI Type)ドロップ ダウンリストに表示されます。アイコン パラメータ(Icon Parameters)セクションが使用できるようになり、このセクションには Icon アトリビュートと Icon Scale アトリビュートのドロップダウン リストが含まれています。

    次のイメージは、一連のアイコンの描画で、各アイコンは uiDrawManager デベロッパー キット サンプルを使用して作成されたロケータです。

MShaderInstance の機能強化

MShaderManager の機能強化

MRenderItem の機能強化

シェーダ フラグメントの機能強化

  • Maya インストールの ..bin/ShadeFragment フォルダのインストールの一部として、XML スキーマ ファイルが使用できるようになりました。

    v2pFragment.xsd はシェーディング フラグメントの XML スキーマであり、「シェーディング フラグメントの XML スキーマ」でも説明されています。

    vp2FragmentGraph.xsd はフラグメント グラフの XML スキーマであり、「フラグメント グラフの XML スキーマ」で説明されています。

  • シェーディング フラグメントの XML スキーマ」トピックは更新され、<xs:simpleType name="LanguageType"> セクションにライン <xs:enumeration value="GLSL" /> が含まれるようになりました。このラインは、Maya 2016 が GLSL フラグメントをサポートするようになったために追加されました。
  • フラグメント グラフの XML スキーマ」トピックは更新され、スキーマの <xs:complexType name="ConnectionListType"> セクションにライン <xs:attribute name="name" type="xs:string" /> が追加されました。
  • phong1 のフラグメント グラフの XML ファイル」トピックで、phong1 をルートとするシェーディング ネットワークのフラグメント グラフの XML ファイルの例を示します。
  • ソフトウェア シェーダに次の名前を持つアトリビュートがあり、シェーダのオーバーライドが指定されていない場合は、これらの値をビューポート 2.0 で表示するための自動マッピングが試行されます。このフィーチャは既にサポートされているアトリビュートに加えて提供されます。詳細については、「phong1 のフラグメント グラフの XML ファイル」を参照してください。
    • translucence: float アトリビュート タイプ
    • translucenceFocus: float アトリビュート タイプ
    • translucenceDepth: float アトリビュート タイプ
    • matteOpacity: float アトリビュート タイプ
    • mattOpacityMode: 16 ビット、32 ビット、または enum アトリビュート タイプ

MFrameContext の機能強化

MDrawContext の機能強化

MRenderOverride の機能強化

  • オーバーライドでカスタム MUserRenderOperation が定義されている場合は、ユーザ操作が呼び出される前に、以前にバインドされたすべての頂点バッファがバインド解除されるようになりました。以前は、このバインド解除を実行するかどうかは、ユーザ操作次第でした。
  • 以前は、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::MLightingModeMSceneRender::kNoLight が追加されました。これにより、シーン レンダー オーバーライドでライトを使用しない(Use No Lights)モードを設定できるようになりました。
  • MSceneRender::MDisplayModeMSceneRender::kFlatShadedMSceneRender::kShadeActiveOnly が追加されました。MSceneRender::kTextured が個別の enum になり、MSceneRender::kShaded または MSceneRender::kFlatShaded とともに使用できるようになりました。これらの変更により表示モードを詳細にコントロールできるようになり、ユーザはシーン レンダー オーバーライドを設定することができます。

    viewRenderOverride デベロッパー キット サンプル(viewRenderOverrideOperations.cpp)の関数 viewRenderSceneRender::displayModeOverride()が、kFlatShadedkShadeActiveOnly の使用法を示すように更新されました。

MRenderOperation の機能強化

MRenderUtilities の機能強化

  • MRenderUtilities::acquireSwatchDrawContext()MRenderUtilities::acquireUVTextureDrawContext()がオプションのパラメータとしてカラー ターゲットと深度ターゲットを受け取るようになりました。有効なターゲットを渡すと、GL とコア プロファイルのビューポート 2.0 デバイスで適切な GL コンテキスト も有効にされます。
  • MRenderUtilities::releaseDrawContext()がオプションのパラメータを受け取るようになりました。このパラメータは、以前は上述の acquireSwatchDrawContext()関数と acquireUVTextureDrawContext()関数で使用されていた描画ターゲットを解放します。
  • 新しい MRenderUtilities::renderMaterialViewerGeometry()メソッドが追加されました。これにより、ハイパーシェード(Hypershade)マテリアル ビューア(Material Viewer)の ビューポート 2.0 実装を活用してスウォッチ レンダリングを描画することができます。

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

    1. MPxHardwareShader::renderSwatchImage()MPxHwShaderNode::renderSwatchImage()から MRenderUtilities::renderMaterialViewerGeometry()を呼び出します。meshSphereshape パラメータ、MRenderUtilities::kPerspectiveCameracameraMode パラメータ、MRenderUtilities::kSwatchLightlightRig パラメータとしてスウォッチをレンダーします。

      meshPlaneshape パラメータ、kOrthogonalCameraCloseUpcameraMode として使用して MPxHardwareShader::renderImage()MPxHwShaderNode::renderImage()から UV エディタ イメージを生成することもできます。

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

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

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

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

MPxSubSceneOverride の機能強化

  • MVertexBuffer::resourceHandle()インタフェースを使用するユーザ定義バッファの設定が修正されました。
  • シンプルな UI シェイプ(ライン、円、テキストなど)を描画する MPxSubSceneOverride::hasUIDrawables()MPxSubSceneOverride::areUIDrawablesDirty()MPxSubSceneOverride::addUIDrawables()が追加されました。
    • addUIDrawables()をオーバーライドする場合は、hasUIDrawables()も true を返すようにオーバーライドする必要があります。
    • areUIDrawablesDirty()が true を返す場合は、描画可能な UI はクリアされ、リフレッシュするごとに再度追加されます。このメソッドが false を返す場合は、描画可能な UI は保持され、オーバーライドに関連付けられている DAG オブジェクトが破棄されるかオーバーライドが登録解除されるまで保持されます。
    • 描画可能な UI は、描画とトランスフォームのインスタンスのインスタンス化をサポートしていません。
    • apiMeshShape デベロッパー キット サンプル(apiMeshSubSceneOverride.cpp)は、これらの関数の使用例を示します。

MRenderTarget の機能強化

  • スタティック メソッド MRenderTarget::freeRawData()が追加されました。これにより、デバッグモードでコンパイルされたプラグインが MRenderTarget::rawData()によって割り当てられたメモリを安全に解放できるようになりました。

MTexture の機能強化

  • スタティック メソッド MTexture::freeRawData()が追加されました。これにより、デバッグモードでコンパイルされたプラグインが MTexture::rawData()によって割り当てられたメモリを安全に解放できるようになりました。

MTextureManager の機能強化

  • 新しいバージョンの 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)」の平行モードの説明を参照してください。

MPxDrawOverride の機能強化

  • MPxDrawOverride::boundingBox function()関数が純粋な仮想関数から仮想関数に変更されました。これにより、ユーザは、常にオーバーライド実装を提供する必要がなくなりました。既定の実装は、カリングされることのない大きなバウンディング ボックスを返します。

MPxShaderOverride の機能強化

次の新しいメソッドでは、プラグイン作成者が非テクスチャ モードで使用されるシェーダを指定することができます。このメソッドを指定しない場合は、固定のグレーのシェーダが常に使用されます。

  • MHWRender::MShaderInstance * MHWRender::MPxShaderOverride::nonTexturedShaderInstance ( bool & monitorNode )
  • この MPxShaderOverride::nonTexturedShaderInstance()メソッドは、非テクスチャ モードで描画するときに使用されるオーバーライド シェーダ インスタンスを返します。Null が返された場合は、内部的に定義された修正不可のシェーダ インスタンスが使用されます。このメソッドで true を返すように monitorNode パラメータを設定すると、関連付けられているシェーダ ノードは更新フェーズ中にオーバーライドに対応するモニタが必要であることを示します。
  • 詳細については、「エフェクト オーバーライド」を参照してください。
  • シェーダで非マテリアル アイテム(ワイヤフレーム、エッジや頂点のコンポーネントなど)の既定のエフェクトを置き換えることができる新しい関数 MPxShaderOverride::overridesNonMaterialItems()。これは、ディスプレイスメントが含まれているシェーダ オーバーライドの場合に便利です。

MVertexBuffer および MIndexBuffer の機能強化

  • MVertexBuffer::resourceHandle()MIndexBuffer::resourceHandle()がビューポート 2.0 の DirectX11 モードでサポートされるようになりました。
  • SubSceneOverride バージョンの apiMeshShape デベロッパー キット サンプルが、これらのメソッドの使用例を示すように更新されました。

    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 の場合で、ハードウェアの選択が有効になっている場合にのみ有効になります。
  • コア プロファイル モードで Maya を実行している
  • 環境変数 MAYA_USE_HARDWARE_SELECTION = 1 を設定している

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

  • 多くの組み込みプロシージャ テクスチャ(ノイズ、フラクタル、ボリューム ノイズ、ソリッド フラクタルなど)の計算に使用される定数ノイズ ルックアップ テーブルにアクセスするために、いくつかのメソッドが MRenderUtil に追加されました。

  • MGeometryUtilities::acquireReferenceGeometry()が修正され、MGeometryUtilities::releaseReferenceGeometry()を呼び出したときにメモリが適切に解放されるようになりました。

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

  • MUIDrawManager::beginDrawable()メソッドの新しいバリエーション beginDrawable(unsigned int name, bool nameIsPickable)が追加されました。これにより、MPxManipulatorNode::colorAndName()とよく似た方法でマニピュレータを選択できるようになりました。

  • 新しいメソッド MPxManipulatorNode::shouldDrawHandleAsSelected()が追加されました。これは、マニピュレータ ハンドルがビューポート 2.0 で選択またはハイライトされたときに描画されたかどうかを照会します。

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

  • シェーディング ノード オーバーライド フラグメントに新しい colorset セマンティックが追加されました。4-float の colorset 変数パラメータは頂点カラーを表します。複数の colorset 変更パラメータがサポートされる点を除いて、fcolor セマンティックと同じです。「シェーディング ノード オーバーライド」を参照してください。

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

  • 新しいクラス MPxRenderer が追加され、ハイパーシェード(Hypershade)マテリアル ビューア(Material Viewer)でレンダリングするためにプラグインがサード パーティ製レンダラを実装できるようになりました。

レンダラーの機能強化

レンダラの通知

  • MUiMessage で提供されるインタフェースと同様に、プラグインでもレンダー前とレンダー後の通知を追加できるようになりました。

  • MHWRender::MRenderer に次の新しいインタフェースが追加されました。

    • 通知コールバック タイプ:
      • typedef void (*NotificationCallback)(MDrawContext& context, void* clientData);
    • レンダリング パイプラインの特定のセマンティックの時点で通知を追加する方法。
    • 追加された通知を削除する方法。
    • 存在する通知の数を照会する機能:
      • unsigned int notificationCount(const MString& semanticLocation) const;

      利点の 1 つは、これまではアクセスする正しいバッファの判定はほとんどの場合勘に頼っていましたが、レンダリングに使用されるオフスクリーン バッファやターゲットを取得できるようになったことです。一般的に、これは OpenGL のバック バッファになります。ただし、Linux の統合バック バッファでは機能しません。新しいインタフェースには、プラットフォームと描画 API 診断からアクセスすることができます。

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

  • API を介して、ビューポートのレンダリングで使用される出力ターゲット サイズをオーバーライドすることが可能になりました。これは、ビューポート サイズと直接は一致しないイメージのキャプチャに使用することができます。つまり、ビューポート サイズとキャプチャ サイズを一致させる必要はありません。
  • 次の新しい API エントリ ポイントを 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

      このメソッドは、任意のオーバーライド出力サイズを考慮します。これは新しいメソッドではありません。

  • ビューポート 2.0 の通知とオーバーライド サイズのキャプチャ サンプル:
    • 新しいプラグイン サンプル blast2Cmd は、ディスクにイメージをキャプチャするポスト通知の使用例を示します。サポートされていない blastCmd に似ています。詳細については、以下の Developer Kit サンプルを参照してください。

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

  • MRenderer::useGradient(): グラディエント バックグラウンド オプションが有効になっているかどうかを返します。
  • MRenderer::clearColor(): グラディエント バックグラウンドで使用されている最初のカラーまたは、グラディエントを使用していない場合はバックグラウンド カラーを返します。
  • MRenderer::clearColor2(): グラディエント バックグラウンドで使用されている 2 番目のカラーを返します。

カラー管理の機能強化

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

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

Developer Kit サンプル

  • Python API 2.0 デベロッパー キット サンプルは、plug-ins¥scripted フォルダにあります。それぞれが、対応する C++ サンプルと同じ名前を持ちますが、プリフィックスは py です。
  • 新しい viewObjectSetOverride デベロッパー キット サンプルが追加されました。このサンプルについては、「複数パス シーンのレンダリング」で説明します。

  • 新しいプラグイン onbShader がデベロッパー キットに追加されました。これは、Maya で onbShader と呼ばれるサーフェス シェーダとしてディペンデンシー ノードを作成します。

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

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

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

  • 新しいプラグイン simpleNoiseShader がデベロッパー キットに追加されました。これは、simpleNoise という名前のテクスチャ シェーダとしてディペンデンシー ノードを作成し、このノードは Maya の波ノイズ テクスチャ タイプを実装します。

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

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

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

  • footPrintNode デベロッパー キット サンプルは単純化され、MUIDrawManager を使用して、ビューポート 2.0 で単純なロケータを描画する方法を例示するようになりました。

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

    • Maya 2016 の新機能であるビューポート 2.0 のベース選択で機能します。
    • 一度書き込むと、すべてのプラットフォームとすべての描画 API (OpenGL コア プロファイルを含む)で使用することができます。

    元のサンプルは、未処理の OpenGL/DX コールを使用してロケータを描画する方法を説明する rawfootPrintNode に名前が変更されました。

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

  • 新しいプラグイン footPrintNode_GeometryOverride が追加されました。これは、同時に表示する必要があるロケータの数が多いときにも良好な描画パフォーマンスを得るために、MPxGeometryOverride を使用してロケータを実装します。Python バージョンも使用できます。

  • blast2Cmd デベロッパー キット サンプルは、ビデオ キャプチャを実行する新しいプラグインです。出力ターゲット サイズを設定およびオーバーライドしたり、レンダラの通知コールバックをアタッチします。コールバックはコマンドが出力する必要がある各フレームで呼び出されます。レンダー ターゲットをテクスチャにコピーして戻すときに既存のインタフェースを使用し、ディスクに保存するときに組み込みのテクスチャ保存機能を使用します。レンダー ターゲットが固定された点である場合は、プラグインは IFF フォーマットでイメージを保存します。それ以外で、浮動小数点である場合は、プラグインは EXR フォーマットで保存します。

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

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

  • vp2BlinnShaderMPxShaderOverride の単純化された使用例です。プラグインは、このタイプのオーバーライドの基本的なインタフェースの使用方法を示します。このサンプルは MShaderInstance を使用します。これは、シェーダ マネージャ(MShaderManager)にストック Blinn シェーダを求めることで取得されます。このように、シェーダのジオメトリ要件をシェーダ インスタンス自体から取得することができます。この例では、追加の DX11 シェーダ署名は必要ありません。描画用の内部メソッドも使用されます。ストック シェーダには自動的に更新される自前のライト バインディングがあるため、追加のライト操作は必要ありません。このプラグインは、実装が内部的に提供されるので、すべてのプラットフォームと現在サポートされているすべての描画 API (OpenGL、OpenGL コア プロファイル、DX11)で実行することができます。したがって、追加のシェーディング コードは必要ありません。
  • apiMeshShape プラグイン(およびその Python バージョンである pyApiMeshShape.py)が、MPxGeometryOverrideMPxSubSceneOverride を使用するビューポート 2.0 でのコンポーネントの選択を実行するために更新されました。これらのプラグインは、複製と不明なストリームを適切に管理するためにも更新され、複数の UV ストリームまたは従法線と複接線を必要とするエフェクトを使用できるようになりました。

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

  • brickShader プラグイン(C++ と Python の両方のバージョン)が、GLSL をサポートするように更新されたため、Maya ビューポートの OpenGL コア プロファイル モードで実行されるようになりました。GLSL のシェーダ フラグメントは、HLSL 実装に基づいて作成されました。
  • viewOverrideSimple サンプル プラグインが追加されました。これは、MRenderOverride の使用方法を説明しており、初心者を対象にした簡単な例です。ビューポート メニューにレンダラーとして表示されるレンダー オーバーライドを作成し、シーンおよび HUD を描画して、バックグラウンドのカラー オーバーライドを実行します。レンダー オーバーライドを作成する例で使用されているロジックは、Maya の内部レンダリング パイプラインで使用されているものとほぼ一致します。
  • デベロッパー キットに提供される DX11 シェーダ プラグインを Visual Studio 2012 を使用してコンパイルするには、はじめに devkit/plug-ins/dx11Shader フォルダに提供されている Visual Studio 2012 プロジェクト ファイル(Effects11_vs2012.vcxproj)を使用して、次の手順で Microsoft DirectX SDK Effects11 ライブラリをコンパイルする必要があります。

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

ドキュメントの更新

アニメーション

OpenMaya

  • 評価マネージャの状態を照会することができる新しい MEvaluationManager クラスが追加されました。simpleEvaluationNode デベロッパー キット サンプルはこのクラスの使用例を示します。
  • MPxNode に新しい preEvaluation()postEvaluation()仮想メソッドが追加されました。
  • 評価マネージャによる評価の前にダーティに設定される一連のアトリビュートとプラグのセットへのアクセスを提供するために、新しい MEvaluationNode クラスが追加されました。
  • スレッド化された評価をサポートするために MPxNode::preEvaluation()MPxNode::postEvaluation()によって使用される新しい MEvaluationNodeIterator クラスが追加されました。このクラスは、指定した MEvaluationNode で評価マネージャによる評価の前にダーティに設定される一連のアトリビュートとプラグのセットを容易に反復するために使用します。
  • preEvaluation()関数の使用法を示す simpleEvaluationNode デベロッパー キット サンプルが追加されました。
  • postEvaluation()関数の使用法を示す simpleEvaluationDraw デベロッパー キット サンプルが追加されました。
  • プラグインは、スケジュールする方法について評価マネージャにヒントを与えることができるようになりました。

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

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

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

    • ::SchedulingType
    • ユーザは MPxNode::schedulingType() const 関数をオーバーライドすることができます。この関数は、ノードの目的のスケジュール タイプを返します。

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

  • 新しい MFnMatrixArrayData クラスが追加されました。このクラスでは、プラグインで MMatrixArray アトリビュート タイプを使用することができます。これは、MMatrix タイプを複数作成するのではなく、よりコンパクトなグラフを生成するために使用することができます。このタイプを 1 回即座に使用することは、新しい DeltaMush デフォーマによって計算されたキャッシュ フレーム情報を読み取ることに相当します。

MPxMotionPathNode

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

  • position()getVectors()banking()などの個別の関数を介して motionPath エンジンにアクセスし、解を計算します。
  • 設定するパラメータの事前定義された設定に基づいて、evaluatePath 関数を使用して内部の motionPath エンジンを呼び出します。

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

  • 基盤となるカーブのパラメータ設定に関係なくパスの始点に 0、パスの終点に 100 を設定するなど、範囲を解釈する方法を変更します。パラメータがパスの範囲外になったときに継続時間を変更して、サイクルを実装するか振動エフェクトを追加する循環を実装します。これらのすべては、パラメータ値をリマップするだけで実装することができます。
  • カーブに向かって傾かせることで、ジオメトリで各コーナーを予測できるようにします。motionPath ノードの傾斜計算は、パス上の現在の位置で計算されますが、MPxMotionPathNode ノードとその個別のアプローチを使用すると、現在の位置より先の任意の位置で簡単に banking()関数を呼び出すことができます。
  • 計算されたベクトルに沿って変換を追加することにより、パス カーブから離れた空間に結果をオフセットします。この方法は、単純なパスに沿ってスキーヤーのように移動するスラローム エフェクトを与えるために使用することができます。実際のパス カーブではなくスラローム パスに基づいて傾斜を追加することもできます。
  • 入力と出力を複数作成することで、同じカスタム motionPath ノードに複数の出力をアタッチします。一列になって同じパスを移動する複数のスキーヤーをシミュレートするには、各スキーヤーのパスに沿って異なる相対オフセットを指定するだけです。行進しながらコーナーをすばやく曲がる兵士の小隊をシミュレートするには、パスと水平方向の両方に沿ってオフセットを指定します。

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

MPxAnimCurveInterpolator

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

OpenMayaAnim

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

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

  • MPxGeometryFilter: デフォーマの新しいベース クラスです。MPxDeformerNode (まだ存在しています)に相当しますが、頂点単位のウェイトのリストを持ちません。
  • MPxSkinCluster: MPxGeometryFilter の拡張版です。頂点単位のスキン ウェイトを持ちます。このクラスから派生するカスタム ノードは、Maya UI では、組み込みの skinCluster のように扱われます。
  • MPxBlendShape: MPxGeometryFilter の拡張版です。入力ターゲットを持ちます。このクラスから派生するカスタム ノードは、Maya UI では、組み込みの blendShape のように扱われます。

OpenMayaUI

  • 新しい MGraphEditorInfo クラスが追加されました。このクラスでは、指定した グラフ エディタ(Graph Editor)について、ビューポートのバインドやアニメーション カーブ ノードのような UI 情報をその現在の状態に基づいて照会することができます。

Developer Kit サンプル

  • identityNode: 入力を出力にコピーする単純なデフォーマの例を示します。また、ユーザ独自のデフォーマの作成を開始することができる定型も提供します。
  • offsetNode: 重要なデフォーマの CPU と GPU の実装を提供します。
  • basicBlendShape: MPxBlendShape を継承することで基本的なデフォーマを作成する方法を例示します。
  • basicSkinCluster: MPxSkinCluster を継承することで基本的なデフォーマを作成する方法を例示します。

モデリング

OpenMaya

MPolyMessage の機能強化

  • UV セット修正メッセージ(UV セットの追加と削除や現在の UV セットの切り替えに関する通知を含む)のためのコールバックを登録する新しい MPolyMessage::addUVSetChangedCallback()メソッドが追加されました。

MFnMesh の機能強化

  • メッシュの指定された UV を固定された UV として設定するメソッド MFnMesh::setPinUVs()が追加されました。「固定された」UV とは、修正してはならない UV です。ピン ウェイトを 1.0 に設定すると完全に固定されます。UV ツールはその UV を修正できません。ピン ウェイトを 0.0 と 1.0 の間の値に設定すると、UV ツールはそのピン ウェイトに対する変更を値に応じてウェイトします。
  • メッシュの固定された UV と、それらの UV に関連付けられたピン ウェイトを取得するメソッド MFnMesh::getPinUVs()が追加されました。

  • MFnMesh::extrudeFaces()関数と MFnMesh::extrudeEdges()関数に thickness オプションと offset オプションが追加されました。これらのパラメータは、フェースの押し出しのアトリビュートとエッジ ノードに直接マップされます。

OpenMayaUI

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

  • 新しい MPxTexContext コンテキスト プロキシ クラスが追加されました。このコンテキスト プロキシ クラスは、ユーザ定義ツールを使用して UV テクスチャ エディタ(UV Texture Editor)の機能を拡張する方法を提供します。マウスの移動、マウスの押下、マウスのドラッグ、マウス ボタンの解放などのインタラクティブなイベントを処理するために、いくつかの関数が提供されます。これらの関数をオーバーライドして、UV テクスチャ エディタ(UV Texture Editor)の新しいインタラクティブなツールの動作を定義することができます。
  • 新しい QT サンプル プラグイン grabUV.pro が追加されました。このプラグインは、UV グラブ ブラシを実装する MPxTexContext を使用する方法を例示します。

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

  • 新しい MPxPolyTweakUVInteractiveCommand コマンド プロキシ クラスが追加されました。このツール コマンド プロキシ クラスは、インタラクティブなコンテキスト内でポリゴン オブジェクトの UV をインタラクティブに編集する単純化された方法を提供します。ユーザは、インタラクティブなコマンドの実行中に新しい UV を提供することができます。編集を完了することで、すべてのインタラクティブな更新が単一のコマンドとして記録され、元に戻すこともできます。

MPxContext の機能強化

  • コンテキスト ツールがアクティブなときにビューポート 2.0 で MUIDrawManager を使用してプリミティブを描画する新しい MPxContext::drawFeedback()メソッドが追加されました。これは、ブラシ リングなどのコンテキスト フィードバックをレンダリングする場合に役立ちます。

プロファイラ

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 ビット整数をサポートするようになりました。次のインタフェースが追加されました。

制限事項:

一般

ノードの UUID (Universally Unique Identifier)

  • UUID の処理時に MFnDependencyNode とともに使用される新しいクラス MUuid が追加されました。
  • ユーザが UUID ポリシーの読み込みや参照を修正することができる新しい API コールバック MDGMessage::addNodeChangeUuidCheckCallback()が追加されました。
  • MSelectionList に新しいメソッド MSelectionList::add( const MUuid & uuid, bool mergeWithExisting = false )が追加されました。このメソッドは、UUID に一致するノードを選択リストに追加します。

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

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

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

削除されたクラス

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

.NET API

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