詳細は「3.9 UI 作成マネージャ」のセクションを参照してください。
詳細については、新しいクラスである MPxShadingNodeOverride、MFragmentManager、および MPxSurfaceShadingNodeOverride の API マニュアルと、『Maya ビューポート 2.0 API ガイド』の更新を参照してください。
float4 gUVTransform : RelativeViewportDimensions; In.UV * gUVTransform.zw + gUVTransform.xy”
次のシェーダは新しいセマンティックを使用するように修正されました。
既存のプラグイン hwAPITextureTest と新しいプラグイン viewImageBlitOverride は、カラー テクスチャを更新するさまざまな方法を示します。前者には、表示する前にテクスチャのピクセルを反転する新しいオプションがあります。後者では、レンダー オーバーライド(MRenderOverride)のリフレッシュのたびにテクスチャを更新できます。
深度に転送するために、深度ステンシル状態のオーバーライドがカスタム MQuadRender で使用されます。
このインタフェースを使用したコード例は、dx11Shader(MPxShaderOverride)および viewRenderOverrideShadows (MRenderOverride)プラグインにあります。dx11Shader プラグインには、ライトのバインドが変更されたときの追加リフレッシュの呼び出しを示すコードがあります。
オーバーライドが特定の状態に対して指定されている場合、既定の状態はオーバーライドされていないその他の状態に使用されます。
開発キットの viewImageBlitOverride プラグインは、深度書き込み状態のオーバーライドの例を提供します。
virtual MUserData* prepareForDraw( const MDagPath& objPath, const MDagPath& cameraPath, const MFrameContext& frameContext, MUserData* oldData) = 0
MFrameContext は Maya 2014 の新しいインタフェースです。フレーム レンダーごとに使用可能な情報を提供するように設計されています。これには、レンダー ターゲット、ビューポート サイズ、カメラ情報などが含まれます。
相対スコープに関しては、MFrameContext は、1 つまたは複数の「パス」の期間(MPassContext)と実際の描画の期間(MDrawContext)を含むものとみなすことができます。
MDrawContext は MFrameContext から派生し、すべての仮想メソッドの実装を提供します。これらのメソッドから返される値は、MFrameContext と MDrawContext とで若干異なります。MFrameContext は Maya から値を取得し、MDrawContext は GPU デバイスの状態から値を取得するからです。また、MFrameContext::getMatrix() は、オブジェクトからワールドへの行列を必要とする行列タイプの値は返すことができません。この情報は描画時にしか使用できないからです。
MPxSubSceneOverride は Maya 2014 の新しいインタフェースです。MPxDrawOverride および MPxGeometryOverride に代わるインタフェースで、多数の独立した描画可能オブジェクトを生成する必要があるビューポート 2.0 のプラグイン DAG オブジェクトを表すために特別に最適化されています。 たとえば、サブシーン全体を定義できるプラグイン ノード(gpuCache プラグインなど)はこのインタフェースによく適合します。単一ノードは何万もの描画可能オブジェクトを生成しなければならない場合があるからです。
MPxSubSceneOverride は、実装に与えられるコントロールの量に関して、MPxDrawOverride と MPxGeometryOverride の間に位置します。MPxDrawOverride はオブジェクト全体の描画を完全にコントロールできますが、結果として実装は描画についてのすべての責任を負います。MPxGeometryOverride は比較的簡単に使用できますが、結果として使用できる描画のコントロールは制限されます。MPxSubSceneOverride はすべてのレンダー項目、ジオメトリ、シェーダを完全に定義し、高度なコントロールを提供できます。ただし、この定義はハードウェアの描画 API から抽象化されます。そのため、DirectX と OpenGL の両方のサポートを得るための実装が 1 つで済みます。さらに、レンダー項目の描画は Maya によって処理されるため、項目は Maya レンダリング パイプラインに完全に参加できます(スクリーンスペース アンビエント オクルージョン、透明度のソート、影付け/影受けなどのスクリーンスペース エフェクトを含む)。
Maya 2014 API は、ゴースト化オブジェクトをレンダリングする際に、レンダー オーバーライドを明示的に呼び出しません。
以前は、オーバーライドがアタッチされている DAG オブジェクトがゴースト化に設定されている場合に、レンダー項目または描画コードをゴーストごとに 1 回ずつ複数回呼び出すことができました。
これはもうできません。そのため、プラグインの独自のゴースト化を実行するコードは、プラグインの作成者が記述する必要があります。
影響を受けるクラスは、MPxDrawOverride、MPxGeometryOverride、および MPxSubSceneOverride です。
MetaData C++ API の .NET API へのポートが次のように大幅に修正および改良されました。
詳細については、「MetaData」を参照してください。
たとえば、rockingTransform プラグインの場合、コードは次のようになります。
// Classify the node as a transform. This causes Viewport // 2.0 to treat the node the same way it treats a regular // transform node. const MString classification = "drawdb/geometry/transform"; status = plugin.registerTransform("rockingTransform", rockingTransformNode::id, &rockingTransformNode::creator, &rockingTransformNode::initialize, &rockingTransformMatrix::creator, rockingTransformMatrix::id, &classification);
この機能は Maya 2012 から使用できるようになりました。
Maya 2014 では、registerTransform() が更新され、他の drawdb 分類が指定されていない場合には、自動的に drawdb/geometry/transform 分類が追加されるようになりました。getClassification コマンド マニュアルも更新され、ビューポート 2.0 によって認識される分類の一覧が追加されました。