Maya 2023 devkit の新機能

{{toc}}

Maya 2023.3 devkit の新機能

apiMeshShape サンプルの更新

apiMeshShape のサンプルが更新され、OpenGL を使用できるようになりました。

このサンプルに含まれる Readme には、glFunctionTable ではなく、OpenGL 呼び出しを使用できるようにコードをマイグレートする方法についての情報が記載されています。

先頭に戻る

Python API の変更

Python API 2.0 に MFnAssembly が含まれるようになりました。

先頭に戻る

スクリプトの更新

先頭に戻る

Maya 2023.2 devkit の新機能

2 つの新しいクラス

Maya devkit に 2 つの新しいクラス MDisplayLayerMessageMFnDisplayLayer が追加されました。これらの 2 つのクラスは、表示レイヤで何が変更されたかを伝えるのに役立ちます。

MDisplayLayerMessage は、表示レイヤ メンバーシップの変更に対するコールバックを登録します。MFnDisplayLayer は、表示レイヤの内容を照会する関数セットです。

MUIDrawManager に新しいメソッドが追加されました

MHWRender::MUIDrawManager に、新しいメソッド setOverrideBlendState() が追加されました。

void setOverrideBlendState (const MHWRender::MTargetBlendDesc &blendStateDesc)

setOverrideBlendState() では、新しいブレンド状態を指定して、UI ペインタの既定のブレンド状態をオーバーライドできます。新しいブレンド状態は、MTargetBlendDesc で設定できる任意の構成にすることができます(乗算済みアルファ ブレンドを含む)。

オーバーライド ブレンド状態は、メッシュ、ライン、ポイント、円、球など、描画マネージャを介して描画されたメッシュライクの UI オブジェクトに適用されます。テキストまたはアイコンの UI オブジェクトには適用されません。

先頭に戻る

MRenderItem に 2 つの新しいメソッドが追加されました。

MRenderItem に、setDrawLast()isDrawLast() の 2 つの新しいメソッドが追加されました。

void MRenderItem::setDrawLast(bool state)

bool MRenderItem::isDrawLast()

truesetDrawLast() に渡すことは、レンダー項目がシーン内の他のすべてのオブジェクトの後に描画されることを示します。

項目がシーンの最後に描画される場合、isDrawLast()true を返します。それ以外の場合は false を返します。

先頭に戻る

スクリプトの変更点

about コマンドの -ltVersion オプションは廃止予定となり、-creativeVersion に更新されました。Maya 内から about -creativeVersion を呼び出すと、0 が返されます。Maya Creative から about -creativeVersion を呼び出すと、1 が返されます。

2023.2 では、さらに次のようなスクリプトの変更も行われました。

先頭に戻る

Maya 2023.1 devkit の新機能

MPxContext に新しいメソッドが追加されました

inAlternateContext()に、新しいメソッド MPxContext が追加されました。このメソッドは、代替コンテキストがアクティブな場合に true を返します。

bool MPxContext::inAlternateContext() const

先頭に戻る

スクリプトの変更点

先頭に戻る

Maya 2023 devkit の新機能

新しい macOS バージョンの最小環境

macOS の新しい最小バージョンは 10.14 です。

先頭に戻る

CMake バージョンの更新

開発キットのサンプルをコンパイルするには、CMake バージョン 3.13 以降が必要になりました。

先頭に戻る

Alembic ライブラリが移動

Alembic ライブラリが移動しました。この変更は、CMakeLists.txt ファイルで find_alembic マクロを使用している限り、透過的に行われます。

現在ライブラリ マクロを使用していない場合は、使用を強くお勧めします。

先頭に戻る

Python のバージョンが 3.9 に更新されました

Maya が Python 3 のみをサポートするようになりました。すべてのプラットフォームで Python 2 のサポートは終了しました。プラグインとスクリプトを Python 3.9 に更新する必要があります。

Python 3.7 で記述されたプラグインまたはスクリプトがある場合、これらの 2 つのバージョン間でコードの互換性が保証されていないため、プラグインまたはスクリプトを Python 3.9 に移植するときに問題が発生する可能性があります。

PySide も Python 3.9 でビルドできるようになりました。

詳細については、「Python 3.8 の新機能」および「Python 3.9 の新機能」を参照してください。

先頭に戻る

新しい Python サイトパッケージのディレクトリ

Maya のリリース バージョン固有の新しいサイトパッケージのディレクトリが導入されました。

オペレーティング システム 新しいサイトパッケージの場所へのパス
macOS $HOME/Library/Preferences/Autodesk/maya/2023/scripts/site-packages
linux $HOME/maya/2023/scripts/site-packages
Windows C:/Users/<username>/Documents/maya/2023/scripts/site-packages

これは追加されたディレクトリです。パッケージはこのディレクトリに移動されず、このフォルダは既存のフォルダを置き換えません。ただし、このディレクトリのパッケージは、Maya 独自のサイトパッケージ ディレクトリよりも優先順位が高くなります。

pip --target オプションを使用して、パッケージを次の場所にインストールします。

mayapy -m pip install <package_name> --target <full_path_to_maya_2023_site-packages>

先頭に戻る

pyside2-uic を使用して ui ファイルから Python コードを生成

pyside2-uicpyside2-rcc が Maya に含まれるようになりました。

ユーザは pyside2-uic を使用して、.ui ファイルから Python コードを生成できるようになりました。

先頭に戻る

基本設定システムの向上

Maya での基本設定の処理方法を改善するために、MGlobal クラスと optionVar コマンドが変更されました。

MGlobal に次の 3 つの新しいメソッドが追加されました。

また、optionVar コマンドに次の新しいオプションとフラグが追加されました。

先頭に戻る

MFnMesh への変更点

getPointsAtUV() の既定の許容値への変更

既定の許容値 MFnMesh::getPointsAtUV() が 0 から 0.001 に変更されました。ポイントが検出されなければ、そのメソッドが失敗することはありません。代わりに、ポイント ポリゴン ID の配列は空になります。

先頭に戻る

新しいメソッドと新しい enum

新しい BorderInfo enum は、エッジがジオメトリ/UV の境界に存在するか、UV を共有しているかどうかに関する情報を保持します。この enum は、新しい edgeBorderInfo() メソッドによって返されます。

BorderInfo MFnMesh::edgeBorderInfo(int edgeId, unsigned int setId=-1, MStatus *ReturnStatus=NULL) const

新しい getUVBorderEdges() メソッドは、次の UV 境界上にあるエッジのエッジ インデックスを取得します。

MStatus MFnMesh::getUVBorderEdges(unsigned int setId, MIntArray &edgeList) const

新しい getMeshShellIds() メソッドは、getUvShellsIds() に対応するメッシュです。各一意の整数がメッシュ シェルを表す整数の配列を返します。この配列を使用すると、接続されたメッシュのピースを識別できます。

MStatus MFnMesh::getMeshShellsIds(MFn::Type compType, MIntArray & meshShellIds, unsigned int & nbMeshShells)

新しい getRawUVs() メソッドは、このメッシュの内部テクスチャ座標へのポインタを返します。

const float* MFnMesh::getRawUVs(MStatus*, const MString * uvSet = NULL) const;

新しい BoolClassification enum は、booleanOps() メソッドを使用してメッシュ間のブーリアンを計算するときに、エッジ分類と法線分類のどちらを使用するかを示します。

booleanOps() の署名は、この分類の使用に合わせて次のように変更されました。

MStatus MFnMesh::booleanOps(BoolOperation op, const MObjectArray &meshes, bool useLegacy = false, BoolClassification classification = kNormalClassification)

分類は、useLegacytrue に設定されている場合は無視されます。

先頭に戻る

オーバーロードされた create() メソッドと createInPlace() メソッドが新たに追加

新しくオーバーロードされたメソッドは、mayaAscii および mayaBinary ファイル リーダが使用するメッシュ作成をミラーします。

MObject create( const MPointArray &vertexArray, const MIntArray &edgeArray, const MIntArray &polygonCounts, const MIntArray &polygonConnects, MObject parentOrOwner = MObject::kNullObj, MStatus * ReturnStatus = NULL )

MObject create( const MFloatPointArray &vertexArray, const MIntArray &edgeArray, const MIntArray &polygonCounts, const MIntArray &polygonConnects, MObject parentOrOwner = MObject::kNullObj, MStatus * ReturnStatus = NULL )

MObject create( const MPointArray &vertexArray, const MIntArray &edgeArray, const MIntArray &polygonCounts, const MIntArray &polygonConnects, const MFloatArray & uArray, const MFloatArray & vArray, MObject parentOrOwner = MObject::kNullObj, MStatus * ReturnStatus = NULL )

MObject create( const MFloatPointArray &vertexArray, const MIntArray &edgeArray, const MIntArray &polygonCounts, const MIntArray &polygonConnects, const MFloatArray & uArray, const MFloatArray & vArray, MObject parentOrOwner = MObject::kNullObj, MStatus * ReturnStatus = NULL );

MStatus createInPlace( const MPointArray &vertexArray, const MIntArray &edgeArray, const MIntArray &polygonCounts, const MIntArray &polygonConnects )

MStatus createInPlace( const MFloatPointArray &vertexArray, const MIntArray &edgeArray, const MIntArray &polygonCounts, const MIntArray &polygonConnects )

先頭に戻る

maya.api.OpenMaya.MFnMesh() による空のメッシュの処理方法の変更点

Maya Python API 2.0 の maya.api.OpenMaya.MFnMesh() を空のメッシュで初期化した場合、エラーを返すようになりました。この変更により、maya.OpenMesh.MFnMesh() Maya Python API 1.0 での空のメッシュの処理方法と一致するようになりました。

先頭に戻る

OpenMayaRender での MIntersection::SelectionLevel() および MSelectionContext::SelectionLevel への変更点

ビューポート 2.0 の選択に使用する精度を指定する MSelectionContext::SelectionLevel enum に 3 つの新しい選択レベルが追加されました。

kComponent は依然として MSelectionContext::setSelectionLevel() および MSelectionContext::selectionLevel() の有効な選択レベルです。ただし、個々の選択内容に対して、MIntersection::selectionLevel()kComponent を返さなくなります。代わりに、MIntersection::selectionLevel() は 3 つの新しいレベルの 1 つを返します。

検索された選択内容の選択レベルが kComponent レベルであるかテストするプラグインがある場合、代わりに 3 つの新しいレベルがテスト対象になるようにプラグインを更新する必要があります。

先頭に戻る

MItMeshPolygon、MItMeshEdge、MItMeshVertex の reset() メソッドの変更点

MItMeshPolygonMItMeshVertexMItMeshEdge の次の reset() メソッドは、無効なコンポーネント ID を自動的に削除するように修正されました。

MStatus MItMeshPolygon::reset( const MDagPath &polyObject, MObject & component )

MStatus MItMeshVertex::reset( const MDagPath &polyObject, MObject& component )

MStatus MItMeshEdge::reset( MObject & polyObject, MObject & component )

MStatus MItMeshEdge::reset( const MDagPath &polyObject, MObject & component )

先頭に戻る

強化された GPU デフォーマ API

GPU デフォーマの使用を簡略化する 3 つのクラスと 5 つのメソッドが追加されました。

MOpenCLUtilsMOpenCLKernelInfo、および MPxGPUStandardDeformer クラスが追加されました。

MGPUDeformerRegistrationInfo に次の新しいメソッドが 1 つ追加されました。

virtual bool isGeometryFilter() const

MPxGPUDeformer に次の 4 つの新しいメソッドが追加されました。

static bool isBufferUpdateNeeded(const MOpenCLBuffer& buffer, const MEvaluationNode& evaluationNode, const MObject& attribute)

cl_int uploadFixedSetupData(const MString& name, MOpenCLBuffer& buffer, cl_int& errorCode, unsigned int* arrayLength)

static MFnGeometryData::SubsetState getSubsetState(MDataBlock& block, unsigned int multiIndex, MStatus* ReturnStatus = NULL)

static const char* className()

offsetNode のサンプルは、これらの新しいクラスとメソッドを使用するように更新されました。

先頭に戻る

カラー管理カラー ピッカーを作成するための新しいクラスとメソッドを追加

API を使用してカラー管理カラー ピッカーを作成するための 2 つの新しいメソッド、MColorPickerUtilities::applyViewTransform()MColorPickerUtilities::grabColor()、1 つの新しいクラス MColorMixingSpaceHelper が追加されました。

MColor MColorPickerUtilities::applyViewTransform(const MColor &inputColor, Direction direction)

MColor MColorPickerUtilities::grabColor(MStatus * returnedStatus = nullptr)

grabColor() はユーザがマウスを使って画面上でインタラクティブにカラーを選択できるスポイト ツールを実行します。applyViewTransform() は、Maya のカラー管理設定を使用してカラー変換を適用します。

先頭に戻る

新しい MTimeSliderCustomDrawManager クラス

MTimeSliderCustomDrawManager クラスが Maya API に追加されました。このクラスは、タイムライン上にカスタム項目を描画する方法を提供します。

PR131 では、次の 3 つのコールバック メソッドが追加されました。

void setStopPrimitiveEditFunction(MCustomDrawID id, MSharedPtr< MStopPrimitiveEditingFct > fct)

void setStartPrimitiveEditFunction(MCustomDrawID id, MSharedPtr< MStartPrimitiveEditingFct > fct)

void setEditPrimitiveFunction(MCustomDrawID id, MSharedPtr< MEditPrimitiveFct > fct)

これらのコールバックをサポートするために、3 つの抽象クラス、MStopPrimitiveEditingFctMStartPrimitiveEditingFctMEditPrimitiveFct が追加されました。

先頭に戻る

MIndexMapper::affectMap() の返り値のタイプが変更

MIndexMapper::affectMap() の返り値が MIntArray から MUintArray に変更されました。

MUintArray MIndexMapper::affectMap() const

先頭に戻る

MUIDrawManager::setTexture() への変更点

MUIDrawManager::setTexture() メソッドが変更されました。2 つの新しいパラメータ、inputColorSpace および alphaDiscardThreshold が署名に追加されました。

void MUIDrawManager::setTexture(MHWRender::MTexture* texture, const MString& inputColorSpace, const float alphaDiscardThreshold = 0.05f)

inputColorSpace は、テクスチャのカラーをレンダリング スペースのカラーに変換するときにシェーダ オーバーライドを作成するために使用されるテクスチャのカラー スペースです。

alphaDiscardThreshold はテクスチャ付きの UI オブジェクトを描画するシェーダをコントロールします。しきい値よりも低いアルファ値を持つテクスチャの部分は描画されません。しきい値 0.0 はすべてが描画されることを意味し、1.0 は何も描画されないことを意味します。このパラメータは PR131 で追加されました。

先頭に戻る

MGeometry::DrawMode に新しい選択ハイライトを追加

MGeometry::DrawModekSelectionHighlighting が追加されました。

MRenderItem::setDrawMode()kSelectionHighlighting を渡した場合、選択ハイライトが有効になっている場合にのみレンダー項目が描画されます。

gpuCache のサンプルは、この新しい enum を使用するように更新されました。

先頭に戻る

MShaderManager クラスに新しいストック シェーダ k3dIsotropicStandardSurfaceShader が追加されました。

apiMeshShape のサンプルは、Blinn シェーダの代わりにこのシェーダを使用するように更新されました。

先頭に戻る

MRenderItem に新しい enum と 3 つの新しいメソッドを追加

MHWRender::MRenderItem に、新しい enum と 3 つの新しいメソッドが追加されました。

DefaultMaterialFilteringsetDefaultMaterialHandling()、および getDefaultMaterialHandling() が追加されました。これにより、ビューポートの既定のマテリアル設定に基づいて MRenderItem をフィルタすることができます。

enum DefaultMaterialFiltering は、既定のマテリアル モードがアクティブな場合の描画の処理方法を指定します。

void MHWRender::MRenderItem::setDefaultMaterialHandling(MRenderItem::DefaultMaterialFiltering state) は、既定のマテリアル モードがアクティブな場合に、このオブジェクトを描画するかどうかを決定します。

getDefaultMaterialHandling() は、既定のマテリアル モードがアクティブな場合に、このレンダー項目を描画するかどうかを返します。

また、レンダー項目に一意の識別子を指定するために InternalObjectId() が追加されました。

MUint64 MHWRender::MRenderItem::InternalObjectId() const

これは、レンダー項目の一意の識別子を返します。2 つの MRenderItem が同じ内部レンダー項目を保持する場合、これらには同一の InternalObjectIds が存在します。

先頭に戻る

MUIDrawManager に新しい enum と 2 つの新しいメソッドを追加

MHWRender::MUIDrawManager に、新しい enum および新しいメソッドが追加されました。

DrawPass enum は、HUD パス項目が ViewCube の前と後のどちらに描画されるかを示します。

beginDrawPass() は、beginDrawable() および endDrawable() の範囲内で追加する描画パス項目を指定します。

MStatus MHWRender::MUIDrawManager::beginDrawPass(DrawPass pass)

endDrawPass() への呼び出しは、beginDrawPass() への呼び出しに続く必要があります。

先頭に戻る

MPxTransform と MPxTransformationMatrix に 2 つの新しいメソッドを追加

カスタム変換でジョイントのような動作を複製する、次の 2 つの新しいメソッドが追加されました。

MQuaternion MPxTransformationMatrix::preRotation() const

MQuaternion MPxTransform::getPreRotation() const

MPxTransformationMatrix::preRotation() は、変換行列の回転チャネルの後で移動チャネルの前に適用できるオプションの回転です。これを使用して、カスタム変換でジョイントのような動作を複製することができます。

MPxTransform::getPreRotation() は preRotation を返します。

rockingTransform のサンプルは、この新しい機能を使用するように変更されました。

先頭に戻る

2 つの新しいメソッドを MPlug に追加

MPlug に、isProxy()proxied() の 2 つの新しいメソッドが追加されました。

bool MPlug::isProxy(MStatus* ReturnStatus ) const MPlug MPlug::proxied()

isProxy() はプラグがプロキシ プラグの場合に true を返します。プロキシ プラグは接続を別のプラグに転送し、データブロックには関連付けられていません。

proxied() はプロキシ プラグのプラグを順方向に返します。プラグが空であるかプロキシ プラグでない場合、proxied() はプラグ自体を返します。プラグが接続されていないプロキシの場合、proxied() は null プラグを返します。

先頭に戻る

thisMObject() を複数のクラスに追加

thisMObject() が次のクラスに追加されました

{{#style "tablenobordernocolor"}}

| | | | | | --- | --- | --- | --- | | | | |

|

{{/style}}

MSelectionInfo に snapToActive() を追加

MSelectionInfosnapToActive() メソッドが追加されました。

bool MHWRender::MSelectionInfo::snapToActive (MStatus* ReturnStatus = nullptr) const

snapToActive() は、アクティブなオブジェクトをスナップする必要がある場合は true を返し、それ以外の場合は false を返します。

先頭に戻る

MFnSets に getMemberPaths() を追加

MFnSets に、新しいメソッド getMemberPaths() が追加されました。

MStatus MFnSet::getMemberPaths(MDagPathArray &members, bool shading) const

getMemberPaths() はセットのメンバーである dagPaths の配列を取得するために使用されます。

先頭に戻る

MGlobal に isInCrashHandler() を追加

MGlobal に、新しいメソッド isInCrashHandler() が追加されました。

bool MGlobal::isInCrashHandler()

isInCrashHandler() は Maya がクラッシュしたかどうかをプラグイン クエリします。これは、プラグインがコールバックに応答する場合、特にファイル入出力に関連する場合に、コールバックがクラッシュによってトリガされたかどうかをプラグインが認識できるので便利です。

先頭に戻る

MFnReference に isValidReference() を追加

MFnReference に、新しいメソッド isValidReference() が追加されました。

bool MFnReference::isValidReference(MStatus* ReturnStatus = NULL) const

参照が有効なファイル参照である場合、このメソッドは true を返します。このメソッドは、例外がトリガされるのを回避するために、MFnReferemce::isLoaded() などの他のメソッドに渡す前にファイル参照を検証する場合に使用されます。

先頭に戻る

MFnDependencyNode に uniqueName() を追加

MFnDependencyNode に、新しいメソッド uniqueName() が追加されました。

MString MFnDependencyNode::uniqueName(MStatus* ReturnStatus = NULL) const

先頭に戻る

M3dView に devicePixelRatio() を追加

M3dView に、新しいメソッド devicePixelRatio() が追加されました。

double M3dView::devicePixelRatio (MStatus* ReturnStatus = NULL) const

devicePixelRatio() は、デバイスのビューポートのレンダリング ピクセルに対する Qt 論理ピクセルの比率を返します。

先頭に戻る

MPxSubSceneOverride に ufeIdentifiersInUse() を追加

MPxSubSceneOverride に、新しいメソッド ufeIdentifiersInUse() が追加されました。

bool MHWRender::MPxSubSceneOverride::ufeIdentifiersInUse() const

ufeIdentifiersInUse() は、UFE 識別子に依存する Maya 機能が有効になっている場合、true を返します。

MString に isEmpty() を追加

MString に、新しいメソッド isEmpty() が追加されました。

bool MString::isEmpty( ) const

isEmpty() は、文字列が空の場合に true を返します。それ以外の場合は false を返します。

先頭に戻る

オーバーロードされた新しい getReferenceNodes() メソッドを MFileIO に追加

パラメータとして dagPath を持つ新しいオーバーロードされた getReferenceNodes()MFileIO に追加されました。

MStatus MFileIO::getReferenceNodes(const MString & fileName, MStringArray & nodes, bool dagPath)

dagPath を true に設定すると、返される DAG オブジェクトの名前に名前の一意性を確保するために必要なパスが含まれるようになります。false に設定すると、DAG オブジェクトの名前はパスなしで返されます。

dagPath は既定で false になります。getReferenceNodes(const MString& fileName, MStringArray& nodes) はパスを含まない DAG オブジェクトの名前を返します。

先頭に戻る

Python API 2.0 に追加されたメソッド

以下の C++ メソッドの Python 版が Python API 2.0 に追加されました。

virtual void MPxNode::getCacheSetup(const MEvaluationNode&, MNodeCacheDisablingInfo&, MNodeCacheSetupInfo&, MObjectArray&) const

virtual void MPxNode::configCache(const MEvaluationNode&, MCacheSchema&) const

virtual MTimeRange MPxNode::transformInvalidationRange(const MPlug& source, const MTimeRange& input) const

bool MPxNode::hasInvalidationRangeTransformation() const

virtual void MPxGeometryOverride::configCache(const MEvaluationNode&, MCacheSchema&) const

先頭に戻る

新規および修正されたサンプル

新しい py1ArrayAttrBlenderNode.py のサンプルは、配列アトリビュートを簡単に実装する方法を示しています。

py1MoveTool.py のサンプルは、VP1の使用からVP2の使用に更新され、Python API 2.0 を使用するように更新されました。名前が py2MoveTool.py に変更されました。

customImagePlane のサンプルは、スクラブ時にイメージがアニメートされない問題が修正され、更新されました。

gpuCache のサンプルは、新しい kSelectionHighlighting enum を使用するように更新されました。

rockingTransform のサンプルは、MPxTransformationMatrix で新しい preRotation() メソッドを使用するように更新されました。

offsetNode のサンプルは、新しい GPU デフォーマ API を使用するように更新されました。

apiMeshShape のサンプルは、廃止されたコードを削除し、サンプルのバグを修正し、新しい k3dIsotropicStandardSurfaceShader ストック シェーダを使用するように更新されました。

先頭に戻る

新しい Blue Pencil コマンド

次の Blue Pencil コマンドが追加されました。

これらのコマンドは、以前の PR では「cz」という接頭辞を付けた類似する名前(たとえば、czBluePencilUtil)で導入されていました。

スクリプト化とノードに関するその他の変更

先頭に戻る