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

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

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 に追加されました。

Python のサンプルは、Maya Developer Kit の plug-ins\scripted ディレクトリにあります。

つまり、次のことができるようになりました。

pySeq = [[1,2,3],[4,5,6]] a = OpenMaya.MPointArray(pySeq)

次を実行する必要はなくなりました。

a = OpenMaya.MPointArray([OpenMaya.MPoint(i) for i in pySeq])

以下を実行することもできます。

adaptList = [ (-3.787, 0.05, 2), [189.3, 4.0, 4.01], om.MFloatPoint(0.0002, 16.35, -8.9), om.MVector(1, 2, 3), om.MPoint(-6.314, 2.09, 17.8) ] fpa = om.MFloatPointArray(adaptList) pa = om.MPointArray(fpa) ta = om.MTimeArray([0,4,8,15,17])

レンダリング

OpenMayaRender

選択

ビューポート 2.0 の dx11Shader および glslShader プラグインでサポートされるセマンティックと注釈」および「ビューポート 2.0 でサポートされるシェーダ セマンティック」を参照してください。

描画

M3dView

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

MDrawContext

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

MFrameContext

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

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

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

MUint64 objectTypeExclusions() const;

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

void classificationExclusions(MStringArray &classification) const;

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

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

viewImageBlitOverride および pyViewRenderOverride.py プラグイン サンプルが更新されて、新しい MFrameContext スタティックを使用するようになりました。

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

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

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

MPxPrimitiveGenerator と MRenderItem

MPxDrawOverride

/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

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

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

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

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

MShaderManager

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

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

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

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

MPxShaderOverride

bool MPxShaderOverride::requiresUnsharedGeometricStreams()

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

ハードウェア レンダリングのジオメトリ リマッピング」を参照してください。

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

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

テクスチャ

MTextureManager

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

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

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

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

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

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

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

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

ライティング

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 を元に戻すことができます。

ジオメトリ

ロケータ

カメラ

次の列挙が MFrameContext に追加されました。

これらは、MFnCamera::nearClippingPlane()MFnCamera::farClippingPlane()MFnCamera::unnormalizedNearClippingPlane()、および MFnCamera::unnormalizedFarClippingPlane() をそれぞれ使用した場合と同じ結果になります。

詳細については、rawfootPrintNode サンプル プラグインを参照してください。「カメラ情報」も参照してください。

レンダー オーバーライド

MQuadRender

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

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

MRenderOverride を実装する

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

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

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

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

ツールとコンテキスト

MPxContext

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

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

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

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

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

プロファイリング

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

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

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

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

レンダー セットアップ

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

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

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

Developer Kit サンプル

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

ドキュメントの更新

アニメーション

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

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

注: GPU メモリ不足を回避するため、GPU メモリがほぼ一杯になると、Maya GPU バッファがシステム メモリに移動されることがあります。このプロセスは、GPU メモリの使用状況の正確な追跡に依存しています。

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

GPU オーバーライドのオン/オフを切り替えなくても特定のシナリオで正しく動作させるため、次の関数が追加されました。

注: MGPUDeformerRegistrationInfo::validateNode() 関数が削除されました。

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

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

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

MultiDraw 統合のサポート

この機能のため、次のインタフェースが追加されました。

Developer Kit の customTextureShader サンプル プラグインも参照してください。

モデリング

OpenMaya

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

MFnBlendShapeDeformer::addTarget (const MObject& baseObject, int weightIndex, double fullWeight, TargetType targetType = kObject)

ユーザ インタフェース

例: createPixmap("test.png", true) を呼び出すと、スケール係数が 150% の場合は test_150.png が返されることがあります。

また、ポップ アップウィンドウには、詳細についてユーザにスクリプト エディタ(Script Editor)を参照させるスタティック メッセージしか含まれていないため、MFileIO::setError() の呼び出し時に、MGlobal::displayError() を呼び出すことをお勧めします。

一般

新しい MRandom ネームスペース

簡単に並列化できない従来の PRNG とは異なり、このアルゴリズムは n を生成するために n-1 を生成する必要がないため、並列化できます。これは非常に高速で、ランダムに統計的テストを渡し、さらにこの関数を同じ引数を使用して呼び出すたびに同じ結果を取得できます。

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

MObject MFnMesh::create (int numVertices, int numPolygons, const MPointArray &vertexArray, const MIntArray &polygonCounts, const MIntArray &polygonConnects, bool storeDoubles, MObject parentOrOwner, MStatus * ReturnStatus)

MPoint

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

これらのメソッドは、Python API 2.0 でもサポートされています。

このメソッドは、Python API 2.0 でもサポートされています。

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

注:

MFnAttribute.isProxyAttribute は、Python API 2.0 でもアトリビュートとして使用できます。そのため、次のように値を設定または取得できます。

```
# Set the attribute
myObj.isProxyAttribute = True

Get the attribute

myBool = myObj.isProxyAttribute
```

このメソッドは、Python API 2.0 でもサポートされています。

このメソッドは、Python API 2.0 でもサポートされています。

Developer Kit サンプルの更新

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

エフェクトとペイント

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