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(英語)』は、より詳細な内容について触れており、推奨するインタフェースを指定し、一般的なタスク向けのサンプル コードを提供します。
ホワイトペーパー『Improving Performance with Parallel Evaluation(英語)』 は、http://www.autodesk.co.jp/maya-docs で参照できます。
新しい評価マネージャの使い方に関する詳細は、このドキュメントを参照してください。シーンレベルのグラフ解析と並列化を通して、アニメートされたシーンの再生と操作を改善することができます。さらにこのドキュメントは、プラグインに実装してこれらの機能を活用するための 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 ヘッダー ファイルとライブラリが Maya インストールで使用できるようになりました。カスタム プラグインをコンパイルするために Maya Developer Kit をダウンロードする必要がなくなりました。ヘッダーとライブラリ ファイルは Maya インストールの次のフォルダにあります。
Windows および Linux:
Mac OS X:
開発キットは https://apps.exchange.autodesk.com/MAYA/ja/Home/Index の Autodesk Exchange からオンラインで入手できます。
http://mayaid.autodesk.io/ で Maya ノード ID ブロックまたは接線タイプ ID ブロックを登録できるようになりました。詳細については、http://www.autodesk.com/developmaya の「Tools & Documentation archives」セクションも参照してください。
次のクラスとメソッドが Python API 2.0 に追加されました。
サンプルの Python API バージョン 2.0 が、「例: シーンの作成」に追加され、その結果、「シーン グラフを照会する」の Python API 2.0 のサンプルが更新されました。
コンポーネントの選択を示すため、pyApiMeshShape Developer Kit サンプルが追加されました。
Python のサンプルは、Maya Developer Kit の plug-ins¥scripted ディレクトリにあります。
次のクラスは、互換性のある要素のシーケンスで初期化できるようになりました。
たとえば、最初に各シーケンスに MPoint を作成しなくても、シーケンス(リストとタプルを含む)で MPointArray を作成できるようになりました。
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])
「ビューポート 2.0 の dx11Shader および glslShader プラグインでサポートされるセマンティックと注釈」および「ビューポート 2.0 でサポートされるシェーダ セマンティック」を参照してください。
pointManip Developer Kit サンプルを参照してください。 pointManip をドラッグすると、選択したオブジェクトはマウスのレイと不透明オブジェクトの間の最も近い交差点に移動されます。これはスクリーンスペース位置と対応する深度値から計算されます。
MDrawContext
getFrameStamp() の使用例については、rawfootPrintNode と glslShader プラグインのサンプルを参照してください。
新しいメソッド 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() がオーバーライドされない限り、引き続き機能します。
viewImageBlitOverride と pyViewRenderOverride.py の プラグイン サンプルは、新しい MFrameContext スタティックを使用するように更新されています。
M3dView にアクセスせずに状態情報の照会ができるように、MFrameContext には多くの追加が行われています。これには、次のボタンが含まれています。
これらの照会を実行するためのデバッグ コードを含めるため、Maya Developer Kit のサンプル プラグイン rawfootPrintNode が変更されました。
座標を変換する MFrameContext::worldToViewport() メソッドと MFrameContext::viewportToWorld() メソッドが追加されました。
このメソッドは、ワールド空間の座標をビューポートの座標に変換します。
void worldToViewport(const MPoint &inPoint, double &xPos, double &yPos) const;
このメソッドは、ビューポートの座標をワールド空間のニア クリップ プレーン座標に変換します。
サンプル プラグイン uiDrawManager は、2D テキストと 3D テキストを描画する際のこれらのメソッドの使用例を示しています。
MPassContext
現在のシェーダ オーバーライドのシェーダ インスタンスを返す MPassContext::shaderOverrideInstance() が追加されました。これにより、Maya が描画時に通常使用するシェーダ プログラムとパラメータが使用できます。
詳細については、Developer Kit の rawFootPrintnode サンプル プラグインを参照してください。
MPxPrimitiveGenerator と MRenderItem
これらのプリミティブ タイプは、ビューポート 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/ は、描画オーバーライドに確実にポスト エフェクトが呼び出されるようにします。isTransparent と includePostEffects の両方を有効にするには、分類を drawdb/geometry/rawfootPrint/isTransparent/includePostEffects に設定します。
rawfootPrintNode プラグイン サンプルを参照してください。
MPxDrawOverride は、drawdb/geometry/includePostEffects の分類を指定することで、ポスト エフェクト パスから呼び出されるオプションにすることができます。既定では、描画オーバーライドは、被写界深度、スクリーン スペース アンビエント オクルージョン、モーション ブラーなどの追加のポスト エフェクト パスに対して呼び出されません。
MPxDrawOverride::excludedFromPostEffects() を使用して、ポスト エフェクト パスに対する呼び出しから描画オーバーライドを除外できます。rawfootPrintNode プラグイン サンプルを参照してください。
新しいパス セマンティックが、MPassContext - MPassContext::kDOFPassSemantic と MPassContext::kMotionVectorPassSemantic に追加されました。これらは以前のリリースでの文字列 dofPass と motionVectorPass のチェックに相当します。ポスト エフェクト パターン パスと非ポスト エフェクト パターン パスを示すため、MPassContext::kPEPatternPassSemantic と MPassContext::kNonPEPatternPassSemantic がそれぞれ追加されました。
投影マトリックスが、変換時にポイントの Z コンポーネントを反転するかどうかを示す ProjectionZSense セマンティックが追加されました。反転する場合、この値は -1.0 で、それ以外の場合は 1.0 です。「ビューポート 2.0 でサポートされるシェーダのセマンティック」を参照してください。
これらのパスの詳細については、「エフェクト インタフェース」を参照してください。
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::getEffectsFileShader() や MShaderManager::getEffectsBufferShader() などの MShaderManager でさまざまなインタフェースのいずれかを介してシェーダを取得する際に、シェーダ コンパイルの失敗が発生すると、エラーが Windows および Linux の出力ウィンドウ(Output Window)と Mac のコンソールに出力されます。これはシェーダ開発者のデバッグ プロセスに役立ちます。
これは、文字列バッファ メソッド MShaderManager::getEffectsBufferShader() が使用されている場合に特に当てはまります。以前にエラー シェーダが返された場合、エラーが発生した場合に認識するのが難しくなります。
MRenderItem::setShaderFromNode() インタフェースと MShaderManager::getShaderFromNode() インタフェースに、ユーザが非テクスチャ エフェクトのインスタンスを使用できるようにする新しいブール演算引数 nonTextured が追加されました。
MRenderItem::setShaderFromNode() は、内部エフェクトのインスタンスを公開しないため、推奨されるインタフェースです。その使用方法は、Developer Kit の apiMeshShape プラグイン サンプル(apiMeshSubSceneOverride.cpp)で説明されています。
このサンプル プラグインは、以前は、シェーディング モードとテクスチャ モードの両方にレンダー項目を 1 つだけ作成していました。新しいバージョンでは、シェーディング モードとテクスチャ モードにぞれぞれ 1 つずつ、合計 2 つのレンダー項目が作成されます。これらのエフェクト インスタンスはどちらも MRenderItem::setShaderFromNode() で割り当てられますが、ブール値の引数 nonTextured は、シェーディングのレンダー項目に対しては true に設定され、テクスチャのレンダー項目に対しては false に設定されます。
MPxShaderOverride
bool MPxShaderOverride::requiresUnsharedGeometricStreams()
プラグインはこのメソッドをオーバーライドして、ジオメトリ ストリームの拡大を強制するために true を返すことができます。
「ハードウェア レンダリングのジオメトリ リマッピング」を参照してください。
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)
blindDataShader と hwPhongShader プラグインのサンプルは、どちらもこのインタフェースを使用して頂点 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::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() メソッド:
ファイル テクスチャ ノードを使用して、取得に対して更新できます。
現在、すべてのファイル テクスチャ ベースのメソッドには、ファイル テクスチャが UV タイリングを使用している場合に最初のタイルを返す制限があります。
Maya 2016 Extension 2 では、ビューポート 2.0 はライト制限までしかライトを評価しません。したがって、オンデマンドでライトの情報を要求する場合は、新しい MRenderer::needEvaluateAllLights() メソッドを呼び出す必要があります。
プラグインは、次のインタフェースを呼び出します。
MDrawContext::getLightInformation(kFilterIgnoreLightLimit)
描画する前に、最初にこのメソッドを呼び出す必要があります。
既存のプラグインを変更しない場合は、optionVar MAYA_VP2_IGNORE_EVALUATION_LIGHT_LIMIT=1 を設定して、プラグインが Extension 2 以前と同じように機能し続けるようにすることもできます。この optionVar を設定すると、プラグインがロードされているかどうかに関係なく、シーン内のすべてのライトが常に評価されます。結果として、シーンに多数のライトがある場合は、この optionVar によってビューポート 2.0 のパフォーマンスが低下する場合があります。
これを軽減するには、プラグインがすべてのライトを評価する必要がなくなったら、この optionVar を 0 に再設定して、ライト制限までのライトだけを評価するようにビューポート 2.0 を元に戻すことができます。
MGeometryExtractor が以下をサポートするようになりました。
geometryReplicator サンプル プラグインは、これらの新しい機能のサポートについて示します。
MPxSubSceneOverride::setGeometryForRenderItem() インタフェースが更新され、頂点バッファ(MGeometry::kPoints など)を使用して描画のジオメトリを定義する際に、MIndexBuffer の指定が不要になりました。このケースでは、GPU メモリの浪費を回避するために、空の MIndexBuffer を指定できます。実装例については、gpuCache Developer Kit プラグインを参照してください。
カメラ セットのために正規化されたクリップ プレーンが計算されることがあります。これは既存の MFnCamera::nearClippingPlane() メソッドと MFnCamera::farClippingPlane() メソッドで返される値です。これらの新しいメソッドを使用すると、元のカメラのクリップ プレーンにアクセスできます。
クリップ プレーンと正規化されていないクリップ プレーンを取得するための新しいメソッドは、ビューポート 2.0 の描画コンテキストの一部として使用できるようになりました。
次の列挙が MFrameContext に追加されました。
MFrameContext::kViewNearClipValue //!< カメラ ニア クリップ値(単一の値)
MFrameContext::kViewFarClipValue //!< カメラ ファー クリップ値(単一の値)
MFrameContext::kViewUnnormlizedNearClipValue //!< 正規化されていないカメラ ニア クリップ値(単一の値)
MFrameContext::kViewUnnormalizedFarClipValue //!< 正規化されていないカメラ ファー クリップ値(単一の値)
MDrawContext::getTuple() メソッドから使用できます。
これらは、MFnCamera::nearClippingPlane()、MFnCamera::farClippingPlane()、MFnCamera::unnormalizedNearClippingPlane()、MFnCamera::unnormalizedFarClippingPlane() をそれぞれ使用した場合と同じ結果になります。
詳細については、rawfootPrintNode サンプル プラグインを参照してください。「カメラ情報」も参照してください。
viewRenderOverride と viewRenderOverridePostColor の Developer Kit サンプルを参照してください。
アクティブな出力ターゲット サイズよりも大きいカスタム出力ターゲットを引き寄せるサンプル コードについては、viewRenderOverrideMRT プラグインを参照してください。
MRenderOverride の実装がより容易になりました。MRenderOperation のリストを設定することで、レンダー オーバーライドを作成できるようにする新しいクラスとインタフェースが追加されました。このリストを作成するには、標準のビューポート操作のリストを取得し、必要に応じて、それに独自のカスタム操作を追加します。
この実装の新しいメソッドにより、レンダー ターゲットが MRenderOperation で管理されるようになったため、これらを管理、作成する MRenderOverride も不要になります。
「MRenderOverride を実装する」を参照してください。
新しいメソッド MPxContext::doPtrMoved() が追加されました。このメソッドは、マウスの動作を次の動作をドライブするために使用できるように、マウスの移動時に呼び出されます。
描画の場合、ビューポート 2.0 で描画を実行するために MUIDrawManager が使用されている場合に、プラグインがこのメソッドをオーバーライドします。
評価順序を追跡し、内部パイプラインがレンダリング可能なリストの実行を追跡するため、いくつかのオーバーライド クラスにデバッグ トレーシング情報が追加されました。
MPxDrawOverride と MPxGeometryOverride に新しいトレーシング メソッド(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 のレンダリング イベントのプロファイラ サンプル」を参照してください。
新しい isAlwaysDirty パラメータが、MPxDrawOverride コンストラクタに追加されました。パフォーマンスを最適化するには、このアトリビュートを false に設定して、DG 評価またはダーティな伝搬を通じてノードがダーティとマークされたときに、描画オーバーライドだけが更新されるようにします。オブジェクトを明示的にダーティとしてマークするには、MRenderer::setGeometryDrawDirty() を呼び出します。
ノードの多数のインスタンスを持つシーン、および MPxDrawOverride を使用して描画するシーンでのパフォーマンスが改善されています。
MRenderOverride インタフェースの使用により、ビューポート オーバーライド プラグインのパフォーマンスが向上しました。
サンプル プラグイン fragmentDumper も更新され、指定した名前を持つフラグメントの XML をダンプする機能と、すべてのフラグメント名のリストを提供する機能が含まれました。
viewObjectSetOverride プラグインは、MSceneRender::objectSetOverride() で分離選択の処理方法を示すために変更されました。
分離選択に選択されたオブジェクトは、指定されたオブジェクト セット(set1 と set2)にも属している場合にのみ表示されます。
DirectX と OpenGL の描画 API に関連したカメラの方向に関する情報が、「カメラ情報」に追加されました。
シェーダの統合に関する情報が、「エフェクト オーバーライド: 統合に関する考慮事項」と「シェーダインスタンス: 統合に関する考慮事項」に追加されました。
ポスト エフェクト パスに関する情報が、「エフェクト インタフェース」に追加されました。
GPU メモリ使用量を追跡するため、次の関数が追加されました。
OpenCL バッファの割り当て、更新、解放を容易にする新しい便利なクラス
GPU オーバーライドをオフにしてオンにすることなく、特定のシナリオで正しく動作させるため、次の関数が追加されました。
文字列をローカライズするために MOpenCLInfo クラスに次の関数が追加されました。
MOpenCLInfo インタフェース名の変更
MultiDraw 統合のサポート
MultiDraw 統合は、MPxShaderOverride でサポートされます。MShaderInstance に基づく MPxShaderOverride プラグインは、MultiDraw と互換性のある MShaderInstance を提供できる場合、MultiDraw 統合によって提供される加速度からメリットを得られるようになりました。
この機能のため、次のインタフェースが追加されました。
MPxShaderOverride::shaderInstance(MHWRender::MDrawContext& context)
次のインタフェースは廃止されました。
ワールド トランスフォーム、ワールドビュートランスフォーム、ワールドビュー投影トランスフォーム マトリックスの MultiDraw バージョンである新しいシェーダのセマンティックも追加されています。「ビューポート 2.0 でサポートされるシェーダのセマンティック」を参照してください。
Developer Kit の customTextureShader サンプル プラグインも参照してください。
更新された MFnBlendShapeDeformer インタフェース
MFnBlendShapeDeformer::addTarget (const MObject& baseObject, int weightIndex, double fullWeight, TargetType targetType = kObject)
例: createPixmap("test.png", true) を呼び出すと、スケール係数が 150% の場合は test_150.png が返されます。
新しい MFileIO::setError() メソッドが追加されました。設定すると、読み取りまたは書き込み操作後にエラーが発生した場合に、標準の Maya ファイルの読み取りや書き出しポップアップ ウィンドウを表示できます。このメソッドは、ファイルの読み取りや書き出し操作時にのみ呼び出すことができます。
また、ポップ アップウィンドウには、詳細についてユーザにスクリプト エディタ(Script Editor)を参照させるスタティック メッセージしか含まれていないため、MFileIO::setError() の呼び出し時に、MGlobal::displayError() を呼び出すことをお勧めします。
新しい MRandom ネームスペース
新しい 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)
C++ と Python API の両方で MFileObject クラスに次の関数が追加されました。MPxFileResolver を介して未処理の URI 情報にアクセスできるようになりました。
次の新しいインタフェースが MPlug に追加されました。
これらのメソッドは、接続されているプラグのネットワーク バージョンを生成する点で、既存の MPlug::connectedTo() メソッドに似ています。
ただし、これらは、これらのメソッドのうち 2 つの利点を追加で提供します。MPlug::source() と MPlug::destinations() により、接続の照会を行う際に、単位変換ノードを無視できます。
これらのメソッドは、Python API 2.0 でもサポートされています。
ファイル リファレンス ノードで一時的にリファレンスの編集をミュートするため、次の関数が追加されました。
これらのメソッドは、Python API 2.0 でもサポートされています。
このメソッドは、Python API 2.0 でもサポートされています。
プロキシ アトリビュートを作成するため、次の関数が追加されました。
このメソッドは、Python API 2.0 でもサポートされています。
このメソッドは、Python API 2.0 でもサポートされています。
頂点カラー ペイントのコールバックを登録することができる新しい MPaintMessage クラスが追加されました。このクラスの使用方法のデモについては、paintCallback Developer Kit サンプルを参照してください。