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


2013年09月03日
2011年07月25日
選択したポリゴン面の一括デタッチとその注意事項

編集可能ポリゴンの選択したポリゴン面を全て一括でデタッチして別オブジェクトにしようと思い色々調べたところ次のようなスクリプトを見つけました。
poly_count = polyop.getNumFaces $
for i = poly_count to 1 by -1 do
(
polyOp.detachFaces $ #{i} asNode:true name:"Object01"
)
使い方は、編集可能ポリゴンにしたオブジェクトのポリゴン面を選択し、スクリプトを実行するだけです。各ポリゴンはObject01と名前のついたそれぞれ別オブジェクトになります。
スクリプトのヘルプによれば、polyop.getNumFaces $は選択したポリゴン面の数を返し、 polyop.detachFaces $は選択しているポリゴン面をそれぞれデタッチします。後ろについているasNode:trueはデタッチした後に別ノード、つまり別オブジェクトにするかということで、name:"explodedObject"は別オブジェクトにしたものに名前をつけるためのオプションです。
このスクリプトを見ててどうも腑に落ちないところがあったのですが、それはなぜfor i = poly_count to 1 by -1 do と、トータルのポリゴン面数から1へと数字を繰り下げながらfor loopを回しているのかということです。ちなみにこのように
poly_count = polyop.getNumFaces $
for i = 1 to poly_count do
(
polyOp.detachFaces $ #{i} asNode:true name:"Object01"
)
1から順に処理していく方法だと以下のようなエラーが出てfor loopの4回目以降が走りません。
-- Frame:
-- i: 4
-- Runtime error: EPoly face index out of range: < 1 or > 3: 4
これに関してツイッターで質問をしたところ、@k240さんと@daiiiさんに非常に分かりやすく説明して頂きました。
続きを読む
2010年12月04日
初のツール「color changer」と処理速度に関する疑問点
以前やっていた仕事で、大量の草オブジェクトのワイヤーカラーをそれぞれランダムな色に、もしくは適当な色を一度に当てる作業を簡略化したいと思って初の簡単なUI付きツールを作りました。その名も「color changer」ですが、いろいろと疑問点も出てきました。

続きを読む
続きを読む
ポイントキャッシュを選択したオブジェクトに追加
久々のスクリプトの勉強関連です。今やってる仕事で複数のオブジェクトにポイントキャッシュモディファイヤを追加する作業が発生していてスクリプトでやってしまおうということになったんですが意外と上手くいかなかったのでメモっておきます。続きを読む
タグ:Max script
2010年03月09日
Maxscript勉強中その6 オブジェクトのモディファイヤを一括でデリートしたい時。
obj_sel = selection as array
for i in obj_sel do
(
select i
deleteModifier i 1
)
for i in obj_sel do
(
select i
deleteModifier i 1
)
2009年12月22日
Maxscript勉強中その5 オブジェクト選択の方法色々と名前の付けたしなど。
久々のMAXscriptメモです。前からかなり間が空いていてしかもまだリネームのところから進めないという情けない状態です。来年の今頃にはけゑ式Fume爆発を自動で仕込んでレンダリングのパスも一括管理できるツールを作っているはずなんですが、とてもまだそういう自分を想像できませんw
それは置いといて、今回はオブジェクトの選択の方法と、オブジェクト名の後に文字を追加したいときの方法をメモっておきます。

続きを読む
それは置いといて、今回はオブジェクトの選択の方法と、オブジェクト名の後に文字を追加したいときの方法をメモっておきます。

続きを読む
2009年10月10日
Maxscript勉強中その4 ちょっとめんどくさいTree Stormの名前関連。

今やっている仕事でTree Stormを使って木を大量に作っているんですが、困ったことにTree Stormで作った木は「Acer Platanoides 3y01」みたいに名前にスペースができるので、スクリプトでどうこうしようとする時にエラーを多発して結構困ってます。なので、とりあえずオブジェクトの名前のスペースを見つけてそれをアンダーバーに置き換えるスクリプトを考えてみました。
---------------------------------------------------------------------------------------------------------
carSelect = filterString $.name " " --carSelectに、選択したオブジェクトの名前から" "でくくられたスペース部分をフィルタリングした文字列を配列を代入。例えば#("Acer", "Platanoides", "3y01")みたいな感じに。
carNum = carSelect.count--文字列の中の文字数をカウント。それを変数carNumに代入。
spaceNum = carNum as integer -1 --先ほど取得した全文字数から1引いた数がスペースの数。それを変数spaceNumに代入。
for i = 1 to spaceNum do --1から取得したスペースの数の回数分リネームを実行。
(
$.name = replace $.name (findString $.name " ") 1 "_"
)
---------------------------------------------------------------------------------------------------------
続きを読む
2009年10月08日
Maxscript勉強中その3
選択したオブジェクトの数をカウントしたい場合の注意事項あれこれ。続きを読む
Maxscript勉強中その2
とりあえずメモ
--シーン内の木を選択した後カメラに対して可視のオンオフ。
(
trees = selection as array--選択した木を配列化
for i in trees do--配列内の数分primaryVisibility = on(カメラに対して可視のチェックをon)を繰り返す。
(
i.primaryVisibility = on
)
)
--木のワイヤーカラーを赤に。
(
trees.wirecolor = red
)
--選択したオブジェクトのスペースの空いた名前にアンダーバーを入れる時。
(
$.name = replace $.name (findString $.name " ") 1 "_"--findString $.name " "で選択オブジェクトの名前のスペースを検知する。その次の1は「1文字置き換える」という意味。
$.name = replace $.name (findString $.name " ") 1 "_"--スペースの数分この行を入れる。
)
--シーン内の木を選択した後カメラに対して可視のオンオフ。
(
trees = selection as array--選択した木を配列化
for i in trees do--配列内の数分primaryVisibility = on(カメラに対して可視のチェックをon)を繰り返す。
(
i.primaryVisibility = on
)
)
--木のワイヤーカラーを赤に。
(
trees.wirecolor = red
)
--選択したオブジェクトのスペースの空いた名前にアンダーバーを入れる時。
(
$.name = replace $.name (findString $.name " ") 1 "_"--findString $.name " "で選択オブジェクトの名前のスペースを検知する。その次の1は「1文字置き換える」という意味。
$.name = replace $.name (findString $.name " ") 1 "_"--スペースの数分この行を入れる。
)
2009年10月04日
Max Script勉強中(ワイヤーカラーのランダムな色の割り当て。)
一念発起して遂にスクリプトの勉強を本格的に始めました。いやー、ほんと素人には難しいです。なのでプロな方のご意見をいろいろ伺ってみたいところです^^;
とりあえず今回は破片系のエフェクトをやっていて大量の破片に分かりやすく色を付けたい場合を想定してやってみました。

************************************************************
for i in 0 to 10 do
( box pos:[i*30,0,random 0 90]
)
for i in 1 to 10 do
( box pos:[i*30,30,0]
)
for i in 1 to 10 do
( box pos:[i*30,60,0]
) --適当にボックスオブジェクトを製作。
select $box* --boxの名前を含む全てのオブジェクトをワイルドカード選択。
objList = selection as array --変数objListを宣言して先ほど選択したボックス群を配列化。
for i in objList do --変数iを宣言してobjList内の諸々の要素にそれぞれ( )内の作業を反復。
(
r = random 0 255 -- 0から255までのランダムな値を変数rに代入。
g = random 0 255 -- 0から255までのランダムな値を変数gに代入。
b = random 0 255 -- 0から255までのランダムな値を変数bに代入。
i.wirecolor = [r,g,b] --変数iのワイヤーカラーに先ほどのランダムな値の変数r,g,bを指定。
)
************************************************************続きを読む
とりあえず今回は破片系のエフェクトをやっていて大量の破片に分かりやすく色を付けたい場合を想定してやってみました。

************************************************************
for i in 0 to 10 do
( box pos:[i*30,0,random 0 90]
)
for i in 1 to 10 do
( box pos:[i*30,30,0]
)
for i in 1 to 10 do
( box pos:[i*30,60,0]
) --適当にボックスオブジェクトを製作。
select $box* --boxの名前を含む全てのオブジェクトをワイルドカード選択。
objList = selection as array --変数objListを宣言して先ほど選択したボックス群を配列化。
for i in objList do --変数iを宣言してobjList内の諸々の要素にそれぞれ( )内の作業を反復。
(
r = random 0 255 -- 0から255までのランダムな値を変数rに代入。
g = random 0 255 -- 0から255までのランダムな値を変数gに代入。
b = random 0 255 -- 0から255までのランダムな値を変数bに代入。
i.wirecolor = [r,g,b] --変数iのワイヤーカラーに先ほどのランダムな値の変数r,g,bを指定。
)
************************************************************続きを読む