Autodesk Maya 2015

レンダリング

OpenMayaRender

UI 描画マネージャの機能強化

  • 深度の優先順位: 描画可能項目を MUIDrawManager に入れる前に深度の優先順位を設定することができます。深度の優先順位値は描画可能項目をレンダリングするときに使用されます。
  • 既定の深度の優先順位値は 0(ゼロ)です。
  • フォント名とサイズの制御:
    • 新しい setFontName() メソッドは、テキストの描画に使用するフォントを制御します。このメソッドの入力値は、大文字小文字を区別しないフォント名文字列です。既定では、Maya では「helvetica」が使用され、これは無効なフォント名が入力された際にも使用されます。
    • setFontSize はピクセル単位で任意のフォント サイズ(高さ)を設定できるようにアップデートされました。
  • 透明なテキストの描画がサポートされました。テキスト カラー、テキスト バックグラウンド カラーのアルファ チャネルが考慮されます。
  • 利用可能フォント: 新しく getFontList() が追加され、現在のシステムで利用可能なフォント名の一覧を取得できるようになりました。フォント名の 1 つを setFontName() 関数に渡すことでそのフォントを使用できます。
  • イメージとテクスチャ メッシュの描画をサポートするための新しい機能が追加されました。
    • setTexture() は、メッシュを描画する際に適用するアクティブ テクスチャを設定するために使用します。これは、次回 setTexture() が呼び出されるまで有効になります。
    • setTextureSampler() は、テクスチャをメッシュに適用する際に使用するフィルタとアドレス モードを設定するために使用します。これは、次回 setTextureSampler() が呼び出されるまで有効になります。
    • setTextureMask() は、テクスチャをメッシュに適用する際に使用するチャネル マスクを設定するために使用します。これは、次回 setTextureMask() が呼び出されるまで有効になります。
  • メッシュを描画する際にテクスチャ座標を提供するために、オプションの引数が mesh() 関数と mesh2D() 関数に追加されました。setTexture()setTextureSampler()、および setTextureMask() と共に使用します。

レンダー アイテムの機能強化

  • レンダー アイテムに固定の「タイプ」が追加されました。これは Maya にレンダー アイテムのタイプを指示し、さまざまなフィルタと描画モードに関する扱い方を指定するものです。以前の MRenderItem::Create() メソッドは非推奨となったので使用しないでください。従来のメソッドで作成されたレンダー アイテムには、レンダー アイテムを作成したときのビューポート描画モードに応じて DecorationItem タイプまたは MaterialSceneItem タイプのいずれかが適用されます。さらに、リスト内のアイテムを検索しやすくするため、新しいメソッドが MRenderItemList に追加されました。

    レンダー アイテムのタイプは次のとおりです。

    • MaterialSceneItem: シーンの他の部分およびビューポートの設定に作用するシーン内のオブジェクトを表すレンダー アイテム(たとえば、シャドウの計算、ビューポート エフェクトなどの計算で考慮されるシェーディングされたジオメトリ)。これらのプロセスに含めるかどうかも、このクラスによって提供される適切なメソッドを通して制御することができます。
    • NonMaterialSceneItem: シーンの他の部分およびビューポートの設定に作用せず、ビューポート UI の一部でもないシーン内のオブジェクトを表すレンダー アイテム(たとえば、ビューポート UI が非表示になったときに非表示にせず、シャドウの計算やビューポート エフェクトにも含めないカーブまたはバウンディング ボックス)。
    • DecorationItem: ビューポート UI の一部として考慮すべきレンダー アイテム(たとえば、ワイヤフレーム、コンポーネントなど)。
    • InternalItem: 内部使用のため Maya によって作成されたレンダー アイテム(たとえば、DAG ノードにシェーダを割り当てたことによって作成されたレンダー アイテム)

コンテキストの機能強化

  • MFrameContext はユーザ インタラクションが発生しているかどうかテストするための 2 つのスタティック メソッドを提供します。
    • static bool inUserInteraction();
    • static bool userChangingViewContext();

    これらのメソッドは既定のビューポート API の MDrawInfo を通して渡されている同等のメソッドと同じ目的のために使用することができます。サンプル プラグイン footPrintNode は、これらのメソッドの使用方法を示しています。ユーザ インタラクションが検出されると(カメラがタンブルしている場合など)、バウンディング ボックスの表示に切り替わります。

    MFrameContext にはディスプレイ プリファレンスをテストする追加のスタティック メソッドがあります。

    • wireOnShadedMode() は、シェーディング モード表示のワイヤフレームに関する現在のディスプレイ プリファレンスを照会するのに使用できます。
    • shadeTemplates() はテンプレート オブジェクトをシェーディング表示するかどうかに関する現在のディスプレイ プリファレンスを照会するのに使用できます。

    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 は現在のカラーまたは深度ターゲットのコピーの作成を、それぞれ次のメソッドで可能にします。

    • copyCurrentColorRenderTargetToTexture()
    • copyCurrentDepthRenderTargetToTexture()

    MDrawContextInternalTexture 列挙で指定された内部テクスチャを取得する新しいメソッド getInternalTexture() が追加されました。現在、これは現在の透明な深度レイヤおよび深度ピーリング透明度で使用されている不透明な深度レイヤの取得を可能にします。dx11Shader エフェクト ファイル AutodeskUberShader.fx はこのメソッドの使用例を示しています。

    MPassContext に 3 つの新しいパス セマンティクス kTransparentPeelSemantickTransparentPeelAndAvgSemantickTransparentWeightedAvgSemantic が追加されました。dx11Shader エフェクト ファイル AutodeskUberShader.fx はこれら 3 つのパス セマンティクスの使用例を示しています。

    この API を使用してシーン レンダーをキャッシングする実例を示す新しいプラグイン(viewRenderOverrideFrameCache)が利用できます。詳細については、「レンダー ターゲッ /フレームのキャッシング」を参照してください。

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

  • MTexture が矩形サブ領域の更新をサポートしました。MTexture::update() メソッドに更新する領域を指定するのに使用できるオプションの region 引数が追加されました。領域が指定されていない場合はテクスチャ全体が更新されます。

    サンプル プラグイン hwApiTextureTest はテクスチャのサブ領域のカラーを反転させるサンプル コードを示しています。

  • 新しい MTextureManager::acquireTiledTexture() メソッドはディスク上の一連のイメージを 1 つのテクスチャにまとめる便利なメソッドです。このメソッドは UV タイリングファイル名と UV 位置をファイル テクスチャ ノードから抽出することのできる MRenderUtil::exactFileTextureUvTileData() の出力を受け入れることができます。サンプル プラグイン hwApiTextureTest はフォルダ内のすべてのイメージを読み取り、1 つのタイル テクスチャを作成するサンプルコードを示しています。
  • MTextureManager に新しいメソッド findTexture() が追加されました。これはテクスチャ キャッシュ内の取得済みのテクスチャを名前で検索するのに使用できます。これは同じプラグインの異なる部分の間、または全く異なるプラグインの間でハードウェア テクスチャを共有するのに使用できます。
  • MTextureManager::acquireTexture には、次のような新しい引数があります。
    • MTexture* acquireTexture(const MString& filePath, const MString& contextNodeFullName, int mipmapLevels = 0, bool useExposureControl = true, const MString& layerName = MString(), int alphaChannelIdx = -1)

    contextNodeFullName は入力引数で、ファイルを所有するノードのフル ネームが入力されます。この引数を持たない元の関数は残りますが、使用は推奨されていません。

    layerNamealphaChannelIndex は、PSD ファイルからレイヤとアルファ チャネルをロードするために使用できる新しいオプションの引数です。これらの引数は、PSD ファイルのロード専用に使用します。

  • MRenderUtil::exactFileTextureName には、次のような新しい引数があります。
    • bool MRenderUtil::exactFileTextureName(const MString& baseName, bool useFrameExt, const MString& currentFrameExt, const MString& contextNodeFullName, MString& exactName, MStatus *ReturnStatus)

    contextNodeFullName は入力引数で、ファイルを所有するノードのフル ネームが入力されます。この引数を持たない元の関数は残りますが、使用は推奨されていません。

MViewportRenderer と MViewport2Renderer の変更

MPxSubSceneOverride の機能強化

  • MPxSubSceneOverride にレンダー アイテムの複数のインスタンスを同時にレンダーするオプション機能が追加されました。新しいメソッドは次のとおりです。

    1 つのレンダー アイテムを通して多くのインスタンスをレンダリングすることは、インスタンスごとに 1 つのレンダー アイテムを作成した場合と比べてパフォーマンスが大きく向上する場合があります。レンダー アイテムの複数のインスタンスが変換行列を除いて同一である場合、またはシェーダ インスタンスの単純な float/float2/float3/float4 パラメータを除いて同一である場合にこの機能を使用します。適用されるシェーダと使用しているビデオ カードの両方で GPU インスタンス化がサポートされている場合、Maya はこの機能を使用してレンダー アイテムの複数のインスタンスをレンダリングします。

    インスタンス トランスフォームは 1 つずつ追加することができ、これにより返されたインスタンス識別子を使用した効率的な更新または削除が可能になります。また、すべてのインスタンスのトランスフォームは行列配列を通して 1 つの呼び出しで設定することもできます。同様に、1 インスタンスずつ、または浮動小数点数配列によってすべて一度に、インスタンスごとの浮動小数点データをシェーダ インスタンスのパラメータに関連付けることができます。

    MPxSubSceneOverride のインタフェースが新しくなりさらに多くの更新呼び出しが必要となりました。このためメソッド furtherUpdateRequired() はこの目的のために派生したクラスにおいてオーバーライドされる場合があります。apiMeshSubSceneOverride のプラグイン サンプル コードではこのインタフェースを使用したシンプルな例が示されています。

    オーバーライドの登録の分類でサブストリング “/subscene/volume/” が使用されている場合、透明なレンダー アイテムは内部の透明度アルゴリズムとポスト エフェクトをバイパスします。透明度パス中にレンダー アイテムは一度描画されるため呼び出されます。

MPxDrawOverride の機能強化

  • 描画オーバーライド プラグインで MRenderItem の作成と使用をサポートするために、次の 2 つのメソッドが新たに追加されました。

    MPxSubSceneOverride プラグインの動作と同様の方法により、単一のコード パスを使用して、OpenGL と DirectX 11 の両方をサポートするジオメトリとシェーダを作成して使用するために、これらのメソッドを使用します。

ジオメトリの機能強化

  • MVertexBufferMIndexBuffer に 1 つの関数呼び出しでそれらに含まれるジオメトリ データを設定または更新できる新しいメソッドが追加されました。新しい関数は次のとおりです。
    • MStatus update(const void* buffer, unsigned int destOffset, unsigned int numVerts, bool truncateIfSmaller);
    • MStatus update(const void* buffer, unsigned int destOffset, unsigned int numIndices, bool truncateIfSmaller);

    ソース データが既にコピー先バッファへの単純なメモリ コピー操作に対応した形式になっている場合は acquire()/commit() または map()/unmap() の代わりに新しい関数を使用します。このような場合、update() を使用する方が効率的で、データ上での必要なコピー操作を少なくすることができます。

    以前にコミットする呼び出しで内部バッファが割り当てられていない場合はバッファが割り当てられます。指定されたパラメータが以前に割り当てられたバッファよりも大きなバッファを必要とする場合、バッファは新しいサイズで再割り当てされます。

    OpenGL モードで MVertexBuffer または MIndexBuffer::unmap() を呼び出すと GL_ARRAY_BUFFER_ARB および GL_ELEMENT_ARRAY_BUFFER_ARB の OpenGL バッファのバインドが 0 にリセットされるようになりました。これにより Maya ハードウェア バッファのリードバックの信頼性を高め、ネーティブ グラフィックス API と直接対話することも可能になりました。

    MVertexBufferDescriptor には、作成時にセマンティック名を提供するための新しいコンストラクタ引数があります(オプション)。セマンティック名は、異なるカスタム テクスチャ ストリームにタグを付けて識別するために使用します。

ジオメトリ抽出機能の強化

  • MGeometryExtractor のコンストラクタでパラメータ sharing の代わりとなる新しい enum パラメータ MPolyGeomOptions が追加されました。新しい enum MPolyGeomOptions は次を含むポリゴン プロパティのコレクションです。
    • kPolyGeom_Normal: 既定のベース ジオメトリが使用されていることを示します。
    • kPolyGeom_NotSharing: 頂点共有を抽出機能では計算しないことを示します。
    • kPolyGeom_BaseMesh: ベース ジオメトリが smoothCage モードになっていることを示します。

    古いコンストラクタ関数は残されていますが、廃止された方法となります。

シェーディングの機能強化

  • MShaderManager に新しいメソッドが追加されました。

    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 を追加すると、シェーダが由来するノードにリンクされなくなったときに通知を受けることができます。パラメータの変更によって、取得済みのシェーダ インスタンスが引き続き自動的に更新されるようにする場合は、このメソッドを再度呼び出して、コールバックがトリガされた後でノードから新しいシェーダを取得します。

  • MShaderManager::getStockShader は、診断表示のシェーダを取得するための 4 つの新しい enum 型をサポートします。
    • k3dIntegerNumericShader は、3D レンダリングの頂点ごとに 1 つの整数値を描画するためのストック シェーダのインスタンスを取得するために使用できます。
    • k3dFloatNumericShader は、3D レンダリングの頂点ごとに 1 つの浮動小数点値を描画するためのストック シェーダのインスタンスを取得するために使用できます。
    • k3dFloat3NumericShader は、3D レンダリングの頂点ごとに 3 つの浮動小数点値を描画するためのストック シェーダのインスタンスを取得するために使用できます。
    • k3dPointVectorShader は、点とベクトル ストリームに基づいた線の 3D レンダリングのためのストック シェーダのインスタンスを取得するために使用できます。
  • MShaderInstance には、インプレースの修正のために、2 つのメソッドが追加されました。

    MStatus addInputFragment(const MString& fragmentName, const MString& outputName, const MString& inputName);

    MStatus addOutputFragment(const MString& fragmentName, const MString& inputName);

    これらのメソッドは、MFragmentManager で登録されたコードのフラグメントをアタッチすることで、既存の MShaderInstance のランタイム コードを変更するために使用します。新しいフラグメントの出力を既存のシェーダ インスタンスの入力に接続することで、フラグメントが追加されます。これらのメソッドは、MShaderManager::getShaderFromNode() と一緒に使用して、Maya から返されるシェーダを変更するためのものです。これは、既存のフラグメント シェーダに対して、追加のパターン入力を提供する、シェーダ出力を調整する、または頂点シェーダおよびジオメトリ シェーダを提供するために使用できます。

  • MShaderInstanceMFloatVector を使用した浮動小数点数パラメータの設定を可能にする新しい setParameter() インタフェースが追加されました。既存の float ポインタは個別の浮動小数点値であるパラメータを設定するために使用できます。
  • MShaderInstance には、MFloatMatrix を使用して行列パラメータの設定するための新しいインタフェースが追加されました。
  • 1D ランプ テクスチャを参照することでカラーの決まる太点を描画できるストック シェーダは MShaderManager::getStockShader() を通して利用できます。新しい列挙型は k3dColorLookupFatPointShader です。
  • MPxShaderOverride に高度な透明度アルゴリズム(深度ピーリングなど)をサポートするかどうかに関する情報を返す新しいメソッド supportsAdvancedTransparency() が追加されました。dx11Shader エフェクト ファイル AutodeskUberShader.fx はこのメソッドの使用例を示しています。
  • MUniformParameter::DataSemantic に 2 つの新しいセマンティクス kSemanticTranspDepthTexturekSemanticOpaqueDepthTexture が追加されました。これらは高度な透明度アルゴリズムで使用されます。dx11Shader エフェクト ファイル AutodeskUberShader.fx は 2 つのセマンティクスの使用例を示しています。

フラグメントの機能強化

  • 新しいメソッド MFragmentManager::getFragmentXML(const MObject&, MString&, bool, const MDagPath*) が追加され、呼び出し元が Viewport 2.0 の特定のシェーディング ノードを表すのに Maya で使用されるフラグメント グラフの XML コードを取得できるようになりました。このメソッドは Maya がどのようにフラグメント グラフを構築してさまざまなシェーディング ノード構成をビューポートでレンダーしているのかを理解する上で役立ちます。

レンダラーの機能強化

Dashline パターンの変更

  • mayaDashLineShader を使用するとき(たとえば、サンプル gpuCacheSubSceneOverride の場合のように) dashPattern パラメータ(符号無し単精度型整数)の最上位ビットが 1 に設定されていることを確認してください。そうしないと線が非常に短くなったときにアーティファクトが発生する可能性があります。

スウォッチ レンダリングの機能強化

  • スウォッチのバックグラウンド レンダリングをサポートするために、MSwatchRenderBase に新しいメソッドがいくつか追加されました。派生クラスがバックグラウンド レンダリングをサポートする場合は、renderParallel() から true を返し、キャンセル要求に適切に応答する必要があります。
    • virtual bool renderParallel()
    • virtual void cancelParallelRendering()
    • void finishParallelRender()
    • static void cancelCurrentSwatchRender()
  • レンダリングされたイメージの品質を制御するために、MSwatchRenderBase に新しいメソッドが追加されました。派生クラスは、レンダー精度が高くなるにつれてレンダリングの品質を上げる必要があります。
    • void setRenderQuality(int)
    • int renderQuality() const

OpenMaya

DAG パスの機能強化

  • 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 つの関数は何も行いません。

  • 次の命令が除去されました。
    • bool MFnAssembly::handlesApplyEdits(MStatus* status = NULL) const;
    • bool MPxAssembly::handlesApplyEdits() const
    • MStatus MPxAssembly::applyEdits(MObject& target , MItEdits& edits)

OpenMayaUI

M3dView の機能強化

  • M3dView にプレイブラストの解像度(幅と高さ)を取得するのに使用できる 2 つの新しいメソッドが追加されました。
    • int playblastPortWidth( MStatus * ReturnStatus = NULL );
    • int playblastPortHeight( MStatus * ReturnStatus = NULL );
  • M3dView にスレッドセーフな仕方でビューポートのリフレッシュをスケジューリングできる新しいメソッドが 2 つ追加されました。scheduleRefreshAllViews() は次のアイドル時に Maya のすべてのビューポートを強制的にリフレッシュし、scheduleRefresh() は次のアイドル時に特定のビューを強制的にリフレッシュします。
  • [Esc]キー(既定の中止キー)を押すと MPxContext::abortAction() が呼び出されるようになりました。プラグインで[Esc]キーを押したときに、特定の操作を実行するにはこのメソッドをオーバーライドします。

アニメーション

ダイナミクス / FX

モデリング

オープン データ

ファイル パスの解決

スタンドアローン メタデータ API(adsk::Data)

  • Accessor クラスに多くの機能が追加されました。

    • read() の新しいバリアントを使用すると、ファイル全体ではなく、読み取る必要のあるストラクチャと関連付けを指定できます。
    • Accessor::isFileSupported() 仮想メソッドは、拡張子は正しくても、Accessor でサポートされない(ファイルのバージョンが古すぎる場合など)ファイルを拒否するためにオーバーライドすることができます。
    • Accessor::accessorByExtension() スタティック メソッドは、指定されたファイル拡張子に適した Accessor を返します(存在する場合)。
    • AccessorMaya の派生クラスは、Maya シーンのメタデータへのアクセスを提供し、Accessor を実装する方法の一例としても役立ちます。

UI

その他

.NET API

サンプル プラグイン

devkit/plug-ins/blastCmd および /hlslShader のサンプル プラグインは現在はサポートされていません。

PyQt および PySide ウィジェットのベスト プラクティスの更新

maya.app.general.mayaMixin モジュールの MayaQWidgetBaseMixin クラスと MayaQWidgetDockableMixin クラスは、ウィジェットの自動命名、Maya のメイン ウィンドウへのウィジェットのペアレント化、ウィジェットのドッキングなどを行うメソッドを提供して、PySide ベースのウィジェットのインタラクションを簡略化します。詳細については、「PyQt および PySide ウィジェットのベスト プラクティス」を参照してください。