2012年08月

2012年08月31日

2013の新機能を探る その24 3dsmax 2013 SP2

前回に引き続きスペースワープを見て行きたい。

fig01Gravity(重力)スペースワープはパーティクルに重力場を与える。

fig07massFXではmassFX全体に重力を与えるGlobal Gravityの設定があるのでそっちを使えば済む。

通常は左の画像のように下方向に9.81m/s2の加速度になるように設定されている。このスペースワープが必要になるのは各オブジェクトで個別に重力を設定したい時や、1点に向かう重力場が必要な時だ。

また、ここで「Gravity by Force Object」を選べば、スペースワープをグローバルな重力場として利用することも出来る。

fig08Global Gravityを使う時はForceロールアウトに「Use World Gravity」のチェックボックスがあるのでこれをONにすればいいし、個別に結びつけるには、「Add」ボタンを押してスペースワープオブジェクトをクリックしてリストに追加すればいい。ただし、試してみたところ、「Gravity by Force Object」を使ってグローバルな重力としてGravityスペースワープを指定しても、massFXオブジェクトに作用するのはPlanerタイプの重力場だけでSphericalタイプの重力場を設定してもPlanerタイプとして作用してしまうようだ。だから、シーン全体にSphericalタイプの重力場を設定する時は各massFXオブジェクトに対してForcesロールアウトでリストにスペースワープオブジェクトを追加する必要がある。

fig02左がGravityスペースワープの「Parameters」ロールアウトだ。出来る設定は重力の強さと減衰具合、重力の方向程度だ。

Strength(強度)」は重力場の強さ。この数値が大きくなるほど重力が強くなり、マイナスにすると逆方向の力場になる。ただこの数値の単位がよくわからないんだけど、試した限りでは387で重力加速度9.81とだいたい同じ加速度になった。

Decay(減衰度)」は距離による重力場の減衰を決める値。デフォルトの0では距離による減衰は起きない。数値が大きくなるとスペースワープオブジェクトの周辺だけに影響する力場になる。

下の画像は等間隔に並べた球体にDecayだけ変えて作用させた場合の比較だ。上がDecay:6で下がDecay:2だ。数値が大きい上の場合はスペースワープから離れた右側の球体が殆ど動いていないのがわかる。また、どちらも距離が遠くなるに連れて動く距離が減っているのがわかる。

fig09

この減衰は力の方向には強く働き、力に対して垂直方向には弱く働くようで、下のGIFアニメは2つのGravityスペースワープを向かい合わせに置いて球体に作用させてみたもの。Decay:0.1にした場合、スペースワープからちょっと離れると加速されなくなり、そのまま等速で進み、反対側のスペースワープに近づくと急激に反対方向に加速されてバウンドするように急激に方向を変えて進み、またそのスペースワープからちょっと離れると等速運動になる感じだ。それに対して横方向の距離に対する減衰は大変ゆるく、距離が離れても球体の速度差がそんなに大きくないのが確認できる。

fig10

そしてこちらが両方のDecayを0.01にしたもの。球体は途中から減速され行き、相手側のスペースワープの位置で静止して反転している。

fig11

さらにスペースワープを接近させてみると顕著になる。

fig12

 「Planer(平面)」「Spherical(球形)」のオプションスイッチは重力ベクトルを同じ方向にするのか1点への集中方向にするのかを決める。

下のGIFアニメはSphericalタイプにしたものだ。スペースワープの中心に向けて球体が引き寄せられているのがわかる。

fig13

それではまた来週。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2012年08月30日

modo601が来た! その47 modo601SP2

だいぶ迷走気味だけど、引き続きrecoilの物理演算アイテムのパラメータを調べて行きたい。

衝突シェイプはconvexDecompositionまで調べた。残っているのはStatic Meshとカプセル、シリンダーかな。

fig01

衝突シェイプにつていはアクティブリジッドボディをシーンに作ると自動生成されるrecoilアイテムの「表示属性」ロールアウトに「デバッグ描画」というオプションがあって、これをONにすると衝突シェイプがビューポートに表示されるようになる(だたし更新するにはタイムスライダを進めて戻したりといった事をする必要があるみたいだ)。

fig02

例えばこんな物理演算アイテムがあったとして、

fig03

これを衝突タイプbboxにして、タイムスライダを0フレームから「次のフレーム」ボタンを押して1つ進め、「前のフレーム」ボタンを押して元に戻すとこのような表示になる(こうしないとタイプを切り替えただけでは表示がうまく更新されない)。

これを見るとbboxがどんな形状になっているかひと目でわかる。

fig04

今度はhullに切り替えてみたもの。よく見ると中央の突起上部は頂点が1つしか取られていないことがわかる。もちろんその周りの溝は完全に無視された形状だ。

fig05

今度はmesh。四角形のポリゴンを三角形ポリゴンに分割している以外はオリジナルのままのメッシュである事がわかる。

fig06

これがconvexDecomposition。これを見るとmeshよりエッジの数が増えているようだし、溝の部分もちょっとおかしな事になっている感じだ。そして1本のエッジに多重にエッジが重なっているように見える。ここから読み取れるのはconvexDecompositionが凹形状を全て凸になるまで分解し、それぞれをhull化しているんじゃないかなって事だ。maxのmassFXでも同じようなタイプがあったし。

fig07

ちなみにこの形状をSDS化して、「ケージ使用」をOFFにした場合のmeshタイプがこれで、

fig11

こっちがconvexDecompositionだ。このレベルまで来るとmeshとの差が出てくるのかな?

fig12

さらにSDSのレベル(レンダーレベルの方ね)を上げた場合のmeshタイプ。

fig13

それに対するconvexDecompositionタイプ。ここまで来るとポリゴン数にかなりの差が出てきてconvexDecompositionの効果が出てくる感じだな。

fig14

こうやって比較してみると特徴がよくわかるね。

ちなみに「ケージ使用」オプションによってSDSタイプのメッシュのケージ(SDS化される前のポリゴンメッシュ)が使われるか、それともSDS化されたメッシュが使われるかが決まるよ。

fig17

これが「ケージ使用」ONの時で

fig15

こっちがOFFの時。

fig16

そして次がstatic meshの場合。これはmeshタイプと変わらない感じだ。ただしこのタイプを選んだ時はdynamicにしてあってもkinematicの動作になる。あくまで静止している事が前提のmeshで、そのぶんだけ計算処理を軽減しているんだろうね。マニュアルには凹凸のある地面なんかに使うといいって書いてあった。ただしディスプレイスメントマップとかには反応しないので、凹凸はあくまでもメッシュ形状として作っておく必要があるよ。

fig08

これはcylinderY。cylinerタイプはX,Y,Zがあって、軸方向が異なる。内部のポリゴンに外接する円柱になっている事がわかる。これは車輪みたいなものに適用するといいんだろうね。

fig10

そのシリンダーの端面の中心に1つずつ球体を組み合わせたのがcapsuleX,Y,Zのタイプだ。円柱の端面から外側のドーム状の部分には何もポリゴンが存在しない形状になる。

fig09

これらの衝突シェイプは自動生成なのでサイズとかは手動で直接変える事は出来ないようだ。

そして、これらの衝突シェイプはアイテムどうしの衝突判定に使われるわけだけど、「衝突実行」オプションがOFFの場合はその判定から外されて衝突判定されなくなる。

fig18

「変形」オプションは前回も出てきたモーフやスケルトンなどの変形を衝突シェイプに適用するもので、これがONの時はフレームが切り替わるたびにデフォーマーの変形にあわせて衝突シェイプが生成しなおされるようだ。となるとシェイプの生成に時間がかかるconvexDecompositionは凄いオーバーヘッドが生じそうなんだけど、実際にやってみると初期フレームで1回生成されたあとは衝突シェイプを生成せず、当然変形されていない衝突シェイプでは変形の効果は出なかった。まあ安全対策ではあるね。

fig19

何度も書いているように、デフォーマとの組み合わせはどうもうまく行かないみたいなので。

それではまた次回。

カテゴリー別ページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)modo | CG

2012年08月29日

2013の新機能を探る その23 3dsmax 2013 SP2

注)タイトルと内容がだいぶ乖離してますが、新機能mClothの流れでやっております。

今回はPathFollowスペースワープ。シェイプに沿ってパーティクルを動かすためのスペースワープだ。先に書いておくけど色々試してみた結果、このスペースワープはmClothになんら影響を与えないようだ。さらにリジッドボディのForceとして設定することも出来ないようだ。そういう意味で今回は省いても良かったんだけど、せっかく出てきたので調べてみた。

fig01

例えば下のように曲線を作ってその始点にPCloudを配置して、

fig02

fig26パーティクルの生成時間を変更して、

fig05PathFollowにバインドし、

fig04PathFollowのPickShapeObjectをクリックして曲線を選び、Start Frame:0、Travel Time:100、Last Frame:100にすれば、このように曲線に沿ってパーティクルが流れるようになる。

ここで指定できるオブジェクトはLineやCircleなどのシェイプ系のものだ。

fig03

パラメータをひとつずつ見ていくと、Pick Shape Objectボタンの下にあるUnlimited Range(無制限範囲)Range(範囲)パラメータはこのスペースワープが有効になる範囲を決めるオプション。UnlimitedがONの時は距離の制限が無くなり、OFFの時は曲線の始点を中心とした半径Rangeの球体の中にあるパーティクルだけがスペースワープの影響を受ける。下のGIFアニメはUnlimited RangeをOFFにしてRangeを0.5mにしてみたもの。曲線の始点を中心に半径0.5mの範囲にあるパーティクルのみが動いて、それより外側に発生するパーティクルはそのまま残っているのがわかる。

fig06

fig07PathFollowは「Start Frame(開始フレーム)」パラメータから「Last Frame(最後のフレーム)」パラメータで指定したフレームまでの間、パーティクルに作用し、指定したパスの端から端まで移動するのにかかる時間は「Travel Time(トラベル時間)」によって決まり、「Variation(変動)」によってTravel Timeに幅ができる。

下のGIFアニメはStart Frame:0、Last Frame:100、Travel Time:100、Variation :0で0〜100フレームまでアニメーションさせてみたものだ。パーティクルエミッタから出たパーティクルが100フレームかけて曲線に沿って移動していくのがわかる。

fig09

下のGIFアニメは上と同じ条件でTravel Time50にしたもの。パーティクルエミッタから出たパーティクルが50フレームで曲線の終端に達し、そこを始点にして新たに曲線に沿って移動していくのがわかる。0〜100フレームのアニメーションでTravel Time:50だと同じパターンのパーティクルの流れが2回ぶんできる。

fig10

今度はStart Frame:0、Last Frame:100、Travel Time:100、Variation :0で0フレーム目だけパーティクルを発生させてみた。0フレーム目で発生したパーティクルがひとかたまりのまま曲線の端から端まで100フレームかけて移動しているのがわかる。

fig11

ここでVariation20にしてみると、0フレームで発生したパーティクルが曲線の端に達するまでの時間(Travel Time)が100フレーム±20%になり、80フレームで到達するものから120フレーム無いと到達しないパーティクルまでばらけて行くのがわかる。

fig12

さらにVariation50にしてみると、Travel Timeが50〜150フレームになり、50フレームで端点まで到達したパーティクルが残りの50フレームでリピートして2回目の曲線の端まで達するのが確認できる。

fig13

今度はパーティクルをずっと発生させ続けておいて、Last Frame50にしてアニメーションさせてみたものだ。50フレームを超えるとPathFollowスペースワープの拘束が解けてパーティクルが飛び散っているのがわかる。

fig14

fig08Along Offset Splines(オフセット スプラインに沿って)」「Along Parallel Splines(平行 スプラインに沿って)」はパーティクルの軌道の取り方を切り替えるパラメータで、「Along Offset Splines(オフセット スプラインに沿って)」にすると曲線の始点とパーティクルの発生位置との間の距離を常に保ってパーティクルが移動するようになり、「Along Parallel Splines(平行 スプラインに沿って)」にするとパーティクルの軌道が曲線と平行になる。

Constant Speed(一定速度)」はONにするとパーティクルの移動速度が一定になる。

Stream Taper(ストリーム低減)」は曲線の終端に向かってパーティクルの軌道を「Converge(集中)」「Diverge(発散)」「Both(両方)」という3タイプの方法で徐々に変化させ、「Variation(変動)」は「Stream Taper(ストリーム低減)」値に幅を持たせる。

Stream Swirl(ストリーム旋回)」はパーティクルが曲線の端から端に行くまでの軌道を回転させる回数を設定する。回転方向は「Clockwise(時計回り)」「Counterclockwise(反時計回り)」「Bidrectional(双方向)」から選択でき、回転数は「Variation(変動)」によって幅を持たせる事ができる。

下のGIFアニメは100フレーム目のパーティクルの軌道を視点を変えながら眺めたもので、「Along Parallel Splines(平行 スプラインに沿って)」のモードでの状態だ。パーティクルの軌道は曲線と全く同じ形状になっている。

fig15

今度は「Along Offset Splines(オフセット スプラインに沿って)」にしてみたもの。パーティクルと曲線の間の距離は一定に保てているけど、パーティクルの軌道は曲線の周りで蛇行しているのがわかる。

fig16

これらの違いは「Stream Swirl(ストリーム旋回)」を加えたときにより鮮明に現れる。

Along Parallel Splines(平行 スプラインに沿って)」では回転軸が曲線端点での曲線の方向に固定されて曲線の方向が変わっても回転軸の方向は変化しない。

fig17

それに対して「Along Offset Splines(オフセット スプラインに沿って)」の場合は回転軸の方向が曲線の方向にあわせて変化し、結果として曲線に沿って曲線のまわりを回転する軌道になっている。

fig18

ついでに先に「Stream Swirl(ストリーム旋回)」の方をやっちゃうと、下のGIFアニメは「Stream Swirl(ストリーム旋回)」を増減してみたもの。パラメータの値で回転数が決まるので、パラメータを増減させると巻き数も増減するのがわかる。

fig19

下のGIFアニメは「Clockwise(時計回り)」「Counterclockwise(反時計回り)」「Bidrectional(双方向)」を切り替えたもの。回転方向が切り替わるのがわかる。

fig20

下のGIFアニメは「Variation(変動)」を変化させてみたもの。回転数に幅が出来るので、パーティクルの軌道が帯のように広がっていくのがわかる。

fig21

今度は「Stream Taper(ストリーム低減)」を0〜99まで変化させてみた。判りやすいように旋回も加えてある。

Converge(集中)」モードだと先細りになる。

fig22

Diverge(発散)」だと先が広がる

fig23

Both(両方)」ではその両方が現れる。

fig24

Variation(変動)」は「Stream Taper(ストリーム低減)」に幅が出るわけだね。

fig25

以上がPathFollowスペースワープの概要だ。残念ながらmassFXで使えないみたいだけどね。

それではまた次回。

maxまとめページ



take_z_ultima at 11:47|この記事のURLComments(0)TrackBack(0)3ds Max | CG

2012年08月28日

modo601が来た! その46 modo601SP2

モーフマップとrecoilの連動が何かの拍子に出来る事があるんだけど、それがどう言う仕組みになっているのかよくわからない。

うまく行けばこんな感じでモーフ変形によってオブジェクトを押したり転がしたり出来るんだけどね。

fig01

それでもこうすれば出来るという手順を一つ見つけたので書いておくね。

まず球体と平面の2つのアイテムで出来たシーンを作成して、平面の方にモーフマップを作成し、Morph Influenceで平面がモーフ変形するようにしておく。

fig03

デフォーマーが有効なビューポートで表示してモーフインフルエンスの強さを0%〜100%まで変化させるとこのように平面がモーフ変形する。そしてその上空に球体アイテムを配置しておく。

fig04

この状態で平面(Plane)をアイテム選択して、recoilメニューから「パッシブリジッドボディに設定」を選び、平面をパッシブリジッドボディにする。

fig05

次に球体(Sphere)をアイテム選択して、recoilメニューから「アクティブリジッドボディに設定」を選ぶと、以下のようなメッセージが出て球体がアクティブリジッドボディ化できない。

fig06

ここで、グループパネルのリストを展開して、アイテムカテゴリに球体をドラッグ&ドロップして追加する。

fig07

次にMorphInfluenceを無効にする。

fig08

次にSphereをアイテム選択して、recoilメニューから「アクティブリジッドボディに設定」を選ぶと、再びエラーのダイアログが出る。ここでめげずにもう一度「アクティブリジッドボディに設定」を選ぶと、今度はちゃんとアクティブリジッドボディに設定されて、シーンにrecoilアイテムが追加される。

fig11

あとはパッシブリジッドボディがモーフ変形に対応出来るように設定を変更する。

Morpf Influenceを再び有効にして、Planeの衝突タイプをmeshに、「変形」にチェックを入れる。

fig09

あとは自由にモーフアニメーションを設定し、recoilメニューから「シミュレーション実行」を選べば、モーフアニメーションと組み合わされたrecoilシミュレーションが実行される。

fig10

何でだろうね。

それではまた次回。

カテゴリー別ページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)modo | CG

2012年08月27日

2013の新機能を探る その22 3dsmax 2013 SP2

今年の夏は結局どこにも行かないでペンキ塗りやったりしながらウダウダしてたら過ぎちゃったなぁ。ブログも殆ど更新できなかったし、な〜んの成果もなしよw

休みの最後になってこれじゃイカンと思い直して、年初に書いた通り、たまりにたまった雑誌や書籍を電子化しようと思って、FUJITSU ScanSnap S1500 楽2ライブラリパーソナルV5.0セットモデル を買ってみた。とりあえず雑誌を1冊裁断機で綴じ代を切って紙の束にしてスキャンしてみたら、いやぁ快適快適w 紙の束が見る間に吸い込まれてあっという間にスキャニングが終了した。無調整の状態で150ページ(A4)ほどの雑誌をスキャンして出来たPDFのファイルが75MB程度。スケール100%で表示すると縦1200ピクセル程度になって、手持ちのディスプレイ環境では全体が表示できない。新しいiPadなら解像度的には充分っぽいかな。詳しい報告はまた別の機会にね。

さて、前回に引き続きmClothとスペースワープについて調べて行きたい。

今回はPBomb。これは爆弾が爆発したような衝撃波の力場を発生させるスペースワープだ。タイプは下のような3つあり、それぞれ力の方向が異なる。

fig01

fig06これらのタイプはBasic Parametersロールアウトで切り替えできる。

Sphericalは球面の法線方向に働く力場、

fig08

Cylindricalは円柱の側面に対する方線方向に働く力場、円柱の回転軸方向の成分はゼロ、

fig09

Planarは平面の法線方向に働く力場にそれぞれなっている。

fig10

例えばPBombのまわりにパーティクルを散乱させておいて3つのタイプを作用させてみると、

fig05

Sphericalは放射状の力場を発生させる。下のGIFアニメを見るとパーティクルが放射状に吹き飛ばされて球面状に広がっていくのがわかる。

fig04

Cylindricalは2次元平面に対して放射方向に力場を発生させる。下のGIFアニメを見るとパーティクルが円となって広がっていくのがわかる。

fig03

Planarはスペースワープアイコンの面に対して垂直方向に力場を発生させる。下のGIFアニメを見るとパーティクルが上下方向に2つに分かれて直進しているのがわかる。

fig02

CaosパラメータはDuration(継続時間)パラメータが0の時だけ有効で、パーティクルにかかる力の方向がパーティクルごとにランダムに偏向される。

fig07

例えば下のGIFアニメはCylindricalタイプでパーティクルを動かしたもので、DurationもCaosも0にしてある。Cylindricalなのでパーティクルは円柱側面の法線方向に(水平に)動いている。

fig12

ここでCaosを100%にしてみると、このようにパーティクルにかかる力の方向に乱雑さが加わって各パーティクルごとに乱雑な動きになる。

fig11


fig07衝撃力はStart Timeで指定した時刻に開始され、 Durationで指定したフレームの間続く。その強さはStrengthとパーティクルまでの距離と減衰方法を決めるオプションで設定する。

Unlimited Range(無制限範囲)は距離によって力が減衰しない。下の画像はPlanarタイプに設定したPBombにRangeギリギリまでパーティクルを散布したところだ。

fig14

この状態でシミュレーションしてみると、全てのパーティクルに等しく力が作用しているので距離に関係なく同じ速度でパーティクルが移動するのがわかる。

fig16

Linear(線形)はRangeで指定した距離まで直線的に力が減衰する。

fig13

シミュレーションしてみると、PBombに近いパーティクルほど強い力で動かされ、Range上のパーティクルは動かない。そしてその間のパーティクルの速度はPBombからの距離が離れるほどゆっくりになっているのがわかる。

fig17

Exponential(指数)はパーティクルの距離がRange付近になって力が指数関数的に急減衰する。

fig15

シミュレーションしてみると、Linearの時よりもパーティクルの距離が離れてもパーティクルの速度があまり変わらず、Range付近で急に遅くなっているのがわかる。

fig18

ちなみにPlanerの場合、減衰の計算に使われるパーティクルまでの距離は法線方向だけで、平面方向は半径Rangeの円で力の有効範囲が切れるだけで、その縁で減衰は起こらない。だから下のように半径のRangeの円盤状のパーティクルが平面形状のまま弾き飛ばされる。もし平面方向の距離に対しても減衰があるならパーティクルは円盤状にならずにドーム状に広がったはずだ。

fig19

同様の事がCylindricalにも言えて、円柱の軸方向の距離では減衰しない。Rangeまで来ると一気に力が影響しなくなるだけだ。

さてこれをmClothと組み合わせて使ってみる。20X20セグメントの平面をmCloth化して、PBombと共に下のように配置した。

fig26

fig22そして縁を全てpinコンストレイントで留めて、全ての頂点を選んでtear作成で裂けるようにした。

fig21

fig23そしてこのPBombをmClothのForcesのリストにAddボタンを押してビューポートでPBombを選択することで追加する。

fig24mClothの特性パラメータはこんな感じで。


fig25PBombのパラメータはこんな感じ。

fig27シーンセッティングでSubstepsを10にして、シミュレーションのステップ数を少し細かくして精度を上げる。


fig28これで準備が出来たのでmClothのBakeでシミュレーション結果を焼き付けてみた。

これがその結果。mClothが破けて吹き飛ぶような感じのアニメーションが出来た。

fig20

それではまた次回。

maxまとめページ



take_z_ultima at 11:30|この記事のURLComments(0)TrackBack(0)3ds Max | CG
Archives