Maya 2016 Extension 2 の API の新機能

Maya ビューポート 2.0 のホワイトペーパー

Maya ビューポート 2.0 のホワイトペーパーは、http://www.autodesk.com/developmaya で参照できます。

このドキュメントは 2 つのパートに分かれています。1 つ目のパート『Viewport 2.0 API Porting Guide(英語)』は、ビューポート 2.0 の概要を示すとともに、旧式の既定ビューポートとビューポート 2.0 との違いについて説明します。2 つ目のパート『Viewport 2.0 API Porting Guide Details(英語)』は、より詳細な内容について触れており、推奨するインタフェースを指定し、一般的なタスク向けのサンプル コードを提供します。

Maya のアニメーションのパフォーマンスに関するホワイトペーパー

ホワイトペーパー『Improving Performance with Parallel Evaluation(英語)』 は、http://www.autodesk.co.jp/maya-docs で参照できます。

新しい評価マネージャの使い方に関する詳細は、このドキュメントを参照してください。シーンレベルのグラフ解析と並列化を通して、アニメートされたシーンの再生と操作を改善することができます。さらにこのドキュメントは、プラグインに実装してこれらの機能を活用するための API 拡張に関する情報を提供するとともに、シーンのパフォーマンスを評価するためのプロファイラの使い方についても解説しています。

API の互換性

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

Maya 2016 および Maya 2016 Extension 1 の Maya API ガイドを入手するには、http://www.autodesk.com/me-sdk-docs を参照してください。

C++ API ヘッダー ファイルとライブラリの場所

C++ API ヘッダー ファイルとライブラリが Maya インストールで使用できるようになりました。カスタム プラグインをコンパイルするために Maya Developer Kit をダウンロードする必要がなくなりました。ヘッダーとライブラリ ファイルは Maya インストールの次のフォルダにあります。

Windows および Linux:

Mac OS X:

Maya Developer Kit

開発キットは https://apps.exchange.autodesk.com/MAYA/ja/Home/Index の Autodesk Exchange からオンラインで入手できます。

ノード ID ブロックと接線タイプ ID ブロックの登録

http://mayaid.autodesk.io/ で Maya ノード ID ブロックまたは接線タイプ ID ブロックを登録できるようになりました。詳細については、http://www.autodesk.com/developmaya の「Tools & Documentation archives」セクションも参照してください。

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

Python API 2.0

次のクラスとメソッドが Python API 2.0 に追加されました。

レンダリング

OpenMayaRender

選択

描画

M3dView

  • ビューポート 2.0 で M3dView::readDepthMap() が使用できるようになり、ビューポート 2.0 の深度マップから深度値を直接読み込むことができるようになりました。

    pointManip Developer Kit サンプルを参照してください。 pointManip をドラッグすると、選択したオブジェクトはマウスのレイと不透明オブジェクトの間の最も近い交差点に移動されます。これはスクリーンスペース位置と対応する深度値から計算されます。

MDrawContext

  • MDrawContext::getFrameStamp() の更新頻度が、単一のフレーム内でより頻度の低いスタンプを更新するように変更されました。

    getFrameStamp() の使用例については、rawfootPrintNodeglslShader プラグインのサンプルを参照してください。

MFrameContext

  • 新しいメソッド MFrameContext::getEnvironmentParameters() が追加されました。

    このメソッドは、現在のビューポートに設定された環境パラメータを返します。環境マップが現在のビューポートに設定されているかどうかを確認するため、プラグイン ハードウェア シェーダの描画フェーズで使用できます(メソッドには、シェーダに指定された MDrawContext でアクセスします)。環境が有効になっている場合、環境イメージ ファイルへのパスが指定されます。イメージは常に緯度経度形式になります。この情報はビューポートごとに設定されているため、複数のビューポートが同時に表示される場合は、後続の描画呼び出しの間で変更されることがあることに注意してください。

    現在、環境は、ハイパーシェード(Hypershade)マテリアル ビューア(Material Viewer) でのみ使用されています。その他のすべてのビューポートに対しては、環境は常に無効に設定されています。

  • オブジェクト タイプ除外スタティックが MFrameContext に追加されました。

    除外の完全なセットにアクセスできるように、MUint64 の値が返されることに注意してください。

    MUint64 objectTypeExclusions() const;

    分類文字列による除外が新しく追加されました。

    void classificationExclusions(MStringArray &classification) const;

    新しい列挙リストのサブセットを持つ列挙 MSceneRender::MObjectTypeExclusions の代わりに、MFrameContext でのスタティックを使用する必要があります。

    MUint64 タイプを返すため、MSceneRender::getObjectTypeExclusions() が追加されました。MObjectTypeExclusions を返す objectTypeExclusions() は、廃止と見なされていますが、MSceneRender::getObjectTypeExclusions() がオーバーライドされない限り、引き続き機能します。

    viewImageBlitOverridepyViewRenderOverride.py の プラグイン サンプルは、新しい MFrameContext スタティックを使用するように更新されています。

  • M3dView にアクセスせずに状態情報の照会ができるように、MFrameContext には多くの追加が行われています。これには、次のボタンが含まれています。

    これらの照会を実行するためのデバッグ コードを含めるため、Maya Developer Kit のサンプル プラグイン rawfootPrintNode が変更されました。

  • 座標を変換する MFrameContext::worldToViewport() メソッドと MFrameContext::viewportToWorld() メソッドが追加されました。

    このメソッドは、ワールド空間の座標をビューポートの座標に変換します。

    void worldToViewport(const MPoint &inPoint, double &xPos, double &yPos) const;

    このメソッドは、ビューポートの座標をワールド空間のニア クリップ プレーン座標に変換します。

    void viewportToWorld(double xPos, double yPos, MPoint &worldNearPt, MPoint &worldFarPt) const;

    サンプル プラグイン uiDrawManager は、2D テキストと 3D テキストを描画する際のこれらのメソッドの使用例を示しています。

MPassContext

  • 現在のシェーダ オーバーライドのシェーダ インスタンスを返す MPassContext::shaderOverrideInstance() が追加されました。これにより、Maya が描画時に通常使用するシェーダ プログラムとパラメータが使用できます。

    詳細については、Developer Kit の rawFootPrintnode サンプル プラグインを参照してください。

MPxPrimitiveGenerator と MRenderItem

  • 次のプリミティブ タイプがビューポート 2.0 でサポートされるようになりました。

    これらのプリミティブ タイプは、ビューポート 2.0 でプリミティブが設定されているすべての場所で使用できるようになりました。これには、GLSL シェーダ プラグインの新しい三角形の隣接 MPxPrimitiveGenerator が含まれます(Developer Kit の glslShader プラグイン フォルダ内の adjacentTrianglesPrimitiveGenerator.cpp を参照)。この新しいジェネレータでシルエット エッジの描画を有効化する方法のサンプルについては、SilhouetteEdge.ogsfx を参照してください(Maya インストール ディレクトリの presets¥GLSL¥examples フォルダを参照)。

MPxDrawOverride

  • オブジェクトを透明で描画する必要があることを示すため、MPxDrawOverride::isTransparent() が追加されました。

    /isTransparent がジオメトリの分類 drawdb/geometry/myNode/isTransparent/ に追加されると、透明度パス中にこのプラグインが呼び出されます。

    ポスト エフェクトも考慮する必要があります。分類 drawdb/geometry/includePostEffects/ は、描画オーバーライドに確実にポスト エフェクトが呼び出されるようにします。isTransparentincludePostEffects の両方を有効にするには、分類を drawdb/geometry/rawfootPrint/isTransparent/includePostEffects に設定します。

    rawfootPrintNode プラグイン サンプルを参照してください。

ポスト エフェクトの機能強化

MPxDrawOverride は、drawdb/geometry/includePostEffects の分類を指定することで、ポスト エフェクト パスから呼び出されるオプションにすることができます。既定では、描画オーバーライドは、被写界深度、スクリーン スペース アンビエント オクルージョン、モーション ブラーなどの追加のポスト エフェクト パスに対して呼び出されません。

MPxDrawOverride::excludedFromPostEffects() を使用して、ポスト エフェクト パスに対する呼び出しから描画オーバーライドを除外できます。rawfootPrintNode プラグイン サンプルを参照してください。

注:メソッド MPxDrawOverride::excludedFromPostEffects() の使用は、分類文字列の使用に適しています。

新しいパス セマンティックが、MPassContext - MPassContext::kDOFPassSemanticMPassContext::kMotionVectorPassSemantic に追加されました。これらは以前のリリースでの文字列 dofPassmotionVectorPass のチェックに相当します。ポスト エフェクト パターン パスと非ポスト エフェクト パターン パスを示すため、MPassContext::kPEPatternPassSemanticMPassContext::kNonPEPatternPassSemantic がそれぞれ追加されました。

投影マトリックスが、変換時にポイントの Z コンポーネントを反転するかどうかを示す ProjectionZSense セマンティックが追加されました。反転する場合、この値は -1.0 で、それ以外の場合は 1.0 です。「ビューポート 2.0 でサポートされるシェーダのセマンティック」を参照してください。

これらのパスの詳細については、「エフェクト インタフェース」を参照してください。

シェーダ

MShaderInstance

  • MShaderInstance::requiredVertexBuffers() メソッドを使用すると、指定したシェーダ インスタンスの頂点バッファ記述子のリスト(MVertexBufferDescriptorList)を照会できます。

    特に、サブシーン オーバーライドは、カスタムのレンダー アイテムにシェーダ インスタンスを使用する際にこのメソッドを利用できますが、このメソッドはこのオーバーライドのコンテキスト外で呼び出すことができます。

    このメソッドは、GLSL シェーダ プラグインで使用されます。Developer Kit の glslShader を参照してください。MVaryingParameter を構成するために結果が調査される GLSLShaderNode クラスで configureGeometryRequirements() を参照してください。

  • MShaderManager::getShaderFromNode() インタフェースと MRenderItem::setShaderFromNode() インタフェースに、ユーザが非テクスチャ エフェクトのインスタンスを使用できるようにする新しいブール演算引数 nonTextured が追加されました。

    上記の「描画」セクションの MPxPrimitiveGenerator and MRenderItem を参照してください。

  • シェーダ インスタンスのテクニックのリストを返す MShaderInstance::techniqueNames() メソッドが追加されました。このメソッドは、Python API 2.0 でも使用できます。

    エフェクト ファイルをロードし、定義されたテクニックの名前を抽出する同様のメソッド MShaderManager::getEffectsTechniques() が現在存在しています。ただし、この関数が使用できるのは、ファイルからエフェクトをロードするときだけで、文字列バッファからエフェクトをロードするときには使用できません。エフェクトがロードされたら、新しい MShaderInstance::techniqueNames() を使用できます。

MShaderManager

  • MShaderManager::getEffectsFileShader()MShaderManager::getEffectsBufferShader() などの MShaderManager でさまざまなインタフェースのいずれかを介してシェーダを取得する際に、シェーダ コンパイルの失敗が発生すると、エラーが Windows および Linux の出力ウィンドウ(Output Window)と Mac のコンソールに出力されます。これはシェーダ開発者のデバッグ プロセスに役立ちます。

    シェーダを返せない場合は、NULL 値が返されます。

    これは、文字列バッファ メソッド MShaderManager::getEffectsBufferShader() が使用されている場合に特に当てはまります。以前にエラー シェーダが返された場合、エラーが発生した場合に認識するのが難しくなります。

  • MRenderItem::setShaderFromNode() インタフェースと MShaderManager::getShaderFromNode() インタフェースに、ユーザが非テクスチャ エフェクトのインスタンスを使用できるようにする新しいブール演算引数 nonTextured が追加されました。

    MRenderItem::setShaderFromNode() は、内部エフェクトのインスタンスを公開しないため、推奨されるインタフェースです。その使用方法は、Developer Kit の apiMeshShape プラグイン サンプル(apiMeshSubSceneOverride.cpp)で説明されています。

    このサンプル プラグインは、以前は、シェーディング モードとテクスチャ モードの両方にレンダー項目を 1 つだけ作成していました。新しいバージョンでは、シェーディング モードとテクスチャ モードにぞれぞれ 1 つずつ、合計 2 つのレンダー項目が作成されます。これらのエフェクト インスタンスはどちらも MRenderItem::setShaderFromNode() で割り当てられますが、ブール値の引数 nonTextured は、シェーディングのレンダー項目に対しては true に設定され、テクスチャのレンダー項目に対しては false に設定されます。

MPxShaderOverride

  • ビューポート 2.0 は、既定では、完全に共有されていないデータを返しません。この要件を指定するために新しいインタフェースが追加されました。
    bool MPxShaderOverride::requiresUnsharedGeometricStreams()

    プラグインはこのメソッドをオーバーライドして、ジオメトリ ストリームの拡大を強制するために true を返すことができます。

  • シェーディング エフェクトのジオメトリ要件を更新する際に、フェース ID、頂点 ID、ローカル UV 座標を要求するため、次のセマンティックがサポートされるようになりました。詳細については、MPxShaderOverride::addGeometryRequirement() を参照してください。
    • vertexid: 設定すると、頂点 ID バッファが返されます。
    • faceid: 設定すると、フェース ID バッファが返されます。
    • uvcoord: 設定すると、ローカル UV 座標が返されます。
  • Developer Kit の hwPhongShader プラグイン サンプルは、次のことを示します。
    • 環境変数 MAYA_HWPHONG_TEST_VERTEXID_AND_FACEID を任意の値に設定すると、このサンプルは頂点 ID とフェース ID を、旧式の既定ビューポートとビューポート 2.0 の両方の出力ウィンドウに出力します。
    • 環境変数 MAYA_HWPHONG_TEST_LOCALUVCOORD を任意の値に設定すると、このサンプルは、ローカル UV 座標を旧式の既定ビューポートとビューポート 2.0 の両方の出力ウィンドウに出力します。
    • 環境変数 MAYA_HWPHONG_TEST_INDEXING を任意の値に設定すると、ID と UV 座標にアクセスするインデックスが、旧式の既定ビューポートとビューポート 2.0 の出力ウィンドウにローカル三角形のインデックスを出力します。
    • MPxShaderOverride::requiresUnsharedGeometricStreams() メソッドは、hwPhongShaderOverride に対して true を返すようにオーバーライドされます。
    • hwPhongShaderOverrideinitialize() メソッドは、追加ストリーム要件の vertexidfaceiduvcoord を指定します。
    • hwPhongShaderOverridedraw() メソッドは、vertexidfaceid、および uvcoord の頂点バッファを抽出し、そのデータを出力します。
    注:

    MAYA_TEST_VERTEXID_AND_FACEID 環境変数が設定されている場合に、トポロジが 4 フレームごとに変更する立方体を生成する、animCubeNode のサンプルも参照してください。hwPhongShader がこのシェイプに割り当てられている場合、シェーダは animCubeNode プラグインから生成される頂点 ID とフェース ID を受け取ります。

MPxHwShaderNode

  • 既定では、旧式の既定ビューポートは共有されていないデータを返します。

    以前は、頂点 ID は MPxHwShaderNode::provideVertexIDs() メソッドを使用して照会できました。新しい MPxHwShaderNode::provideFaceIDs() メソッドを使用してフェース ID が照会できるようになりました。新しい MPxHwShaderNode::provideLocalUVCoord() メソッドを使用して、ローカル UV 座標を照会できるようになりました。

    この署名を持つデータを返す、新しいメソッドがあります。

    MStatus    MPxHwShaderNode::geometry( const MDrawRequest& request,
            M3dView& view,
            int prim,
            unsigned int writable,
            int indexCount,
            const unsigned int * indexArray,
            int vertexCount,
            const int * vertexIDs,
            const float * vertexArray,
            int normalCount,
            const float ** normalArrays,
            int colorCount,
            const float ** colorArrays,
            int texCoordCount,
            const float ** texCoordArrays,
            const int *faceIDs,
            const float * localUVCoord)
    Mstatus MPxHwShaderNode::glGeometry( const MDagPath& shapePath,
            int prim,
            unsigned int writable,
            int indexCount,
            const unsigned int * indexArray,
            int vertexCount,
            const int * vertexIDs,
            const float* vertexArray,
            int normalCount,
            floatArrayPtr normalArrays,
            int colorCount,
            floatArrayPtr colorArrays,
            int texCoordCount,
            floatArrayPtr texCoordArrays,
            const int * faceIDs,
            const float * localUVCoord)

    blindDataShaderhwPhongShader プラグインのサンプルは、どちらもこのインタフェースを使用して頂点 ID とフェース ID を取得する方法を示しています。

    blindDataShader のサンプルは、対応するフェース ID のグレースケール値を返します。

    返される UV 座標、フェース ID、頂点 ID は、ビューポート 1 とビューポート 2.0 の MPxShaderOverride インタフェースで同じです(ビューポート 2.0 インタフェースが共有されていないデータを求める場合)。

    メッシュがスムーズ メッシュ プレビューを使用している場合、フェース ID にはスムーズされていない元のメッシュが返されるのに対し、頂点 ID にはスムーズされたメッシュが返されます。

MRenderItem

  • MRenderItem::sourceDagPath() は、項目に統合されたジオメトリ(MRenderItem::isConsolidated())が含まれている場合でも、常に DAG パスを返します。統合されると、ジオメトリに影響を及ぼすすべての DAG パスのうち、1 つの DAG パスを返します。描画時に統合されたジオメトリから DAG パスとジオメトリを抽出する詳細については、「ドキュメントの更新」を参照してください。

    このインタフェースは DAG パスの適切なリストを返すため、MRenderItem::sourceIndexMapping() の使用をお勧めします。

テクスチャ

MTextureManager

  • MTextureManager::acquireTexture() メソッド:

    MTexture* MTextureManager::acquireTexture(const MString& textureName, const MPlug& plug, int width, int height, bool generateMipMaps = true);

    ファイル テクスチャ ノードへのプラグが指定されている場合に、ディスクからのテクスチャ読み取りを試行するように変更されました。以前は、このメソッドは Maya ソフトウェア レンダラのソリッド テクスチャへの変換機能を使用して、テクスチャをベイク処理していました。この変更により、返されるテクスチャの忠実度と精度が向上します。

  • 新しい MTextureManager::acquireTexture() メソッド:

    MTexture* MTextureManager::acquireTexture(const MObject& textureNode, bool allowBackgroundLoad = false); 

    指定されたテクスチャ ノードからファイル テクスチャをロードします。このメソッドはより単純なインタフェースを提供するため、ファイル テクスチャに(前述のプラグ メソッドよりも)推奨されるメソッドです。ファイル テクスチャ ノードを引数にとり、不要なパラメータ(幅、高さ、名前、ミップマップ作成)を指定する必要がなくなります。

    また、ビューポート 2.0 のテクスチャのバックグラウンド ロード機能を使用するかどうかを示すオプションを公開します。テクスチャのバックグラウンド ロードの詳細については、『Maya ユーザ ガイド』の「表示プリファレンス」セクションの「マテリアル ロードのモード」を参照してください。

  • 新しい MTexture::update() メソッド:

    MStatus MTexture::update(const MObject& textureNode);

    ファイル テクスチャ ノードを使用して、取得に対して更新できます。

    現在、すべてのファイル テクスチャ ベースのメソッドには、ファイル テクスチャが UV タイリングを使用している場合に最初のタイルを返す制限があります。

  • これらのメソッドの使用方法のデモについては、hwApiTextureTest Developer Kit サンプルを参照してください。このプラグイン サンプルには、シーン内の既存のファイル テクスチャ ノードから MTexture リファレンスの取得を試行する -n/-nodeLoad オプションが含まれています。このオプションは、選択したプロシージャ ノードからその outColor アトリビュートをサンプリングすることで、ベイク処理されたテクスチャの作成も試行します。
  • viewOverrideTrackTexture Developer Kit サンプルを参照してください。これはプラグインのレンダー オーバーライドで、アクティブにすると、シーン内の最初のファイル テクスチャ ノードを検索して、MTexture の取得または更新を行います。この MTexture は、レンダー オーバーライドに使用されるメイン操作の、クアッド レンダリング操作に使用されます。

ライティング

Maya 2016 Extension 2 では、ビューポート 2.0 はライト制限までしかライトを評価しません。したがって、オンデマンドでライトの情報を要求する場合は、新しい MRenderer::needEvaluateAllLights() メソッドを呼び出す必要があります。

プラグインは、次のインタフェースを呼び出します。

描画する前に、最初にこのメソッドを呼び出す必要があります。

既存のプラグインを変更しない場合は、optionVar MAYA_VP2_IGNORE_EVALUATION_LIGHT_LIMIT=1 を設定して、プラグインが Extension 2 以前と同じように機能し続けるようにすることもできます。この optionVar を設定すると、プラグインがロードされているかどうかに関係なく、シーン内のすべてのライトが常に評価されます。結果として、シーンに多数のライトがある場合は、この optionVar によってビューポート 2.0 のパフォーマンスが低下する場合があります。

これを軽減するには、プラグインがすべてのライトを評価する必要がなくなったら、この optionVar を 0 に再設定して、ライト制限までのライトだけを評価するようにビューポート 2.0 を元に戻すことができます。

ジオメトリ

  • MGeometryExtractor が以下をサポートするようになりました。

    • プラグイン シェーダで、テクスチャ座標の複数の UV マップ セット
    • プラグイン シェーダで、接線と従法線の座標に指定されたマップ セット

    geometryReplicator サンプル プラグインは、これらの新しい機能のサポートについて示します。

  • MPxSubSceneOverride::setGeometryForRenderItem() インタフェースが更新され、頂点バッファ(MGeometry::kPoints など)を使用して描画のジオメトリを定義する際に、MIndexBuffer の指定が不要になりました。このケースでは、GPU メモリの浪費を回避するために、空の MIndexBuffer を指定できます。実装例については、gpuCache Developer Kit プラグインを参照してください。

ロケータ

カメラ

レンダー オーバーライド

MQuadRender

  • MRenderOverride のクアッド レンダリング操作で使用されるシェーダ インスタンスのメモリ リークの防止に役立つように修正されました。
  • MRenderOperation::targetOverrideList() メソッドで指定されている MRenderTarget が、MQuadRender::shader() から返された MShaderInstance への入力としても指定されている場合、レンダリング中の同じターゲットからの読み取りと書き込みに問題が発生しないように修正されました。

    viewRenderOverrideviewRenderOverridePostColor の Developer Kit サンプルを参照してください。

  • MRenderOverrideMSceneRender と一連の MQuadRender を使用して、ポスト シーン カラー エフェクトを実行する方法を示すため、新しいプラグイン サンプルが追加されました。Developer Kit の viewRenderOverridePostColor と「ポスト シーン レンダリング カラー操作」を参照してください。
  • 以前は、シーンまたはクアッド レンダリング操作で現在の出力ターゲットよりも大きいレンダー ターゲット(ビューポートなど)を指定すると、出力ターゲット内のピクセルのサブセットを引き寄せる操作になっていました。この問題は解決されています。

    アクティブな出力ターゲット サイズよりも大きいカスタム出力ターゲットを引き寄せるサンプル コードについては、viewRenderOverrideMRT プラグインを参照してください。

MRenderOverride を実装する

MRenderOverride の実装がより容易になりました。MRenderOperation のリストを設定することで、レンダー オーバーライドを作成できるようにする新しいクラスとインタフェースが追加されました。このリストを作成するには、標準のビューポート操作のリストを取得し、必要に応じて、それに独自のカスタム操作を追加します。

この実装の新しいメソッドにより、レンダー ターゲットが MRenderOperation で管理されるようになったため、これらを管理、作成する MRenderOverride も不要になります。

追加された新しいクラスとインタフェースは次のとおりです。

MRenderOverride を実装する」を参照してください。

ツールとコンテキスト

MPxContext

  • 新しいメソッド MPxContext::doPtrMoved() が追加されました。このメソッドは、マウスの動作を次の動作をドライブするために使用できるように、マウスの移動時に呼び出されます。

    描画の場合、ビューポート 2.0 で描画を実行するために MUIDrawManager が使用されている場合に、プラグインがこのメソッドをオーバーライドします。

トレーシング/シーケンス

評価順序を追跡し、内部パイプラインがレンダリング可能なリストの実行を追跡するため、いくつかのオーバーライド クラスにデバッグ トレーシング情報が追加されました。

MPxDrawOverrideMPxGeometryOverride に新しいトレーシング メソッド(MPxDrawOverride::traceCallSequence()MPxDrawOverride::handleTraceMessage() など)が追加され、ogs コマンドに新しいトレース オプション(-traceRenderPipeline フラグ)が追加されました。

詳細については、「ビューポート 2.0 パイプラインの基本的なシーケンス」と「ビューポート 2.0 オブジェクトの基本的なシーケンス」を参照してください。

プロファイリング

プロファイラ(Profiler)ビューポート 2.0 (Viewport 2.0)内で実行するレンダリング イベントをグラフ化するようになりました。これらのイベントには、ノード評価と描画可能 UI リスト/レンダー リストの構築、および UV エディタ(UV Editor )描画、ビューティ パス レンダー、描画可能 UI レンダリング(マニピュレータの描画など)といった描画イベントが含まれます。レンダー オーバーライド プラグインを使用している場合、クアッド レンダー、3D シーンのレンダー、HUD レンダーなどの操作も表示されます。

この機能を使用すると、シーンのパフォーマンスのボトルネックとなる可能性があるレンダリング イベントまたはパスを特定できます。

これらのイベントをフィルタするには、プリフィックス Vp2 を検索します。

ビューポート 2.0 でのレンダリング イベントの詳細、および各イベントの詳細については、「プロファイルのビューポート 2.0 のレンダリング イベント」と「ビューポート 2.0 のレンダリング イベントのプロファイラ サンプル」を参照してください。

レンダー セットアップ

Maya の新しいレンダー セットアップ機能にアクセスできるように、新しい MRenderSetup クラスが追加されました。

ビューポート 2.0 API プラグインのパフォーマンスの改善

  • 新しい isAlwaysDirty パラメータが、MPxDrawOverride コンストラクタに追加されました。パフォーマンスを最適化するには、このアトリビュートを false に設定して、DG 評価またはダーティな伝搬を通じてノードがダーティとマークされたときに、描画オーバーライドだけが更新されるようにします。オブジェクトを明示的にダーティとしてマークするには、MRenderer::setGeometryDrawDirty() を呼び出します。

    詳細については、transformDrawNode Developer Kit サンプルを参照してください。

  • viewImageBlitOverride プラグイン サンプルは、更新オプションを表示する代わりに、より多くのテクスチャ イメージ転送のパフォーマンス パスを表示するように変更されました。HUD 描画も追加されました。
  • ノードの多数のインスタンスを持つシーン、および MPxDrawOverride を使用して描画するシーンでのパフォーマンスが改善されています。

  • MRenderOverride インタフェースの使用により、ビューポート オーバーライド プラグインのパフォーマンスが向上しました。

  • 以前は、MPxSubSceneOverride は Maya のジオメトリ統合システムを利用できませんでした。新しい MRenderItem::setWantSubSceneConsolidation() メソッドと MRenderItem::wantSubSceneConsolidation() メソッドが、MRenderItem で使用できるようになりました。このフラグは、MSubSceneContainer に追加されるまたは既に追加されている項目にのみ影響します。設定すると、これらのレンダー項目が統合の対象になります。

Developer Kit サンプル

  • rawfootPrintNode プラグインは、コア プロファイル モードでの未処理の描画を示すように更新されました。このプラグインは、OpenGL コア プロファイルが、glBegin/glVertex/glEnd を使用せずに描画する点で、従来の OpenGL とどのように異なっているかを示します。新しいテクニックは DX11 のテクニックと似ています。
  • サンプル プラグイン fragmentDumper も更新され、指定した名前を持つフラグメントの XML をダンプする機能と、すべてのフラグメント名のリストを提供する機能が含まれました。

  • viewObjectSetOverride プラグインは、MSceneRender::objectSetOverride() で分離選択の処理方法を示すために変更されました。

    分離選択に選択されたオブジェクトは、指定されたオブジェクト セット(set1 と set2)にも属している場合にのみ表示されます。

ドキュメントの更新

アニメーション

GPU のオーバーライド(GPU Override)

GPU メモリ使用量を追跡するため、次の関数が追加されました。

  • MRenderer::holdGPUMemory() 関数は、プラグインが割り当てられている GPU メモリの合計量の増加をバイト単位でレポートできるようにします。
  • MRenderer::releaseGPUMemory() 関数は、プラグインが割り当てられている GPU メモリの合計量の減少をバイト単位でレポートできるようにします。
注: GPU メモリ不足を回避するため、GPU メモリが一杯になると、Maya GPU バッファがシステム メモリに移動されることがあります。このプロセスは、GPU メモリの使用状況の正確な追跡に依存しています。

OpenCL バッファの割り当て、更新、解放を容易にする新しい便利なクラス

  • clCreateBufferclEnqueueWriteBufferclReleaseBuffer への呼び出しを置き換えることができる MOpenCLBuffer クラスが追加されました。これは GPU メモリの使用量を自動的に追跡するため、MRenderer でインタフェースを呼び出す必要がなくなります。

GPU オーバーライドをオフにしてオンにすることなく、特定のシナリオで正しく動作させるため、次の関数が追加されました。

  • 新しい MGPUDeformerRegistrationInfo::validateNodeInGraph() 関数は、ディペンデンシー グラフ(DG)のトポロジが変更された場合にのみ呼び出されます。たとえば、接続が追加または削除される場合、またはノードが追加または削除される場合などです。
  • 新しい MGPUDeformerRegistrationInfo::validateNodeValues() 関数は、ノードのアトリビュートが、アニメーションまたはユーザの操作によって変更される場合に呼び出されます。
注:MGPUDeformerRegistrationInfo::validateNode() 関数は削除されました。
  • 新しい MGPUDeformerRegistry::addConditionalAttribute() 関数は、条件アトリビュートを登録済みの GPU デフォーマに追加するために呼び出されます。条件アトリビュートは、アトリビュートの一部(すべてではない)の値をサポートするデフォメーション ノードです。たとえば、0.0f 値と 1.0f のみをサポートし、他の値はサポートしないエンベロープ(デフォーマの影響を決定するスケール係数)などです。条件アトリビュートの値が変化すると、ノードがサポートされているかどうかを判断するために MGPUDeformerRegistrationInfo::validateNodeValues() 関数が呼び出されます。サポートされている場合は、新たにサポートされるノードを追加するため、GPU オーバーライドでデフォメーション チェーンが再作成されます。

アトリビュートの変更を検出する関数

  • アトリビュートの変更を検出する新しい MPxGPUDeformer::hasAttributeBeenModified() 関数が追加されました。この関数は、アトリビュートがアニメートされる場合、または評価ノードに対して最後に MPxGPUDeformer::evaluate() が呼び出されてからアトリビュートの値をインタラクティブに変更した場合に、true を返します。

文字列をローカライズするために MOpenCLInfo クラスに次の関数が追加されました。

MOpenCLInfo インタフェース名の変更

MultiDraw 統合のサポート

モデリング

OpenMaya

更新された MFnBlendShapeDeformer インタフェース

ユーザ インタフェース

一般

新しい MRandom ネームスペース

倍精度のメッシュで使用するための新しいメソッド

ファイル リファレンス ノードで一時的にリファレンスの編集をミュートするため、次の関数が追加されました。

プロキシ アトリビュートを作成するため、次の関数が追加されました。

Developer Kit サンプルの更新

Alembic のバージョンが 1.5.8 にアップグレードされました。AbcExport および AbcImport プラグインで UV セットの読み込み/書き出しができるようになりました。

エフェクトとペイント

頂点カラー ペイントのコールバックを登録することができる新しい MPaintMessage クラスが追加されました。このクラスの使用方法のデモについては、paintCallback Developer Kit サンプルを参照してください。