mental ray for Maya は、ポリゴン メッシュに対して、固定のプリフィックス「miCustomTex」がついた追加のカスタム アトリビュートをチェックします。
このプリフィックスの後の文字は、すべてカスタム データの名前とみなされます。たとえば、MyData は「miCustomTexMyData」のアトリビュート名です。次の要件を満たす場合に、これらのデータ アトリビュートは認識され、追加の mental ray テクスチャ空間に変換されます。
これらの配列アトリビュートは、MEL かあるいは Maya API で作成できます。こういった配列アトリビュートには、起動処理時に値が必要となります。値が入っていない場合は無視されます。
配列アトリビュートのデータ エレメントは、提示されている順序でメッシュの頂点にアタッチされます。配列アトリビュートのデータ型は、データ型に従って、mental ray の 1 つまたは複数のテクスチャ空間を占めます。これは、いずれの場合も float(浮動小数点数)フォーマットにデータ型変換が行われることを示しています。また、この機能により頂点データは三角形上の現在の交差ポイントに対して自動的に補間されます。
Maya の型 | エレメント数 | mental ray テクスチャのアクセス |
---|---|---|
int | 1 | tex_list[i].x |
double | 1 | tex_list[i].x |
vector | 3 | tex_list[i].x, tex_list[i].y, tex_list[i].z |
point | 4 | tex_list[i].x, tex_list[i].y, tex_list[i].z, tex_list[i+1].x |
特定のカスタム配列で実際に使用されるテクスチャ スペースの情報はまだありません。現在の mental ray for Maya では、デフォルトでテクスチャ スペースがちょうど 1 つだけ、テクスチャリング向けに予約されています。しかし、メッシュは複数の UV 空間を保持できます。したがって、すべてのカスタム頂点データは任意のテクスチャ空間のオフセットで開始されます。複数のカスタム配列がメッシュにアタッチされている場合は、ノード上に一覧化されているアトリビュートの順序が、mental ray のテクスチャ空間シーケンスを定義します。
データにおけるこの実際のレイアウトは、このデータを使用するシェーダに提供される必要があります。これに対しては、現状では 2 つの方法が実装されています。ユーザ データとカスタム テキスト置換です。ユーザ データのアプローチは、ユーザのデータ ブロックを mental ray のメッシュ オブジェクトにアタッチするものです。このデータ ブロックはシェーダから取り出すことができます。データ ブロック maya_vertexdata の宣言は、mayabase.mi 宣言ファイルに入っています。
カスタム テキストがメッシュのマテリアルに適用されている場合は、特殊なプレースホルダ構文により、パラメータ値の便利な割り当てが可能になります。次のプレースホルダがサポートされています(以下の例では、最初のカスタム アトリビュートとして「MyData」という名前が検出された、vector 型のカスタム データを想定しています)。
プレースホルダ | 置換後 | 例 |
---|---|---|
$<name> | テクスチャ スペース インデックス | $MyData -> 1 |
$<name>Offset | テクスチャ スペース インデックス | $MyDataOffset -> 1 |
$<name>Size | 使用されているテクスチャ コンポーネントの数 | $MyDataSize -> 3 |
$<name>Type | カスタム データ タイプ、1 - int、 2 - double、3 - vector、4 - point | $MyDataType -> 3 |
次のカスタム アトリビュートを使ってメッシュにコネクトされた、カスタム頂点データとカスタム テキスト シェーダの完全な例を示します。
マテリアルにコネクトされたカスタム テキストは以下のように見えます。
int "$MyInt"
int offset "$MyIntOffset"
int type "$MyIntType"
int size "$MyIntSize"
double "$MyDouble"
double offset "$MyDoubleOffset"
double type "$MyDoubleType"
double size "$MyDoubleSize"
vector "$MyVector"
vector offset "$MyVectorOffset"
vector type "$MyVectorType"
vector size "$MyVectorSize"
point "$MyPoint"
point offset "$MyPointOffset"
point type "$MyPointType"
point size "$MyPointSize"
"offsets" [$MyInt $MyDouble $MyVector $MyPoint]
"sizes" [$MyIntSize $MyDoubleSize $MyVectorSize $MyPointSize]
"types" [$MyIntType $MyDoubleType $MyVectorType $MyPointType]
エクスポートされた .mi ファイルでは、テキストは次のように変更されています。
int "1"
int offset "1"
int type "1"
int size "1"
double "2"
double offset "2"
double type "2"
double size "1"
vector "3"
vector offset "3"
vector type "3"
vector size "3"
point "4"
point offset "4"
point type "4"
point size "4"
"offsets" [1 2 3 4]
"sizes" [1 1 3 4]
"types" [1 2 3 4]
エクスポートされたポリゴン メッシュ上のユーザ データ ブロックは、次のように表示されます。
data "plane:vxdata"
"maya_vertexdata" (
"magic" 1298749048,
"data" [{
"name" "Int",
"type" 1,
"size" 1,
"offset" 1
},{
"name" "Double",
"type" 2,
"size" 1,
"offset" 2
},{
"name" "Vector",
"type" 3,
"size" 3,
"offset" 3
},{
"name" "Point",
"type" 4,
"size" 4,
"offset" 4
}
]
)
プレースホルダ構文かユーザ データ ブロックのいずれかを使用して、カスタム データを適切な場所で安全に取り出せるカスタム シェーダを書くことができます。