2012年9月6日木曜日

TPでパーティクルのサイズやベロシティにバリエーションをつけるときの注意

もしかしたら、すごい基礎的なことかもしれない。
ちょっと、下記の動画のような問題にぶち当たって、どうしようか迷ってしまった。
Sizeオペレータ、Velocityオペレーターのvariationを使う場合は注意が必要かもです。
二つともseedをいじることができないので、動画の①のようになってしまいます。
②でRandomオペレータを使って、問題を回避しています。
もしかすると、こうやるのが当たり前だったのかな?それとも他に方法が?




2012年9月2日日曜日

FumeFXで核爆発を検証してみた


Fumefx NuclearExplosion v001 from notchmen on Vimeo.


メモリを24GBに増量した記念に、スケール感のある爆発を制作してみようということで、ここ一週間ちょいほど、がんばってみた。
仕事では、こういうスケール感のある爆発は、なかなか携われないです。
けど、いつか携わりたいという気持ちもあるので準備はしておきたいですね。

ということで、先週は自宅マシンフル稼働でした。
が、、やはり一台はキツイです。
それは、トライ&エラーが必然的に減ることが一番ですかね。
特に、こういったスケールでかめなシーンでは減ると思います。
なぜなら、ローレゾで動き作ってもハイレゾにすると、フルイドの動きや広がり方変わりますよね。
これはローレゾとハイレゾの差が開くほど変化もあると思われます。
だから、ある程度までレゾ上げてやらないと確認にいたりません。
そうするとレゾ上げたら、sim時間がかかります。
結果、トライ&エラーが減るということです。

ちなみにローレゾでwaveletはどう?と思うのですが、フルイドをモクモクするにはwaveletじゃ無理そうです。
この、今回制作した動画の状態でwavelet使っていれば最高の結果になったかもです。残念ながらその分のキャッシュとっていませんでしたorz

トライ&エラーを、いかに多くするかは、やはり良いマシンをたくさん用意することですかね。超ベテラン(シミュ一発で十分っしょw)がいれば、あまりトライ&エラーせずに済みますが。
最低限メモリはいっぱい積ませましょう!!心に余裕ができますw

今回は、マシン一台とあってsimの結果は天への祈りと浅はかな知識、経験便りでしたw
TPはそれらについては、ほぼ皆無だから良いですね。自分の知識=結果となるみたいな感じですし。まあ、何にせよFumeとはまだ長く付き合っていきそうなのでがんばりたいと思います。

2012年8月25日土曜日

PC周りのメモ~メモリ~

メモリの容量の増量するだけで、数時間かかってしまった。
何をしてるんやら。。。しかも、最終的に不良?明日、メモリもって店に投げつけに行ってやろう。

--追記 2012/08/19--
恥ずかしながら、メモリがしっかりささってなかったようです。すみません。
このマザボちょっと特殊?で、壊れるんじゃないかというぐらい力込めなければいけないようです。
カチっというのが片方しかないし、油断もしてしまいます。
あ~なんだかんだ半日かかった。。
けど、店行く前にもう一度試してよかった。。反省。
-------------------

けど、サポートセンターに電話したところ色々勉強になったのでメモする。


てか、毎日のようにPC触っているのに、PCの知識なさ過ぎw

今回はメモリを2つ差し替えることにした。
家のマザボは4つスロットがあるので、そのうちの二つを差し替える。
久々、PCのドアを開ける。埃が。。。。
それは、さておき(ちゃんと綺麗にした)取り替えるメモリを抜く。
マザーボードごと取り外しメモリを抜きたいが、面倒くさいので隙間から手を上手く入れて差し替えたい。
これ皆さんどうやってるんでしょう。。マザーボードやファンはとっているのでしょうか?
PCによると思いますが、PCの中身めっちゃ不親切な構造なのでファンやらとらないと大変>0<
ねじとか回しにくいのとかありますし。。

とりあえず、差し替え完了。
実装メモリ確認すると、増えてない。認識されてない。
なんで~。。
一回、全部抜いてメモリにプライオリティ高い順に差し込む。
ここのプライオリティというのはメモリを読み込む順番。
そして、起動。。
「ピーピーピー」とビープ音が鳴る。初めて聞いた。
--追記 2012/08/19--
 今回は、メモリが一つも認識されなかったときになったみたいだ。 
-------------------
これは、メモリに問題があるらしい→こちら

ちなみに、

PCは起動時にメモリ→CPU→グラボという順に読み込むらしい。

このビープ音の原因はメモリがしっかり挿さってない事が原因だったみたい。一つもメモリが認識されていないということ。
家のマザボはカチッとしても浮いている場合があるので、ガッツリ押し込まないといけない。

んでビープ音はクリアしたと思ったら、今度はモニタがつかなくなってしまった。ガッデム。
サポートに聞いたところ、モニタがつかなくなる原因は色々ある。
以前にもあった、グラフィックドライバの関係やら接触不良やらの他に、メモリが正常に動作しないと、それ以上先に読み込まないので(上記の読み込みの順番)モニタはオレンジランプのままになるということだ。
ビープ音だけがメモリの異常を知らせることではないのか。。
--追記 2012/08/19--
モニタがつかない件は、なにかしらのメモリ異常があり、読み込みがメモリでストップされてるからかなと思う。ビープ音は鳴らずファンは動いている。なんならビープ音なって異常を知らせてほしいわ。
-------------------
ここも、しっかり挿しなおしたらモニタはついた。なんだそれ。。
んで、実装メモリを確認してみると足りない。。一つ8GBメモリが4GBしか認識されてない模様。


ギブアップ。もう、メモリが悪い。
明日、メモリ買ったお店に行って交換をしてもらおう。
この経験をいかして明日はさくっと変えれると良いな~
--追記 2012/08/19--
店に行く前、もう一度チェック。
一個一個挿してどれが認識していないかを試す。
それを絞って、思いっきり力入れてぶっさす!!
正常に認識しました!
-------------------

あ~PC周りのあれこれはメンドクサイ





2012年8月23日木曜日

TPでBT jointを探ってみた

久々の更新だ~。
といっても、テスト動画のアップのみです。
解説は、次回気力があったら記事にしたいと思います。


動画は、Ragdollの関節であろう場所にjointをかまし、シュミレーションさせています。
これ、もっと面白いことできそうですね。表現の幅が広がります^^





TP ragdoll test v01 from notchmen on Vimeo.


2012年7月29日日曜日

maxScriptで行列を勉強してみた④

今回は、逆行列を使い、基底をワールドとローカル変換し合って座標を変換していく。
こうすることで、あるオブジェクトのローカル情報を元に座標変換する事ができる。
要は別の基底(基準)を元に調整できる事ができるということである。
3dsmaxでいう下の赤枠を切り替えて調整するときあるけど、ここイメージすると良いかな。



















実例1 マトリックスを使い、ボックスのある頂点を、ティーポットのある頂点へ移動する。

1、ボックスとポットを用意する。頂点番号50をターゲットにする。
ボックスの絶対座標はワールド基底からの値で、ローカル座標はローカル基底からの値である。
ボックスのワールド基底をポットのローカル基底に変換するために下記の2つの基底を用意する。
ボックスのワールド基底の変換行列は、transformプロパティでゲットできる。
ポットのローカル基底が必要なので、逆行列で用意しておく。





2、ティーポットのローカル空間でのボックスの頂点50の座標を求める。そのためには、ボックスの基底をティーポットのローカル空間にすればよい。


3、ポットの頂点100のローカル空間座標を求め、ボックスの頂点50へ移動するため移動ベクトルを求める。



4、後は、3で求めたベクトルをmoveメソッドで頂点100に引数として渡してやるだけだ。














実例2 オブジェクトAのローカル空間を元に、オブジェクトBを動かす。

画像のboxのローカル空間を元にSphereを移動します。ここでは、boxのy軸に沿って移動したいと思います。
①変換マトリクスを用意します。
transmatrix [0,5,0]    ----①
これを$Sphere.transform * transmatrix [0,5,0]してもワールド空間でのY軸に沿っての移動になる。

②boxのローカル空間を取得する
inverse $box.transform    ----②
③①の移動変換マトリクスを②を使い変換する
xformmat ① ②
これでboxのローカル空間でのY軸に沿っての移動になる。












2012年7月4日水曜日

nuclearA_test1

初めてvimeoに動画アップしてみた。
画像圧縮で、ディテールがつぶれているのが残念。要検討。
又、VimeoPlusにしないとアップデートに20分くらい待たされるのかな。それも検討。



nuclearA_test1 from notchmen on Vimeo.




今年、corei7-3930k にしたので、とりあえずFumeで限界辺りまで試してみた。
後半につれ、シミュレーション回らなくなったので(落ちはしないが長い)、あきらめた。
もっと、煙のロール具合を見たかったが、これ以上シミュかけるにはメモリ上げないと駄目っぽい。

構成はこんな感じ。

cpu:corei7-3930k
ram:16gb

res:667x667x1067

FumeFx2.1c

こういう、スケール感大きいものの表現てトライ&エラーができないのが痛いな~
fumeはmayaとかに比べると大分速いとか聞いたけど、やっぱりまだまだ。。
あきらめることが多いし。数年後に期待。



2012年7月2日月曜日

maxスクリプトで頂点を選択

ふと、スクリプトからオブジェクトの頂点を選択したいと思って調べてみた。
実力不足から、ヘルプを上手く活用することができないのもあり、引くに引けず数時間かかってしまった。ちっくしょう。
まだ、maxscriptの構造がボヤっとしているからスムーズに行かないのだろう。

とまあ一応解決したのでメモです。
別にこれ使って、ツール作るとかじゃないです。只、気持ちをスッキリさせたかっただけです。

では、この数時間の経緯を追ってみたいと思います。

はじめに、選択しているオブジェクトの頂点の番号を与えてやれば消せるだろうと考えました。
頂点番号5の頂点を消すと考えて、イメージ的にselectVert $ 5 で消せるかなと。
結果、こんなメソッドは定義されてないということでエラーが出ました。
んで、ヘルプを探りました。慣れないのでどう探したら良いのやら。。
とりあえず、vertexやら何やらで検索かけて探しました。こんなんでよいのか不安になりながら。

するとこういったメソッドを発見
↓↓↓↓
deleteVert

これは、オブジェクトの頂点インデックスを指定して削除するメソッドです。

もう後は、deletevertではなくて頂点選択のメソッドを探すだけかなと思いました。上記のselectVertみたいな。

それがない~んです。
あるのは、
getNumVerts  --オブジェクトの頂点数をゲットするメソッド
getVert  --オブジェクトの指定した頂点をpoint3(現在の座標での位置)を返すメソッド

等々。。。


ここで、振り出しに戻り、又検索の嵐。。自暴自棄になってます。成長しないな~。
てか検索、日本語引っかからないのが腹立つ。何か意味があるのかしら??

そこで「メッシュ頂点の選択:」という欄がありました!
絶対これやん!
getVertSelection
#[]
空の配列マーク?が返ってきた。
ヘルプだと、現時点における頂点の選択セットを返しますということらしい。
このメソッドは選択されている頂点番号を返すだけのようだ。

駄目だ。。もうそんなメソッドないのか。。

またも、しつこくヘルプを探る。ちょっとヘルプの見方に慣れてきた。
とりあえず、頂点はコレクションに格納されているからコレクションのタイプを見てみた。

するとVertexSelection値というのがあった。

バーと流し見してみたら,

select --VertexSelection 内の頂点を選択します。

を発見。と、発見してみたはいいもののってなんだ?

ヘルプより----------------------------------------------------------------------


VertexSelection は、シーン メッシュ ノードの一連の頂点を仮想配列として表します。
これを使用すると、インデックスで頂点にアクセスしたり、頂点間を繰り返したり、マップされた関数を頂点に適用したりできます。

「Editable_Mesh」も参照してください。

VertexSelection 配列は動的です。メッシュ ノードの頂点や選択された頂点の変更に伴って内容が変更されます。

VertexSelection 値はマップ可能です。



----------------------------------------------------------------------------------

では、VertexSelectionを作らなきゃselectできないってことで、用意されているコンストラクタで値を作成してみる。

.selectedVerts  -- メッシュ オブジェクトで現在選択されている頂点です。

.verts -- メッシュ オブジェクトのすべての頂点、読み込み専用です。

この二つが用意されている。
これを使い、作成してみる。

vtx = $.verts
select vtx

できた!!選択したオブジェクトの頂点全部選択できました!!

うわっ、二行とかしょぼ。

頂点番号で指定する場合は

vtx = $.verts
select vtx[#{8}]


コレクションのインデックスで指定する場合は

vtx = $.verts
select vtx[8]


てとこかな。
他にも、いろいろプロパティやら演算子やらあるけど、とりあえずはここまで。

--追記--07/07--
上記の頂点選択スクリプトは何も選択していない状態では効果が見えない。
なので、オブジェクトを一度選択して、さらに頂点レベルに入って選択しなくては効果が見えない。

box001モデルの頂点番号6を選択したいとき

select $box001
subobjectlevel = 1
select $.verts[#{6}]

とする。



まとめ。
なんでこんな時間かかったんやろ。。。
ただ、オブジェクトのプロパティを指定してあげてselectメソッド使うだけなのに。。