これらのメソッドは既定のビューポート API の MDrawInfo を通して渡されている同等のメソッドと同じ目的のために使用することができます。サンプル プラグイン footPrintNode は、これらのメソッドの使用方法を示しています。ユーザ インタラクションが検出されると(カメラがタンブルしている場合など)、バウンディング ボックスの表示に切り替わります。
MFrameContext にはディスプレイ プリファレンスをテストする追加のスタティック メソッドがあります。
MFrameContext には追加のメンバー メソッド getCurrentCameraPath() があり、現在のフレームをレンダーするのに使用しているカメラへのパスを判断するのに使用できます。
MFrameContext にレンダリング先を照会する renderingDestination() メソッドが追加されました。これは、たとえば、レンダー先のビューポート パネルを識別するのに使用できます。また、レンダー ビューへのレンダリングとディスク上のイメージへのレンダリングを見分けるのに使用できます。
//! Rendering destinations enum RenderingDestination { k3dViewport, //!< Rendering to an interactive 3d viewport k2dViewport, //!< Rendering to an interactive 2d viewport //!< such as the render view kImage //!< Rendering to an image }; RenderingDestination renderingDestination(MString & destinationName) const;
MDrawContext は現在のカラーまたは深度ターゲットのコピーの作成を、それぞれ次のメソッドで可能にします。
MDrawContext に InternalTexture 列挙で指定された内部テクスチャを取得する新しいメソッド getInternalTexture() が追加されました。現在、これは現在の透明な深度レイヤおよび深度ピーリング透明度で使用されている不透明な深度レイヤの取得を可能にします。dx11Shader エフェクト ファイル AutodeskUberShader.fx はこのメソッドの使用例を示しています。
MPassContext に 3 つの新しいパス セマンティクス kTransparentPeelSemantic、kTransparentPeelAndAvgSemantic、kTransparentWeightedAvgSemantic が追加されました。dx11Shader エフェクト ファイル AutodeskUberShader.fx はこれら 3 つのパス セマンティクスの使用例を示しています。
この API を使用してシーン レンダーをキャッシングする実例を示す新しいプラグイン(viewRenderOverrideFrameCache)が利用できます。詳細については、「レンダー ターゲッ /フレームのキャッシング」を参照してください。
MTexture が矩形サブ領域の更新をサポートしました。MTexture::update() メソッドに更新する領域を指定するのに使用できるオプションの region 引数が追加されました。領域が指定されていない場合はテクスチャ全体が更新されます。
サンプル プラグイン hwApiTextureTest はテクスチャのサブ領域のカラーを反転させるサンプル コードを示しています。
contextNodeFullName は入力引数で、ファイルを所有するノードのフル ネームが入力されます。この引数を持たない元の関数は残りますが、使用は推奨されていません。
layerName と alphaChannelIndex は、PSD ファイルからレイヤとアルファ チャネルをロードするために使用できる新しいオプションの引数です。これらの引数は、PSD ファイルのロード専用に使用します。
contextNodeFullName は入力引数で、ファイルを所有するノードのフル ネームが入力されます。この引数を持たない元の関数は残りますが、使用は推奨されていません。
MViewportRenderer と MViewport2Renderer の変更
MViewportRenderer には、同じ名前のフィルタ列挙も追加されています。ただし、MViewportRenderer は廃止され、代わりに MRenderOverride を使用するように切り替える必要があります。
1 つのレンダー アイテムを通して多くのインスタンスをレンダリングすることは、インスタンスごとに 1 つのレンダー アイテムを作成した場合と比べてパフォーマンスが大きく向上する場合があります。レンダー アイテムの複数のインスタンスが変換行列を除いて同一である場合、またはシェーダ インスタンスの単純な float/float2/float3/float4 パラメータを除いて同一である場合にこの機能を使用します。適用されるシェーダと使用しているビデオ カードの両方で GPU インスタンス化がサポートされている場合、Maya はこの機能を使用してレンダー アイテムの複数のインスタンスをレンダリングします。
インスタンス トランスフォームは 1 つずつ追加することができ、これにより返されたインスタンス識別子を使用した効率的な更新または削除が可能になります。また、すべてのインスタンスのトランスフォームは行列配列を通して 1 つの呼び出しで設定することもできます。同様に、1 インスタンスずつ、または浮動小数点数配列によってすべて一度に、インスタンスごとの浮動小数点データをシェーダ インスタンスのパラメータに関連付けることができます。
MPxSubSceneOverride のインタフェースが新しくなりさらに多くの更新呼び出しが必要となりました。このためメソッド furtherUpdateRequired() はこの目的のために派生したクラスにおいてオーバーライドされる場合があります。apiMeshSubSceneOverride のプラグイン サンプル コードではこのインタフェースを使用したシンプルな例が示されています。
オーバーライドの登録の分類でサブストリング “/subscene/volume/” が使用されている場合、透明なレンダー アイテムは内部の透明度アルゴリズムとポスト エフェクトをバイパスします。透明度パス中にレンダー アイテムは一度描画されるため呼び出されます。
MPxSubSceneOverride プラグインの動作と同様の方法により、単一のコード パスを使用して、OpenGL と DirectX 11 の両方をサポートするジオメトリとシェーダを作成して使用するために、これらのメソッドを使用します。
ソース データが既にコピー先バッファへの単純なメモリ コピー操作に対応した形式になっている場合は acquire()/commit() または map()/unmap() の代わりに新しい関数を使用します。このような場合、update() を使用する方が効率的で、データ上での必要なコピー操作を少なくすることができます。
以前にコミットする呼び出しで内部バッファが割り当てられていない場合はバッファが割り当てられます。指定されたパラメータが以前に割り当てられたバッファよりも大きなバッファを必要とする場合、バッファは新しいサイズで再割り当てされます。
OpenGL モードで MVertexBuffer または MIndexBuffer::unmap() を呼び出すと GL_ARRAY_BUFFER_ARB および GL_ELEMENT_ARRAY_BUFFER_ARB の OpenGL バッファのバインドが 0 にリセットされるようになりました。これにより Maya ハードウェア バッファのリードバックの信頼性を高め、ネーティブ グラフィックス API と直接対話することも可能になりました。
MVertexBufferDescriptor には、作成時にセマンティック名を提供するための新しいコンストラクタ引数があります(オプション)。セマンティック名は、異なるカスタム テクスチャ ストリームにタグを付けて識別するために使用します。
MShaderInstance* getShaderFromNode(const MObject& shaderNode, const MDagPath& path, LinkLostCallback linkLostCb = 0, MUserData* linkLostUserData = 0, MShaderInstance::DrawCallback preCb = 0, MShaderInstance::DrawCallback postCb = 0) const;
このメソッドを使用して、Maya によって移動された状態で MShaderInstance を特定のノードから取得します。このメソッドは、getEffectFileShader()、getEffectsBufferShader()、および getFragmentShader() と同様の方法で動作しますが、LinkLostCallback を追加すると、シェーダが由来するノードにリンクされなくなったときに通知を受けることができます。パラメータの変更によって、取得済みのシェーダ インスタンスが引き続き自動的に更新されるようにする場合は、このメソッドを再度呼び出して、コールバックがトリガされた後でノードから新しいシェーダを取得します。
MStatus addInputFragment(const MString& fragmentName, const MString& outputName, const MString& inputName);
MStatus addOutputFragment(const MString& fragmentName, const MString& inputName);
これらのメソッドは、MFragmentManager で登録されたコードのフラグメントをアタッチすることで、既存の MShaderInstance のランタイム コードを変更するために使用します。新しいフラグメントの出力を既存のシェーダ インスタンスの入力に接続することで、フラグメントが追加されます。これらのメソッドは、MShaderManager::getShaderFromNode() と一緒に使用して、Maya から返されるシェーダを変更するためのものです。これは、既存のフラグメント シェーダに対して、追加のパターン入力を提供する、シェーダ出力を調整する、または頂点シェーダおよびジオメトリ シェーダを提供するために使用できます。
MDagPath が描画オーバーライド情報を照会するときに新しい追加のパラメータ値(fPlaybackVisible)を返すようになりました。この情報は MDagPath::getDrawOverrideInfo() メソッドにより返されるMDAGDrawOverrideInfo 構造の一部です。
fPlaybackVisible は再生時の可視性についての描画オーバーライドの設定が DAG パスに関連付けられている DAG オブジェクトに設定されているかどうかを示します。
OpenMaya API を使用し enums kTimerMetric_callbackViaAPI および kTimerMetric_callbackNotViaAPI を通して MFnDependencyNode の dgtimer サブメトリックを照会できるようになりました。これまでも、これらのオプションは利用できましたが、照会すると常に 0 が返されました。
MFnMesh で利用可能な getConnectedSetsAndMembers() および getConnectedShaders() メソッドが MFnNurbsSurface でも利用できるようになりました。
2 つの仮想メソッド MPxAssembly::postApplyEdits() と MPxAssembly::postUnapplyEdits() が追加されました。1 番目のメソッドは現在のアセンブリ(およびすべてのネストされたアセンブリ)に編集が適用された後で performActivate() によって呼び出されます。
2 番目のメソッドは編集を適用解除した後、ネストされたアセンブリが 1 つでも無効化される前、現在のリプリゼンテーションが inactivateRep() によって無効化される前に performInactivate() によって呼び出されます。
これらのメソッドは、既存の preApplyEdits() メソッドおよび preUnapplyEdits() メソッドを補完します。
編集を適用または適用解除した後、これらのメソッドを使って追加の作業を行うことができます。既定の実装ではこれら 2 つの関数は何も行いません。
MAnimControl::isScrubbing() が追加されました。スクラブ中ではなく再生中に true を返す既存の isPlaying() メソッドとは異なり、このメソッドは、アニメーションがスクラブ中の場合に true を返します。
addDelayedTimeChangeCallback() メソッドおよび addDelayedTimeChangeRunupCallback() メソッドが MDGMessage に追加されました。時間が変更されると必ず、最初に addTimeChangeCallback() がすべて実行され、次に addDelayedTimeChangeCallback()、最後に addDelayedTimeChangeRunupCallback() がすべて実行されます。時間変更のコールバックをこのように 3 つのグループに分類することで、ノードで行う必要があるランナップやダイナミクスの解決を容易にします。
ランナップのサポートを強化するために、次のメソッドが MDynamicsUtil に追加されました。
流体のサイズ変更のサポートを強化するために、次のメソッドが MFnFluid に新しく追加されました。
MSceneMessage に addReferenceCallback() メソッドが追加されました。コールバックにリファレンス ノードと解決されたパスが提供されます。サポートされるメッセージのタイプは次のとおりです。
MSceneMessage にも、新しい addCheckReferenceCallback() メソッドがあります。このメソッドは、操作を中止するために使用できる通常の確認の変数に加えて、リファレンス ノードと解決済みパスをコールバックに提供します。サポートされるメッセージのタイプは、kBeforeLoadReferenceCheck のみです。
新しいメッセージのタイプ kAfterSceneReadAndRecordEdits が MSceneMessage に追加されました。これは、ファイルのロード、読み込み、リファレンス、リロードリファレンスの操作の完了後に呼び出されます。コールバック中に行われたすべてのリファレンスの編集が記録されます。
ノードのいずれかのファイル パスの属性を外部のコンテンツ テーブルに簡単に追加できるようにするために、MFnDependencyNode::setExternalContentForFileAttr() ヘルパ メソッドが追加されました。MPxNode::setExternalContentForFileAttr() は、プラグイン ノードに同じ機能を提供します。
パスを使用しているノードに応じて異なる方法でパスを解決するカスタム ファイル リゾルバをサポートするため、ファイルを所有するノードのフル ネームを取得する resolveURIWithContext() 仮想メソッドが MPxFileResolver で提供されるようになりました。
さらに、ファイル パスを取得する次のメソッドに contextNodeFullName パラメータが追加されました。
Accessor クラスに多くの機能が追加されました。
MGlobal::currentToolContext() はツールの MObject を返します。次に、新しい MFnToolContext クラスを使用して、ツールに関する情報にアクセスできます。
プラグインがオーバーライドできる doEnterRegion() 仮想メソッドが MPxContext に追加されました。
MComputation: Maya のステータスバーにある進行状況のインジケータを使用し、待機カーソルが表示されるかどうかを制御するためのサポートが追加されました。
MFnDagNode: getConnectedSetsAndMembers() メソッドが MFnMesh から削除され、その親クラス MFnDagNode に移動しました。これにより、このメソッドが、MFnNurbsSurface などの、MFnDagNode から派生するすべてのクラスで使用可能になりました。
MGlobal: optionVarExists() および removeOptionVar() が追加されました。
MMeshSmoothOptions:サブディビジョン タイプを指定できるようになりました。
MRampAttribute: sampleColorRamp() および sampleValueRamp() は等間隔に並んだランプのサンプルを返します。
MString: substitute() および substituteFirst() が追加されました。
MUserData はネーティブ リソースを保持しています。.NET が MUserData のインスタンスを削除するときに MUserData が保持しているリソースを解放しないようにするにはこのアトリビュートを false に設定します。
maya.app.general.mayaMixin モジュールの MayaQWidgetBaseMixin クラスと MayaQWidgetDockableMixin クラスは、ウィジェットの自動命名、Maya のメイン ウィンドウへのウィジェットのペアレント化、ウィジェットのドッキングなどを行うメソッドを提供して、PySide ベースのウィジェットのインタラクションを簡略化します。詳細については、「PyQt および PySide ウィジェットのベスト プラクティス」を参照してください。