_581x100.png CGsyomei_583x102.gif 訪問者 無料カウンター ページビュー 無料カウンター

2013年09月03日

複数選択したオブジェクトのマテリアルのパラメーターを一括変換(メモ)

複数選択したオブジェクトのマテリアルのパラメーターを一括変換したい時のスクリプトです。とりあえずメモ代わりということで。今回はディスプレイスメントを一括でオフしたい場合です。

sel = selection as array --選択したオブジェクトを配列に格納

ObjNum=sel.count --配列の数をObjNumの変数に代入

for i = 1 to ObjNum do -- for文で1からObjNumに入っている数の分だけ実行
(
meditMaterials[i] = sel[i].material --マテリアルエディターのi番目のスロットにi番目の配列のオブジェクトのマテリアルを格納

meditMaterials[i].displacementMapEnable = off --i番目のスロットのマテリアルのディスプレイスメントをオフ

)
posted by けゑ at 02:06| Comment(1) | TrackBack(0) | Max Script
この記事へのコメント
ご無沙汰しております、以前fumeの記事でコメントしましたkuraです。
最近仕事でTPを使いはじめるようになり、また、参考にさせていただいております。
私もMAXScriptも勉強中でして、ちょっと気づいたところがあったのでコメントさせてください。
もし、わかってらしたら余計なおせっかいで、すいません。

記事に載っているものだと、マテリアルエディッタに選択したオブジェクトの数だけ、マテリアルを配置してしまいます。
それと、同じマテリアルがあっても、そこに配置してしまうので、あまりお勧めしません。

もし、マテリアルエディッタで確認しなくてもよければ、以下の様に省略することが出来ます。

for i = 1 to selection.count do -- for文で1から選択している数だけ実行
(
selection[i].material.displacementMapEnable = off --選択しているオブジェクトのi番目のマテリアルのディスプレイスメントをオフ
)

そしてマテリアルエディッタ確認したい場合はマテリアルだけの配列を用意して「makeUniqueArray」というメソッドを使えば配列からダブった物を取り除くことが出来ます。

mtl = #() -- for文の括弧から出ても値が取れるように配列を格納する変数を用意します
for i = 1 to selection.count do -- for文で1から選択している数だけ実行
(
selection[i].material.displacementMapEnable = off --選択しているオブジェクトのi番目のマテリアルのディスプレイスメントをオフ
append mtl selection[i].material  --変数mtlに選択したi番目のマテリアルを入れていきます。
)
unimtl = makeUniqueArray mtl --変数「unimtl」を用意して 「makeUniqueArray」を通したmtlを代入します
for i = 1 to unimtl.count do
(
meditmaterials[i] = unimtl[i] --マテリアルエディターのi番目のスロットにi番目の配列「unimtl」のマテリアルを格納
)


っとこんな感じです。
私もデザイナーなので、プログラム上まだ、スマートではないかもしれませんが、参考までに。
Posted by kura at 2013年12月11日 23:22
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/73954372

この記事へのトラックバック