シェイプを作成する

シェイプ作成のゴールは、定義したジオメトリ クラスを取り、DAG オブジェクトの形式でそのジオメトリを Maya に統合することです。

ジオメトリ固有の情報は、ジオメトリ クラス内に維持してください。こうすると、ディペンデンシー グラフ データとしてジオメトリを表現しやすくなります。ジオメトリ固有の情報をジオメトリ クラス内に維持すると、ジオメトリ固有の描画情報を Maya の描画要求待ち行列に描画データとして渡す場合に描画を処理しやすくなります。

シェイプの作成を始める場所

ユーザ定義シェイプは、描画機能、選択機能、コンポーネント機能が加わるため、DG ノードより複雑です。コードを書き始める前に、まずシェイプ ノードの設計から始めるのがよいでしょう。シェイプ ノードの設計には、入出力アトリビュートの定義と、アトリビュート間のリレーションシップ(関係、影響)の決定が含まれます。

最も単純なシェイプは、コンポーネントやジオメトリ データを含まないシェイプです。たとえば、入力半径、X ディビジョン、Y ディビジョンを取り、球のジオメトリを計算して openGL で描画する球シェイプがあります。

シェイプを段階的に作成することもよい考えです。まず、MPxSurfaceShapeMPxSurfaceShapeUI から派生させます。MPxSurfaceShape クラスの作成は、MPxNode クラスの作成と同じです。その他の仮想関数は、必要に応じてオーバーライドすることができます。

ユーザ定義シェイプの作成方法の詳細については、http://around-the-corner.typepad.com/adn/2012/09/custom-shapes-in-the-maya-api-1.html の記事を参照してください。この記事では、ユーザ定義のシェイプおよびいくつかのサンプル プラグインを作成するプロセスについて説明します。

シェイプの登録と登録解除

Maya へのシェイプの登録は、DG ノードの登録に似ています。唯一の違いは、シェイプ ノードと同時に登録する必要がある、独立した UI クラスがあることです。シェイプの登録には、MFnPlugin::resgisterShape 関数を使用します。シェイプの登録解除は、ノードの登録解除とまったく同じです。以下はシェイプ登録の例です。

MStatus initializePlugin( MObject obj )
{
    MFnPlugin plugin( obj,"Autodesk","2.0", "Any");
    return plugin.registerShape( "yourShape", yourShape::id,
        &yourShape::creator,
        &yourShape::initialize,
        &yourShapeUI::creator );
}

MStatus uninitializePlugin( MObject obj )
{
    return plugin.deregisterNode( yourShape::id );
}