2010年12月31日金曜日

Mergeノード

Mergeノード
たとえばフルイドパーティクルと地面などのスタティックオブジェクトをコライドさせる場合。
FLIPsolverからの出力とStaticsolverからの出力をMergeしてやる。

Affect Relationship:コライドの方法を決める。
Mutual:相互緩衝
Left Input Affect Right Input: 左入力が右入力へ影響するが、逆は否。


注意:コライド・オブジェクトには厚みが必要。
コライド・オブジェクトに厚みを持たせるには、polyextrudeノードを使用

2010年12月30日木曜日

メモ:Introduction to FLIP Fluids

http://www.sidefx.com/index.php?option=com_content&task=view&id=1834&Itemid=166

メモ: Simulating with Voxels ペリエのボトル、メルティング

 Simulating with Voxels

pack

パーティクル・フルイド・シミュレーションの再生速度を早くするために

どれほど効果的かは不明・・・。

Display Options(Dキー)-->Viewport --> Level Of Detail
このレベルを下げてやるとシェーディングのクオリティーが下がり、Playbackの速度が少し上がる(らしい)

メモ:「Sphere」に「FLIP Fluid from Object」を適用した場合の構成 (Houdini11)

(Objレベルに存在する物)
Sphere_object1: 元のスフィア形状を作る(パーティクルの配置に使われる)

AutoDopNetwork:FLIPソルバーはここにある。パーティクルの振る舞いなどを決める。

Sphere_object1_fluid:パーティクルの出力の見た目

Houdiniの基本アーキテクチャー

http://www.sidefx.com/docs/houdini11.0/basics/architecture
Houdiniの構成についての記述
Mayaも3ds Maxもフラットですが、Houdiniは違います。
Houdiniの内部構造は実際にはファイルシステムです。
フォルダーがあり、それらの各フォルダー内にはファイル(ノード、ノードの状態やネットワークの状態などを記録するための各ノード用のスクリプト、)
またフォルダー内には1000以上の深い階層をもってフォルダーを作成することもできます。
たとえば、キャラクターを作成するとき、すべてをサブネット・ノード内に入れることが出来、あなたのキャラクターを表現するためのデジタルアセットに変えることが出来ます。
そしてキャラクターをNo Name Clashesと共にすきなだけコピー&ペーストすることができます。

Expressionは他のノードを参照し、Unixのパス構造に似たパラメーターを持っています。
例えば /obj/my_object/tx は絶対パス
 ../COG_root/tx はCOG_rootと呼ばれる同じネットワーク内の他のオブジェクトのtx位置パラメータへの相対パスです。

(Subnet: オブジェクト用のコンテナ
subnetを使うことで、階層を構築することで複雑なネットワークを簡単にすることができます。
一つのSubnet内には複数のオブジェクトを持つことができ、あたかも一つのオブジェクトであるかのように扱うことが出来ます。
またSubnetの中にSubnetをネストすることもできます。)



--- 原文 ---
Describes the way Houdini is built.
Maya and 3ds Max are both flat; Houdini is not. Houdini’s internal architecture is an actual file system. There are folders, and in those folders there are files (nodes, scripts for each node to record the node’s state, the network state and more). You can also have folders in folders thousands of layers deep. For example, when building characters, you can put everything into an Subnet node and turn it into a digital asset representing your character. Then you can copy and paste the character as many times as you like with no name clashes.
Expressions that reference other nodes and their parameters take on the familiar unix like path structure. For example, /obj/my_object/tx would be an absolute path and ../COG_root/tx to reference the tx position parameter of another object sitting in the same network called COG_root would be a relative path.


補足:(注:自分で考えただけなので、間違っていたらすみません。)
Mayaのシステム内では、全てのノードが同レベルにあり、それらを接続することによってネットワークを構築しているということがフラットと表現している意味だろう。
たしかGroupノードは階層をもっているがこれもGroupノードとの接続とGUI上での表現によって表向き作り出しているに過ぎない。

Houdiniは内部まで階層化でき、個々のノードの位置が明確になっているということだと思う。
内部情報を整理し、把握しやすいということが言える。

何かを参照するときにはパスを使って簡単に指定できるということにもなる。

裏を返せば、ノード全体を一望できないので、それぞれのノードが納められている場所(フォルダ)を理解しておかなければ、ノードの参照というつながりを生み出すのが難しくなる。



2010年8月5日木曜日

Houdiniの混乱する点

1) 見えないデータの流れがある。
フローなので、すべてアイコンがつながっている順番に処理されていくと思っていたら、エクスプレッションなどで見えないつながりが出て、ループしていたり、パラメータ設定で、他のコンテナ内のノードから情報を得る設定があったりする。



2) ノードの名前から機能が連想しにくい。
ノード名から連想する機能と実際の機能が完全に一致しているわけではない。
たとえば「Add」は名前からすると何かを追加すると推測できるが、実際にはポイントを作る。またはポリゴンを作成したり、ポリゴンからポイントだけを抽出する機能をもっている。

ヘルプの説明からすると、インプットに対してポイントまたはポリゴンを追加するというところからこの名称がつけられ、後の機能はそこから派生しているのだろう。


※勉強中は、これらの点に気をつけたほうがよいと思う。

2011年1月29日追記:
ノードのインプットとエクスプレッションの違い。
どちらも他のノードから情報を持ってくる方法である。
ノードのインプット:受け身。上流から流れ込んでくる。
エクスプレッション:能動的。他の場所にある情報を自らとりに行くイメージ

「Stamp」エクスプレッション関数 (Help)

Stamp」エクスプレッション関数
使い方:
stamp(scope, token, value)

通常は下流にあるCopyノードのスタンピング変数を探して使用する。
これは、浮動小数点値を得る関数なので、string値にはstampsを使用すること。

● scope: 値を獲得する元となるノードへのパス
● token: 値を獲得するための変数名
● value: もしtokenを設定しなければ、デフォルト値が使われる。

スタンピングの操作には以下の物が含まれる:
Cache, Copy, Lsystem surface nodes, Copy channle node.

例:
stamp("../copy1", "sides", 5)
stamp("..", "fuzzy", 0.5)

SOPs: Houdiniの基本 (本:Houdini on the Spot より)

SOPs: Houdiniの基本
サーフェイス・オペレータ(SOPs)を使ったモデリングでは、あなたはモデルを作るのではなく、モデルを作るためのプロセスを構築するのである
それはモデルをプロシージャルなものにし、そして変更可能なモデルを作ると言うことを意味する。
それらは、ディレクターが円の代わりに三角形を求めるために変更されるかもしれないし、動きや変形を組み込むため(例えば、身をよじるヘビや、飛ぶカエルなど)に変更が必要かもしれない。
この方法で作業する時は、いくつかの操作を特定の方法で組み合わせるためにたくさんの小技を知る必要がある
これらの形式は、素早くモデルを構築し変更するために便利な近道である。

2010年8月3日火曜日

ネットワークを再構成して表示

Lキー (ネットワークペイン内で)

例えば、シェルフ・ボタンをクリックしてノードが追加されたときなど、ネットワークペイン内でノードアイコンが重なって見えづらくなることがある。

そういうときに、Lキーを押すと全てののどが再整理されて、見やすくなる。

デュプリケート、ミラー、コンバイン


オブジェクトのデュプリケート
1)オブジェクトを選択
2)Modifyタブ > Duplicate
もしくはネットワーク内でコピー&ペースト


オブジェクトのミラー

1)オブジェクトを選択(複数可)
2)Modifyタブ > Mirror
3)View上部でMirror Planeなどを設定し、Enter
オブジェクトの複製がobjレベルで作成される。


オブジェクトのコンバイン(複数のオブジェクトを一つにまとめる)
1)複数オブジェクトを選択
2)Modifyタブ > Cobine
objレベルで、オブジェクトが一つのノードにまとめられる
3)必要に応じて名称を変更

Sweep SOP

Sweep SOP
プリミティブをバックボーンカーブに沿って断面にスウィープして、リボンやチューブ形状を作成する。


断面のプリミティブは、バックボーンカーブの各ポイントに垂直に配置される。
もし、リファレンス・ポイントが与えられれば、各プリミティブは、対応するリファレンスポイントの方向に面する。
●バックボーン・カーブはオープンでもクローズでも良いが、最低二つの点が必要。

●もし、バックボーンインプットが、一つ以上のプリミティブを持つなら、SweepはそれぞれのクロスセクションをSweepする。

●もしクロス・セクションのインプットが複数のプリミティブを持っているなら、Cycle Typeパラメターを使ってコントロールできる。

●Sweepは、クロスセクションのオリジンをデフォルトで、使用する。
User vertexやConnection vertexパラメターを使うことで、バックボーンにアタッチするクロスセクションのポイントを特定できる。

●ほとんどの場合、XYプレーン上にクロスセクションのプリミティブを作成しなくてはならない。
Sweepは、自動的にそれらの方向をバックボーンにそろえる。

●バックボーンのカーブがポイント・コントロールもしくは、テクスチャー・コーディネートを持っているなら、それらは保持されクロスセクション・プリミティブへ適用される。


Inputs
インプット:
Cross-section :バックボーン・カーブに沿ってスウィープするジオメトリ
Backbone path :Cross-sectionシェイプに沿ってスウィープするカーブ
Reference Points :もしこのインプットが接続されれば、各プリミティブはこのジオメトリの対応するリファレンスポイントへ向く。

Local variables
PT : 現在のバーティックス (Point)
NPT :ポイントの総数 Number of Point
PATH :パスプリミティブの数
PCT :バックボーン・パスに沿う割合(Percent)

Point SOP:

Point SOP
ポイントをマニュアル操作で追加もしくは編集する。

Houdini内では、各ジオメトリ・プリミティブは、ポイントのリスト(0から始まる)を持っている。
各ポイントはXYZの位置、色、アルファ、テクスチャUV,ウエイトそしてノーマル方向などのアトリビュートを持っている。

(ポリゴン、NURBS、Primitiveはポイントリスト内のそれらのポジションによって参照されるポイントであるバーテックスのリストを一つ持っている。これらのポイントは、複数のポリゴン/NURBS/プリミティブによって共有される)

Point SOPは、ポイント自信の位置を含むのアトリビュートの編集を可能にする。
例えば、オブジェクト・バウンディングボックスの中心からの距離を変更できる。
($BBX, $BBY,$BBZのローカル変数を使う)。
ポイントの色($CR,$CG,$CB)、ポイントのノーマル($NX,$NY,$NZ)を変更する。

これはとても一般的でパワフルなオペレータです。
ほとんど無限の目的に使用できます。
(ポイントの位置を変えることで)サーフェイスのデフォーム、(ポイントカラーを変えることで)おもしろいカラーエフェクト、(ポイント・ノーマルを変えることで)パーティクルのエミットの初期軌道(Initial Trajectories)を変えることができます。

このオペレータ内で使用するエクスプレッションは、各ポイントを評価することを考慮するのは重要です。
ローカル変数$PTは、現在処理されているポイントのポイント番号(ID)を持っています。

Tips:
●ポイントを編集するためにエクスプレッションを書くなら、「point」と「pointavg」関数が便利です。
●ビュー内で、ポイントのID(point numbers)を見るには、ビューの右サイドにあるディスプレイツールバーで「point numbers」をオンにします。
●ノーマルを裏返すには、Add normalsをオンにし、-$NX, -$NY, -$NZと入力します。
●このオペレータはポイントのアトリビュートを編集するので、Primitive SOPはプリミティブ全体のアトリビュートを編集します。
●PointSOPのローカル変数は、ポイントに対応しています。
detail、primitive、vetexなどの変数を使うために、プレフィックス“det”, “prim”, “vtx” を使うことができます。
例: $primTX, $primTY, $primTZとすれば、最初のプリミティブに属するポイントの「barycenter」です。


Parameters
Match By Attribute:
二つのインプットがある時の標準的な振る舞いは、ポイントIDに従いマッチさせます。
しかしながら、もしそれらのインプットがパーティクルシステムなら、パーティクルは、パーティクルが生まれたか削除されたかにかかわらず、同じパーティクルを求めるためおそらく正しくマッチしないでしょう。
「Match By Attribute」は、$TX2に2つ目のインプットのポイントを参照させます。それは、現在評価されているアトリビュートにマッチするアトリビュートです。
もし、2つ目のインプットで一つ以上のパーティクルがマッチする場合は、より大きなポイントIDのポイントが使われます。

Attribute To Match:
マッチングのためにアトリビュートを使う。
このアトリビュートはPoint SOPの両方のインプットに表示されなくてはならない。
平均はそれらを整数として扱うことで、決定されます。

Note:
できるだけデフォルト値を使うようにしましょう。
New と Addは新しい値をアサインさせてくれ、Noは全ての値を取り除きます。

Standardタブ
Position :XYZポジション
Weight :ポイントのスプライン・ウエイト
Color :ディフューズ・カラー(RGB)
Alpha :トランスペアレンシ値
Normal :ノーマル・ベクター
Texture :テクスチャー座標

Particleタブ
Mass :ポイントのMass
Drag :ドラッグの計数(率:Coefficient)
Tension :接続されたエッジのスプリング張力
Spring K :ポイント毎のスプリング定数
Velocity :速度ベクトル
Up Vector :アップ・ベクター・アトリビュート
Scale :Particleサイズを乗算する。
Instance: パーティクルにジオメトリをインスタンスする。

Forceタブ
Radius :エフェクトの半径
Force Scale :フォースの合計を乗算する。
Radial Force :アトラクターに向かう力
Normal Force:ノーマル方向に沿った力
Edge Froce :エッジ方向に沿った力
Dir.Force :任意の方向をもった力

Customタブ:
Number of Attribute: +ボタンをクリックしてアトリビュートを追加する。
-ボタンをクリックしてアトリビュートを取り除く。
Clearボタンをクリックして全てのアトリビュートを取り除く

Apply Attribute #: このアトリビュートが有効化されているかどうか。
アトリビュートの変更をコントロールする。
しかしながら、アトリビュートが存在しないなら、作られることはない。

Name#:アトリビュート名 例:Cd

Scalar Value :スカラー値
String Value :文字列値



Local variables:
PT :ポイント数(ID)
NPT :ポイントの総数
CEX, CEY, CEZ :入力ジオメトリの重心(Centroid)
TX, TY, TZ :ポイントの位置
WEIGHT :スプライン・ポイントのウエイト
BBX, BBY, BBZ :バウンディングボックス内でのポイントの位置。範囲は(0-1)
NX, NY, NZ :ノーマルの方向
MAPU, MAPV, MAPW :ポイントのテクスチャー座標
CR, CG, CB :ポイントのディフューズ・カラー
CA :ポイントのアルファ値
MASS, DRAG :ポイントのマスとドラッグ
TENSION, SPRINGK :エッジのスプリング張力とポイントの弾力性
AGE :パーティクルの寿命時間(秒)
LIFE :パーティクルの寿命÷予測寿命(0~1)
DIST :Rayオペレーションからの、交差するまでの距離
VX, VY, VZ :ポイントの速度値
UPX, UPY, UPZ :ポイントのアップ・ベクター値
ID : パーティクルID
PSCALE :パーティクルのスケール


PTn, NPTn :2つ目のソースのためには、nをつける。

2010年5月30日日曜日

パーティクルの寿命(Life)に応じた変化

エクスプレッション「$LIFE」を使用する。
例:「color」POPの「Ramp」に使用すると
誕生時:左端の色
消 滅時:右端の色
になる。

2010年5月27日木曜日

おわび

一部のブログのエントリ内容が、気をつけてはいたのですが、現在学習している有料チュートリアルの内容に非常に似通った部分があり、著作権に抵触する恐れがあるため、削除いたしました。

元々このブログはメモのためで、現在、生活をかけて学習中です。
生活がかかっているため、効率を上げるために短期で学習するために現在、有料、無料を問わずチュートリアルを利用しています。

その内容を自分なりにかみ砕いて、エントリにしてきたつもりですが、どうしても似たような内容になってしまってう部分があります。

それらに気を遣って、よりよくまとめることもできるのかもしれませんが、そのために時間をさいていては本末転倒で、自分の学習を効率よく進めることができ なくなります。


そこで、いままでごらんにただいた方には誠に申し訳ないのですが、
これからは、有料コンテンツの内容は個人用「魔法使いの弟子」で管理し、
一般公開用「魔法使いの弟子」では、無料で公開 されているものや自分のオリジナルに限り、公開することとします。

一般公開用と言っても、普通には公開していませんので、URLをご存じない方はアクセスできないので、それほどたくさんのアクセスはないのですが、これまでご覧いただいた方のためにも、できるだけ一般公開用を継続したいと思います。



コリジョンしたパーティクルを分裂させる(コリジョン・イベント) その2

コリジョンイベントで発生したパーティクルにもグラビティーとコリジョンが作用するようにする。

問題:
「Sourc1」と「Split1」は、別のパーティクルのネットワークである。
そのため、グラビティーはどちらか一方にしか作用できない。
(「Split1」は一部の情報を「Source1」からとってきているので、点線でつながって一つのネットワークになっている。)

このため、まず両方のネットワークを集めて、一つにしてそれに対してグラビティーを作用させるようにする必要がある。

パラ-メータに関する、ショートカットと色の意味


<ショートカット・キー>
Alt + LMB: キーを打つ
Ctrl + LMB: キーを削除
Alt + E: エクスプレッション・エディターの表示
Ctrl + Shift + LMB: チャンネル情報(エクスプレッション、キーフレームなど)を削除
パラ-メータ名をクリック: エクスプレッション表示と値表示の切り替え。



 <色について>
参照1:Editing Parameters
参照2:Animation basics

現時点では、まだ正確に把握できていないが大体、以下のような感じ。

薄い緑: エクスプレッションによりコントロールかつ、現在のフレームにキーがある。
(ヘルプには上記のように書かれているが、キーフレームだけでも薄い緑になる)





シアン(薄い青): エクスプレッションによってコントロールされているが、現在のフレームにはキーは存在しない。(または、ドープシートから現在のフレームのチャンネルバリューが無効にされている) (ヘルプには上記のように書かれているが、キーフレームだけでも薄い緑になる)



黄色: キーフレームが一時無効になっている。(このフレームにおける現在の値は、キーが打たれた値とは異なっている。しかし、キーフレームを打っていない。)


Orange: パラ-メータは現在チャンネル・オペレータ(CHOP)によってコントロールされている。


灰色: ロックされている。



紫: Pythonスクリプトによるエクスプレッション

2010年5月26日水曜日

コリジョンしたパーティクルを分裂させる(コリジョン・イベント) その1

1)先ほどのシーンファイル(パーティクルのコリジョン)を開く。


2)「Collison1」のパラメータ・エディタ「Behavior」タブで、以下のように入力。

Collision Event: Collision1
Collision Group: SplitGroup1


Collision Event: 各パーティクルが対象ジオメトリと衝突した時このイベントを発生させる。
Collision Group: 衝突したパーティクルを入れるグループの名称。
今まさに衝突したパーティクルをソース・パーティクルから分離して、識別するために使用するグループ。
一連のオペレーター(例えば「Split」POP)は、トリガーとなるパーティクルを選択するために、このグループを使うことができる。
Preserve Group: Collision Groupのパラメータに登録されたグループがあれば、コリジョンで発生するパーティクルをそのグループと入れ替えないで、追加する。 


3)「Split」パーティクルノードをパーティクルネットワーク(Popnet1の下層)の一番最後(Collisionもしくは、Gravity(Force)Popになっている)に追加。

問題: 現時点では、すべてのパーティクルが分裂し、コリジョンイベントが成立していない。
これは「split」のActivationが1で、CollisionEventと関係なくSplitするからである。
注意: 「Split」は新しいパーティクルのソース(エミッター)であり、新しいパーティクルのネットワークとなる。


4)「Split」POPのパラメータ・エディタ 「Activation」に以下のエクスプレッションを追加。
popevent("collision1")

「popevent」関数は、名称付きのイベントを検知するために使われる。
http://www.sidefx.com/docs/houdini9.5/expressions/popevent
http://www.sidefx.com/docs/houdini9.5/particles/events
あるパーティクル・イベントが発生していれば1を返す。

popevent(event_name)
(event_nameは、文字列なのでエクスプレッション内では””で囲む必要がある)
この関数は、パーティクルノード内でのみ利用可能。
これはPOPノードのActivationパラメータに対して使うとイベントが発生したときのみそのノードが実行されるようにできるのでとても便利である。
イベントは名前の文字列によって区別される。
(文字列なのでエクスプレッション内では””で囲む必要がある)
問題: コリジョン(Collision1)の発生時にパーティクルの分裂が始まるようになったが、衝突してないパーティクルも含めて一度に分裂し始める。
これは、Collison Groupが指定されていないからである。


5)「Split」POPのパラメータ・エディタで、「Source Group」に「SplitGroup1」を選択、もしくは入力する。

結果: 衝突したパーティクルのみが分裂するようになる。
問題: 新たに発生したパーティクルは「Gravity」POPの影響を受けない。また分裂前のパーティクルがそのまま存在している。

6)「Split」POPのパラメータ・エディタで、「Kill original particle」をオンにする。

結果: 衝突前のパーティクルは分裂後に消える。
問題: 分裂後のパーティクルは「Gravity」POPの影響を受けていない。(これは次回)

「Split」パーティクル・ノード (オンラインヘルプ訳)

「Split」POP

メモ:
基本的にはエミッターである。
「Source」POPがジオメトリからのエミッターであるのに対して、「Split」はパーティクル からのエミッターである。
 


また「Split1」POPは図ではGravityPOPと点線でつながっている。
これは「Split1」が関連性があるものの、独立したネットワークであることを示している。
よって「Source1」 POPから始まるネットワークは、「Split1」に影響するのはパーティクル、コリジョンイベントからもたらされるデータだけであり、「Split1」移行のネットワークも「Source1」のネットワークには影響しない。


----------
(以下ヘルプの翻訳)
毎フレームごとに、インプット(またはSource Groupパラメータに設定されているグループにある)パーティクルの各粒子にランダムな数の新しいパーティクルを「Birth Probability」パラメータ(Birthタブ内)の「Minimum」、「Maximum」間の値で発生させる。

Birthタブの「Kill Original Particle」をオンにすれば、オリジナルのパーティクルを消滅させて真にパーティクルを分裂させることができる。

Attributeタブのパラメータは、新しいパーティクルがどのように発生元パーティクルからアトリビュートを引き継ぐかをコントロールするためにある。
また新しく分裂してできたパーティクルの速度(velocity)を設定することもできる。
もし、「Initial velocity」を「Use inherited velocity」のままにしておけば、新しいパーティクルはオリジナルと全く同じ方向とスピードを維持したまま移動する。
しかし、それらをグループ化し、そのグループに異なるレンダリング設定をしなければ、ビュー上では区別ができない。

一般的には、「Initial Velocity」を「Add to inherited velocity」に設定する(パーティクルの新しい速度をオリジナルのパーティクルに関連付ける)か、「Set initial velocity」に設定する(オリジナルのパーティクルを参照しないで新しいVelocityを設定する)。
Velocity」パラメータは、ランダムな「Variance(変動値)」によって、各パーティクル毎に新しいパーティクルの速度(velocity)を設定できる。(もしランダムな速度を望まないなら「Variance」を0,0,0に設定する。)

このノードは、時間の経過に従ってパーティクルの数を増加させるのに便利です。
複数のグループにあるグループ


異なるレンダリングのセカンダリ・パーティクル(それらを異なるグループ内に分裂させる)を発生する「メイン」・パーティクルのグループを持つために複数のグループと結合させると便利です。
※訳注※ メインパーティクルのグループと、セカンダリパーティクルのグループをわけておくということか??

例えば爆発のエフェクトで、中心分が白く、そこからオレンジや赤のセカンダリ部分が発生する時など。


その他のお馴染みの例としては、花火の分裂: 「Activation」パラメータを特定のフレームのみ分裂を有効にするために使う。
ロケットの位置から爆発の位置まで分裂し、オリジナルのロケットの位置は消滅する。

注意:オリジナル・パーティクルは、毎フレームで、新しいパーティクルに分裂するので、birth probalityの最大値が大きいか、Life Expectancyが長く設定されていると、パーティクルの総数が簡単にふくれあがってしまいます。



<Birthタブ>
Birth Probability: 各ソースポイントからどのぐらいの数のパーティクルがエミットされるのかを決める。
最初は各フレームで発生するであろう、パーティクルの数の最小値。
次の数字はその最大値。

例: 0, 1の値は各フレームで、一つのパーティクルが分裂する確率は50%(最小値が新しいパーティクル数ゼロ、最大値が新しいパーティクル数1)。
5,10の値は、5~10(それぞれの数を含む)のランダムな数のパーティクルが各フレームで発生する。


Birth Group: 新しいポイント(パーティクル)が格納されるグループの名前。


Preserve Group:
 もし「Birth Group」がすでに存在しているなら、新しいパーティクルをその中身と入れ替えずに、追加する。


Lif Expectancy: パーティクルがどのぐらい長く存在するか(秒数)

Life Variance(変動値): パーティクルは「Life Expectancy」の秒数だけ生存する。それに対して追加またはマイナスされる秒数。 全く変動さえない場合はゼロを設定する。

Kill Original Particle: 新しいパーティクルに分裂した後、ソースとなったパーティクルを削除する。

パーティクル・コリジョンの作成

0)パーティクルをエミットさせる。

1)床のコリジョン・オブジェクトに使用する「Grid」を作成。
結果: 「grid_object1」オブジェクトが作成される。


2)Gravityを適用して、パーティクルが床(Grid)に向かって移動するようにする。
Drive Prticleタブから「Gravity」をクリックして、パーティクルを二回選択。
必要に応じてScaleを調整。(自分の例では、0.05~0.5程度を使用)
Tips:Houdiniはデフォルトで、1ユニットが1mであることを考慮してScaleを決めると良い。
注:このステップはコリジョンを見やすくするためのもので、コリジョンの対象やシーンの内容によっては、必ずしも必要ではない。


3)アニメーションを進めてパーティクルがビューポートに見える状態にする。


4)パーティクルをビューポートで選択して、Drive Prticleタブから「Collison」をクリック

注: Networkエディターはシーンレベルに移動しておく。


5)パーティクルを再度選択しEnterキー、つぎにコリジョン対象のオブジェクト(Grid)を選択しEnterキーを押す。
結果: 「collision1」POPが、「gravity1」POPのアウトプットに接続され、パーティクルがGridで跳ね返るようになる。
注: すべてビューポート内での操作
ヘルプ: <Collison>POP
このオペレータは参照されるSOPのジオメトリとパーティクルとの間のコリジョンを検出、実行する。
Behaviorの設定について
Die on collision: コリジョン時に消滅
Bounce on collision: コリジョン時にサーフェイスで跳ね返る
Stop on collision: コリジョン時に停止する。
Stick on collision: コリジョン時にサーフェイス上にくっついて停止する。
Slide on collision: コリジョン時にサーフェイス上をスライドしていく。


コリジョン後の振る舞いを設定するには、「Final Behavior」を使う。
例えば、Behaviorを「Bounce on Collision」に設定して、バウンス後に坂をスライドしてほしい場合には「Slide on Collision」を選択しなければパーティクルはバウンス後にその場にとどまる。
Bounce on Collision: バウンスし続けた後に停止(目に見えないバウンスを続けているのかも?)
Die on Collision: バウンス後に消滅
Stop on Collision: バウンス後に停止
Stick on Collision: バウンス後にサーフェイスに貼り付く
Slide on Collision: バウンス後にサーフェイス上を滑る。

Minimum Impulse: Final Behaviorに置き換わる程度の設定。



6)バウンスが強すぎるようなら「Collision1」SOPのGain Tangent、Gain Normalを下げる。
結果: バウンスが適度になる。
Tips: 設定の数値は、ゼロ=エネルギーを得ない。 数値=数値の大きさによりエネルギーを得る量が増減する。
Gain Tangent: コリジョン時のタンジェント方向へのエネルギー
Gain Normal: コリジョン時のノーマル方向へのエネルギー


7)オブジェクトを透過するパーティクルがある場合は、Collision Toleranceを少しだけ(0.01)つけてやる。
結果: コリジョンがより正確になり透過するパーティクルが現象もしくは無くなる。
Tips: Collision Toleranceはジオメトリからパーティクルがコリジョンする場所までの距離を決める。デフォルトはゼロで距離がないため、いくつかのパーティクルは計算誤差により透過してしまう。場合によっては0.01でも小さすぎることもある。

ポリゴンの一部からパーティクルをエミットする。(一部削除)

1)Sphereを作成
結果: sphere_object1オブジェクトが作成される。

2)Sphereに対して「Source From Geometry」を適用。
結果: particle_emitter1オブジェクトが作成される。
Tips: 以下のステップで「Delete」SOPを使うが、パーティクルのインプットジオメトリだけに適用しないと、すべてのジオメトリの見た目が変化(削除)されてしまう。

3)「particle_emitter1」の下層にある「object_merge1」SOPを可視化(右端の青トグルボタン)し、エミットさせたいフェイスのみを選択。

Tips: SelectionモードのGeometory select modeをPrimitiveにすること


<著作権侵害の恐れがあるため、一部削除&改変>

6)「delete」サーフェイスノードを作成
注:「blast1」と同じInput(object_merge1)とOutput(popnet1)がつながっていること。
Tips:「Dlete」SOPは「blast」よりもより多くの操作ができる。

7)「delete1」SOPの「Group」にエミットさせたい部分のポリゴンの番号をペースト。


8)「delete1」のParameterエディタで、「Operation」を「Delete Non-selected」に変更。
結果:選択したところだけが残る。

9)ポリゴンのノーマル方向へのみエミットさせたい場合は、「delete1」SOPのアウトプットを右クリックして「point」サーフェイスノードを作成する。

10)「point1」SOPのparameterエディタでの「standard」タブで、「Keep Normal」を「Add Normal」に切り替え。



----------
Mayaで同じ操作をするとしたら
ポリゴン・フェイスを選択してExtraxctし、それに対してEmit from surfaceを適用。

2010年5月24日月曜日

ユニットサイズ

3D CG soft system unit. MAX、MAYA、SI、Houdini

http://succhin.blogspot.com/2010/04/cg-soft-unit.html
(ブログ:Succhin。より)

Houdiniは 1ユニット=1m

サーフェイスからパーティクルをエミットする。

1)Sphereを作成。

オブジェクトレベルで「sphere_object1」ができる。
一つ下の階層に「sphere1」サーフェイスノードがある。

「sphere_object1」コンテナ・オブジェクト:トランスフォーム、ピボット情報など。
sphere」SOP:プリミティブの種類、半径、中心座標、向き(axis)を決める。


----------
2)「sphere_object1」もしくは「sphere」SOPが選択された状態で、「Source from Object」を適用

「particle_emitter1」ができる。
一つ下の階層に「object_merge1」サーフェイスノード、「popnet1」サーフェイスノードがある。
さらに「popnet1」の下層に「source1」パーティクルノードがある。

「particle_emitter1」コンテナ・オブジェクト:トランスフォーム、ピボット情報など。

object_merge1」SOP:ほかの複数ジオメトリオブジェクトからジオメトリを合併(マージ)する。
<Object1>アトリビュート:併合するジオメトリへのパス。選択もしくはタイプして入力。
(例:/obj/sphere_object1/sphere1)
<Gropu1>アトリビュート:併合するオブジェクトの中にあるプリミティブのグループ。
オブジェクトの一部だけを併合したいときに使う。
空欄でオブジェクト全体

ponet1」SOP:パーティクルノードのネットワーク
ジオメトリオブジェクト内で、パーティクルネットワークを利用できる良ようにする。
パーティクルネットワークの中で「context Geometry」として、このノードのインプットに接続された、どんなジオメトリでも参照可能。
DOP(ダイナミック・オペレータ)インポート・タブでの設定は、SOPのアウトプットを上書きします。

「source1」POP:ジオメトリからパーティクルを発生させる。そのためのアトリビュートはここにある。
例1)パーティクルを頂点でなく、サーフェイスからエミットする。:Emission Type
例2)エミット時の速度。:Variance, Velocity

Tips:Varianceを0,0,0に設定しておけば、エミットされたパーティクルが誕生時の場所にとどまるので、エミットされている位置を確認するのに便利。


----------
3)「particle_emitter1」→「source1」→「source」タブ
Emission TypeをSurface (randamu)に設定。

これでサーフェイスからパーティクルが発生する。

注意:発生方向は裏表両方を含み、このままではスフィアとパーティクルのコリジョンは存在しない。 
Sphereの外側方向にのみパーティクルが移動するようにするには、以下の手順を実行する。


----------
 4)「particle_emitter1」の下層に移動。
「object_merge1」のアウトプットを右クリックし「point」とタイプしてPointサーフェイスノードを作成する。

「point1」SOPが「object_merge1」と「popnet1」の間に作成される。



Point」SOP:ポイントのアトリビュートをマニュアル操作で追加もしくは編集する。

各ジオメトリ・プリミティブは0から始まるポイントのリストを持っている。
各ポイントはXYZ位置、色、アルファ、テクスチャーUV、ウエイト、ノーマル方向などのアトリビュートを持っている。
(ポリゴン、NURBSそしてプリミティブもまた頂点のリストを持っている。
ポイントのリストのそれらの位置によって参照されるポイントである。
これらのポイントは複数のポリゴンやNURBS、プリミティブによって共有される)

PointSOPは、そのポイントの位置を含んだアトリビュートの編集を可能にする。
例えば、あるポイントに対するオブジェクトのバウンディング・ボックスの中心からの距離を変更できる。(ローカル変数の$BBX, $BBY, $BBZを使う)。ポイントの色($CR, $CG, $CB)の変更、ポイントのノーマルの変更 ($NX, $NY, $NZ)も可能だ。

これは、とても一般的かつパワフルなオペレータである。
サーフェイスの(ポイントの位置を変更することにより)デフォームや、
(ポイントの色を変えることによる)おもしろい色の効果を作ったり、
(ポイントのノーマルを変えることで)放出されるパーティクルの軌道を変更することを含み、ほとんど無限の目的に対してこれを使うことができる。

このオペレーター内で使われるエクスプレッションは、各ポイント毎に評価されることに注意しておかなくてはなりません。
ローカルの変数「$PT」は現在処理されているポイントのポイントナンバーを持っています。

Tips
●ポイントの編集のためにエクスプレッションを書くときには、pointとpointavg関数が便利です。
●ビューワー内のポイントのポイントナンバーをみるには、ディスプレイ・オプション・ウインドウ(Viewport Menu > Display > Display Options, またはDキーを押す)か、ビューワーの右側にあるディスプレイ・ツールバーにある、「Point numbers」アイコンをオンにします。
● ノーマルを裏返すにはAdd normalsにして-$NX -$NY -$NZと入力します。
●このオペレータは、ポイントのアトリビュートを編集し、primitiveSOPはプリミティブ全体のアトリビュートを編集します。
●pointSOP内のローカル変数は、ポイントに関係しています。
detail, primitive, vertexといった変数を使うために、「det」、「prim」、「vtx」といったprefixを使うことができます。
例えば $primTX, $primTY, $primTZは、そのポイントが属する最初のプリミティブの重心です。


----------
5)「popnet1」→「Standard」タブ
「Keep Normal」を「Add Normal」へ変更。


Point」SOPの基本事項
 <Keep> :デフォルト値を使用。
 <Add>  :新しい値を入力可能にする。
 <No>   :すべての値を削除。


「Add Normal」にすると、自動的に$NX, $NY, $NZというローカル変数が入力される。
これは正方向へのノーマル方向を示している。
負方向へしたいのであれば、-$NX, -$NY, -$NZとする。

ただし、ノーマル方向を変えても、パーティクルのエミッション方向は変わらない。
エミッション方向を変えるには「source1」の「inherit Velocity」を-1に設定する必要がある。
これがすべての場合に言えるのかどうかはわからないが、Mayaとは異なる点である。

  

2010年1月30日土曜日

Magic of Houdini : (Copy, Primitive, Duplicate SOPs)

Copy SOP, Primitive SOP, Duplicate SOP and Copy/Paste
The Magic of Houdini: SOPs That Confound the Melon -- Part 1


もうひとつ、最初からあなたに混乱を与える騒々しいSOP達です。
これらはコピーに関係することをします。
では違いを見ていくことにします。

1.新しいセッションを始め、デフォルトのジオメトリ・オブジェクトの中身を削除します。
SphereSOPを作成し、Primitive TypeをPolygonに変えます。
Radiusを全アクシスにおいて0.2にします。

2.Grid SOPをどれにも接続しないで作成し、XtoYのSizeを5にします。

3.接続されていないCopy SOPを作成し、Sphereを左側のインプットへ、Gridを右側のインプットへ接続します。この操作は、左のインプットの形状を右側のすべてのポイントへコピーします。

4.接続されていないPrimitive SOPを作成し、Shereを左のインプットへ、Gridを右のインプットへ接続します。Do Transformationをトグルオンします。
ジオメトリがゆがんでいるのがわかります。


5.Facet SOPを左のインプットとSphereノードの間に挿入します。
Unique Pointsをトグル・オンします。これで何が行われているかを簡単に見ることができるようになりました。
この操作は、左のインプットの一つのプリミティブを右のインプットのポイントへすべての左のインプットが使われるまでコピーします。
最後の2列をのぞいてグリッド状の全ての点にsphereがコピーされていることがわかります。
100のポイントがグリッドにあり、80のプリミティブがスフィアにあります。

6.Duplicate SOPをSphereノードから外します。
Number of Copiesを3に変え、TranslateXを1にします。
この操作は、ただインプットの複数コピーを作成するだけです。

7.最後に、sphereノードを選択し、CTRL+Cを押し、そしてCTRL+Vと押します。
これは昔ながらのコピー&ペーストの作業です。
これはそれだけです。他の機能は一切ありません。

※Magic of Houdiniの内容は、Houdini9では書かれているような動作をしない。
 

2010年1月28日木曜日

Magic of Houdini : (Blast,Delete,Dissolve SOP)

The Magic of Houdini: SOPs That Confound the Melon -- Part 1

Blast SOP, Delete SOP と Dissolve SOP:

これらの違いを理解するための簡単な方法があります。

1.デフォルトのgeometryオブジェクトを作り、その中に入ります。
三つのSphereSOPsを作り、すべてPrimitive TypeをPolygonへ変更します。
それぞれのFrequencyを1に設定します。

2.Displayフラグを最初の一つに対してOnにします。
Primitive selection maskを使っていることを確認します(Hotkeyは「4」)
Display primitive numbersをOnにします。
ビューポートで、Tab > Blast operationを選択し、blast primitive 15 と16を選択します。
これは、二つのプリミティブが削除され、穴が残ります。

3.ノード「Sphere2」のディスプレイ・フラグをオンにします。
Deleteオペレーションを使い、そしてPrimitive15と16を削除します。
(sphere2のアウトプットを右クリックして、Deleteを選択
Deleteのパラメータ・エディタで、Groupに「16 15」と入力する。)

ここでも、二つのプリミティブが削除され、穴が残ります。
これらは同じ事をするのでしょうか?
各ノードのパラメータを見てみましょう。
deleteノードは、blastノードが持っていない様々なオプションを持っています。
基本的に、Blast SOPについては忘れて、Delete SOPだけを使えばよいでしょう。
時に、特別な機能を使うことも出来ますし、使わないこともできます。

4.sphere3のディスプレイフラグをオンにします。
Dissolveオペレーションを選択し、Primitive15と16をdissolveし(消滅させ)ます。
今回は、二つのプリミティブに含まれるすべてのエッジが削除されました。
しかし、プリミティブは穴を修復するために調整されました。
これがこのオペレーションと前の二つとの主な違いです。
これは、不必要なエッジを削除するためにもっともよく使われます。
ライン上のポイント(inline Poinst)を取り除くという便利なオプションもあることに注意して下さい。
この方法で使って、それがどのように機能するか見てみましょう。

5.Grid SOPを作成し、Rowsを3へColumnsを7へ変更します。
OrientationをXYへ変更し、垂直に立てます。
Dissolveノードを作り、Edges selection mask(Hotkeyは「3」)
図3にあるように真ん中の四つのエッジを選択します。

6.Houdiniはエッジを消し、そのエッジを含んでいたプリミティブは残ります。
ポイントの表示をオンにします。
Houdiniは垂直なエッジのポイントを保持しています。
Remove Inline PointsをオンにすればHoudiniが処理してくれます。

2010年1月27日水曜日

A Tool for L-Systems

L-Systemのみに絞ったサイト
http://www.selcukergen.net/ncca_lsystems_research/houdini.html

Houdiniを使用している。

L-Sysutemに関する詳しい説明や、ムービーによる作例がある。
作例に使われたL-Systemの公式が公開されている。

 

Houdiniチュートリアル by Jan walter

PDFファイルのチュートリアル
http://www.janwalter.com/Houdini/filmakademie.pdf

Quickstart: ロケットのモデリング
氷を砕く
バースコントロール
VEX builder

 

チュートリアル: エイの動き

Using Magnets and the Point SOP in Houdini


  

Magic of Houdini : (Object Merge SOP)

The Magic of Houdini: SOPs That Confound the Melon -- Part 1

Object Merge SOP:


Object Merge SOPは一つのオブジェクトのSOPの中身を他のオブジェクトに持ってくるのに便利なツールです。
Transform Objectが何をしているのかを本気で考え始めるまでは、とても簡単なように見えます。
自分にとっては、これは少し理解しにくい部分ですが、短いエクササイズを通して、それについて少し議論してみましょう。確実な足取りを取り戻すことを請け負います。

1.Houdiniで新しいセッションを始め、3つの新しい「Geometry」オブジェクトを創ります。
それぞれsphere、box、ocneと名付けます。

2.sphereオブジェクトの中に入り、SphereSOPを創ります。
boxオブジェクトの中に入り、boxSOPを創ります。
coneオブジェクトの中に入り、TubeSOPを創ります。
チューブをコーンに変えるために、rad1チャンネルを0にします。
各オブジェクト内にfileノードがある場合はそれらを削除します。

3.オブジェクト・レベルに戻ります。
ワールドの中心点へsphereを残し、
boxオブジェクトのポジションYを5ユニット移動します。
coneオブジェクトのポジションXを3ユニット移動します。
パースペクティブ・ビューでホームポジションへ移動し、少しだけドリーアウトします。
これで図1のようになっているはずです。

4.spehreオブジェクトの中に入り、接続されていないObject MergeSOPを創ります。
MergeSOPを創りsphereノードを接続します。
いつものように、ディスプレイフラグをアップデートします。

5.Object MergeノードのObject1パラメータで、coneオブジェクト内のtube1ノードへナビゲートし、選択します。
(「/obj/cone/tube1」と表示される)
「See One/See All」ボタンをトグルします。これで他の二つのオブジェクトも見えるようになります。
現時点では、マージされたコーンは、ワールドの中心点でsphereの上にあります。
なぜコーンオブジェクトのトラスフォームを継承しないで、スフィアの上にあるのでしょうか?
なぜならTransform Objectフィールドが空であり、SOPの情報のみがインポートされているからです。
なので、X軸+3ユニットは、継承されていません。

6.では少し理解しずらい事を始めます。
Transform Objectフィールドで、sphereオブジェクトへナビゲートし選択します。
(「/obj/sphere」と表示される)
コーンは、もう一つのコーンの上に移動しました。
ワイヤフレーム・シェーディングにして、Display Primitive Numbers表示をオンにします。
数字は二つのコーンが空間を閉めていることを明確にします。
通常、これがあなたが望んだことです。
/obj/sphereパスを削除し、「.」に変えても同じ結果が得られるでしょう。
ピリオド「.」は現在のオブジェクト(スフィア)のトランスフォームを引き継ぐことを意味します。

しかし、なぜスフィア・オブジェクトのトランスフォームを引き継ぐように設定したにもかかわらず、コーン・オブジェクトのトランスフォームからX方向へ3ユニットを得ているのでしょうか?
これはObject Mergeのワールド・オリジンがsphereオブジェクトと同じであることを指定しています。
それでコーン・オブジェクトのトランスフォームがこの新しいワールドの中心点に関連づけて評価されます。
コーン・オブジェクトは指定したワールド座標から、ポジティブX方向へ3移動します。
なのでインポートされたコーンはコーンオブジェクトに重なって位置することになります。


7.Transform Objectフィールドを/obj/coneに変更するとコーンはスフィアの上に戻ります。
今回は理由が異なってきます、とは言っても。
以前は、オブジェクトのトランスフォームは考慮されないことが原因でした。
今回は、Object Mergeの原点は、X軸+3の位置です。
それから、新しいワールドの原点に関連づけてコーン・オブジェクトの位置が評価されます。
それはスフィアと重なっており、トランスフォームはなにも適用されません。
結果としてコーンがスフィアの上に重なることになります。


--------------訳 注(解釈)--------------------------
Object Mergeの原点がX軸+3に決められる。
マージされるオブジェクトはそれとは関係なく座標系でX軸+3の位置へ作成される。
しかしオブジェクトはObject Mergeというグループ配下に作られているような感じ。
ObjectMergeの原点を、本来の原点の位置へ移動する。
Object Mergeの中にあるコーンはその移動へつられれて原点へ移動する
--------------訳注終わり--------------------------


8.もっと気がおかしくなりそうなのは、Transform Objectフィールドを/obj/boxへと変えます。脳の固まりを吹き飛ばすようなことがおきます!

あるオブジェクトから別のオブジェクトの中へさらに他のオブジェクトからのobject transformsを使ってObject Mergeしています。
もはや、これは馬鹿げています。でもまだこれはちゃんと理解することができます。
まずObject Mergeのワールドの原点は、Y方向へ+5に設定されています。
そしてコーンオブジェクトはその新しいワールドの原点に関連して評価されます。
コーンは、5ユニット下そして3ユニット右にあります。
よって、図2に見られるようにマージされたコーンは、コーンオブジェクトの下にあります。

いったんこの詳細がわかったら、簡単に理解できるようになります。
もしそうでなければ、このエクササイズをもう一度繰り返すことは理解する助けになるでしょう。


--------------訳 注(解釈)--------------------------
Object Mergeの中心点がY軸+5(Boxのトランスフォーム)に設定される。
マージされるオブジェクト(コーン)は、それとは関係ない座標系でX軸+3の位置へ作成される。
しかしオブジェクトはObject Mergeというグループ配下に作られているような感じ。
ObjectMergeの原点を、本来の原点の位置へ移動する。
Object Mergeの中にあるコーンは、Y軸状を-5移動してしまう。

--------------訳注終わり--------------------------


これはわかりにくかった。
  
  

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を押して、ラダー・ガジェットを使ってこの値を変更することができます。
エクスプレションの中でコンスタントに調整するために便利です。
  

2010年1月23日土曜日

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

Working with Particle」(sideeffectsのPDFチュートリアル)
最初から3ページのエミッター・オブジェクトを追加するところまで



------以下、日本語訳----------------------------------

爆発から竜巻まで、Houdiniはハイエンドなビジュアルエフェクツを作り出すのに最適な環境を提供します。
パーティクルはしばしばエフェクトショットでカギとなる要素です。
それは、それらがHoudiniでどのように機能するのかを理解することが大切なのかという理由でもあります。

このレッスンでは、パーティクルのツール群をどのように使い、Houdiniの他の部分とどう統合していくかについて学びます。
パーティクル・アニメーションの基礎を探求するために、ロケットの煙をセットアップ、アニメートしレンダーします。

プロシージャル・ワークフロー
Houdiniはプロシージャル・アニメーション・システムで、ノードまたはオペレータを設定など、あなたがHoudini内でとる全てのアクションを含みます。
これらのノード群は、各ノード間のデータの流れを定義するネットワークに組織化されます。
ノードのパラメータ群を編集することで、エフェクトの見た目を変えることができます。


パーティクル
パーティクルには、パーティクル・オペレータ群(Houdiniでは、POPsとして知られています)を使います。
パーティクルは、ポイントでもサーフェイスからでもエミットすることができ、重力やウインドといったフォースを使ってアニメートできます。
パーティクルは、本質的に再生時の予期可能な結果を達成するために一組のルールに従います。


コントロールの追加
どんなエフェクトの設定においても、結果を簡単に調整できるようにするためにコントロールを定義したくなるでしょう。
Houdiniを使えば、ディレクターの仕様にあわせてエフェクトを簡単に調整するためのコントロールを変更できます。


レンダリング
パーティクルは、定義によると、空間の中の点群です。
それをレンダリングするためには、シェイプとフォームを与える必要があります。
このレッスンでは、パーティクルを球として表示し、そして最終的なレンダリングでは、スモークシェーダをアサインします。

----------------------------------------
P2
下記よりファイルをダウンロードして開く。
アニメートされたロケットがある。
http://www.sidefx.com/index.php?option=com_content&task=view&id=486&Itemid=305


エミッタ・ジオメトリを準備する。
このエクササイズの目的は、ロケットがテイクオフしたときに、その下から煙を放出させるようにすることです。

ロケットのジオメトリを使ってパーティクルをエミットすることが可能ですが、プロジェクトが進むにつれてそのトポロジーが維持されているかどうかわからなくなります。
なので、ロケットにペアレントされることが可能なエミッター・ジオメトリを設定するほうが簡単でしょう。


エミッタ・ジオメトリを組み立てる。
このセクションでは、エミッタ・ジオメトリとして使われる簡単なディスクを作ります。
Houdiniでは、オブジェクトレベルではモデリングしません。
実際の所、Houdiniを最初に開いたとき、モデリング・ツールを見つけることが出来なかったでしょう。
まず最初にジオメトリ・オブジェクトを配置し、それからモデリング・ノードを配置するためにオブジェクトのコンポーネント(SOP)レベルへ入っていく必要があります。

1.ジオメトリ・オブジェクトの作成。
ネットワーク・ペイン上へマウスを移動し、tabキーをおすとツールメニューが表れます。
Geometryとタイプし始め、tabメニューにあらわれた単語をクリックします。
もしくは、シーン内にジオメトリ・オブジェクトを配置するためにEnterキーをおします。

2.ジオメトリ・ノードをリネームします。
新しいノードを選択肢、ノードの横にある「geo1」という単語をハイライトするためにクリックします。
これで新しい名前「disk_emitter」をタイプすることが出来ます。

3.サークルの追加
「disk_emitter」ノードが選択されたまま、そのオブジェクトのコンポーネント(例:ジオメトリまたはSOP)レベルへ入るために「i」とタイプします。
新しいネットワークを反映するためにペインが変わります。
デフォルトの「file」ノードを削除します。
tabキーを押し「Circle」とタイプし、Enterキーをおしてそれを配置します。

----------------------------------------
P3
パラメータ・ペインで、Primitive Typeのプルダウンメニューから「Nurbs Curve」を選択します。
Orientationを「ZX plane」にし、サークルのRadiusを0.16と0.16に設定します。

HoudiniのUIにもっと慣れるにつうれて、
特定の機能やツールを有効にするためには、ネットワークからネットワークへ移動する必要があることに気づくでしょう。
ネットワークレベルを下がるには「i」キーを使い、レベルを上がるには「u」キーを使います。

4.サークルにスキンをつける
ビューワー・ペインでtabキーを押し、Skinと入力しEnterを押します。
Houdiniウインドウの左下隅に操作のヒントが表示されることに気がつくでしょう。
サークルを選択します。
サークルは選択されたときに黄色にハイライトされます。
ビューワー・ペイン内でRMBをクリックし、操作を終了します。(訳注:Houdini9.0では、Enterでした)

ネットワークペインで、「skin1」と呼ばれるノードが「circle1」サーフェイス・オペレータ(SOP)へ接続されていることに気がつくでしょう。
新しいノードの「Display/render」フラグが自動的にONになります。


エミッタ・ジオメトリをペアレントする。
エミッタ・ジオメトリが確実にロケットと共にアニメートされるように、ロケット・オブジェクトへペアレントします。
ペアレンティングはHoudiniでは、オブジェクトレベルで起きます。
Geometry(SOP)レベルから一つ上のレベルへ移動します。
----------------------------------------
ノート:ジオメトリレベルでノードの接続はモデルのコンストラクション・ヒストリを決定します。
オブジェクトレベルでは、コネクションは、トランスフォーメーションに関する階層を決定します。
----------------------------------------

1.アニメーションの再生
「u」とタイプして、「disk_emitter」オブジェクトの外へでて上の階層へ上がります。
Houdiniウインドウの下部に再生バーがあります。
Playをおして、ロケットのアニメーションを観察します。
これはロケットの動きについて理解するための物です。
ディスク・エミッタはロケットと共には動きません。

スライダをクリック&ドラッグすることで、順方向または逆方向の再生ができます。


2.ディスクをロケットへペアレントします。
「disk_emitter」を「rocket」ノードへペアレントします。
「rocket」ノードの一番下をクリックし、「disk_emitter」ノードの一番上をクリックすることで、相互に接続されます。

「disk_emitter」ノードを選択肢、パラメータ・ペインへ行きます。
「Keep position when parenting」の左にチェックが入っていないことを確認し、YTranslateフィールドでMMBをクリックしてラダー・ガジェットを表示します。
マウスボタンを左右に動かして、ビューワー・ペインでディスクのトランスレートが上下するのをみます。
ロケットのベースに近い位置へ動かします。


3.ペアレンティングの確認のために再生する。
再生バーにある「Play]キーをおします。
「disk」はロケット共にアニメートします。
これでパーティクルのエミットに利用できます。
  

ラダー・ガジェット(Ladder Gaget)

ラダー・ガジェット(Ladder Gadget)

数値を入力するためのフィールドやその名称(例:Translate)の文字上で、
MMBクリックするとハシゴ状のコントロールが表示される。
これがラダーがジェット。
そのままMMBを左右に動かすことで、数値を入力できる。
左へ移動: マイナス
右へ移動: プラス


 

一つ上の階層へ上がるショートカット

ノードを選択して「u」:

   

2010年1月21日木曜日

ひとつ下の階層へ入るショートカット

ノードを選択して「i」:  

例:オブジェクト(GeometryやSOP)のコンポーネントレベルへ移行する。
 

2010年1月20日水曜日

感想

Houdiniをここまで使ってみての感想
ポリゴンやパーティクルといったノードの性質をそれほどきにせずとも、それぞれの利点をいかしてノードの接続ができる。

Mayaではそれぞれの役割と特徴をよく考え、Melでその接続方法を考え出す必要がある。
そういう点では、Houdiniのほうがより感覚的で、思考を妨げない。

Houdini Help:「Particle」エミッティング

Help: エミッティング

ジオメトリもしくは、空間の中のあるポイントからパーティクルを発生させるには、二つの方法があります。
ボタンをクリックすることでパーティクル・システムを創る事ができるツール群がシェルフの「Create Particle」タブにあります。
Emitter」ボタンをクリックすることで、パーティクルを放出させたい空間内の「あるポイント」を選択させてくれます。

Source from Geometry」ボタンは、パーティクルを放出させたいジオメトリ・オブジェクトを選択させてくれます。


パーティクルを発生させるこれらの一般的な方法に加えて、既存のパーティクルから新しいパーティクル群を分離させることができる「split」を使うことも出来ます。


そして「StreamPOP」を使う事で、二つ以上のパーティクル・ストリームが交わる地点から当たらしパーティクルを発生させることもできます。



Tip
Point SOPを使う事で、ジオメトリへ、パーティクル関連アトリビュート(particle-related attributes)を追加することができます。そのパーティクル群は、誕生時にアトリビュートを継承します。
これは、パーティクル・アトリビュートをジオメトリ・アトリビュートの関連させて定義することができます。
  

Houdini Help:「Particle」簡単なパーティクルシステム

Help: 簡単なパーティクルシステム(Particle SOP)
簡単なパーティクルには「particle」ネットワーク(POP Network Surface node)ではなく、「Particle surface node」を使う事が出来るかもしれません。

パーティクルSOP(Particle Surface node)は、エミッターコリジョンアトラクターを一つづつ持った簡単なパーティクルシステムを素早く構築させてくれます。
「Particle surface」ノードに関する詳しい情報は、Particle SOPノードのヘルプをご覧下さい。



以下のようなケースでは、本当のパーティクル・ネットワークを使います。
●パーティクルアトリビュートを表現するために沢山のローカル変数を使う必要がある。
●アトリビュート操作と継承によりコントロールする。
●イベント・ベースの振る舞い
●ルールまたはコリジョンに従ったポイント・べースのグルーピング
●パーティクル毎のローテーションとインスタンス・ジオメトリ
●より多くの誕生時オプション
●複数のコリジョンオブジェクト/アトラクター
●POPsネットワークでパーティクルシステムのふるまいをカスタマイズしたい
●HDKで、カスタムPOPsを書きたいとき



本当のパーティクル・ネットワークの作り方

単にボタンをクリックすることで、複雑なパーティクル・システムを作る事ができる「Create Particles」というタブがシェルフにあります。

異なるパーティクル・システムのタイプに関する情報と、それらをどのように構築するかということについては以下のヘルプページをご覧下さい。

FireWorks
Emitter
Source from Geometry
Split
POP Object
Squishy Object

1. Animate Spring SOP (Part 1)

SideEffectsのAnimation Tutorialsにある「SOP Animation

「1. Animate Spring SOP (Part 1) [70MB QT - 13 Mins.]」

1)「Geometry」作成名前を「bubbles」にする。中にある「File」を削除
2)「Sphere」作成Primitive Typeを「Polygon」にする。(Flat wire Shadedモードに変更)

各ポリゴンがそれぞれ独立している状態にする。
3)「Sphere」のアウトプット・コネクタを右クリックで、「facet」SOPsを作成
4)パラメータ・エディタで「Unique Points」をOnにする。43Pointsから240Pointsへ増加

5)「facet」アウトプット・コネクタを右クリックで「spring」SOPsを作成
6)パラメータ・エディタで「Forces」タブの「External Force」のXへ下記のエクスプレッションを入力
abs (sin($F*5))
これを再生すると玉がX軸上を移動するアニメーションを見ることが出来る。
7)パラメータ・エディタで「Turbulence」のXYZへ「1.5」を入力
これを再生すると玉が崩壊し、各ポリゴンがばらばらにちらばる。
8)パラメータ・エディタで「External Force」のYに「0.3」、Zに「-0.5」を入力

----------------------------------------
9)同じ「bubbles」ノード内に「add」SOPsを作成
パラメータ・エディタでPointのチェックボックスをオンにする。
10)「add」のアウトプット・コネクタを右クリックで「popnet」を作成
11)「popnet」をダブルクリックして1階層下に移動。
12)そこへ「source」ノードを作成、アトリビュート・エディターで「Geometry Source」を「Use First Context Geometry」へ変更
13)同じく「Attributes」タブの「Initial Velocity」を「Set Initial Velocity」に変更。
14)「Birth」タブを選択し、「Const Birth Rate」を1に設定
15)「Attributes」タブの「Velocity」Xを0.3,Yを1に設定

----------------------------------------
16)「Bubbles」ノードの階層へ戻る
17)「spring」のアウトプット・コネクタを右クリックし「copy」ノードを追加
18)「popnet」のアウトプット・コネクタを「Copy」のinput2へ接続

----------------------------------------
19)ネットワーク・エディタ・ペインにあるタブ「Material Palette」を選択
20)basic_surfaceを選択
21)元のネットワーク・エディタに戻り「copy」のアウトプット・コネクタを右クリックし、「material」を追加
22)「Material」のパラメータエディタの「Material」の右端のアイコンをクリックしてChooser画面を開く。
23)Chooser画面から「basic_surface」を選択してAcceptボタンを押す。
24)同じく「Material」の右端にある→アイコンをクリックしてそのマテリアルに移動する。
(ネットワーク・エディタ内に「basic_surface」アイコンが選択状態で表示される)

----------------------------------------
25)パラメータ・エディタで、BaseColor、OpacityへChooserから色を選択する。
(例:Base Color 0,0.45,0.9 Opacity 0.68,0.68.0.68)

あとは、
facetをバイパスモードにして
スムースシェーディングモード表示
「Spehre」のPrimitive Typeを「NURBS」に変更
「spring」の値を調整
することで、シャボン玉らしく見せる。
  
  

バイパス

ネットワークにおいて特定のノードをバイパス
ノードアイコンの左端をクリックして黄色になれば、そのノードはバイパスされる。

以下の例では、[Sphere1]と[spring1]だけがつながったネットワークと同じになる。
あるノードをテストしたり、その影響力を調べるのに便利。
  

2010年1月19日火曜日

3D buzz 「The Upper Bridge Tier」

3Dbuzz の吊り橋のデジタルアセットを作成するビデオ・チュートリアル。(ユーザー登録必要)

第二回:「The Upper Bridge Tier」(全13回)


1)ネットワークビューで、Geometryノードを作成名前を「bridge」にする。
デフォルトではキューブが作成されるのでオブジェクトノードの階層に入り「file」以下を削除


<「マスターコントロール」とパラメータの追加
2)Geometoryノード(bridge)内で、Nullを作成し、名前を「materControl」にする
右クリックで「Edit Parameter Interface」を実行
「float」パラメータを二つ追加:(左から右のペインへ、二回ドラッグ&ドロップ)
3)一つ目のFloatパラメータのNameとLabelを「width」に変更
Applyボタンをクリックすればパラメータ・ペインへ新しいパラメータがスライダ付で表示される。
「Range」に最小値0.001をセットしロック(カギアイコンをクリック)、最大値は5にする。
4)二つ目のFloatパラメータのNameとLabelを「length」に変更
「Range」の最小値に0.001をセットしロックする。最大値はそのまま(10)

(これらの設定は後ほどデジタルアセットノードに移動する。)



<橋の道路部分を作成の流れ>
カーブを作成 -> ポリゴン平面を作成 -> ポリゴンをエクストルードして立体化。
注意点としてはカーブはサーフェイスを作るに十分な数が必要。
要するに四角形であれば幅と長さ方向を決めるパスカーブの役割をもつラインがそれぞれ一つ必要となる。
Line
Skin
polyExtrude
の3つがあれば出来るはずだが、このチュートリアルでは
lineの長さを後から調整し、それによりそれが道路全体の幅と長さを後から変えられるようにする。
長さの調整には、LineのDistanceをいじるのではなく、Transformを接続しそのスケール値を変更して、調整している。
(Lineのパラメータ調整でも似たようなことはできるが直感的ではない)


<Length「ライン」の作成:道路の縦方向(全長)の基準になるライン>
5)Nullと同じ階層に「line」ノードを作成「bridgeLength」と名前を変更
(defaultではVisibilityがoffになっているのでonにする)
6)ビュー右端のDisplayPointと DisplayPointNumberをonにする。
7)DirectionをZ方向にする(「1」を入力)


<「transform」ノードの作成:上記のラインのスケールをするために使用>
8)上記LineのOutputo部分を右クリックでtransformノードを作成
(ネットワークにつながったxform1が作成される。)
名前を「lengthScale」にする。


<パラメータのリンク>
9)masterContorl のLength値(例:5.62)を右クリックして「copyParameter」
11)「lengthScale」のScale Zに対して右クリックから「paste copied relative preferences」を実行。
この中にch("../masterControl/length")lengthlengthと自動入力される。
「..」はLinuxのように一つ上の階層、ここでは、Bridgeジオメトリノードをさす。


<Width「ライン」の作成:道路の幅方向の長さをきめるライン>
先ほどのLength「ラインと」ほぼ同じステップを踏む。
11)Nullと同じ階層に「line」ノードを作成「bridgeWidth」と名前を変更
12)DirectionをX方向にする(「1」を入力)
13)OriginX を-0.5にする。
これによりX方向にスケールする際、左右均等にスケール出来るようになる。


<「transform」ノードの作成>
14)上記LineのOutputo部分を右クリックでtransformノードを作成。
(ネットワークにつながったxform1が作成される。)
名前を「widthScale」に変更


<パラメータのリンク>
15)masterContorl のwidth値(例:0.62)を右クリックして「copyParameter」
16)「widthScale」ScaleXに対して右クリックから「paste copied relative preferences」を実行

上記で「masterControl」のlengthとwidthパラメータが、それぞれのラインをスケールする値として使われるようになる。


----------------------------------------
これは、MayaのNurbsサーフェイスをカーブから作成する方法に似ている。
それがHoudiniではポリゴンで可能となる。
さて、両端二つのラインは常に同じ長さを保つ必要があり、また縦方向のラインの長さが変わっても常にその両端に幅方向のラインが位置している必要がある。
そのためCopy SOPsを使用することで、長さの統一、位置の自動追随を可能にしている。
(Mayaでいうとヒストリーを維持しているようなものだが、両端に位置づけるのはMayaでは一工夫必要)
input1:Primitives to Copy
input2:template to Copy to

調整可能なサーフェイスを作るだけならLineを縦横二つ作り、それをSkinSOPに接続すれば作成できるのだが、このチュートリアルでは、TransformとCopyをわざわざ使ってサーフェイスを作っている。
Transformを使用するのは、後に別のTransformを作り条件によってどちらのTransformを使うかを切り替えられるようにするためである。これにより同じオブジェクトに対して異なるコントロール方法を持つことが出来る。

またSkinノードで、サーフェイスを作成するには、UとV方向のラインが必要
input1:U (and Possibly V) Cross-Sections
input2:V Cross-Sections
であるがこの作例では、Copy SOPからの出力をinput1につないでいるだけでポリゴン面が作成されている理由も不明


<コピーSOPsの作成>
18)copyノードを作成名称を「widthLengthCopy」とする。
19)Number of Copy が1であることを確認。
20)Input1へwidthScaleとInput2へLengthScaleを接続


<スキンノードの作成>
21)「widthLengthCopy」のアウトプットを右クリックして「skin」ノードを作成
22)名称を「skinTierSurface」にする


----------------------------------------
道路の厚みを作るために、上記のスキンをエクストルードする。
23)「masterControl」ノードにflat値のパラメータを追加し「tierThickness」という名前に変更
最小値を0.001でロックし、最大値は0.5にする。
(パラメータ作成後、値を 0.05程度に設定しておく)

<ポリゴンのエクストルード>
24)「skinTierSurface」ノードの出力を右クリックして「polyExtrude」ノードを作成
名称を「tierExtrude」に変更
25)TranslateZへ先ほどの「tierThickness」「paste copied relative preferences」で接続。 (これによりポリゴン・サーフェイスが起点から上方向へ引き出される。)
26)パラメータ画面で、Optionタブを開き「Output Back」をOnにすれば開いていた底がふさがる。

※エクストルードは選択された面の縦横がそれぞれXYになり、奥行きがZとなるのでここではTranslateZを移動する。


----------------------------------------
ポリゴンの角を整える(ノーマルの調整)
それぞれのフェイスは各頂点を共有しているためシェーディング表示ではフェイスがフラットにならない。
(Mayaではノーマル角度がソフトの設定になっている時と同じ)
Houdiniでは、各エッジできっちりと折れた見た目にするためには各フェイスの頂点を分けてやる必要がある。
edgeCuspは新しい頂点をそれぞれのエッジに作成する。
そのためMMBクリックでノードのデティールを見ると8pointsだったのが24pointsに増えている。

27)EdgeCuspノードをtierExtrudeの出力に接続して作成
名前を「TierCusp」に変更


----------------------------------------
<道路の縦横比(レシオ)を指定できるようにする。>

28)masterControlノードに「Toggle」パラメータを追加し、名前を「toggle」にする。
Horizontally join to Next Parameterをオンにする。
(これをOnにすると次のパラメータと一緒に横一列に並べて表示する。)

29)同じくFloatパラメータを追加し、Name「widthLengthRatio」、Label「width / Length」へ変更。 最小値を0.001でロックし、最大値は2に設定。

30)Disable Whenに以下を入力:ratioトグルが「0」の時に、width/Lengthの操作はできない。
{ ratio == 0 }

31)またwidthLengthのDisableWhenに以下を入力:ratioトグルが「1」の時に、widthの操作はできない。
{ ratio == 1}


これも便利!
同じノード内のコントロール(パラメータ)名を指定して簡単なエクスプレションができる。
これによりコントロールに関連性を持たせることが簡単に出来る。



----------------------------------------
Length値を変更した際に、width値が自動設定されるwidthラインを作る。
Length値を取得し、それに対してwidthLengthRatio値を掛け合わせてwidth値を算出する。

32)bridgeWidthノード(ライン)のアウトプットを右クリックしてあらたな「Transform」ノードを作成
名称を「ratioScale」とする。
33)masterControlのLengthをコピーし、「ratioScale」のScaleXへpaste copied relative preferences。
34)そのエクスプレッション(ScaleX)をハイライト状態でAlt+eにてEdit Expressoinウインドウを表示し、エクスプレッションを編集。(Lengthにwidthをかけあわせる。)
ch("../masterControl/length") * ch("../masterControl/widthLengthRatio")


----------------------------------------
ここまでで作成した二つのtransformノードを条件によって切り替えられるようにする。
35)widthScaleノードのアウトプットを右クリックして、switchノードを作成
(switchノードはwidthScaleとwidthLengthCopyの間に作られる)
36)ratioScaleのアウトプットをswitchノードのインプットへ接続
37)switchノードのパラメータにエクスプレッションを作成(masterControlのratioトグルから値を取得するように設定)
ch("../masterControl/ratio")


以上で、
1)縦横の長さを個別に設定する方法
2)縦横比を固定して設定する方法
の二種類が選択できるコントロールを備えた長方形ができあがった。
Lengthは、相互に切り返しても変わらない(Widthは切り替え時に変化する。)ので両方を併用することも可能である。

 

既存ネットワークへノードを追加する方法

あるoutputからすでに次のノードのinputへネットワークがつながっている場合、

outputコネクタを
MMBクリック:outputから分岐したネットワークとして作成
RMBクリック:outputと次のinput間に差し挟む形で追加。

 

ノードの詳細情報表示

MMBクリック:ネットワークエディタ内で各ノードの情報を表示する。

inputコネクター:そのinputコネクターが必要とする情報を表示。
ノード・アイコン:そのノードの詳細情報を表示

2010年1月18日月曜日

FlipBook (プレイブラスト in Maya)

http://www.sidefx.com/docs/houdini9.5/anim/flipbook

ノードの接続


1)input
(入力)をクリック
2)別のノードのoutput(出力)をクリック

これで二つのノードは接続され接続されたことを示す線が表示される。
(逆に出力から入力を接続することも可能です)。
 
日本語Help)

パラメータのリンク(アトリビュート・コネクション in Maya)

1)リンク元のパラメータを右クリックし「copyParameter」
2)リンク先のパラメータを右クリックし「paste copied relative preferences」

ch("../masterControl/length")
..はそのノードが含まれている場所より一つ上の階層を示す。(ここでは、materControlというノードの一つ上のジオメトリノードを指している)
masterControlはノード名、 lengthはそのノードにあるパラメータ名
 

2010年1月16日土曜日

これは簡単!(1):GUIのコントロール

Edit Parameter Interface(ノードのコンテキストメニューから選択)を使えば各種パラメータ(アトリビュートinMaya)を簡単に追加できる。

追加されたアトリビュートは自動的にそのコントロールも追加される。
(パラメータエディター(アトリビュート・エディタinMaya)で表示)

Mayaでアトリビュートを追加しても表示できるのはせいぜい、チャンネルエディタ内。
コントロールを追加しようと思うと、Melスクリプトが必要になる。
しかも名前を間違えないように気を配る必要があり、Houdiniではそういうストレスからも解放される。
 
 

2010年1月15日金曜日

Houdiniの怪

Houdiniの怪(memlog)

情報元:白石運送
  

2010年1月14日木曜日

The Magic of Houdini 記事

Will Cunningham 氏による記事


The Magic of Houdini: What are VEX Operators?
The Magic of Houdini: Motion Blur -- Part 2
The Magic of Houdini: Motion Blur -- Part 1
The Magic of Houdini: Initial Velocity
The Magic of Houdini: Discovering the Channel Editor
The Magic of Houdini: SOPs That Confound the Melon -- Part 2
The Magic of Houdini: SOPs That Confound the Melon -- Part 1
The Magic of Houdini: Ye Ole Copy SOP
The Magic of Houdini: Learning the Brush Operations
The Magic of Houdini: The Various Contexts
The Magic of Houdini: The Three Most Common Panes
The Magic of Houdini: 3D Concepts Reviewed
The Magic of Houdini: Introduction and Welcome

オブジェクト と ジオメトリ・コンテナ・オブジェクト

<オブジェクト(Objects)>
ワールドスペース内での「位置」「回転」「スケール」情報を持つ。

ジオメトリ・コンテナ・オブジェクト (椅子やスキンなどのジオメトリ)
キャラクタ (ボーンやマッスルといったキャラクタの一部分)
ライトとカメラ
ヌル・オブジェクト「オブジェクト」はシーン内でトップレベルの階層にある。(シーン・レベル
「オブジェクト・レベル」=「シーン・レベル」 (同じ階層)。
オブジェクトは「オブジェクト・ノード」でもある。



<ジオメトリ・コンテナ・オブジェクト>
モデルされた物体を定義するジオメトリ・オペレータ群(SOPs)のための容器(コンテナ) (Eng Help)

●ジオメトリ形状を定義する「サーフェイスノード」を持つ
トランスレート情報 (移動、回転、スケール)
●オブジェクト全体のシェーダー情報
シーン・レベル」の階層にある

Houdiniではモデルはジオメトリ・コンテナ・オブジェクトによって表示される
ボーンとマッスルがジオメトリをどのようにとらえて変形するか、それを定義するノード群が含まれる。

サーフェイス・ノードを修正するよりも、「オブジェクト」を変更するほうが計算が速いので、移動、回転、スケールにはできるだけオブジェクトの変形を優先した方が良い。

日本語Help(Objects)
  

Background (イメージプレーン in Maya)

●Mayaでいうイメージプレーンに、画像ファイルを表示する方法

D : ディスプレイオプション
Background」タブ > 「Image Source」> 「File
Filenameで背景に配置するイメージファイルを指定
デスクトップにある画像を指定したところ、上記のように
$job/ではじまる文字化けしたパスになるが、画像はちゃんと表示される。

全て英語の半角文字であればパスも正常に表示される。
(例: C:\images\rockMonster.JPG)



疑問点:
DisplayオプションからBackgroundへ画像ファイルを指定すると
4分割画面(左、右、上、パースペクティブ)すべてのその画像が表示される。

Backgroundイメージを特定のビューだけに表示したい場合はどうするのか?
(たとえばモデリングのために、上下左右からイメージを表示するときなど。)

解答:
Houdiniではモデリングをすることはあまりないので、三面図の表示は需要があまりない。
一番使われるのはショットのプレートを表示することなので、一つの画像で事足りる。



日本語Help

カメラのビュー操作

Mayaでは当たり前のことだが、Houdiniでは違う点。
Houdiniではビューとカメラは別物。
そのため、カメラメニューでカメラを指定してもビュー操作をして視点を動かすと「No Cam」に戻る。
(ビューだけが動き、カメラはうごかない)


●カメラかライトを動かすには、ビューをロックする必要があります。

1. ビューポートのカメラメニューから、カメラかライトを選択。
2. ディスプレイツールバー(ビュワー右)のLock camera/lightのビューアイコンをクリック。または、カメラメニュー最下段のTie camera or light to viewを選択。

日本語Help
 

2010年1月13日水曜日

シェーディングモード

W :ワイヤーフレーム表示とシェーディング表示の切り替え
(Mayaでは二つのボタンに分かれている機能)
4:ワイヤーフレーム
5:シェーディング

●ビューア上部ツールバーの右端にある、シェーディング・メニュー・アイコンをクリックして切り替えられる。

(日本語Help

ビューポート・レイアウト切り替え

●ビューポート右上にあるViewport Layoutボタンを使って、望みのレイアウトを選択する。


SPACE+B:シングルビューとマルチビューの切り替え(Mayaの「SPACE」バーと同じ)

●すべての正投影画面の連動:「Viewport Layout」=> 「Link ortho views」をON

D : ディスプレイオプションのウィンドウ呼び出し。


Houdini9.5 Help
日本語Help

ビュー操作

ビュー操作

(「SPACE」バーがMayaの「Alt」に相当)
SPACE+LMB:タンブル(カメラ回転)
SPACE+MMB:トラック(カメラ左右上下移動)
SPACE+RMB:ドリー (カメラ前後移動)

左のビューツール(カメラのアイコン)をクリックしてハイライト状態にすれば「SPACE」バー不要。
(Mayaには無い機能)
LMB:タンブル(カメラ回転)
MMB:トラック(カメラ左右上下移動)
RMB:ドリー (カメラ前後移動)


----------------------------------------
Hotkeys

SPACE+H:ホームビュー (Mayaの「f」キーに相当)

SAPCE+G:選択したオブジェクト/ジオメトリを中心に表示
    (Mayaの選択+「f」キーに相当)

SPACE+A:全オブジェクトの表示


(Houdini9.5 Help)
 

「Houdini」その名前の由来

3DCGソフト「フーディニ」に関する質問■■
Answer)Side Effects Software Inc. CTO, Paul Salvini

Q1.ソフトの名前は天才奇術師ハリー・フーディーニに由来するそうですが、なぜ彼から名前を取ったのですか。
PRISMS」から「Houdini」に名前を変えた理由は?

A) ヴィジュアルエフェクトをつくることは魔術を見せるようなものだ。
魔術もCG も幻惑的なイリュージョン(幻影)を創造することだからね。
ハリー・フー ディーニは彼の芸術(魔術)において巨匠だった。
アニメーターは我々のソフトを使うことで巨匠になれる。
というわけでこの名前はぴったりだと思ってい るよ。

(参照元:コケカキイキイ 時事通信No.10 2000年11月10日発行


----------------------------------------
ハリー・フーディニ(Harry Houdini)
「脱出王」の異名を取った、奇術師。
本名エーリッヒ・ワイス(Erik Weisz)。
「現在でもアメリカで最も有名な奇術師」と呼ばれるほど認知度は高く、奇術師の代名詞ともなっている。

ハリー・フーディーニという芸名は、当時アメリカで活躍していた奇術師ハリー・ケラーから、姓はフランスの奇術師ロベール・ウーダンの姓の綴り「HOUDIN」の最後に「I」を加えたもの。
Wikipedia

ブログ:魔法使いの弟子

Houdiniの勉強を本格的に始めることにしたので、勉強の過程で学んだことを記録するために新しいブログを作りました。

ブログタイトル「魔法使いの弟子」は、先日Houdiniができないばかりに逃してしまった(?)仕事のタイトルです。

Houdiniの名前はマジシャンのHarry Houdiniに由来します。

また、「魔法使いの弟子」は英語では「The Sorcerer's Apprentice」(ソーサラーズ・アプレンティス)
Houdiniの体験版も「Houdini Apprentice」言い換えれば「フーディニの弟子」とも言えます。

それから、アーサーCクラークの有名な言葉「高度に発達した科学は魔法と見分けがつかない」
VFXには、高度な科学が使われており、魔法のような映像を生み出します。

これらのことから以下のように考えて、このタイトルに決めました。
マジシャン=> 魔法使い
VFXアーティスト => 魔法のような、映像を創り出す。
Houdiniアーティスト=> 現代の魔法使い
Houdini入門者 => 見習い魔法使い =>魔法使いの弟子


また、自分も早く「現代の魔法使い」の一員になれるよう願いを込めています。