3ds Maxスクリプト紹介|マルチマテリアルを一瞬で解除!

3ds Maxスクリプト紹介|マルチマテリアルを一瞬で解除!

こんにちは、福永です。
今回は、3ds Maxでマルチマテリアル(マルチサブオブジェクト)を一括解除できるスクリプトをご紹介します。

 

■ マルチマテリアルとは?

まず、マルチマテリアルとは、それぞれ違うマテリアルがあたっているオブジェクトをアタッチした時などに
割り当てられるマテリアルで、1つのオブジェクトに対して、複数種類のマテリアルを設定する事ができます。

↓例えばこんな感じです


とても便利なのですが、
このままだと外部ソフトへの書き出し時にエラーの原因になることがあり、

たとえば、
・Twinmotion / Unreal / Unity などで正しくマテリアルが割り当たらない
・変換トラブルが出る
・処理や表示が重くなる など
そういったときには、マテリアルごとにオブジェクトを分割してマルチマテリアルを解除する必要があります。

マテリアルごとにデータをデタッチして、
さらにマルチマテリアルを解除して単体のマテリアルをあて直すという
作業が必要になる場合があります。

これくらいの数ならすぐ終わりますが、量が増えるととても大変です。

という事で、その作業を自動でやってくれるスクリプトを作成しました!
これを使えば、マルチマテリアルが自動で解除され、マテリアルIDごとにオブジェクトを分割してくれます。

 

■実際に使ってみると

このように一瞬で作業が完了します!


↓の車は34のマテリアルIDが割り当てられていますが、
手作業ならかなり面倒ですが、スクリプトならあっという間です。

※実際は処理にもう少し時間がかかっています

 

 

■ スクリプトの紹介


if selection.count == 0 then (
messageBox “オブジェクトを選択してください。”
) else (
for original in selection do (
if (classof original != Editable_Poly) do (
convertToPoly original
)

if classof original.material != MultiMaterial then (
messageBox “マルチサブオブジェクトマテリアルが割り当てられていません。”
) else (
baseMat = original.material
usedIDs = #()

for f = 1 to polyOp.getNumFaces original do (
id = polyOp.getFaceMatID original f
if findItem usedIDs id == 0 do append usedIDs id
)

for id in usedIDs do (
newObj = copy original
convertToPoly newObj

delFaces = #{}
for f = 1 to polyOp.getNumFaces newObj do (
if polyOp.getFaceMatID newObj f != id do delFaces[f] = true
)
polyOp.deleteFaces newObj delFaces

newObj.name = original.name + “_MatID_” + (id as string)
if id <= baseMat.numsubs then
newObj.material = baseMat[id]
else
newObj.material = undefined

format “Created object: % with material ID: %\n” newObj.name id
)

hide original
print “完了:元のオブジェクトは非表示にされました。”
)
)
)

 

■ 使い方

・スクリプトをコピペ

・3ds Max の「スクリプト」→「新規スクリプト」に貼り付けて保存

・マルチマテリアルのついたオブジェクトを選択して実行!

 

■ 処理後のイメージ

・マテリアルIDごとに個別のオブジェクトに分割

・各オブジェクトにはそれぞれのマテリアルが割り当て済み

・元のオブジェクトは自動で非表示になります(削除はしません)

 

マルチマテリアルを解除したり、オブジェクトをパーツ毎に分けたいときに
試してみてください!

——————————————————————————————————————————————–

現在シェルパグループでは、一緒に働く仲間を募集中!
建築パース、3DCG、UnrealEngine、Unity、プログラミングに興味のある方は
是非リクルートサイトをご覧ください!

■リアルな3DCG制作の仕事をしたい方必見!
https://sherpa-recruit.jp/