[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 値

[3dsMax]
あるオブジェクトのローカルZ方向を軸に
複数のオブジェクトを回転させる


赤い矢印の向く方向を軸にして、
複数のティーポットを毎フレーム10度回転させている。

Cylinder001という名前の円柱を作る。
回転させたいオブジェクトを複数作成する。
回転させたい物を全部選択して、↓のスクリプトを実行する。

with redraw off(
with animate on(
	kaiten = quat 10 $Cylinder001.dir
	kaiten = kaiten as matrix3

	for i=1 to 36 do(
		slidertime = i
		for tea in selection do(
			iti = tea.pos
			tea.transform *= kaiten
			tea.pos = iti
		)
	)
)
)

エラーがなければ、円柱の向く方向を軸にして、
選択したオブジェクトが毎フレーム10度回転するアニメーションが作成される。

[3dsMax]
ローカルZ方向を軸に、
複数のオブジェクトを回転させる。

with redraw off(
with animate on(
	for kyuusu in selection do(
		for i=1 to 36 do(
			slidertime = i
			iti = kyuusu.pos
			kaiten = quat 10 kyuusu.dir
			kaiten = kaiten as matrix3
			kyuusu.transform *= kaiten
			kyuusu.pos = iti
		)
	)
)
)

●使い方
回転させたいオブジェクトを選択して、↑のスクリプトを実行。
※コピペはMAXScriptリスナーではなく、MAXScriptエディタへ。
 リスナーでは複数行のコードを実行できない。

●処理内容
選択したオブジェクトそれぞれのローカルZ軸を中心にして、
10度の回転をフレーム毎に行う。

●説明
・ with redraw off():
このカッコ内のスクリプト実行中はビューが更新されない。

・ with animate on():
このカッコ内のスクリプトによる変更はキーが打たれる。

・ for:
forループ文

・ iti = kyuusu.pos:
変数itiにオブジェクトの位置を入れる。

・ kaiten = quat 10 kyuusu.dir:
オブジェクトのローカルZを軸とした10度の回転を、
quat値で変数kaitenに入れる。

・ kaiten = kaiten as matrix3
変数kaitenに入ったquat値をmatrix3値に変換して、
変数kaitenに入れる。

・ kyuusu.transform *= kaiten
オブジェクトのトランスフォーム(matrix3値)に、
変数kaitenに入ったmatrix3値を乗算する。

・ kyuusu.pos = iti:
オブジェクトの位置を、変数itiに入った値にする。

●3dsMax公式ヘルプへのリンク
スクリプトでのプログラム フロー制御
For ループ
ノード変換プロパティの使い方
Quat 値
Matrix3 値

[Steam]定期購読を解除する方法

Steamでサブスクリプション(定期購読)をキャンセルをする方法。

①右上のプルダウンメニューから、アカウント詳細をクリック

②アカウント詳細から、サブスクリプションの管理をクリック

③サブスクリプションをキャンセルするを選択して、適用をクリック

※定期購読の解除をし忘れたくない場合
すぐにサブスクリプションをキャンセルしても大丈夫。
購入した契約期間内はソフトを使い続ける事が出来る。


Steamで気になるソフトがあるならウィッシュリストへの登録がおすすめ。
セール時にメールが届くので、安くなったときに買える。

[3dsMax]ノード変換行列について


位置、回転、スケールを別々のオブジェクトから取り出し、合成する。
実行後の白ティーポットは赤の位置、緑の回転、青のスケールで構成されている。

 ノード変換行列 = コントローラのスケール * コントローラの回転 * コントローラの位置

赤ティーポットからは位置を取得
緑ティーポットからは回転を取得
青ティーポットからはスケールを取得

変換行列 = スケール行列 × 回転行列 × 位置

白ティーポットに合成した変換行列を割り当てる

●スクリプト

iti = transMatrix $teapot01.pos --赤ティーポット
kaiten = (inverse $teapot02.rotation) as matrix3 --緑ティーポット
kakusyuku = scaleMatrix $teapot03.scale --青ティーポット

gousei =  kakusyuku * kaiten * iti
$teapot04.transform = gousei --白ティーポット
●要点
・回転を取り出す際にinverseメソッドで反転している理由。
3dsMax内部では、回転は逆向きで扱われているため。
↓公式ヘルプから引用

内部的には 3ds Max は 左手規則 を使用して回転をノード行列に保存します。
transform および objectTransform プロパティを使用して、
直接ノード変換行列の作業をするときは、
この逆転を覚えておくことが重要になります。
3ds Max の回転と MAXScript の標準の回転を両方使用するときは、
回転を逆にする必要があります

●公式ヘルプへのリンク
AUTODESK 3DS MAX 2017 ヘルプ
ノード変換プロパティの使い方
Matrix3 値

[3dsMax]rotationについて

選択した複数のオブジェクトの向きを、
ある任意のオブジェクトの向きと一致させようとして、
↓のスクリプトを実行したら、オブジェクトが意図しない位置へ移動してしまった。

for i in selection do(
	i.rotation = $teapot001.rotation
)


向きは合っているけど、位置がおかしい。

位置を保持し、向きを合わせてから、元の位置へ戻すようにした。

for i in selection do(
	iti = i.pos
	i.rotation = $teapot001.rotation
	i.pos = iti 
)


意図通り、位置はそのままに、向きだけが合う様になった。

↓の処理でも同じ結果になる。

for i in selection do(
	iti = transMatrix i.pos
	kaiten = inverse($teapot01.rotation as matrix3)
	i.transform = kaiten * iti
)

↓回転させるティーポットが全部同じ向きなら、原点を基準に回転しているのが分かる。
(回転の中心のティーポットが原点に居るやつ)

↓向きがバラバラだと回転の規則性が分かりにくい。

↓位置を維持する処理

3Dプリンター ダヴィンチminiMaker



ダヴィンチminiMakerを購入した。(※wifiなしモデルである黄色い方)

今まで、3Dプリンターは、
低価格帯のものであっても、まだ値段が高く、
調整の手間が掛かり、問題が多いものだと思っていたので
買いたいとは思わなかった。
それに、3Dプリントしたいものが沢山あるわけではないし、
印刷設定の試行錯誤などの手間や、3Dプリンターの置き場所を考えたら、
DMMの3Dプリントサービスを使ったほうが良いと思っていた。

しかし、時間が経ち、価格と性能のバランスが、
欲しいと思う域に入る機種が出たので買ってしまった。

●ダヴィンチminiMakerで3Dプリントした物の写真

・フィラメントは本体に付属してきたもの。多分ゴールド。
・真ん中のペン立ての印刷時間は、1時間40分くらい。
・球とティーポットは印刷設定を”非常に良い”にして印刷したもの。

続きを読む

[3dsMax]
モディファイアの警告を再表示したい


モディファイアの警告メッセージウインドウで、
”今後このメッセージを表示しない”にチェックを入れると、
今後、この警告は出なくなる。

この警告を、再表示したい場合は、
3dsmax.iniというファイルを編集すればよい。

●3dsmax.iniファイルの場所
3dsMax2016の場合
C:\Users\ユーザー名\AppData\Local\Autodesk\3dsMax\2016 – 64bit\ENU
3dsmax.ini

メモ帳などで、iniファイルを開き、Ctrl+Fキーで検索ウインドウを表示し、
TopoMessageという項目を探す。
(最初は何故か検索に引っかからなかったけど、
一度見つけると引っかかるようになった)

TopoMessage=0
 ↑を、↓に変える。
TopoMessage=1

0だと警告を表示しない。
1だと警告を表示するという意味。

保存すると、次回の起動時から警告が出るようになる。

3ds Max 2017 ヘルプ パネルの使用

[写真]レンズを外す際に絞りを維持する

Canonのレンズは、普通に取り外すと、絞りは解放状態になっている。
絞り込みボタンを押しながらレンズを外すと、絞りがその時の設定で維持される。

この方法は、リバースアダプターを使って撮影する際に役に立つ。

他にも、Canonのレンズを他社のカメラで使いたい時、
介するマウントアダプターに電子接点がなく、絞りが操作できない場合にも役に立つ。

・絞り込みボタンを押しながらカメラの電源を切っても、
 絞りが維持されるのではないかと思ったけど、絞りは解放になった。

・絞り込みボタンの位置は機種により異なる。

・絞り込みボタンを押しながら、レンズを正面から覗き込み、
 絞りを変化させると、絞り羽が動いていく様子が見えて面白い。
 
・絞りを最大まで絞ってから、絞り込みボタンをON・OFFして、
 高速に動く絞り羽の様子を見るのも面白い。
 

付けているストラップはPeak Designのもの。
取り外しが行いやすく便利で気に入っている。