↑の作り方。
●説明内容
・水の固まりを落とす。
・最初から水溜りのある状態にする。
・泡を発生させる。
次期のバージョンから、流体機能がMantaflowという、新しいものに置き換わる。
そのMantaflowを、現行のblender(2.79)に組み込んだものを使うことが出来る。
↓ダウンロード
Blender Mantaflow Builds v2.79
Mantaflowは煙と液体を表現する事が出来る。
この記事で説明するのは液体。
Pythonスクリプトのメモ。
位置、回転、スケール。
import bpy #←これを読み込まないとスクリプトでオブジェクトを操作出来ない。 bpy.data.objects['Cube'].location.z +=1
import bpy bpy.context.selected_objects[0].location.z += 1
import bpy import math #←mathを読み込まないとpi(円周率)が使えない。 hako = bpy.context.selected_objects[0] atai = 2 * math.pi / 360 * 15 #←15度をラジアンに変換 hako.rotation_euler.z += atai
※角度を指定する際、値は度数法ではなく、孤度法。
なので、度数法のつもりで15と入力すると、15ラジアン入力した事になり、
859.35度回転してしまう(57.29×15)
・円を360度で示すのが度数法。
・半径が1の円で、長さ1の弧が作る角度を1ラジアンとするのが孤度法。
■■■■■■■■■■■■ 1度は何ラジアンか? ■■■■■■■■■■■■
円周の長さは直径×円周率。
円周の長さは孤度法だと2πになる。角度は2πラジアン。
360度=2πラジアンなので、
2πラジアンを360分割すれば、度数法の1度になる。
これはπラジアンを180分割するのと同じ。
3.14159/180=0.0174532777777778
1度を孤度法にすると、約0.0174533ラジアン。
■■■■■■■■■■■■ 1ラジアンは度数法だと何度か? ■■■■■■■■■■■■
比率で計算する。
2πラジアン:360度
πラジアン:180度
どんな数も、同じ数字で割れば1になる。
π÷π:180÷π
↓
1:180÷π
180÷3.1415=57.29582790879777
1ラジアンは、約57.29度
import bpy import random #←randomを読み込まないと乱数が使えない。 hako = bpy.context.selected_objects for i in hako: i.rotation_euler.x += random.uniform(-1,1) i.rotation_euler.y += random.uniform(-1,1)
import bpy import math import random hako = bpy.context.selected_objects for i in hako: atai = 2 * math.pi / 360 * 30 #←30度をラジアンに変換 i.rotation_euler.x += random.uniform(-atai,atai) i.rotation_euler.y += random.uniform(-atai,atai)
import bpy hako = bpy.context.selected_objects[0] hako.scale *= 2
import bpy hako = bpy.context.selected_objects[0] hako.scale = (1,1,3)
●参考サイト
情報処理 I - 第15回:Python による Blender の制御 和歌山大学
ラジアン(弧度法)の意味と「度」への変換方法 sci-pursuit.com
ステップビルドは、グラファイト モデリング ツールセットのひとつ。
リトポロジーする際にとても便利。
クリックで頂点を打ち、
shiftキーを押しながら、頂点の間をドラッグすると、
ポリゴンが作成される。
オブジェクトを指定して、その表面に作成する事も可能。
ctrlキーを押しながら面をクリックすると、クリックした面を削除。
ポリゴンが張られていない頂点は、altキーを押しながらクリックで削除可能。
※装飾キーとの組み合わせで使える機能がまだある。
詳しくは記事最後の公式ヘルプへのリンクへ。
●使い方
まず適当な編集可能ポリゴンを作り選択状態にしておく。
①パネルタイルを開く。
②フリーフォームタブをクリック
③ドロップダウンリストからサーフェスを選択
その下のピックボタンから、
作成する頂点やポリゴンを沿わせるためのターゲットオブジェクトを選ぶ。
※オフセットの値は、生成する頂点やポリゴンを、
ターゲットオブジェクトの表面から、
どのぐらい浮かせるのかを決めるためのもの。
④ステップビルドボタンを押す。
ツールの終了は右クリックするか、
もう一度このボタンを押す。
●公式ヘルプへのリンク
3ds Max 2018 ヘルプ: ジオメトリの追加と最適化ツール([ポリ ドロウ](PolyDraw)パネル)
トポロジーツールは、グラファイト モデリング ツールセットのひとつ。
作りたい形を描く事でポリゴンを作成する事が出来る。
任意のオブジェクトを指定して、その表面に沿ったポリゴンを作成できる。
使い方
まず適当な編集可能ポリゴンを作り選択状態にしておく。
①パネルタイルを開く。
②フリーフォームタブをクリック
③ドロップダウンリストからサーフェスを選択
その下のピックボタンから、
作成する頂点やポリゴンを沿わせるためのターゲットオブジェクトを選ぶ。
※オフセットの値は、生成する頂点やポリゴンを、
ターゲットオブジェクトの表面から、
どのぐらい浮かせるのかを決めるためのもの。
④トポロジーツールボタンを押す。
これでビューポートに線が引けるようになる。
ツールの終了は右クリックするか、
もう一度このボタンを押す。
間違って引いてしまった線は、
ctrlキーを押しながら線をクリックする事で削除できる。
●公式ヘルプへのリンク
3ds Max 2018 ヘルプ: グラファイト モデリング ツール
3ds Max 2018 ヘルプ: ジオメトリの作成ツール([ポリ ドロウ](PolyDraw)パネル)
赤ティーポットの移動する動きと、
緑ティーポットの回転する動きを合成し、
それを青ティーポットに適用する。
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 ) )
・移動する赤ティーポット、回転する緑ティーポット、
それぞれに、自身の反転したトランスフォームを掛ける事で原点基準の動きに変える。
・原点を基準にした回転と移動を掛け合わせる。
合成された回転と移動に、青ティーポットのトランスフォームを掛ける。
これで青ティーポットのローカル座標を基準にして、
移動と回転のアニメーションが付く。
例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 値
オブジェクトのトランスフォームに、
自身の反転したトランスフォームを右から掛けると、
原点に移動し、スケールと回転はリセットされる。
↓ $Teapot001.transform = $Teapot001.transform * inverse $Teapot001.transform
回転させていないオブジェクト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 値
赤い矢印の向く方向を軸にして、
複数のティーポットを毎フレーム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度回転するアニメーションが作成される。
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 値