[3dsMax]
ピボットモードをON・OFFするスクリプト

ピボットモードをON・OFFするスクリプト
(階層パネルの基点のみ影響ボタンをON・OFFする)

ピボットモードがOFFならONにし、ONならOFFにする、
トグル挙動をするスクリプト。

このスクリプトをツールバーへ登録すれば、
ボタンを押すごとにON・OFFが切り替わる。
基点の調整を頻繁に行う際に便利。

if maxOps.pivotMode == #none then(
		maxops.pivotmode = #pivotonly
	)else(
		maxops.pivotmode = #none
)

スクリプトはドラッグ&ドロップでツールバーへ登録できる。
↑のスクリプトをMAXScriptエディターにコピペして、
ctrl+Aキーでスクリプトを全部選択して、
ツールバーへドラッグ&ドロップすればOK

↓スクリプトをドラッグ&ドロップでボタン化する例

[3dsMax]

インスタンス化されたモディファイヤを共有する
すべてのオブジェクトを選択する方法

どうやってやるのか分からなかったので調べた。

▼リンク先へ
3ds Maxでインスタンス化されたモディファイヤを共有するすべてのオブジェクトを選択する方法

レイヤーマネージャーではなく、シーンエクスプローラーを使う。
選択→従属を選択にチェックを入れてから選択する事で、
同じインスタンスモディファイアを使っているオブジェクトが一括で選択される。

検索する前にスクリプトで対処してしまったのでメモ

▼スクリプトで対処したい場合
同じインスタンスモディファイアが付いているオブジェクトを全部選択したい場合のスクリプト

※対象のモディファイアがスタックの一番上にある場合
※対象のモディファイア名を★に変えて以下のスクリプトを実行する
 (インスタンスモディファイアなら1個の名前を変えれば、他のオブジェクトに付いている物も変わる。)

hako = #()
for i in objects do(
	try(
		na = i.modifiers[1].name
		if na == "★" do(
		append hako i
		)
	)catch(
	)
)

select hako

モディファイアのミラー軸を直したい。


オブジェクトを回転した後に、
シンメトリモディファイアやミラーモディファイアを掛けると、
反転のための軸が傾いてしまっている。
この傾きを直したい。

ユーティリティーからXformのリセットを行えば解決できるけど、
オブジェクトのトランスフォームもリセットされてしまう。

オブジェクトのトランスフォームを維持したまま、
ミラーの軸だけリセットしたい。
どうすれば良いか?

続きを読む

[3dsMax]MAXScript
ファイルのリネーム


3dsMaxの操作ではなく、
とあるフォルダ内のファイルをリネームをするためのMAXScript。

▼やりたい事
桁の揃っていない連番名のファイルがある。連番の桁を揃えたい。
以下の様になってほしい。
1.png → 0001.png
10.png → 0010.png
100.png → 0100.png

続きを読む

[3dsMax]回転と移動を合成


赤ティーポットの移動する動きと、
緑ティーポットの回転する動きを合成し、
それを青ティーポットに適用する。

slidertime = 1
tm_move = $TeapotRed.transform
tm_rot = $TeapotGreen.transform
tm_none = $TeapotBlue.transform

with animate on(
for i=1 to 36 do(
	slidertime = i
	tm_move_orig = $TeapotRed.transform * inverse tm_move
	tm_rot_orig = $TeapotGreen.transform * inverse tm_rot
	tm_marge = tm_rot_orig * tm_move_orig
	$TeapotBlue.transform = tm_marge * tm_none
)
)


・移動する赤ティーポット、回転する緑ティーポット、
 それぞれに、自身の反転したトランスフォームを掛ける事で原点基準の動きに変える。

・原点を基準にした回転と移動を掛け合わせる。
 合成された回転と移動に、青ティーポットのトランスフォームを掛ける。

これで青ティーポットのローカル座標を基準にして、
移動と回転のアニメーションが付く。

[3dsMax]トランスフォームの乗算2

例1
ティーポット赤の動きを、
原点を基準にして、ティーポット青に付ける。
↓初期状態

t1 = $teapot01 --赤
t3 = $teapot03 --青

slidertime = 1
s_tra = t1.transform

with animate on(
	for i=1 to 36 do(
		slidertime = i
		tra = t1.transform * inverse s_tra
		t3.transform = tra
	)
)

※アニメーションが始まる1フレーム目で、トランスフォームを取得しておく。
forループ内で自身の反転したトランスフォームを使うと、
処理のたびに原点に移動してしまう。
↓結果

—————————————————-

例2
原点を基準にして動くティーポット青を、
ティーポット緑のローカル座標を基準にして動くようにする。
↓初期状態

t2 = $teapot02 --緑
t3 = $teapot03 --青

with animate on(
	for i=1 to 36 do(
		slidertime = i
		tra = t3.transform * t2.transform
		t3.transform = tra
	)
)

ティーポット青のトランスフォームに、
ティーポット緑のトランスフォームを掛けているだけなので単純。
↓結果

—————————————————-

例3
例1と例2を一度に行うイメージ

ティーポット赤の動きを、
ティーポット緑のローカル座標に合わせ、
ティーポット青に付ける。

↓初期状態

t1 = $teapot01 --赤
t2 = $teapot02 --緑
t3 = $teapot03 --青

slidertime = 1
s_tra = t1.transform

with animate on(
	for i=1 to 36 do(
		slidertime = i
		tra = t1.transform * inverse s_tra
		tra = tra * t2.transform
		t3.transform = tra
	)
)

↓結果

●Autodesk 3dsMax公式ヘルプへのリンク
Matrix3 値

[3dsMax]トランスフォームの乗算

●トランスフォームの乗算について1

オブジェクトのトランスフォームに、
自身の反転したトランスフォームを右から掛けると、
原点に移動し、スケールと回転はリセットされる。

↓ $Teapot001.transform = $Teapot001.transform * inverse $Teapot001.transform

●トランスフォームの乗算について2

回転させていないオブジェクトAが原点にある。そのAのトランスフォームに、
原点から離れたオブジェクトBのトランスフォームを右から掛けると、
オブジェクトAは、オブジェクトBに位置と向きが揃う。スケールは乗算される。


ティーポット赤と緑のスケールは[1,1,2]( [X軸,Y軸,Z軸] )

↓ $TeapotRed.transform = $TeapotRed.transform * $TeapotGreen.transform
 結果:ティーポット赤のスケールは[1,1,4]になる。

※乗算する順番は重要。
基準にしたいオブジェクトのトランスフォームは右から(後から)掛ける。
スケールを編集している場合は、計算の結果が意図通りにならなくなる。

スケールが歪む例1:
○:ティーポット緑のトランスフォームを右から掛けた
×:ティーポット緑のトランスフォームを左から掛けた

○:ティーポット赤のスケールは[1,1,4]
×:ティーポット赤のスケールは[1,1.08118,3.69966]

スケールが歪む例2:
ティーポット青はローカルX方向、
ティーポット緑はローカルZ方向にスケールを編集してある。
↓初期状態

↓初期状態から、適切な乗算
 $TeapotBlue.transform = $TeapotBlue.transform * $TeapotGreen.transform
 ティーポット緑のスケールが[1,1,2]、
 ティーポット青のスケールが[2,1,1]の場合
 計算したあと、ティーポット青のスケールは[2,1,2]になる。

↓初期状態から、適切でない乗算
 $TeapotBlue.transform = $TeapotGreen.transform * $TeapotBlue.transform
 歪んでしまった

●Autodesk 3dsMax公式ヘルプへのリンク
Matrix3 値