マテリアル・マップ
MaxScript チートシート の章一覧
質感まわりの操作です。マテリアルを作って .material に代入、マップを各スロットに差し込む、マテリアルエディタのスロットを読み書き が基本パターンです。
マテリアルを作って割り当てる
$.material = standardMaterial diffuse:(color 255 0 0) -- 標準マテリアル
m = PhysicalMaterial name:"Metal" -- 物理マテリアル
m.base_color = color 200 200 200
$.material = m
for o in selection do o.material = m -- 選択全体に同じマテリアル
$.materialがノードのマテリアルスロットです。undefinedを代入すると解除されます。
マップ(テクスチャ)を差し込む
m = standardMaterial()
m.diffuseMap = bitmapTexture filename:"c:/tex/wood.jpg" -- ディフューズにビットマップ
m.bumpMap = noise size:5.0 -- バンプにノイズ
m.bumpMapAmount = 30 -- バンプ強度(%)
$.material = m
- マップスロット名(
diffuseMapbumpMapopacityMap…)はマテリアルのクラスごとに異なります。showProperties mで一覧できます。
マテリアルエディタ(メディット)を操作する
meditMaterials[1] -- スロット1のマテリアル
meditMaterials[1] = m -- スロット1に入れる
medit.PutMtlToMtlEditor m 1 -- 明示的にスロット指定で入れる
showMaterialEditor() -- マテリアルエディタを開く
meditMaterialsは コンパクトマテリアルエディタの24スロット に対応する配列です。
マルチサブオブジェクトマテリアル
mm = multiMaterial numsubs:3 -- サブマテリアル3つ
mm[1] = standardMaterial diffuse:red
mm[2] = standardMaterial diffuse:green
mm[3] = PhysicalMaterial()
mm.materialIDList -- 各サブのマテリアルID
$.material = mm
- ⚠️ どのサブが効くかは 面のマテリアルID で決まります(
polyop.getFaceMatID/setFaceMatID)。
シーンのマテリアルを走査する
-- 全ノードのマテリアルを集める(重複あり)
for o in objects where o.material != undefined do print o.material.name
sceneMaterials -- シーンに存在する全マテリアル
sceneMaterials.count
落とし穴まとめ
- マップスロット名はマテリアルクラスごとに違う。
showPropertiesで確認する。 bumpMapAmountなどの「強度」は別プロパティ。マップを入れただけでは効かないことがある。- マルチサブは面のマテリアルIDと連動する。
meditMaterialsはコンパクトエディタのスロット。スレートエディタとは別管理。
関連
- マテリアルのプロパティ名を調べる: 「デバッグ・調査」章
- 面のマテリアルID操作: 「メッシュ・ポリゴン」章