[3dsMax]カメラの焦点距離を取得し、ビューポートに表示したい。


スクリプトを使い、
スライダーマニュピュレーターに、カメラの焦点距離を表示させる。

プレビューに焦点距離を載せたいときなどに便利。

●焦点距離の取得について
カメラの焦点距離は、スクリプトから直接取得する事が出来ない。
まず画角を取得し、焦点距離に変換する必要がある。

続きを読む

[3dsMax]スクリプトをボタン化する

ツールバーへドラック&ドロップするだけで、スクリプトを簡単にボタン化する事が出来る。

hide selectionという文をボタン化すれば、
選択したオブジェクトを非表示にするボタンが出来る。

for i in selection do i.material = undefined

↑この文をボタン化すれば、選択したオブジェクトのマテリアルを無くすボタンが出来る。

[3dsMax]maxから他のアプリケーションを起動。

●公式MAXScriptリファレンスから引用
外部コマンドおよびプログラムの実行

ShellLaunch ShellLaunch() は、
Windows 上で指定されたファイルをダブルクリックする動作をエミュレートします。
ファイル名を ShellLaunch に渡すと、自動的に Windows シェルで実行されます。

●説明
ShellLaunch “起動したいアプリケーションのパス” “起動したアプリケーションで開きたいファイルのパス”

●例
メディアプレイヤークラシックでmaxのプレビューを再生する。
ShellLaunch “C:\Program Files\MPC HomeCinema (x64)\mpc-hc64.exe” “C:\Users\ユーザー名\Documents\3dsMax\previews\_scene.avi”

エクスプローラーでプレビューフォルダを開く。
ShellLaunch “C:\Windows\explorer.exe” “C:\Users\ユーザー名\Documents\3dsMax\previews”

このスクリプトをツールバーにボタン化すれば便利。

[3dMax]距離を測定ツールと、distance関数では、測定値が異なる場合がある。

MAXスクリプト distance関数について。

変数★ = distance オブジェクト◆ オブジェクト▲

こうする事で、変数★の中には、オブジェクト◆と、オブジェクト▲の間の距離が入る。
(多分、オブジェクトの基点間の距離になる。)

例:Box01とBox02というオブジェクトを用意して、↓のスクリプトを実行する。

kyori = distance $Box01 $Box02
print “Box01とBox02間の距離は、” + kyori as string

↑を実行すると、MAXScriptリスナーに、Box01、Box02間の距離が表示される。

そして、ツール → 距離を測定を使い、Box01とBox02間の距離を測る。

このとき、スクリプトでdistance関数を使って測った距離と、
距離を測定ツールを使って測った距離に違いが出る場合がある。

続きを読む

[3dsMax]スクリプトを使用し、エリアライトのサンプル数を一括変更する。

選択した複数のエリアライトのサンプリング数を一括変更する。

▼方法
サンプル数を変更したいエリアライトを選択する。(複数選択可能)
以下のスクリプトを実行する。

sentaku = $

for i in sentaku do(
	i.mr_NumAreaSamples = 128
	)

↑のスクリプトを実行すると、選択したエリアライトのサンプル数が128になる。
128の部分を64にすれば、サンプル数は64になる。

▼処理の流れ

変数sentakuに、選択したエリアライトを入れる。
変数sentakuは、エリアライトを複数選択している場合、変数は配列扱いになる。

forループでは、変数sentakuの中にある要素の数だけ処理を繰り返す。
(つまり、変数sentakuに入れたエリアライトの数だけ処理を繰り返す。)
変数iに、変数sentakuの要素(エリアライト)が順番に入り、サンプル数を変更する処理が実行される。

▼ユーザーインターフェイスを付け、ドロップダウンリストからサンプル数を選択出来るようにする。

続きを読む

[3dsMax]MAXScript、配列要素の順番を、位置を基準に並び替える。

10個あるboxオブジェクトを配列に入れる。

hairetu = $ as array --選択したオブジェクトを配列として変数hairetuに入れる。

配列の中身を見ると、順番がバラバラ。

$Box:Box06 @ [50.000000,0.000000,0.000000]
$Box:Box02 @ [10.000000,0.000000,0.000000]
$Box:Box03 @ [20.000000,0.000000,0.000000]
$Box:Box04 @ [30.000000,0.000000,0.000000]
$Box:Box05 @ [40.000000,0.000000,0.000000]
$Box:Box10 @ [90.000000,0.000000,0.000000]
$Box:Box07 @ [60.000000,0.000000,0.000000]
$Box:Box08 @ [70.000000,0.000000,0.000000]
$Box:Box09 @ [80.000000,0.000000,0.000000]
$Box:Box01 @ [0.000000,0.000000,0.000000]

このバラバラな配列の順番を、各オブジェクトのX位置を元にして並び替える。(ソートする)

続きを読む