MultiMaterial : Material

multimaterial - superclass: material; super-superclass:MAXWrapper - classID: #(512, 0) 

> MAXWrapper > マテリアル > MorpherMaterial

コンストラクタ

multimaterial [numsubs:<integer>]
multiSubMaterial [numsubs:<integer>]   
注: MultiSubMaterial は現在は廃止されており、以前のバージョンとの互換性のためだけに表示されます。

プロパティ

<multimaterial>.numsubs 

マルチマテリアル内のサブマテリアルの数を設定します。

この値を取得すると、結果は MultiMaterial 内のサブ アニメーションの数になります。

3ds Max のバージョン間で変更されたこのプロパティの動作の詳細については、後述の「経緯説明」を参照してください。

   

<multimaterial>.materialList ArrayParameter default: #(Standard, Standard, ... Standard, Standard) 

各サブマテリアルのマテリアルを格納します。

   

<multimaterial>.mapEnabled ArrayParameter default: #(true, true, ... true, true) 

サブマテリアルが使用可能かどうかを格納します。

   

<multimaterial>.names ArrayParameter default: #("", "", ... "", "") 

サブマテリアルのスロット名 (サブマテリアル名ではなく) を格納します。

   

<multimaterial>.materialIDList ArrayParameter default: #(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) -- int array; Index 

サブマテリアル ID を格納します。

   

<multimaterial>.material1 Standardmaterial default: Standard -- alias for materialList[0]; SubAnim 

マテリアルを格納します。

注:

各配列は サブマテリアルと同数の要素を含みます。

materialList 配列は、各サブマテリアルのマテリアルを保存します。

mapEnabled 配列は、サブマテリアルが使用可能かどうかを格納します。

names 配列は、サブマテリアル名ではなく、サブマテリアルのスロット名を格納します。

materialIDList はサブマテリアルに相当するマテリアル ID を格納します。

numsubs 名前付きパラメータが指定されていない場合、 numsubs の既定値は 10 です。

マテリアルの作成後にサブマテリアルの数を変更するには、 numsubs プロパティの値を変更します。

サブマテリアルの数は、 materialList、mapEnabled 、または names プロパティの count プロパティ値を設定して変更することもできます。

material1 は、 materialList[1] のエイリアスです。

3ds Max 4 以前のバージョンでは、テーブルに整列されたサブマテリアルがあったので、MAXScript で配列へのインデックス アクセス機能を使用して、これらのサブマテリアルにアクセスできました。

mm = multimaterial numsubs:3
mm[1] = $foo.material
$baz.material = mm[2]

3ds Max の新しいバージョンにおけるインデックス付きアクセスに関しては、以下の経緯説明を参照してください。

.NUMSUBS に関する経緯説明:

.numsubs プロパティは、通常は MAXWrapper 内の直接の subAnims の数を返す読み込み専用のプロパティです(「3ds Max オブジェクトでのアニメート可能プロパティへのインデックス付きアクセス」を参照してください)。

バージョン 4 より前の 3ds Max では、マルチマテリアル内の .numsubs プロパティによって返される値は、マルチマテリアル内のサブマテリアルの数と同じでした。マルチマテリアルには、割り当てられるマテリアル ID と同じ数のサブマテリアルが常に存在していたからです。また、 .numsubs プロパティは、マルチマテリアル内で取得も設定もできます。

サブマテリアルとマテリアル ID の対応関係を指定する .materialIDList プロパティの導入後、サブマテリアルの総数よりもはるかに大きい値のマテリアル ID に対応するサブマテリアルを設定できるようになりました。ここでは、マルチマテリアル内のサブ アニメーションの数は、内部的に ID の最高値を反映して設定され、すべてのサブ アニメーションについて、対応するマテリアル ID が未定義のままにならないようにします。

サブマテリアルが 10 個ある既定のマルチマテリアルを作成し、 MaterialIDList または .materialList .count および .numsubs プロパティにアクセスすると、常に 10 が返されます。

theMat = multiMaterial()
--> #Multi/Sub-Object:Multimaterial(Standard:Material #25, Standard:Material #26, Standard:Material #27, Standard:Material #28, Standard:Material #29, Standard:Material #30, Standard:Material #31, Standard:Material #32, Standard:Material #33, Standard:Material #34)
theMat.materialList.count
--> 10
theMat.numsubs
--> 10

しかし、マテリアル ID 20 を 10 番目のマテリアルに割り当てて、同じ値を見てみると、別の画像が表示されます。

theMat.materialIDList[10]=20
--> 20
theMat.materialIDList
--> #(1, 2, 3, 4, 5, 6, 7, 8, 9, 20)
theMat.materialList.count--still 10 sub-materials
--> 10
theMat.numsubs--but the number of sub-anims is 20!
--> 20
--Let's print the sub-anims to get a better idea:
for i = 1 to theMat.numsubs do format "%: %\n" i theMat[i]
--> 1: Material #25:Standard
--> 2: Material #26:Standard
--> 3: Material #27:Standard
--> 4: Material #28:Standard
--> 5: Material #29:Standard
--> 6: Material #30:Standard
--> 7: Material #31:Standard
--> 8: Material #32:Standard
--> 9: Material #33:Standard
--> 10: undefined
--> 11: undefined
--> 12: undefined
--> 13: undefined
--> 14: undefined
--> 15: undefined
--> 16: undefined
--> 17: undefined
--> 18: undefined
--> 19: undefined
--> 20: Material #34:Standard
--> OK

この例からわかるように、マテリアル ID 20 に対応するサブマテリアル 10 は、サブ アニメーション トラック 20 に内部的に保存され、サブ アニメーション 10 ~ 19 は未定義のままになっています。

このような場合、サブ アニメーションへのインデックス付きアクセスを使用せずに、 .materialList プロパティを使用してサブマテリアルを繰り返すことをお勧めします。

マルチマテリアルの操作例については、「マテリアル ID によってマルチマテリアルをソートする方法はありますか。」(「MAXScript に関する質問と回答」の項)も参照してください。

関連事項