MEL スクリプトを使用してメッシュにメタデータを追加する

メッシュにメタデータを追加するには、次のガイドラインに従います。

  1. dataStructure コマンドを使用して、データ構造を作成し、その名前とメンバー、メンバーの対応するデータ型を定義します。データ構造には、複数のメンバーを設定することができます。

    この例では、float[3] 型の Color というメンバーと int32 型の ID というメンバーを持つ、ColorStruct という名前のデータ構造を定義します。

    dataStructure -format "raw" -asString "name=ColorStruct:float[3]=Color:int32=ID";

    作成後は、データ構造は変更できません。

  2. addMetadata コマンドを使用して、空のストリームを作成し、オブジェクトに追加します(-streamName フラグ)。一般的なメタデータの場合は、定義済みメッシュ チャンネルなどのメタデータを追加するチャネル タイプ(vertexedgefacevertexFace)か選択項目の名前を指定します(-channelName フラグ)。オブジェクトに追加されるメタデータを定義するデータ構造を指定します(-structure フラグ)。

    複数のストリームを同じチャネルや同じオブジェクトに追加することができます。

    同じストリームをオブジェクト間で共有することができます。

    各ストリームに複数のメンバーを含めることができます。これらのメンバーはデータ構造内で定義します。データ構造は、ストリームごとに 1 つのみ定義可能です。

    この例では、2 つのストリームを定義します。これらのデータは、ColorStruct データ構造によって定義されています。これらのストリームを両方のメッシュの頂点のチャネルに追加します。

    addMetadata -streamName "StreamOne" -channelName "vertex" -structure "ColorStruct" smcPlaneShape smcPlane1Shape; 
    addMetadata -streamName "StreamTwo" -channelName "vertex" -structure "ColorStruct" smcPlaneShape smcPlane1Shape; 
  3. editMetadata コマンドを使用して、オブジェクトのメタデータの値を設定または削除します。-streamName フラグを使用して設定するストリーム(たとえば、上記の手順 2 で作成したストリーム)を指定し、-memberName フラグを使用してストリームのメンバーを指定します。

    -value フラグまたは -stringValue フラグを使用して、メタデータを指定します。メタデータは、そのインデックス値を使用するかインデックス値を選択してコンポーネントに割り当てることができます。特殊なメッシュ チャネル(メッシュ コンポーネントに黙示的に関連付けられているチャネル。vertexfaceedgefaceVertex)のストリームを編集するには、index フラグを使用するのではなく、メタデータを追加するコンポーネントを選択します。その他のストリームは、特定のジオメトリ要素に関連付けられていないので、index フラグを使用して編集する必要があります。

    この例では、StreamOne の Color メンバーと ID メンバーの両方にメタデータを追加し、次に StreamTwo に追加します。メタデータは、そのインデックス値を参照することで、頂点に追加されます。

    editMetadata -streamName "StreamOne" -memberName "Color" -value 2 -value 0.5 -value 1 -index 1 smcPlaneShape;
    editMetadata -streamName "StreamOne" -memberName "ID" -value 17 -index 1 smcPlaneShape;
    editMetadata -streamName "StreamTwo" -memberName "Color" -value -2 -value -0.5 -value 2.5 -index 2 smcPlaneShape; 
    editMetadata -streamName "StreamTwo" -memberName "ID" -value 3 -index 3 smcPlaneShape; 

    上記の例では、両方のストリーム(つまり頂点チャネル)が同じデータ構造からその値を取得しました。ただし、各ストリームに異なるデータ構造を割り当てることにより、同じチャネルに異なるデータ構造を追加することができます。

    たとえば、次のようになります。

    //Create two data structures: ColorStruct and NameStruct
    dataStructure -format "raw" -asString "name=ColorStruct:float[3]=Color:int32=ID";
    dataStructure -format "raw" -asString "name=NameStruct:string=Name:int32=ID";
    
    //Assign the ColorStruct data structure to StreamOne
    addMetadata -streamName "StreamOne" -channelName "vertex" -structure "ColorStruct" smcPlaneShape smcPlane1Shape; 
    //Assign the NameStruct data structure to StreamTwo
    addMetadata -streamName "StreamTwo" -channelName "vertex" -structure "NameStruct" smcPlaneShape smcPlane1Shape; 
     
    //Assign metadata to the Color and ID members of StreamOne/ColorStruct on smcPlaneShape
    editMetadata -streamName "StreamOne" -memberName "Color" -value 2 -value 0.5 -value 1 -index 1 smcPlaneShape;
    editMetadata -streamName "StreamOne" -memberName "ID" -value 17 -index 1 smcPlaneShape;
    //Assign metadata to the Name and ID members of StreamTwo/NameStruct on smcPlaneShape
    editMetadata -streamName "StreamTwo" -memberName "Name" -stringValue "cube1" -index 2 smcPlaneShape; 
    editMetadata -streamName "StreamTwo" -memberName "ID" -value 3 -index 3 smcPlaneShape;
    
    //Assign metadata to the Color and ID members of StreamOne/ColorStruct on smcPlane1Shape
    editMetadata -streamName "StreamOne" -memberName "Color" -value 127 -value 255 -value 212 -index 1 smcPlane1Shape;
    editMetadata -streamName "StreamOne" -memberName "ID" -value 8 -index 1 smcPlane1Shape;
    //Assign metadata to the Name and ID members of StreamTwo/NameStruct on smcPlane1Shape
    editMetadata -streamName "StreamTwo" -memberName "Name" -stringValue "cube2" -index 2 smcPlane1Shape; 
    editMetadata -streamName "StreamTwo" -memberName "ID" -value 36 -index 3 smcPlane1Shape;
注: polyShape ノードの inMesh アトリビュートに受信接続がある場合は、そのシェイプのメタデータは、同じ受信接続から提供されます。これは、一般的に、このコンストラクション ヒストリやデフォメーションのためです。ただし、メタデータは DG を通り抜けるときに修正されないため、メッシュのトポロジを変更する頂点の削除や、ハード エッジ修正などの介在するノードのいずれでもメッシュ コンポーネントの関連に対してメタデータは修正されず、メタデータは最初に適用されたのと同じコンポーネントに関連付けられたままになり、予期しない結果を招きます(たとえば、頂点インデックスが変更されたために、メタデータが存在しない頂点にアタッチされたり、ある頂点で開始されたメタデータが異なる頂点で終了するなど)。editMetadata コマンドを使用して、editMetadata ノードをヒストリに挿入し、不正なメタデータの関連付けを手動で修正します。