2010年11月

2010年11月30日

Craft ROBOを買ってみた

アナグリフ式3D用のメガネを結構な数作る事になったため、なんとか作業の省力化を図れないかと思ってグラフテック 小型カッティングプロッタ CC330-20を買ってみた。

fig09

仕組みはXYプロッタのペンのかわりにカッターの刃が付いていて、紙の前後運動とカッターの左右運動を組み合わせて自在にシートを切ってくれるというものだ。 素晴らしい事にイラストレータから直接出力出来たり、トンボを認識して位置あわせをしてくれる機能があって、プリンターで印刷したものを切り抜いたり出来る。

カッターはこんな形をしていて切るシートの厚さによって先端に付ける3色のキャップを取り替えるようになっている。

fig11

使わないキャップは機械の中に収納しておけるけど、揺れても落ちない程度の固定なのでマシンを持ち上げて移動させるとポロっと落ちる事もある。

fig02

また別売りでボールペンプランジャと言うのもあって、カッターのかわりにボールペンで紙に線を引いてカッティングがうまく行くかチェックする事も出来るらしい。トンボの認識と刃の位置の微調整なんかに使えるのかな?

この機器をコントロールするソフトは主に2種類付いてきて、スタンドアロンで入力から出力までこなすROBOMasterとIllustratorやCorelDRAWのプラグインとして働くCuttingMasterがある。今回は慣れているIllustratorとCuttingMasterを使って作業をする事にした。

さっそくイラストレータでこのような絵を作成してみた。

fig12

CuttingMasterはこの線に沿ってカッターを動かしていくので、文字とか折れ線とか余計な線があるとそこまで切り抜いてしまいかねない。CuttingMasterにどの線にカッターを入れてどの線は使わないかを指定する方法は2通りあって、1つは色によって識別させる方法。もうひとつはレイヤーによって識別させる方法だ。今回はレイヤーで識別させることにして、文字と折れ線は別のレイヤーに移した。マニュアルには印刷用と切り抜き線用に分けたらいいって書いてある。

これを印刷して切り抜けばいいわけだけど、このままでは位置を合わせられない。そこで基準になる線を引いてそれを機械に読み取らせて位置合わせさせるのがトンボの役割だ。

CuttingMasterをインストールするとIllusutratorのファイルメニューにCuttingMasterのメニューが現れて、その中にトンボ作成メニューが追加されるので、これを使ってトンボを作成する。

fig13

作成したイラストを全部選択してからトンボのメニューを選ぶとこのようなダイアログが出てくる。

fig14

マージンによってトンボの位置が変わる。実は最初にここにひっかかった。どうもCraftROBOのトンボ自動認識機能はセンシングの範囲が狭いようで、特定の範囲にトンボが無いと認識出来ない。前後の位置はシート送りを使って調整できるので、線をローラの手前ギリギリのところにあわせておけばOKみたいだけど、左右の位置は白いプラスチック製のローラーからちょっと内側に入った近辺に無いと取りこぼすようだ。

fig04

だからトンボをあまり内側に描きすぎると、トンボが認識できなくなってしまう。これに気が付くのにだいぶ時間がかかった。最初はデータを送信してもエラーが出るばかりで全く切ってくれなくてほんとに閉口した。おかしいなと思って送信してから刃の付近を覗いて見ると、赤い光の点が紙の上を動いているのが見えて、それがトンボを描いた位置まで来て無い事がわかった。そこでその光が動く範囲にトンボをの位置を移動させたらようやくカットし始めたわけだ。結果、下の絵(機械には左方向に差し込む)みたいに外にトンボを描くことでうまくいくようになった。もしかして調整する箇所があるのかも知れないけどね・・・。

fig15

トンボはこのように別レイヤに作成されロックされる。

fig16

トンボが打てたらさっそくプリンタで印刷してカッティングと行きたいところだけど、その前にカッティング用のシートに紙を貼り付ける必要がある。シートの上にカッターの刃を走らせると、シートがめくれあがったりずれたりするので、CraftROBOにはこのような粘着性のシートが1枚付いていて、これに切りたいシートを貼り付けるか、台紙付きのシートを使う事になるようだ。この粘着がいつまでもつのかちょっと不安・・・。

fig08

トンボはこのくらいの位置になった。

fig07

今回切ったシートが薄いコピー用紙だった事もあって、最初はシートの粘着力が強すぎて剥がす時にシートがカールしてしまったりしたけど、使ううちにだんだん粘着力が程よくなってきた(大丈夫かな・・・)。

fig06

そこで粘着シートに紙を貼って、そこにスティックのりで余白の部分だけのり付けして使ってみたらうまく切れた。でも切り終わった後で糊付けした紙を剥がすのが今度は大変だったりw

それからシートはローラーで前後に送られるんだけど、その時シートが機械の前後で垂れ下がって曲がる。これがシートを浮き上がらせて機械にひっかかったりするようだ。そこで機械の前後に厚目の本を置いてシートが平らなまま前後に動くようにしたら紙が機械にひっかかる事がなくなった。

あとはIllustratorのファイルメニューのCuttingMasterメニューから「カット・プロット」を選んでCuttingMasterのパネルを出して2番目のタブのところで「レイヤー別」を選んでカットしたいパターンが入っているレイヤーだけチェックを入れて他はチェックをOFFにした。これで折れ線や文字が入ったレイヤー3はカットの対象にならない。それから「ドライバーオプションを有効にする」をONにして、カットするのが薄い紙なのでプリセットで「薄い素材」を選んだ。

fig17

3番目のタブで「トンボを使用」をONにして、「送信」ボタンを押した。

fig18

あとは切れるのを待つだけ。

fig03

こんな感じに切れた。

fig05

慣れるまでは紙が詰まってグチャグチャになったりトンボが認識できなかったりカッティングシートから紙が剥れなくて大変だったりしたけど、綺麗に切り抜けた紙を見るとちょっと嬉しい。

それではまた次回。



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

2010年11月29日

PhysX for Max やってみた その4 3dsMax 2011 Subscription Advantage Pack

前回はPhysXコンストレイントについて設定の流れをざっと見てきた。今回はパラメータについて詳しく調べてみたい。

fig01まずはConnectionロールアウト。ParentとChildのボタンとXのボタンについては前回やった。コンストレイントさせる親・子のアイテムの指定とその解除(Xボタン)。解除されるとワールド座標系が指定された事になる。
Breakableはアイテムが特定以上の力や捻りを受けた時にコンストレイントを切断するかどうかのスイッチ。MaxForceは力の、MaxTorqueはねじりのしきい値。

下のシーンではKinematicRigidBodyの円柱のまわりにDynamicRigidBodyの直方体を並べて、円柱を親、直方体を子としてコンストレイントしたものだ。

fig06

fig08そしてコンストレイントのBreakableをONにして、各MaxForceを18付近の数字で散らした。そして円柱を回転させて、回転速度を徐々に上げていった。こうすれば、直方体には遠心力が生じ、外側に引っ張られる。この力がMaxForceを超えると、コンストレイントが切断されて、直方体が外に吹き飛ばされる。この時MaxForceを適当に散らしておいたので、同時に吹き飛ばされず、ランダムな感じで吹き飛ばされる。下がそのレンダリング結果。

fig07

fig09今度は回転は一定にしてMAXFおrせは200にして遠心力で飛んで行かないようにして、KinematicRigidBodyの直方体を横から近づけてみた。回転している直方体にぶつかれば、回転している直方体の根元に曲げの力がかかってそれがMaxTorqueを超えるとコンストレイントが外れて落下する。下がそのレンダリング結果。

fig10

fig02「Translation Limits」ロールアウトは親に対する子の位置のあそびとその境界にさしかかった時の反応を設定するもの。

上の3つのオプションボタンで各軸ごとに固定(Locked)するか、あそび(Limited)を持たせるか、開放(Free)するかを設定できる。

その下の4つのパラメータは設定をLimitedにした時のあそびの境界についての設定だ。

LimitRadiusはあそびの範囲。親子のもとの相対位置に対してどれだけの範囲で自由に動けるかというのがこの値。この区間に子がある場合はその軸方向の拘束は受けない。

例えば下のシーンは横棒がKinematicRigidBodyで球体がDynamicRigidBodyで、横棒が親で球体が子となってコンストレイントされている。

fig14

fig13そして球体のY座標がちょうど横棒の軸方向で、そのY軸に対してLimitedをON、LimitRadiusを40に設定している。残りのXとZはLockedにしてその方向には移動しないようにした。

この状態で横棒の角度を変えて見たのが下のGIFアニメだ。初期位置から±40のあそびがあるので、球体が横棒に沿ってLimitedの範囲で自由に動くのが確認できる。

fig12

それから、球体がLimitRadiusの端まで行った時にどう挙動するかを決めるのがBounce、Spring、Dumpingの3つのパラメータだ。

BounceはLimitRadiusで設定した端まで子が移動した時にその端から外に子が出ないようにはじき返す度合いを決める値。0で反発無し。1で最大の反発。上のGIFアニメでは0であったので、球が端まで到達した時に、反発しないで急停止している。下のGIFアニメはBounceを0.6にしてみたもの。球体が端で跳ね返っているのがわかる。

fig15

Springは境界を越えた時に働くバネによる復元力。あそび部分の端から外への距離に比例して、戻そうとする力が発生する。下のGIFアニメはSpringを1.5にしたもの。球が端からはみ出てから減速して停止するのがわかる。この値が0の場合は端からはみ出ない。

fig16

Dumpingは境界を越えた時に働く速度抵抗のはずなんだけど、どうもちゃんと設定出来ない感じだ。下の2つのGIFアニメはDumpingを0.05と50000にした時の比較(Bounce:0.1、Spring:1.5)。球体に初速をつけて打ち出してみたもの。2つのシーンの球体の挙動に違いが見られない。

fig17
fig18

これらのパラメータと混同しやすいのが「Spring」ロールアウトの設定だ。「Translation Limits」ロールアウトがあそびの端を基準にその外側だけでかかる抵抗力なのに比べて、「Spring」ロールアウトの方はコンストレイントされた親子の初期位置を基準に発生するバネの力を設定するものだ。

fig05バネと言っても直線方向の距離に対して働くSpring to Restiong Position、曲げ方向の角度に働くSpring to Resting Swing、ねじりにに対して働くSpring to Resting Twistがある。

それぞれSpringnessとDumpingがあるが、Springnessはいわゆるバネ係数で、基準位置からの変位に比例して復元させようとするバネの力がどの程度強くなるかを指定するパラメータだ。

下のGIFアニメは「Translation Limits」ロールアウトのY軸方向をFreeにしてY方向は自由に動けるようにして、Springnessを3、Dumpingを0にしたものだ。バネによって初期位置に戻ろうとして球体が初期位置を中心に振動しているのがわかる。

fig19

Dumpingはこの振動を抑えるもので、速度に比例して抵抗力が高まる。Dumpinguが設定されると常に運動は減衰の方向に向かおうとする。下のGIFアニメは上と同じシーンでDumpingだけ1にしたものだ。球体の振動が抑えられて、すぐに減速して停止するのがわかる。

fig20

長くなったのでまた次回。

maxまとめページ



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

2010年11月26日

clothやってみた その11 3dsmax 2011

プーさんからClothを使ってボールが出来ないかとの質問を戴いたので、今回はそれをやってみたい。

まずは下のようなシーンを作ってみた。ボール部分は球体だとメッシュに極が出来ちゃうので天球体で作成した。

fig01

今回はボールを動かすのに風スペースワープを使ってみた。風は影響を限定するために減衰度を0.1にした。

fig02

球体に布地モディファイヤを適用し、布地のモディファイヤパネルの「オブジェクト」ロールアウトから「布地フォース」ボタンを押して、フォースパネルで風スペースワープを「シミュレーションにあるフォース」リストに追加する。

fig03

これで風が布地に影響するようになった。

次に布地のモディファイヤパネルの「オブジェクト」ロールアウトから「オブジェクトプロパティ」ボタンを押してオブジェクトプロパティパネルを出してオブジェクトを追加で平面と階段のオブジェクトを追加し、それぞれを衝突オブジェクトに設定し、球体は布地に設定してOKを押す。

fig04

これでシミュレーションボタンを押してシミュレーションしてみたのが以下のGIFアニメだ。見ての通りボールが見る影も無くボコボコに潰れてしまっている。

fig05

実際に布で同様のボールを作ればおそらく同じような事になるんだろうと思う。

で、現実のボールはどうしてこうならないのかと言えば、中に外気より高い圧力の空気が封入されているわけで、それを設定するパラメータがオブジェクトパラメータの中の「圧力(封じられた布地ボリューム内)」にある「圧力」パラメータだ。これを30にして、さらにトラックボリュームをONにすることで、変形による圧力変化も加味させて計算させてみたのが下のGIFアニメだ。

fig06

fig07

これでボールのように転がり落ちるようになった。ただ、かなり複雑な運動をしているので、計算精度はある程度高く設定した方がいいみたいだ。

fig09上のGIFアニメはサブサンプルを1で計算したものだけど、同じシーンをサブサンプル50で計算させると下のGIFアニメのようによりボールに近い特性になった。精度を上げた方はボールが床に落ちてからも転がり続けている。

fig08

さらに圧力を500まで上げてみたのが下のGIFアニメ。圧力に耐え切れずにボールが膨張しているのが見て取れる。また、ボールがだいぶ弾むようにはなっている。

fig10

この膨張を抑えるためにUVストレッチとUV圧縮の値を300に取ってみたのが下のGIFアニメ。膨張もある程度抑えられて、ボールのように弾むようになった。

fig12

fig13

あとは色々パラメータ変えながらやってみるしかないかな。下は密度を上げてストレッチと圧縮と圧力を上げてみたもの。

fig14

fig15

サンプルシーンをアップしておいたよ。

それではまた来週。

maxまとめページ

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

2010年11月25日

clothやってみた その10 3dsmax 2011

今日から急にブログの投稿方法が変更になった。馴れないせいもあってかなりメンドクサイ。

さて、長々やって来た布地の特性を決める基本パラメータもようやく最後だ。

まとわりつきは衝突オブジェクトに布地を付着させる度合いを設定するパラメータだ。下の2つのGIFアニメは上がまとわりつき100のもの。下がまとわりつき0のものだ。まとわりつきが100の布地が球体に付着しているのがわかる。

fig01

fig02

濡れた布や静電気なんかを表現する時に使えそうだね。

レイヤは布地の重ね合わせの順序を決めるパラメータ。−100から100までの値が設定でき、比較される布地のどちらか一方でもレイヤの値が0の場合はこの機能がOFFになる。重ね合わせの順番はレイヤ値の絶対値の大きさで決まり、絶対値が小さい方を基準に絶対値が大きい側の布が押し出される。その際、布を基準となる布に対して表側に押し出すのか裏側に押し出すのかは基準となる布のレイヤ値の符号で決まり、プラスの場合は表側に押し出し、マイナスの場合は裏側に押し出す。 下のGIFアニメは赤い布をレイヤ1、青い布をレイヤ2にして球体の上に落下させてみたもの。ただしどれも「自己衝突」オプションが有効になっていないと働かないよ。

赤い布のレイヤ < 青い布のレイヤ
だったので、赤い布が基準になって青い布が赤い布の上に押し出された形になった。

fig03

次に赤い布のレイヤを−1に、青い布のレイヤを2にした場合。上の例と布の優勢ン順位は同じで赤い布が基準になって青い布が押し出されるんだけど、押し出され側が赤い布の下なので、青い布は赤い布に下側に押され、球体には上方向に押されて赤い布がそれに耐え切れなくなって変形してグチャグチャになってしまったようだ。

fig04

マイナス側を使うのはなかなかむずかしそうだ。

赤い布側のレイヤを0にするとレイヤの効果が無くなって、通常の重ね合わせに従うようになる。

fig05

マニュアルを見るとレイヤはジャケットのように合わせがあるようなモノに使うと効果があるらしい。

例えばスプラインでこのようなパターンを作ってアタッチで1つにまとめてから

fig07

服飾メーカーで縫い目を設定して布地モディファイヤを追加してローカルシミュレーション(ダンピング)を実行したのが下のGIFアニメだ

fig06

ここで合わせの部分が交差してしまっているのが確認できる。こんな時に向かって右側の方が手前に来るように合わせるには、左側のあわせの部分のレイヤを右側のレイヤよりも小さい値(ただし1以上)にしてやればいいはずだ。

fig08

縫い合わされる布地のセットの中でパーツごとに布地のプロパティを替えるには、布地のオブジェクトプロパティパネルで、「パネルプロパティを使用」にチェックを入れる必要がある。

fig10

これがONになっている場合は、布地の「パネル」サブエレメントモードを選択した時に出てくる「パネル」ロールアウトの中の布地プロパティーパラメータが有効になり、布地の各パーツを選択して個別に設定できるようなる。ここでレイヤを設定すれば、パーツごとにレイヤを切り替えられるってわけだ。

fig11

下の図は各パーツにセットしたレイヤーの値

fig12

そしてこれがローカルシミュレーション(ダンピング)をした結果。右側のあわせが前に来た。

fig09

Clothはなかなかややこしいけど、いろいろやってるうちにちょっとずつわかってきたような気がする。そこでの実感だけど、布地のシミュレータとしては破綻も少なく、現実の布の特質をかなり高度にシミュレーション出来るみたいだ。

それではまた次回。

maxまとめページ

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

2010年11月24日

Maximaを使ってみた その19

前回はQR法を使って行列の固有値を求めてみた。今回はその原理のお話。

QR法の手順をおさらいすると、

  1. 行列AをQR分解する
  2. 得られたQ行列とR行列を逆にかけて行列A'=RQを得る
  3. A’をAとして1に戻る

上記手順を何度も繰り返して行くと、A'は上三角行列に近付き、対角に固有値が並ぶというものだった。

最初に与える行列をA0とし、それをQR分解して得られる行列をQ0とR0とし、それらを逆にかけあわせて作る行列をA1といった具合に番号を付けていくと、k回目のステップでは、

fig01

となる。ここで下の方の式の右辺に前から

fig02

をかけても単位行列なので変化は無い。

fig03

ここで、

fig04

なので、

fig05

となる。このことからAからAk+1に変換する事はQとその逆行列を前後からかけて変換する事だとわかる。

この正則行列とその逆行列を前後からかけて行列を変換する事を相似変換と言う。この変換の特徴は変換前後で行列の固有値が変わらない事(固有ベクトルは変化する)だ。例えば行列Aの固有値をλ、固有ベクトルをxとすると、次の式が成り立つ。

fig07

ここで正則行列Pで行列Aを相似変換した行列に、後ろからAの固有ベクトルxにPの逆行列をかけたベクトルをかけてみると、

fig06

のように変形でき、AをPで相似変換した行列の固有値もλであり、相似変換しても固有値が変わらないことがわかる。

このことからQR法の1ステップの前後で行列Aの固有値は変化しない事がわかる。

ところで対角より下の要素が全て0の右上三角行列(または左下三角行列)は対角に並んだ要素がそのままその行列の固有値になると言う性質を持っている。
これは特性方程式がdet(A−λI)の対角要素をかけたものしか残らない(他は全て0になる)事から自明だね。
だからもし、相似変換で行列を右上三角行列に変換できれば、固有値は変えないまま、固有値を対角要素にもってくる事が出来るはずだ。これがQR法の最大のミソで、一連の作業は相似変換で行列を右上三角行列に変換するプロセスになってる。

さて、QR法の1ステップが相似変換だとわかったところで、Ak−1はさらにAk−2をQk−2によって相似変換したものだから、それを次々置き換えて行くと最後にAをQで相似変換したものに置き換えられて、まとめるとAはAを(Q・・・・Qk−1)で相似変換したものだという事がわかる。

fig08

ところでAをk乗したものは以下のようにQとRで表わす事が出来る。

fig10

具体的にAの3乗を式変形してみると以下のようになり、この変形がAのk乗の時も成り立つ事が見て取れる。

fig09

よって、A0をAに相似変換する行列(Q・・・・Qk−1)はAのk乗をQR分解したQの部分であると言えるわけだ。

fig10

話が長くなったので続きはまた次回。



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