Houdini sidefx official Lesson1-2 Particle

このチュートリアルでは、球体から発生したパーティクルをティーポットの形状をゴールとし、最終的にティーポット型のパーティクル集合を作成するという内容。

まずは球体とティーポットを作る

はじめにsphereを作る。
その後、sphere_object1内で Platonic Solids ノードを作成し、Solid TypeをUtah Teapotに

20140413_01_0

20140413_01_1

20140413_01_2

popnetノード

popはParticle OPerationのこと、多分。
popnetノードを使用し、パーティクル処理を作成する。
popnetとは、Particle OPeration Networkのことだと思う。(多分)
このノードの中にパーティクル処理のためのネットワークを作成するようだ。

※チュートリアルが作成された時点では、popnetノードが旧式のものしかなかったようで、Houdini 13ではpopnet – old というタイプで定義されているノードを使用する。

popnet – oldノードが作られた時点では、中身は空っぽでなんの動作も行わない。

オブジェクトからのパーティクル放出

エミッタオブジェクトをpopnetのinput1に、収束するターゲットオブジェクトをinput2につないでおく。
popnet-oldに入り、sourceノードを作成。

ソースはinput1に入力されたジオメトリオブジェクトになるので、 Geometry SourceをUse Firse Context Geometry にする。

この時点で、球体の各頂点からパーティクルが発生するようになっているが、速度等を持たないので動かない。

初速を持たせるために、Attributesタブで Initial Velocity を Add to inherited velocity にする。こうすることで、親から継承された速度ベクトルに加え、自らが定義した速度を持ってパーティクルが放出されるようになる。

Velocityは速度ベクトル。Varianceは速度ベクトルに加えられるランダム速度ベクトル。x=3であれば、ランダム範囲は -3~3

20140413_01_3

パーティクルを引きつけるattractorノードを作成

attractorノードを作成する。

sourceノードでパーティクルを放出するジオメトリを選んだ時の要領で、Geometry Source を Use Second Context Geometry に

これで、input2に接続されたティーポットオブジェクトがパーティクルの引きつけターゲットになるが、このままではかなりラフなティーポットの頂点が引き付けターゲットになるので、引きつけが成功してもティーポットには見えない。
また、現時点ではティーポットの点からは引き付けの力が発生していないので、パーティクルの動作には変化がない。

ティーポットの表面に収束先パーティクルを作成する

scatterノードをつなぎ、ティーポットの表面にパーティクルを生成する

scatterで作られたパーティクルに力を与える

pointノードを作成する

pointノードのforceタブで各種力を設定可能。
Radiusを Add Radius に
Force Scale を Add Force Scale に
Radial Force を Add Radial Force に

popnet-old内のattractorノードに戻り、Attractor Use を Single point per Particle に

こうすることで、パーティクルとアトラクターの頂点が1対1で対応し、正しい軌跡でティーポットに引き付けられるようになる。

※この設定を行わない場合、1粒のパーティクルに影響を与える頂点がティーポット上にある全ての点になり、それぞれの力の合力が一つのパーティクルに作用するため、パーティクルは発生後に非常に高速で飛んでいってしまうのだと思う。

dragノード

現時点で、放出されたパーティクルはティーポットになんとなく引き付けられているように見えるが、収束すべき点に向かって移動する際の減速が弱く、なかなか収束しない。

よって、dragノードを使用して強制的にパーティクルを減速させる。

dragノードを作成し、 attractorの下流に接続する

※この時、dragノードの可視性をオンにしないと効果が見えないので注意

20140413_01_4

タイムレンジを変更する

デフォルトのタイムレンジ 0〜240フレームの間では収束が確認できないのでタイムレンジを変更する。

Global Animation Options ウインドウを開き、Endフレームを500〜1000程度にし、Applyで決定する。

この時、現在あるキーを新しいタイムレンジにフィットさせるか聞かれるので、必要に応じたオプションでメニューを閉じる。

細かいパラメータ調整で気持よく終息するように調整する

収束の具合はpointノードの各種forceパラメータの調整で。

パーティクル放出のエクスプレッションを設定する

sourceノードのパラメータを設定

Impulse Activation = $F < 50
Impalse Birth Rate = $NPT
Const Activation = 0
Const Birth Rate = 0

※Impulseアクティベーションは放出を行う条件
※$NPTは、放出ソースに指定されているオブジェクトの頂点数

Houdini sidefx official Lesson1-1 プロキシモデルとランダム配置

ノードタイプには、Geometryと各種形状ノードがある。
Mayaで言うところのTransformがGeometryにあたり、内部に各種形状ノードネットワーク、つまりMeshなどのShapeノードと、それを操作するHistoryノードが格納されている状態。

オブジェクト内には複数の形状を保持できる。
通常通りオブジェクトを作り、Geometryレベルに入ってBOXノードなどを追加することで、複数の形状を保持できる。
表示のオンオフは、ノード右側の表示ボタン(水色)で行える

自動的なパラメータの受け渡し

パラメータ上で右クリックしCopy Parameter。
同期を行いたいパラメータの上で右クリックしPaste Copied Relative References。
ペースト先に「ch(“パラメータのパス”)」が自動的に記入され、コピー元の値が受け取られるようになる。※記入されるのはエクスプレッション

基本的にはペースト先はコピー元の値を受け取るようになるが、パラメータの中ボタンドラッグで値を変更すると、受け取った値にオフセット値として新たに値が足しあわされる。

パラメータ名の確認

ノードプロパティのラベルの上でカーソルを静止させるとポップアップヘルプが表示され、その中に各パラメータ名が表示されている。

パラメータの表示モード

パラメータのラベルをクリックすると、実際の値と仮の値(エクスプレッション文字列など)を切り替えることができるようだ。

mergeノード

ジオメトリレベル内で複数の形状を作成し、mergeノードにコネクトすることで複数の形状をまとめて表示できるようになる。

20140413_02_0

20140413_02_1

ノードの状態を手早く確認する

各ノードを中ボタンでクリックすると、各種パラメータの状態がポップアップ表示される。

ノードパラメータへのパス

自身のパラメータへのパスはパラメータ名を単純に使用
ch( “tx” ) など

別ノードへのパス以下のように書く
ch( “../sphere1/tx” ) など

上記の例は、box1からsphere1のパラメータへアクセスする場合の書き方。
自分と同階層にあるノードへアクセスするため、一旦上位階層へ上がってから目的のノードを指定する。

パラメータのアニメーション(キーフレーム)

パラメータラベルをAltキーを押しながらクリックすると、各値のボックスの値にキーが打たれ、緑色に変わる。時間を動かし、パラメータを変化させ、同じようにAltを押しながらラベルをクリックで新しいキーを打つ。

プロシージャルアニメーション

sin関数を使用する例
パラメータの入力ボックスに sin( $F ) などと入力。
$Fは、現在フレーム番号を表す。

ノードの直接生成に関して

Network ViewでTabキーからノードを作成する際、現在見ているレベルによって作れるノードの種類が変わる。

transformノード

Mayaのtransformノードとは違い、Houdiniでのtransformノードはオブジェクトのローカル空間内での変換用に用いられるようだ。

下流ノードをお手軽に作成

上流ノードの出力コネクタを右クリックし、下流に作成したいノードをポップアップメニューから選択、または、フィルタを使用していつも通りにノードを作成する。

attribcreateノード

下流ノードのパラメータへのエイリアスが作れるノード?
チュートリアルでは、scatterノードの上流にattribCreateノードを置き、アトリビュート名をpscaleとすることで、散布されたオブジェクトのスケールを変更した。動作に関して要調査

paintノード

スキンウエイトやダイナミクスのアトリビュートを直接モデルにペイントできるノードのようだ。attribCreateの下流につないで使用した。
attribCreateから出力される値に対し行う処理で使われる値をペイントする。例えば、入力値に対する倍率や加算する値など。

Override Colorパラメータを有効にし、上書きするパラメータ名をデフォルトの「Cd」から上流にあるattribCreateで指定した「pscale」パラメータを操作するように書き換えた。

Merge Modeでペイントした値が元の値に対してどのように処理されるかを決定する。

20140413_02_2

20140413_02_3

このチュートリアルでは、シンプルなボックスをまず最初に配置し、switchノードへ、ボックスとLSystemによって作られた樹木を接続。
ボックスはプロキシオブジェクトとして扱い、switchノードで出力するモデルデータを切り替えるようにし、精細な樹木と交互に切り替え表示できるようになった。

copyノードのstamp

コピーしたオブジェクトそれぞれ個別に与える事ができるパラメータを作成できる。このパラメータでは、rand関数などを使用してそれぞれのオブジェクトにランダムな値を与えることもできる。

stampパラメータの作成

まずは、copyノードのstampタブを見る

20140413_02_4

stampタブの下部に各変数を生成するためのエリアがあるので、任意の名前と値をセットする。この値は、いつも通りエクスプレッションを記入することができる。

20140413_02_5

$PT という変数は、コピー先の各頂点番号を指す。

20140413_02_6

ここでは、rand関数に各頂点番号を与え、返ってくる0〜1の値に対して360をかけることで、ランダムな角度を計算できるようにしている。

stampパラメータの使用

使用するパラメータに、以下のように記述する

stamp( “copyノードのパス” , “使用するstampパラメータ名” , 0 )
この時、Stamp Inputチェックボックスは忘れずにオンにしておく。

結果

最後に、ランダムなY回転を行って配置したLSystemオブジェクトをちょうどいい数になるようscatterのNumber Of Pointsパラメータを調整して終了。

20140413_02_7

20140413_02_8

マテリアルが設定されていないので真っ白w

Houdini シーン内の各種コンテキスト

Scene以下には、何種類かのコンテキストがある。

ch

モーションやオーディオを処理するコンテキスト

img

画像合成のコンテキスト。
非常にパワフルな画像合成をこの中で行える

obj

シーン内オブジェクトを処理するコンテキスト

out

レンダリング処理のコンテキスト

part

パーティクル処理のコンテキスト

shop

シェーダ処理のコンテキスト

vex

Houdiniの高速スクリプト言語。
GUIでラップされていて、ビジュアルプログラミング(VOP)での構築もできる。

Houdini Network Viewの使い方

見ている場所のレベル

Network View右上に表示されている

20140413_03_0
Sceneレベル表示中

ビュー操作

スペースキー+
LMB/MMB = 移動
RMB = 拡大縮小

ノードのフラグ操作

ノード右側の青いエリアは表示のオンオフ
左側の緑のエリアはビューポート内での選択の可否を決定する

ノードの整頓、再配列

Lキーを押すことで、再配置される

ノードのコネクション作成/削除

ノード上下にあるコネクタをクリックし、続けて接続先をクリックで接続
コネクションを表すラインの上で右クリックからDisconnectで接続解除

ノードの内側に入る

ノードを選択し、Iキーを押す
ノードをダブルクリック
ポリゴンメッシュなどをダブルクリックすると、Geometryレベルに入る

20140413_03_1
ジオメトリレベル表示中

Houdini オブジェクトの作り方

インタラクティブ作成

シェルフからBoxやSphereなど、任意のオブジェクト作成ボタンを選択。
ビューポート内で作成したい場所にカーソルを置き、左クリックで作成。
この時、Shiftを押しながらカーソルを動かすとY方向の作成場所を指定できる。Y位置が決まったらShiftを離し、任意の位置へカーソルを移動して左クリックで作成できる。

原点作成

インタラクティブ作成中に左クリックを押さず、Enterキーを押すことで原点に作成できる。

Network Viewでノードを直接作成

Network View上で Tabキーを押し、FilterでBoxなどと入力し、フィルタ結果にあるBoxをクリックすることでノードを作成。
View内での配置先を決め、左クリックで決定すると、オブジェクトが原点に作成される。

Houdini 基本

データ階層に関して

20140413_04_1

root直下にはch,objなどの大きなカテゴリがあり、その中に各種ノードがぶら下がる。
オブジェクトは、トップが配置情報(Mayaでいうとtransformノード)
下に実際のメッシュ形状など、オブジェクトの振る舞いを決定づけるノード群がぶら下がる。(MayaでいうとShapeノード)
この中には編集履歴となるノードが並ぶ。

Network View

ノード同士の関連を見るには、Network Viewを使う
はじめに見えているのはオブジェクト階層と呼ばれる階層。
オブジェクト階層には
基本的には、ノードのタブルクリックでそのノードの中に入る。

20140413_04_2

↓ ダブルクリック

20140413_04_3

box1がボックスの初期形状を決めるノード
polyextrudeで面の押し出しを2回行い、そこで作られた形状の表面に沿うように、scatterノードを使って点を発生させている。

上位階層に戻るにはNetwork View左上の矢印を使う

20140413_04_4

または、以下の操作でも階層を行き来できる。

選択ノード内に入る i
一つ上の階層に上がる u

他のNetwork Viewホットキー

L 再レイアウト
A 全選択

など、後で別の項にまとめるかも