2013年07月31日

modo701が来た! その31 modo701 SP1

今回はサンプルファイルを使って使い方を調べてみたい。

「Particle Velocity Constraint.lxo」はSamplesフォルダーのParticlesフォルダーに入っているパーティクルに関するサンプルファイルのひとつだ。

レンダリングするとこんな感じ。

fig01

見ての通りこのサンプルはパーティクルのある軸の方向をパーティクルの進行方向にあわせる方法のサンプルだ。

スケマティックビューは下の通りで、ラディアルエミッタでパーティクルを生成して飛ばし、それをタービュランスフォースで迷走させ、そこにリプリケータでメッシュオブジェクト:pointyを割り当てている。そしてパーティクルの方向は「Velocity Constraint」と名付けられたアセンブリに集約されている。

fig02

アセンブリの中身はこうなっている。

fig03

構成としてはパーティクルオペレータ1つ、方向コンストレイント1つ、ロケータ2つ、基本演算:加算3つが組み合わされているようだ。

パーティクルオペレータはスケマティックビューを見やすくするために回転チャンネルが分離されているけど、上の画像で一番左にあるパーティクルオペレータと一番右にあるパーティクルオペレータは1つのアイテムだ。

このアセンブリと外部とを繋ぐコネクタは「アセンブリ出力」ノードの下に書いてある「Particle Operator」1つで、これが作業スペースの方でParticle Simulationアイテムのオペレータコネクタに接続されている。そしてアセンブリの内部ではパーティクルオペレータの右上にあるコネクタに接続されている。

fig05

このコネクタからの出力をアセンブリの外部へ出す仕組みは従来の「ユーザーチャンネルの追加」では出来ない(チャンネルのタイプとしてオペレータのリンクみたいのが無い)ようで、これを出すためにはパーティクルオペレータノードを右クリックして、「出力関係を公開」を選択する必要があるようだ。

fig04

これは入力関係を公開とか非公開なんてメニューもある。

これでこのアセンブリのパーティクルオペレータは外部のパーティクルシミュレーションと接続できるようになり、あとはどうやってこのオペレータでパーティクルの方向を決めるかって事になってくるわけだ。

さて、そこでそれがどうなっているかを見てみると、まず、パーティクルオペレータから各パーティクルの位置ベクトルと速度ベクトルが出力されていて、

fig06

それぞれが右の2つのロケータの位置XYZに入力されている。上のロケータには位置ベクトルXYZがそのまま入力され、下のロケータには、位置ベクトルXYZに速度ベクトルXYZを加算したものが入力されている。こうすることで、2つのロケータの座標は現在のパーティクルの位置と、速度ベクトルぶんだけ進んだ先の位置になるってわけだね。

これらのベクトルの値がロケータアイテムによってワールド位置行列に変換されて出力される。ロケータはワールド座標系にあるので、無変換の状態の変換行列の変位要素の部分を入力された値で置き換えたものが出力されるのかな?

この変換が必要なのは次の方向コンストレイントの入力がマトリクス形式の入力になっているためだ(コネクタのところに9つの点が並ぶマークが描かれている)。

fig07

方向コンストレイントはこれら2つの入力から、起点から終点に向かう変換行列を作り出して出力し、それをパーティクルオペレータの回転チャンネルに入力することでパーティクルの向きを現在のパーティクルの位置からそこに速度ベクトルを加えた位置方向に向けるわけだ。

ところでこの例ではベクトルからマトリクスへの変換にロケータアイテムを使っているけど、マトリクス構築オペレータを使ってもいいんじゃないかな?

fig08

単純に置き換えて実験してみた限りでは結果に違いは無かったよ。

ロケータを使う場合にはわざわざチャンネルリストからスケマティックビューにドロップしてワールド座標チャンネルとか加えなきゃならないし、ちょっと手間だよね。そこまでしてロケータを使うからには何か重要な意味があるのかも知れないけど、今のところ不明だ。

それではまた次回。

modo701ブログ目次



take_z_ultima at 11:42│Comments(0)TrackBack(0)modo | CG

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 

Archives