2010年1月27日水曜日

Working with Particle(Houdini8チュートリアル):(2)

Working with Particle」(sideeffectsのPDFチュートリアル)
4ページ目から6ページ目のスプレッド・コントロールを追加するところまで


Pg4:
パーティクル・システムをクリエイトする。

ディスクを作成し、ロケットへペアレントしたら、それと接合して使われるパーティクル・システムを作り始めることが出来ます。
このパーティクルシステムは、パーティクル・オペレータまたはPOPsを使って、パーティクル・ネットワークのレベルで展開されます。


新しいジオメトリ・オブジェクトをクリエイトする
パーティクルを創るには、ロケットにペアレントされない新しいジオメトリから始める必要があります。
そこで新しいジオメトリにアニメートされたdisk_emitterジオメトリを導入するために「Object Merge」と呼ばれる、特別なオペレータを使います。そして、この移動するディスクにパーティクルシステムを構築します。

新しいジオメトリ・オブジェクトを使う理由はパーティクル・システムの機能がワールドスペースにあることを確実にするためです。
もしこのシステムがロケットにペアレントされていたら、ロケット共にパーティクルが移動してしまいます。
もしかするとこれがあなたが望むエフェクトをもたらすかもしれませんが、今回はロケットが上昇するときにパーティクルはその場に止まるようにします。


1.パーティクル・オブジェクトの作成
ネットワーク・ペイン内で、tab > Geometry と押して新しいジオメトリ・オブジェクトをrocketオブジェクトの右側に作ります。そしてこのオブジェクトの名前を「particles」にします。

2.
そのノードがまだ選択されている状態で「i」キーを押し、particleオブジェクトの中に入ります。
ネットワーク・エディタ内の「File」ノードを選択し、削除します。
tab > Object Mergeを押し、Object Mergeノードを作ります。

Object Mergeノードが選択されたまま、パラメータ・ペインへ行き、
「Object1」パラメータの右にある[+]ボタンをクリックし、network/node構造のツリー・ビューを開きます。
ジオメトリ・オブジェクト内のcircleやskinノードを選択しないように気をつけます。


3.エミッターをアニメート位置へ移動します。
「Transform Object」のフィールドへドット「.」を入力します。
このドットはパスの「この場所」を示すために一般的に使われる物で、これはdisk_emitterがどこへ行こうと関係なく、マージされたオブジェクトがそれをフォローすることを意味します。
この「ドット」なしでは、エミッタジオメトリは原点に残され、ディスクのアニメートされた位置へは移動しません。

ドット「.」は、Houdiniの中で度々使われるので、これを毎回、設定するように覚えておくべきです。
パラメータ・ペイン内のオプションを使い、このパラメータをデフォルトのままにしておきたいこともあるでしょう。


4.ビューポート See One - See All
ビューポートの右下にある「See One/All」ボタンを押せばシーンの中身をすべてビューで見ることが出来ます。

「Object Merge」 SOPはビューポート内では何も行わないように見えます。
これは「disk_emitter」を二度表示しているからです。
下にあるディスクをみるとシェーディングがおかしくなっていることに気がつくでしょう。
この奇妙なシェーディングは、二つのサーフェイスが重なっている時の状態です。
なので、ここではマージすることに成功しているということになります。

「See One/All」ボタンをOFFにします。
再生バーをスクラブして「Object Merge」のトランスフォーム・フィールドに入力した「.」が機能していることを確認します。


------------パーティクルの振る舞いを定義する----------------------------
Pg5
ディスクにパーティクルを追加する。

これでパーティクルをエミットするためにディスクを使う事ができるようになりました。
Houdiniでは、ポイント、サーフェイスまたはボリュームからパーティクルをエミットすることができます。

1.空のパーティクル(POP)ネットワークを創る
ネットワーク・エディタで、「Object Merge1」のアウトプットをRMBクリックし
「Pop Network」とタイプし、ネットワーク内に創ります。
「popnet1」ノードのディスプレイフラグをクリックします。

Pop Network SOPは突然黄色のワーニングフラグを表示します。
これは、このノード内にパーティクル・ネットワークが設定されていないからです。


2.パーティクル(POP)ネットワークに入る。
popnet1ノードが選択されたまま、Enterまたは「i」を押してその中に入ります。
これでパーティクル・ツール群を利用できるネットワークに入りました。
ちょうどジオメトリ・ネットワークのレベルのようで、ノードを創りネットワーク化することができます。


3.Source POPを創る
ビュー・ペイン内で、tab>Sourceと入力します。
これは、パーティクルを作成するインプット・ソース・ジオメトリがどれであるかを示します。
赤いフラグは、これから直していくので無視します。

「source1」ソースPOPのパラメータ・ペインを見ます。
Sourceフォルダ内で、「Emission Type」を「Surfaces(random)」に設定します。
「Geometry Source」を「Use First Context Geometry」に設定します。
これは、「このPOPネットワークの最初の入力を使う」とうことを指示するためのちょっと変わったやり方です。
これでエラーフラグはなくなります。


4.パーティクル・ベロシティーを追加する。
「Attribute」フォルダーをクリックし、「Initial Velocity」のとなりにあるプルダウン・メニューをクリックします。
そして「Set Initial Velocity」を選択します。
「Velocity」パラメータのYフィールドに「-1」を設定します。

ビューポート内で、少しパーティクルが即座に表示されたのがわかるでしょう。
それらは現在のvecocityアトリビュートに対応した小さな軌跡を描いています。



5.シミュレーションを再生する。
再生バーの「再生」ボタンを押せば、次の二つが見れるでしょう。
1)エミッターが移動する。
2)エミッターからパーティクルがうまい具合に流れている。

パーティクル・シミュレーションを見るときに、アニメーションがフレーム「1」から始まっていることを確認してください。そうすることで、Houdiniにシミュレーションを最初からきちんと処理させることができます。



パーティクルの振る舞いを定義する。
POPs内でパーティクルをコントロールするためのパラメータは沢山あります。
しかしSOPs内のエミット・ジオメトリへアトリビュートを追加することによって、さらに指示をすることができます。
このセクションでは、エミッターのポイント・ノーマルの値を操作することのみに止まらず、Houdiniのプロシージャルアプローチの利点も学びます。
プロシージャ主義は、あなたのそれまでの作業を崩壊させるkとおなしに、簡単にSOPsの中に戻り、ノードを追加することが出来ます。


ディスクにアトリビュートを追加する。
rocketにペアレントされたdisk_emitterジオメトリに関する次のステップは、
このサーフェイスからエミットされるパーティクルの初期方向と初速度の両方を決めるアトリビュートをエミッタへ追加することです。


1.NORMALアトリビュートの追加
「u」キーを二回押して、「rocket」オブジェクト、ground、lightsそしてcameraを見ることが出来るオブジェクト・レベルへ上がります。
「disk_emitter」ノードを選択肢「i」を押して中へ入ります。
skin1ノードのアウトプットをRMBクリックして「Point]とタイプしてskinへ「Point」SOPを追加します。
この「point」SOPの名前を「add_point_normals」とします。
Display and renderフラグがこの新しいノードに設定されていることを確認します。

「add_point_normals」のパラメータ・ペインへいき、「surface point normals」を作成するためにデフォルトで「Keep Noramal」となっているボタンを押して「Add Normal」へ変更します。

----------------------------------------
Note:
デフォルトの位置$TXは、各ポイントのinputXポジションです。
$TYは、Yポジション、$TZはZポジションです。
Point SOPの全ローカル変数を見るには、パラメータの右上にある「?」ヘルプ・アイコンを押します。
そして、全情報を見るために、Local Variablesタブを押します。
----------------------------------------



Pg6
2.ノーマルを見る。
右側のツールバーにある「Point Nromals」ボタンを押します。
これで「Point」SOPがどのポイントがアタッチされているかをサーフェイスの形状から自動的に計算するポイント・ノーマルを見ることが出来ます。
そらは下方向を向いているはずです。
スペースバーとLMBにより、ビューポートを動かしてみます。
スペースバーと「t」により全ての4分割ペインを見ることも出来ます。

----------------------------------------
Note:
「Normals」フィールドはグレイからグリーンに変わり、$NX,$NY,$NZと記載されます。
実際にサーフェイス・ノーマルを作成し、ビューポート内に見えるようにしたのです。
----------------------------------------


3.Inithal Velocity(初速度)の追加
ネットワーク・エディタ内で、最初の「Point」SOPへ別の「Point」SOPを追加し、「add_initial_velocity」と名称を変更します。

パラメータ・ペインで、「Particle」フォルダを選択します。
これはパーティクルのすべてのデフォルトアトリビュートが存在する場所です。
「Keep Velocity」メニューを押し、「Add Velocity」にします。
デフォルト・ローカル変数として$VX,$VY,$VZを見ることができます。
入力される速度は内ので、値はすべてゼロに設定されています。

$VXを$NXに変更します。
$VYと$VZも同様に、$NYと$NZに変更します。

ヴェロシティー変数をノーマル変数と入れ替えることで、どんなノーマルも物理的に見えなかったとしても「Point」SOPがサーフェイス・ポイント・ノーマルを計算し、ヴェロシティー・パラメータへそれを入れます。
----------------------------------------
Note:
この「point」SOPのノーマルを構築するという、隠れた自動的な振る舞いはHoudini内の大部分のSOPsと一致しません。
これは、ローカル変数を追加するために「Collision」POPsトグルのようにあなたがアトリビュートを追加するためにトグルを使う事を前提としています。
1もしくはゼロ以外の何かの値を初期変数として使うことは、ノーマルとは異なります。
----------------------------------------


4.シーン内のその他のオブジェクトを表示する。
ビュー・ペインの右下部「See One/All」ボタンをクリックします。
これは現在のレベルより上にある全てのオブジェクトを表示します。

もしリファレンスとしてシーン内の残りの物を見たいときには、ジオメトリ(SOP)レベルで作業をするときにはこれをONにしておくことはとても便利です。


パーティクル・スプレッドをコントロールする。
これで、Normalsの広がりを定義することが出来ます。
このシミューレーションは、ロケットが離陸するときの軌跡に使う物なので、ノーマルを扇のように広げた形にしたいでしょう。


1.ポイント・ノーマルへ、スプレッド・コントロールを追加します。

戻って「add_point_normals」ポイントSOPを選択します。
Standardフォルダ内にいることを確認し、Noramalsパラメータを見ます。
「Normals」の最初のパラメータ$NXを「$NX+($BBX-0.5)*0.2」に変更します。
同じく三番目のフィールドの$NZを「$NZ+($BBZ-0.5)*0.2」へ変更します。

$BBXや$BBZとは何でしょうか?
これらは全てのポイントを含むバウンディングボックスに対応したXYZの位置を返すローカル変数です。
左下部は0,0,0で、右上は1,1,1です。
この仮想のボックス内にある各ポイントはXYZの位置を持っています。
これがあなたがアクセスしているものです。

では、なぜ0.5を減算するのでしょうか?
これはとても一般的なHoudiniでの操作です。
バウンディング・ボックスの値は全アクシスにおいて0~1の間に収まります。

0.5を引くことで、なにも影響がない中心であるゼロと-0.5~0.5の範囲にある値をもたらします。
これはバウンディング・ボックスを通した便利な振る舞いです。

計算したバウンディング・ボックスの値を最適と思われる0.2で乗算します。
ゼロで乗算すれば影響はゼロになります。
ゼロ以上の値は、値を外へ向けて、ゼロ以下なら内へ向けた値になります:
ここで達成したいベクターを使った排気エフェクトにとって完璧なコントロールです。

値「0.2」の上でMMBを押して、ラダー・ガジェットを使ってこの値を変更することができます。
エクスプレションの中でコンスタントに調整するために便利です。
  

0 件のコメント:

コメントを投稿