レンダリングおよびライティング API の新機能

シェーディング

  • MPxShaderOverride クラスが新たに Maya シェーディング ノードをサポートしたことにより、ビューポート 2.0 でパーティクル スプライトをシェーディングできるようになりました。カスタム スプライト シェーダの作成の詳細については、customSpriteShader/customSpriteShader.cpp サンプル プラグインを参照してください。
  • カスタム シェーダ フラグメント開発のデバッグのために、MShaderInstance::writeEffectSourceToFile() メソッドが追加されました。このメソッドは、最終シェーダ フラグメントが現在の描画 API で最終エフェクト ソースにどのように変換されるのかを確認する場合に使用します。

    シェーダ フラグメントを検証するには、最終エフェクト ソースから生成されたシェーダ インスタンスをコンパイルして、バインドします。フラグメント デバッグ コードのパスを有効にするには、MAYA_CUSTOMSPRITESHADER_DEBUG_FRAGMENTS = 1 環境変数を設定します。Maya スクリプト エディタ(Script Editor)にシェーダ コンパイルに関するエラーまたは警告が表示されることがあります。エラーまたは警告が表示された場合は、XML でフラグメントを変更します。更新が完了したら、Maya を再起動してシーンをリロードし、修正内容をテストします。

    詳細については、customSpriteShader/customSpriteShader.cpp サンプル プラグインを参照してください。

  • 新しい customSpriteShader/customSpriteShader.cpp サンプル プラグインは、C++ API または XML スキーマを使用してジオメトリ シェーダ フラグメントを接続する方法を示します。また、MPxShaderOverride クラスを使用してパーティクル スプライト用のカスタム シェーダを作成する方法も示します。

    このプラグインは MShaderInstance::addInputFragment() を使用してフラグメント グラフからシェーダ インスタンスを作成することにより、ジオメトリ シェーダ フラグメントを接続します。フラグメント グラフの接続、プロパティ、値、および出力は、XML スキーマで拒否されます。

    付属の customFileTextureOutputColor.xml ファイルに入力テクスチャのカラー管理の実装も含まれています。このファイルには、sRGB 空間またはリニア空間のテクスチャ カラーを Maya で変換する方法が記述されています。具体的なニーズに応じて、既存の MShaderInstance::createShaderInstanceWithColorManagementFragment() インタフェースを使用するか、customFileTextureOutputColor.xml を参照してカラー管理のカスタム実装を行うこともできます。MPxShaderOverride::isTransparent() 仮想メソッドは透明度通知を処理します。

    シェーダ フラグメントをデバッグするために、新しい MShaderInstance::writeEffectSourceToFile() インタフェースを使用してシェーダ インスタンスの最終エフェクト ソースがディスクに書き込まれます。バインド中に、または MShaderManager::getLastError() を使用して照会しているときに、Maya スクリプト エディタ(Script Editor)にシェーダ コンパイル エラーが表示されることがあります。

    customSpriteShader プラグインはビューポート 2.0 の OpenGL コア プロファイル モード、OpenGL モード、および DirectX 11 モードをすべてサポートしています。

シェーダからカメラのニア クリップ プレーンおよびファー クリップ プレーンを照会する

均一パラメータまたはセマンティック パラメータを使用して、シェーダからカメラのニア クリップ プレーンおよびファー クリップ プレーンにアクセスして、照会できるようになりました。ファイルまたはバッファから生成されたエフェクトに対する MUniformParameter クラスの DataSemantic 列挙子に、セマンティックを使用する新しいパラメータが追加されました。 これらの均一パラメータを使用すると、MPxShaderOverride クラスで作成された完全なエフェクト内のニア クリップ プレーンおよびファー クリップ プレーンにアクセスすることができます。

  • kSemanticNearClipPlane
  • kSemanticFarClipPlane

シェーダ フラグメントの場合、セマンティック nearClipPlane および farClipPlane を使用するパラメータはビューポート 2.0 によって自動的に更新されます。

描画

  • MPxDrawOverride クラスに新しい仮想関数が追加され、MPxLocatorNode クラス関数を引き続き使用してプラグイン内のカスタム シェープの選択動作をオーバーライドできるようになりました。MPxDrawOverride クラス関数には、MPxSurfaceShapeUI クラスよりも優先する UI 描画メカニズムも備わっています。

    これらの更新は、プラグインのソース コードを変更または再コンパイルしなくても利用できます。

    新しい関数は次のとおりです。

    rawfootPrintNode プラグインの例が更新されて、新しい関数の使用法が示されるようになりました。

  • 新しい MPxImagePlaneOverride クラスが追加され、ビューポート 2.0 でカスタム イメージ プレーンを描画できるようになりました。プラグインを初期化するときに MPxImagePlaneOverride クラスを作成して、オーバーライドを登録してください。 この新しいクラスには次のメソッドが含まれています。
    • MPxImagePlaneOverride::updateDG()updateColorTexture() で使用されるパラメータの更新が必要になるたびに呼び出されます。
    • MPxImagePlaneOverride::updateColorTexture()。イメージ プレーンを描画するために使用されるテクスチャを更新します。テクスチャにカスタムの未処理データを設定できます。このメソッドはカラー テクスチャのみをサポートします。

    C++ および Python 用の新しい customImagePlane/customImagePlane.cpp のサンプルは、新しい MPxImagePlaneOverride クラスの使用方法を示します。内容は次のとおりです。

    引き続き、MPxImagePlane::loadImageMap() を使用して深度マップを更新する必要があることに注意してください。

  • 返されたデバイス API にビューポート 2.0 が実行されている現在のデバイス API が含まれていない場合、警告メッセージが表示されるようになりました。たとえば、VP2 が OpenGL コア プロファイル モードで実行されているにもかかわらず、supportedDrawAPIs()MHWRender::kOpenGLCoreProfile を返さない場合は、次のような警告メッセージが表示されます。

    エラー: 行 0: 現在の描画 API がサポートされていないため、"drawdb/geometry/apiMesh" 分類のエバリュエータの作成に失敗しました。

  • footPrintNodefootPrint_GeometryOverride、および rawFootPrintNode 開発キットのサンプルが更新されたため、Maya を並列評価モードで実行している場合の、アニメーション中のビューポートのリフレッシュが改善されました。

一般

  • MRenderItem クラスに、MRenderItem が Maya インスタンサと互換性があるかどうかを示す新しいメソッドが追加されました。
    • MRenderItem::isCompatibleWithMayaInstancer() は、MRenderItem をインスタンス オブジェクトとして Maya インスタンサと一緒に使用することができるかどうかを返します。
    • MRenderItem::setCompatibleWithMayaInstancer() には、MRenderItem が作成されたときに Maya Instancer と互換性があるかどうかを通知する機能があります。この API が明示的に呼び出されない場合、状態の既定値は false になり、このオブジェクトは Maya インスタンサによって無視されます。
  • rawData() 関数(MRenderTarget::rawData()MTexture::rawData())のパラメータが変更されました。slicePitch パラメータで使用されるデータ型が int& から size_t& に変更されました。

    この更新は Maya 内部の変更と一致していて、int 型の上限である 2^31 より大きいテクスチャ サイズを使用できるようになりました。この変更により既存のコードが破棄されるため、プラグインを更新および再コンパイルする必要があることに注意してください。

    このパラメータの変更に伴い、次のサンプル プラグインが更新されました。

  • MPxGeometryOverride クラスがフレーム コンテキストを提供するようになりました。セットアップからクリーンアップまでの最新のフレーム コンテキストにアクセスするには、以下を使用します。

     const MFrameContext* getFrameContext() const; 

  • MRenderTargetManager::releaseRenderTarget() 関数が変更されて、非定数ポインタを使用しなくてもレンダー ターゲット オブジェクトをリリースできるようになりました。このパラメータ タイプに定数ポインタを指定できるようになりました。

    たとえば、以前の実装では、レンダー ターゲットをリリースする際に、次の呼び出しを行う必要がありました。

    targetManager->releaseRenderTarget((MHWRender::MRenderTarget*)colorTarget);

    この呼び出しは次のように簡略化されました。

    targetManager->releaseRenderTarget(colorTarget);.

  • OpenMaya ネームスペースの実装中に、下位互換性を保つために次の OpenMayaRender クラスの名前が変更されました。

    MGeometry MGeometryLegacy に名前が変更されました。

    MGeometryRequirementsMGeometryRequirementsLegacy に名前が変更されました。

    MRenderTargetMRenderTargetLegacy に名前が変更されました。

    OpenMaya ネームスペースの詳細については、「Maya API に対する重要な更新」を参照してください。