Autodesk Maya 2014

OpenMaya レンダー

UI 描画の機能強化

ジオメトリの機能強化

シェーダのオーバーライドの機能強化

  • シェーダ フラグメントに基づく新しいタイプのシェーダ オーバーライド(MPxShadingNodeOverride)が導入されました。この新しいシステムは、Maya がシェーディング ネットワークのエフェクトを動的に作成するために使用する内部システムを直接露出させたものです。MPxShadingNodeOverride は次の点で既存の MPxShaderOverride とは異なります。つまり、MPxShaderOverride の実装はシェーディング ネットワーク用のシェーディング エフェクト全体(ライティングを含む)を生成する必要がありますが、MPxShadingNodeOverride はネットワーク内の個々のノード用の小さなフラグメントのみを生成すれば済みます。
  • MPxShadingNodeOverride の実装は、ビューポート 2.0 で特定のノードを描画するために使用されるシェーダ フラグメントまたはシェーダ フラグメントのグラフを定義します。次に、このフラグメントまたはフラグメント グラフが、シェーディング ネットワーク内の他のノードのフラグメント(内部で定義されたフラグメントと他のプラグインで定義されたフラグメントの両方)に接続されます。その後、最終的な合成フラグメント グラフがシェーディング エフェクトにまとめられ、生成目的のシェーディング ネットワークに関連付けられたオブジェクトを描画するために使用されます。
  • シェーディング フラグメントとフラグメント グラフは、新しい MFragmentManager クラスによって管理されます。このクラスを使用すると、プラグインで XML を使用して GL および DX 用の新しいフラグメントを定義し、そのフラグメントの構造、パラメータ、およびソース コードを定義できます。さらに、MFragmentManager を使用すると、Maya のフラグメント ベースのシェーダ システムと適切に統合される新しいフラグメントの記述方法を取得するために、Maya の内部フラグメントの XML 定義を照会することもできます。
  • MPxShadingNodeOverride のサブクラスである MPxSurfaceShadingNodeOverride も導入されました。このクラスは、サーフェス シェーダ(つまり、一般にシェーダ/サーフェスに分類される、シェーディング エンジンのサーフェス スロットに接続可能なノード)をサポートするための追加の機能を提供します。
  • 詳細については、新しいクラスである MPxShadingNodeOverrideMFragmentManager、および MPxSurfaceShadingNodeOverride の API マニュアルと、『Maya ビューポート 2.0 API ガイド』の更新を参照してください。

シェーダ インスタンスの機能強化

  • 深度パスのカラーをレンダリングするためのシンプルなストック シェーダが新しく追加されました。
  • 次の UI 描画用のストック シェーダが追加されました。
    • 各種の線分用シェーダ(破線または実線、太線または細線、一定のカラーまたは頂点ごとのカラーを使用)
    • 点線フェース シェーダ
  • 均一のセマンティック RelativeViewportDimensions を指定して、相対的なビューポートの寸法を取得できます。このセマンティックは、四角形のレンダリング操作で UV 変換を調整するために使用できます。

    次の例では、テクスチャ座標を変更します。

    float4 gUVTransform : RelativeViewportDimensions;
    In.UV * gUVTransform.zw + gUVTransform.xy”

    次のシェーダは新しいセマンティックを使用するように修正されました。

    • OpenGL: BlendGL.cgfx、BlurGL.cgfx、ThresholdGL.cgfx、AnaglyphGL.cgfx、FreeViewGL.cgfx、CheckerBoardGL.cgfx、InterlaceGL.cgfx
    • Direct3D10: Blend10.fx、Blur.fx、Threshold10.fx、Anaglyph10.fx、FreeView10.fx
  • フラグメント ベースのシェーダ インスタンスの作成メソッド MShaderManager::getFragmentShader() が新しく追加されました。名前シェーダ フラグメントまたはフラグメント グラフから生成されたシェーダの新しいインスタンスを返します。
  • MShaderInstance オブジェクトで clone() インタフェースがサポートされるようになりました。このインタフェースは、多数の同一のシェーダが高パフォーマンスで必要になる状況で使用されます。

テクスチャリングの機能強化

  • テクスチャ API に多数の修正が行われ、カラー テクスチャの取得、キャッシュ、および更新方法が強化されました。
    • 取得に関しては、MTextureManageracquireTexture() メソッドが修正され、作成時に NULL データを渡したり、名前なしテクスチャ(空文字列)を使用したりできるようになりました。名前なしテクスチャは、内部テクスチャ キャッシュ システムによってキャッシュされません。そのため、取得では、メソッド呼び出しのたびに新しいテクスチャが作成されます。名前付きテクスチャの動作はこれまでと同じです。同じ名前のテクスチャがキャッシュに存在する場合は、そのテクスチャが返されます。
    • 一般に、テクスチャの連続的な再取得はお勧めできません。そのため、既存のテクスチャの更新を実行する新しいインタフェースが MTexture に追加されました。
      • MStatus update(const void* pixelData, bool generateMipMaps, unsigned int rowPitch=0);
      • MStatus update(const MImage &image, bool generateMipMaps);
    • 新しいメソッド MTexture::bytesPerPixel() および既存のメソッド MTexture::rawData() とともに、テクスチャを更新する方法は多数あります。
      • 既存の MTexture から未処理データを抽出し、更新に使用できます。この場合は、行パディングが存在する場合に適切なデータ転送が行われるように、update() の呼び出し時に MTexture の rowPitch を使用することが重要です。これは DirectX で作成されたテクスチャに影響します。
      • 新しい未処理データを渡して既存の MTexture を更新できます。データが正しいサイズであることを確認するのは呼び出し側です。
      • MImage のデータを使用して既存の MTexture を更新できます。テクスチャの形式が MImage の形式(現在は 4 バイト、チャネル RGBA カラーごとに 8 バイト)一致することを確認するのは呼び出し側です。bytesPerPixel () メソッドを使用すると、MTexture に一致する形式を照会することができます。

        この更新メカニズムは現在、配列以外の 2D テクスチャの更新に限定されます。

        各メソッドの呼び出しには固有のコストがあります。状況に応じて異なるメソッドを使用しなければならない場合があります。

      • RawData() が GPU から CPU にメモリをコピーします。
      • Update() が未処理のピクセルデータを使用して CPU のデータを GPU に転送します。
      • Update() が MImage を使用して GPU メモリを CPU にマップし、コピーを実行して、GPU にマップし直します。

      既存のプラグイン hwAPITextureTest と新しいプラグイン viewImageBlitOverride は、カラー テクスチャを更新するさまざまな方法を示します。前者には、表示する前にテクスチャのピクセルを反転する新しいオプションがあります。後者では、レンダー オーバーライド(MRenderOverride)のリフレッシュのたびにテクスチャを更新できます。

  • MRenderUtil::eval2dTexture() は、1 つまたは複数の (u,v) 位置でサポートされるテクスチャ ノードの評価を許可します。
  • 深度バッファへのレンダリングに適したテクスチャを取得するための便利な方法として次のインタフェースが新しく追加されました。
    • MTexture* acquireDepthTexture(const MString &textureName, const MImage &image, bool generateMipMaps, const MDepthNormalizationDescription *normalizationDesc);
    • MTexture* acquireDepthTexture(const MString &textureName, float *pixelData, unsigned int width, unsigned int height, bool generateMipMaps, const MDepthNormalizationDescription *normalizationDesc);
    • これらのインタフェースに使用される内部形式は R32F(深度形式ではなく、赤チャネルとして保存されている単一チャネル 32 ビット浮動小数点)です。
    • これらのメソッドは、データを深度バッファに転送するのに適した[0... 1]の範囲に入力データを正規化できます。新しい構造 MDepthNormalizationDescription は、プラグインの作成者に正規化の入力パラメータを示す方法です。これは入力データが Maya ソフトウェア レンダラによって生成された深度バッファに、したがって MImage の深度バッファに格納されているデータに使用されている規則に準拠することを前提とします。テクスチャが正規化されずに作成された場合、レンダー時間に正規化するための適切なシェーダ ロジックを提供するのはプラグインの作成者です。
    • MImage を入力として受け取る acquireDepthTexture() インタフェースは、格納された有効な深度バッファが存在することを前提とします。
    • 正規化されたデータの計算に役立つ新しいメソッドが MImage に追加されました。このメソッドは、MImage の深度バッファの深度値の範囲を返します。
      • MStatus getDepthMapRange( float &minValue, float &maxValue ) const;
    • プラグイン viewImageBlitOverride は、正規化された深度テクスチャを塗り潰すための未処理データを生成するコード例と、ディスク上の IFF ファイルから既存の深度バッファを読み込むためのコード例を提供します。

      深度に転送するために、深度ステンシル状態のオーバーライドがカスタム MQuadRender で使用されます。

    • 状態設定の変更の詳細については、MQuadRender の関連する変更を参照してください(「MQuadRender」を参照)。

ライティングの機能強化

  • 無制限のライト アクセス:
    • ライト情報にアクセスするための既存のインタフェースが修正され、ビューポート 2.0 レンダラのライトの制限数の設定を無視するかどうか指定できるようになりました。アクセス可能なシャドウ マップの数は、現在は引き続きライトの制限数に固定されます。
    • 次のインタフェースが新しい LightFilter パラメータを受け入れるようになりました。

      旧バージョンのメソッドである numberOfActiveLights() はサポートされなくなりました。

  • 「要求による」シャドウの更新
    • 特定のライト DAG オブジェクトのシャドウ マップがビューポート 2.0 レンダラのライトの制限数設定を超えている場合でも、それらのシャドウ マップの計算を要求することができます。MRenderer::setLightRequiresShadows() メソッドを使用すると、このような要求をキューに入れたりキューから除去したりできます。このメソッドは、特定のシャドウ マップの計算を強制することも、リフレッシュまたは新規レンダーの実行を強制することもありません。シャドウ マップ更新の必要性のチェックをトリガします。MRenderer::setLightsAndShadowsDirty() (変更管理を参照)を使用すると、必要に応じて強制的に計算することができます。
    • このメソッドがフレームのレンダリング内から呼び出された場合、シャドウ マップ計算の更新はすべて、次のシーンの更新時に行われます。たとえば、ハードウェア シェーダ プラグイン(MPxShaderOverride)内から呼び出された場合、更新は次のフレーム(リフレッシュ)で実行されます。レンダー オーバーライド操作から呼び出された場合、次のシーン レンダーによって更新がトリガされます。シーン レンダーは、オーバーライド内から呼び出された次の MSceneRender か、レンダー オーバーライドがない場合にレンダラによって内部的に呼び出された次のシーン レンダーのいずれかです。
    • このインタフェースを使用したコード例は、dx11Shader(MPxShaderOverride)および viewRenderOverrideShadows (MRenderOverride)プラグインにあります。dx11Shader プラグインには、ライトのバインドが変更されたときの追加リフレッシュの呼び出しを示すコードがあります。

  • レンダー オーバーライドのライティング/シャドーイング インタフェースの機能強化
    • 通常、ライト情報はシーン レンダー(MSceneRender)中にのみ更新されます。シャドウ要求がカスタム レンダー オーバーライドのユーザ操作(MUserRenderOperation)内から実行された場合は、最後の使用可能なライト情報のみを使用できます。ユーザ操作にライト情報が必要な場合は、新しい仮想メソッド MUserRenderOperation::requiresLightData() をオーバーライドして、true を返すように設定できます。
    • レンダー オーバーライドのシーン レンダーが更新後のシャドウ マップなどの情報にアクセスできるようにするために、MSceneRender::preSceneRender() および MSceneRender::postSceneRender() の 2 つのメソッドが新しく追加されました。これらのメソッドは、シャドウ マップの更新またはシーンのレンダリングの前か後のいずれかに呼び出されます。この時点で、現在の描画コンテキスト、したがってライティング/シャドーイング情報(MLightParameterInformation)が利用できます。
    • 新しいインタフェースを使用する例としては、新しい viewRenderOverrideShadows レンダー オーバーライド プラグインがあります。このプラグインは、ユーザ操作を実行してシャドウ要求をキューに格納した後、カスタム シーン レンダーでそのシャドウ要求を使用します。プリシーン レンダー メソッドは、要求されたシャドウ マップを抽出するようにオーバーライドされます。これにより、カスタム シェーダがシーンのレンダリング中にこのシャドウ マップを使用できるようになります。ライトの制限数を超えるライトおよびシャドウ情報にアクセスできます。

レンダー項目の機能強化

  • MRenderItem のインスタンスは、今後は直接に作成または削除されない可能性があります。プラグインでは、MRenderItem のスタティックな Create() および Destroy() メソッドを使用する必要があります。この変更により、メモリの割り当て/割り当て解除が別々の DLL で行われるときに発生する安定性の問題が解決されます。
  • レンダー項目に「バウンディング ボックス」ビューポート モードを指定できるようになりました。
  • レンダー項目の変換行列を設定できるようになりました。
  • スクリーンスペース アンビエント オクルージョンやモーション ブラーなどのポスト効果にレンダー項目を含める必要があるかどうかを設定できるようになりました。
  • レンダー項目の「深度の優先順位」を設定できるようになりました。「深度の優先順位」は、描画時にレンダー項目がアクティブなカメラに向かって移動する距離を設定します。これは、深度が相互にオーバーラップする描画を使用するレンダー項目で発生する可能性がある深度の競合を防ぐのに役立ちます。たとえば、レンダー項目の描画ワイヤフレームと別の塗り潰し描画が同じ深度で描画される場合があります。ワイヤフレーム項目がシェーディング項目によって隠されないようにするために、ワイヤフレーム項目の深度の優先順位を「高く」して隠されるのを回避できます。詳細については、depthPriority() メソッドを参照してください。
  • 以前は、プラグインによって作成された MRenderItem はすべて、MPxGeometryOverride::updateRenderItems() が呼び出されるたびに、シャドウの投影および受像のステータスが自動的に設定されました。内部で作成されたレンダー項目については引き続きこの処理が行われますが、プラグインによって作成されたレンダー項目については行われません。関連付けられている DAG オブジェクトのステータスを追跡するか、他のロジックに基づいて値を設定するのはプラグインです。ワイヤフレーム モードで描画としてマークされている項目はすべて、シャドウを投影することも受像することもありません。線分またはポイントを使用して描画するレンダー項目は、ワイヤフレーム モードで描画するようマークされない限り投影することができます。プラグイン apiMeshShape は、さまざまな用途を示す例を提供します。
  • 次のメソッドは MRenderItem で公開されていますが、内部で作成されるレンダー項目には影響しません。
    • setDrawMode()
    • setMatrix()
    • setShader()
    • setExcludedFromPostEffects()
    • castShadows()
    • receivesShadows()
    • depthPriority()
  • setExclucedFromPostEffects() メソッドは、レンダー項目がシェーディング モードまたはテクスチャ モードの描画としてマークされている場合に、スクリーンスペース アンビエント オクルージョンを無効にするだけです。項目がワイヤフレーム モードの描画としてマークされている場合は、すべてのポスト効果が無効になります(スクリーンスペース アンビエント オクルージョン、モーション ブラー、および被写界深度)。

状態の機能強化

  • 状態オブジェクトを取得する MStateManager のメソッドがスタティックになりました。そのため、MDrawContext にアクセスせずに状態を作成および削除できるようになりました。描画コンテキストを必要とするのはアクティブ化状態だけです。

パス情報の機能強化

  • MUIDrawManager インタフェースの追加の一部として、いくつかの新しいパス コンテキスト セマンティックが公開されました。
    • UI ジオメトリ: UI が描画されます。
      • プリ UI ジオメトリ: UI がシーンの前に描画されます(地表プレーンなど)。
      • ポスト UI ジオメトリ: UI が塗り潰し描画に対して相対的に描画されます(サーフェス上のワイヤフレームやコンポーネントなど)。
      • 不透明 UI: 不透明 UI が描画されます。
      • 透明 UI: 透明 UI が描画されます。
      • X 線 UI: X 線モードの UI が描画されます。

レンダーのオーバーライドの機能強化

  • UI のみを描画するシーン レンダー操作に影響を与えないようにポスト効果が修正されました。
  • シーン レンダー操作に対するポスト効果を明示的に無効にできるようになりました。
  • MQuadRender で状態セッタを指定できるようになりました。既定では、クアッド レンダリング操作のジオメトリをレンダリングするときに、ブレンディングが無効になり、深度書き込みが無効になり、カリングが無効になります。MQuadRender から派生したクラスによって次の方法を実装し、特定の状態に対して既定の動作を置換することができます。
    • virtual const MDepthStencilState* depthStencilStateOverride(); // 深度ステンシルの状態をオーバーライドします
    • virtual const MRasterizerState* rastersizerStateOverride(); // ラスタライザの状態をオーバーライドします
    • virtual const MBlendState* blendStateOverride(); // ブレンドの状態をオーバーライドします

    オーバーライドが特定の状態に対して指定されている場合、既定の状態はオーバーライドされていないその他の状態に使用されます。

    開発キットの viewImageBlitOverride プラグインは、深度書き込み状態のオーバーライドの例を提供します。

  • MRenderer::theRenderer() は、オプションで initializeRenderer パラメータを利用できるようになりました。False が渡された場合は、レンダラの完全な初期化を抑止します。 これによりレンダラの完全初期化のオーバーヘッドを避けることができ、レンダリングのオーバーライドを登録することによって、プラグインのロードを高速化することができます。

変更管理の機能強化

  • シーン内のライト マップおよびシャドウ マップを再評価する必要があることを Maya に通知する MRenderer::setLightsAndShadowsDirty() メソッドが MRenderer に新しく追加されました。これは、ハードウェア テッセレーションを使用してオブジェクトのジオメトリを変更できるシェーダなどに使用すると便利です。このような場合には、Maya はジオメトリの変更を自動的に検出できません。そのため、シェーダは再計算を必要とする変更がシャドウに対して行われたときに Maya に通知する必要があります。
  • 大きな変更が生じたがビューポートの更新は必要ないというようなシーンの変更時に、ビューポート 2.0 プロセスのオーバーヘッドを避けるために MRenderer::disableChangeManagementUntilNextRefresh() を使用できます。

描画オーバーライドの機能強化

  • prepareForDraw() インタフェースは、次のように MFrameContext をパラメータとして受け入れるようになりました。

    virtual MUserData* prepareForDraw( const MDagPath& objPath, const MDagPath& cameraPath, const MFrameContext& frameContext, MUserData* oldData) = 0

  • ジオメトリ情報はビューポート アトリビュート(ビューポートのサイズなど)に基づいて計算される場合があるため、プラグインの開発者は描画データ ステージの準備にこの情報が必要になることがあります。

ジオメトリのオーバーライドの機能強化

  • Maya DAG オブジェクトのテンプレート化と非テンプレート化を切り替えると、自動的にシェーディング レンダー項目の表示が切り替わります。これにより、既定のビューポート インタフェースに使用されるロジックとの一貫性が保たれます。プラグインでは、必要に応じてこの動作をオーバーライドして、これらの項目のいずれかまたはすべてを有効/無効にすることができます。
  • MPxGeometryOverride を使用する apiMeshShape の例が改良されました。このコードは次のことを示します。
    • さまざまな表示モードでのワイヤフレームの描画(表示モードの検出)、オブジェクトがアクティブなときに限らないワイヤフレームの描画(アクティブな表示モード)。
    • 「太点」ストック シェーダを使用した非アクティブおよびアクティブな頂点の描画。
    • 太線および破線ストック シェーダを取得するためのサンプルコード。
    • オブジェクトがテンプレート化されるときのレンダー項目の非表示と、描画テンプレート用の適切なレンダー項目のサポート。
    • UI 描画(アクティブおよび非アクティブな頂点の描画など)の間で深度の競合を防ぐための新しい MRenderItem::depthPriority() メソッドの使用法。

Maya コールバックの機能強化

MFrameContext

MFrameContext は Maya 2014 の新しいインタフェースです。フレーム レンダーごとに使用可能な情報を提供するように設計されています。これには、レンダー ターゲット、ビューポート サイズ、カメラ情報などが含まれます。

相対スコープに関しては、MFrameContext は、1 つまたは複数の「パス」の期間(MPassContext)と実際の描画の期間(MDrawContext)を含むものとみなすことができます。

MDrawContextMFrameContext から派生し、すべての仮想メソッドの実装を提供します。これらのメソッドから返される値は、MFrameContextMDrawContext とで若干異なります。MFrameContext は Maya から値を取得し、MDrawContext は GPU デバイスの状態から値を取得するからです。また、MFrameContext::getMatrix() は、オブジェクトからワールドへの行列を必要とする行列タイプの値は返すことができません。この情報は描画時にしか使用できないからです。

フレーム コンテキスト情報には次の情報が含まれます。

  • カメラとビューの情報。
  • ビューポートとアクティブなレンダー ターゲットの情報。
  • 表示スタイル(ビューポート 2.0 のレンダー グローバルとビューポート オプションの模倣)。
  • ライティング モードとライトの制限数(同じ)。
  • アクティブなポスト効果の表示。
  • 使用されている透明度アルゴリズムの表示。
  • ビューポート シェーディング メニューでのグローバル線幅の設定。

MPxSubSceneOverride

MPxSubSceneOverride は Maya 2014 の新しいインタフェースです。MPxDrawOverride および MPxGeometryOverride に代わるインタフェースで、多数の独立した描画可能オブジェクトを生成する必要があるビューポート 2.0 のプラグイン DAG オブジェクトを表すために特別に最適化されています。 たとえば、サブシーン全体を定義できるプラグイン ノード(gpuCache プラグインなど)はこのインタフェースによく適合します。単一ノードは何万もの描画可能オブジェクトを生成しなければならない場合があるからです。

MPxSubSceneOverride は、実装に与えられるコントロールの量に関して、MPxDrawOverrideMPxGeometryOverride の間に位置します。MPxDrawOverride はオブジェクト全体の描画を完全にコントロールできますが、結果として実装は描画についてのすべての責任を負います。MPxGeometryOverride は比較的簡単に使用できますが、結果として使用できる描画のコントロールは制限されます。MPxSubSceneOverride はすべてのレンダー項目、ジオメトリ、シェーダを完全に定義し、高度なコントロールを提供できます。ただし、この定義はハードウェアの描画 API から抽象化されます。そのため、DirectX と OpenGL の両方のサポートを得るための実装が 1 つで済みます。さらに、レンダー項目の描画は Maya によって処理されるため、項目は Maya レンダリング パイプラインに完全に参加できます(スクリーンスペース アンビエント オクルージョン、透明度のソート、影付け/影受けなどのスクリーンスペース エフェクトを含む)。

ゴースト化のサポート

Maya 2014 API は、ゴースト化オブジェクトをレンダリングする際に、レンダー オーバーライドを明示的に呼び出しません。

以前は、オーバーライドがアタッチされている DAG オブジェクトがゴースト化に設定されている場合に、レンダー項目または描画コードをゴーストごとに 1 回ずつ複数回呼び出すことができました。

これはもうできません。そのため、プラグインの独自のゴースト化を実行するコードは、プラグインの作成者が記述する必要があります。

影響を受けるクラスは、MPxDrawOverrideMPxGeometryOverride、および MPxSubSceneOverride です。

.NET API

MetaData C++ API の .NET API へのポートが次のように大幅に修正および改良されました。

  • 主要なクラスで IDictionaryIEnumerable などの標準の .NET インタフェースがサポートされるようになりました。
  • データ説明とデータ アクセスの概念が簡素化され、ユーザがデータに対して .NET 型を簡単に指定できるようになりました。これにより、Structure クラスと Handle クラスを使用する必要が完全になくなりました。これらのクラスは、このクライアント タイプから自動的に作成されるからです。

詳細については、「MetaData」を参照してください。

リファレンス編集の新しい API

  • MPxEditData により、リファレンス編集と関連付けるための、独自のカスタム データを作成することができます。

一般的なメタデータの新しい API(ブラインド データ)

  • MFileIO - 永続的なシーンレベルのメタデータ(つまり、シーン ファイルと共に格納される)の指定を許可するために、setMetadata()deleteMetadata() および metadata() の各メソッドが追加されました。

新しい外部コンテンツ API

  • MExternalContentInfoTable は、ノードがその動作を実行するために必要なすべての外部コンテンツ(ファイル、テクスチャなど)の場所を格納するために使用されます。 これらの場所情報の更新をノードに渡すためには、MExternalContentLocationTable が使用されます(たとえば、[ファイル パス エディタ]から)。
  • ノードの外部コンテンツにアクセスして修正を行うために、MFnDependencyNodeMPxNode に、getExternalContent()setExternalContent()addExternalContentForFileAttr() が追加されました。

その他

  • MnObject::fnObject および fOwn はプライベートになりました。これらは使用されないようにしてください。もし使用された場合は、それに応じて変更を行う必要があります。
  • MRampAttribute を使いやすくするために、数多くのメソッドが追加されました。ランプに新しい値を設定しやすくするために setRamp() が追加され、ランプを初期値とともに作成しやすくするために createRamp() が追加されました。さらに、sort()pack()、および hasIndex() が追加されています。
  • evalNoSelectNotify コマンドは、選択変更通知を無効にした状態でコマンドを実行します。これにより、現在の選択を変更するタイプのコマンド(createNode など)をスクリプトが大量に実行しているケースで最終的に何が選択されているかのみが重要であるという場合に、パフォーマンスを著しく向上させることができます。

マニュアル

プラグインの変換

  • プラグインの作成者は、ビューポート 2.0 でプラグインの変換が認識されるようにするには、変換を登録する際に適切な分類文字列 drawdb/geometry/transform を追加する必要があることにご注意ください。この処理は次の操作のために必要となります。
    • ローカルの回転軸とピボットの描画。
    • オブジェクトの変換による DAG 内のオブジェクトの下でペアレント化されている子の移動。

    たとえば、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 によって認識される分類の一覧が追加されました。

「ビューポート 2.0 API」の章の更新