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

メッシュ・ポリゴン

  • 3ds Max
  • MaxScript
  • チートシート
MaxScript チートシート の章一覧

メッシュの中身(頂点・面)を読み書きする操作です。ポリゴンは polyopメッシュ(TriMesh)は meshop / グローバル関数 と、対象で関数群が分かれます。

編集ポリゴン(Editable_Poly)

polyop.getNumVerts $          -- 頂点数
polyop.getVert $ 1            -- 頂点1の座標(point3)
polyop.setVert $ 1 [0,0,10]   -- 頂点1を移動
polyop.getNumFaces $          -- 面数
polyop.getFaceVerts $ 1       -- 面1を構成する頂点番号
polyop.getNumEdges $          -- エッジ数
  • ⚠️ 頂点・面の番号は 1始まり です。setVert 後は update $ で表示が更新されます。

編集メッシュ(Editable_Mesh / TriMesh)

getNumVerts $        -- 頂点数
getVert $ 1          -- 頂点1の座標
setVert $ 1 [0,0,0]  -- 頂点1を移動
getNumFaces $        -- 面数(三角形)
getFace $ 1          -- 面1の頂点インデックス
update $             -- 変更を反映
  • ⚠️ メッシュ(getVert 等)とポリゴン(polyop.getVert 等)は 別 API です。対象のクラスに合わせて使い分けます。

サブオブジェクト選択(ビット集合)

polyop.setVertSelection $ #{1..10}     -- 頂点1〜10を選択
polyop.getVertSelection $              -- 選択中の頂点(BitArray)
polyop.setFaceSelection $ #{1,3,5}     -- 面を選択
polyop.getFaceSelection $              -- 選択中の面
  • #{1..10}BitArray(ビット集合) で、サブオブジェクト選択の標準形式です。

全頂点をループする

-- 全頂点を Z 方向に持ち上げる(編集ポリゴン)
for i in 1 to (polyop.getNumVerts $) do
(
    v = polyop.getVert $ i
    polyop.setVert $ i [v.x, v.y, v.z + 10]
)
update $

法線・UV

polyop.getFaceNormal $ 1         -- 面1の法線
getNormal $ 1                    -- メッシュ頂点1の法線(TriMesh)

polyop.getMapVert $ 1 5          -- マップチャンネル1の頂点5(UV座標)
polyop.getNumMapVerts $ 1        -- マップチャンネル1の UV頂点数
meshop.getMapFace $ 1 3          -- メッシュのマップ面
  • UV はマップチャンネル番号(既定は 1)を指定して読み書きします。チャンネル 0 は頂点カラー、-1/-2 は特殊チャンネルです。

スナップショット(変形結果を固定メッシュ化)

m = snapshotAsMesh $    -- 現在の評価結果を TriMesh として取得(非破壊)
m.numverts
  • snapshotAsMeshモディファイア適用後の結果 を読み取るのに便利です(元オブジェクトは変えません)。

落とし穴まとめ

  • 頂点・面の番号は 1 始まり。
  • ポリゴン(polyop)とメッシュ(meshop/グローバル関数)は別 API。
  • サブオブジェクト選択は #{...} の BitArray。
  • 頂点を直接書き換えたら update $ で反映する。

関連

← MaxScript チートシート へ