リファレンス / 3ds Max / MaxScript チートシート

マテリアル・マップ

  • 3ds Max
  • MaxScript
  • チートシート
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
  • マップスロット名(diffuseMap bumpMap opacityMap …)はマテリアルのクラスごとに異なります。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 はコンパクトエディタのスロット。スレートエディタとは別管理。

関連

← MaxScript チートシート へ