Houdini sidefx official Lesson7 Lights, Camera, Render

copyノードについてもう少し

・コピーされたオブジェクトの姿勢制御

Transform Using Template Point Attributesオプションをオフにすると、コピーされたオブジェクトはコピー前の姿勢を保って複製される。

・stampアトリビュート

stampアトリビュートの作成は、あくまでもコピー時に参照される準備を行うためのもの。
実際には個々のコピーオブジェクトが生成されるときに使用される。

stampアトリビュートを使用するかどうかの判断は、入力されたオブジェクト内のエクスプレッションでstamp関数を使用して参照する記述の有無による。

カメラ

カメラの作成はCommand+シェルフのカメラボタンから。
こうすると、現在シーンを見ているカメラの複製が作られる。

カメラのマニピュレータとホットキー

20140420_01_2

・Orientation Handle

20140420_01_1

カメラ本体または注視点を固定しながらカメラワークを決められるのがとても便利。

・Focus Handle

20140420_01_3

被写界深度のための設定が簡単に行える

・Frustam Handle

20140420_01_4

画角やNear/Far Clip Plainなどを決められる。
中央のボックスをドラッグしてクリッププレーンを決める
周囲の四角をドラッグして画角を決める

カメラの切り替え

ビューポートの右上にあるHUDボタンから任意のカメラを選ぶ

20140420_01_10

カメラのシーケンスを組む

Switcherノードに任意のカメラを複数コネクトする
このSwithcerノードはビューポートのHUD内にも表示される。
ビューポートをSwitcherノードで覗き、Swicherノード内のSwitch Cameraアトリビュートを切り替えれば、任意のカメラでビューポートを見ることができる。
キーフレームを打てば、指定時間でカメラを切り替えることも可能。

レンダリング

レンダリングを行う際は、はじめにレンダラーノードを作成する。

20140420_01_5

Mantra:標準搭載のスキャンラインレンダラー
Mantra-PBR:物理ベースレンダラー
その他:サードパーティ製レンダラー

Houdini で作業を完結させるなら、Mantra系レンダラーを使えば良い。

個々で作られたレンダーノードはoutコンテキスト内にぶら下げられる。

Mantraのレンダリング設定

・レンダリングするフレームレンジを設定

20140420_01_7

Render Any Frame:現在フレームのみレンダリング
Render Frame Range:指定した範囲のフレームをレンダリング
Render Frame Range Only(Strict):謎。厳密なフレームレンジ?要調査

・レンダリングノードごとに使用するカメラを指定

20140420_01_6

・レンダリング結果の出力先を指定する

20140420_01_8

Output Pictureにipが指定されているとレンダリング時にMPlayアプリケーションが立ち上がり、リアルタイムにレンダリングの様子が見られる。

20140420_01_9

フルパスで出力先を決めることもでき、フレーム番号を使うエクスプレッションを使用して出力ファイル名を指定することで、連番画像を吐き出すことができる。

(例)$HIP/Lesson7_Render/Lesson7_$F4.jpg

・レンダリングクオリティの調整

Samplingタブ内の調整を行う
SamplingパラメータやJitter、Noise Levelパラメータなどを使う

・被写界深度を使う

Samplingタブの中で、 Enable Depth of Fieldをオンにする

ライトのタイプ

20140420_01_11

Areaライトの注意点

デフォルト設定では、ライトのサイズに応じてライトの強さも変化する。
Normalize Light Intensity to Areaをオンにすると、光源の強さが正規化される。必要に応じて切り替える必要がある。

Houdini sidefx official Lesson6 Attributes & Variables

Details View

Mayaで言うところのスプレッドシート
各頂点位置やUV座標等を一覧したり、選択ノードに関わるマテリアル一覧など様々な情報を俯瞰してみることができる

ノード情報の確認

Network Viewでノードを中ボタンクリックすると、ノードに関する情報を一覧表示するポップアップウインドウが現れる。

Materialノード

マテリアルをオブジェクトにアサインする場合はまずオブジェクトにMaterialノードを接続し、Materialノード内でMaterialパラメータを使用し、どのシェーダを使用するか指定する。
グループノードを事前に用意し、特定のコンポーネントのみにMaterialをアサインする事もできる。

20140420_02_1

20140420_02_2

SHOP

Shader Operationのこと、多分。
シェーダーはSHOPツリーの中で管理される。

Measureノード

入力されたノードに関して様々な計測をするためのノード
TypeパラメータでAreaを指定すると、与えられた各面の面積を計算する。Override Nameをオンにし、Attributeパラメータで任意の名前をつけることができ、以降のコネクションにおいて、付けられた名前を使用することができるようになる。

20140420_02_3

AttribPromoteノード

指定したコンポーネントを走査し、平均値や最大値などを取り出すためのノード。
20140420_02_4

Original Nameによって計算するアトリビュート名を指定
Original Classによって走査するデータタイプを指定し、New Classによって出力先を指定。
Promotion Methodによって計算方法を指定。
Change New Nameをオンにし、New Nameで出力されるパラメータ名を指定する
Delete Originalがオンだと、計算に使われたパラメータの情報はAttrib Promoteノードを経由した時点で削除される。パフォーマンスと利便性のバランスを考えて適宜使用するのが良いのだろう。

上記の例では入力された各面の面積合計値を計算している。

Breakノード

input1に入力された形状を、input2に入力された形状で分断するノード

Connectivityノード

1ノードに複数のジオメトリ形状の塊がある場合、コンポーネント単位で所属しているジオメトリのIDが取り出せるノード。

20140420_02_5

上図の例では、それぞれのジオメトリにの塊を表すIDパラメータ名をchunkと名づけている。各塊にはIDが振られ、それぞれint値で表される。
また、この時付けられた名前は、以降のノードで使用できる変数名としても同時に定義される。
Details ViewのDetailタブを確認すると、varmapパラメータが作られていることがわかる。

chunk -> CHUNK

20140420_02_7

以降のノードでは、$CHUNKという変数が使用可能である

Partitionノード

1つのノードに含まれる複数のジオメトリの塊を個別に取り出すためのルールを決めるノード。

20140420_02_6

チュートリアルがここで終わったのでよくわからないが、個別の塊にshape_IDというグループ名前が付けられて出力されるということだろうか?

AttribCreateノード

以前も少し触ったノードだが、もう少し詳しく。
20140420_02_8

ポリゴンノードの出力から、新しいアトリビュートを生成。
ariという名前のfloat3アトリビュートを生成している。
ariアトリビュート内の各要素は、入力されたポリゴンデータに含まれる $CR,CG,CBの値をそのまま受け取り、そのまま出力する。
例えばここで各要素をシャッフルしたり、それぞれの要素に何かしらの計算を行いつつ出力を行うなど、かなり便利な使い方ができそう。

Attrib Transferノード

input1に与えられたジオメトリにinput2に与えられたジオメトリから任意のデータを付加して出力するノード

20140420_02_9

grid1にsphere1からアトリビュートを転写する。

20140420_02_10

転写するアトリビュート名をCd(頂点カラー)に指定

20140420_02_11

conditionタブで、影響を与える最大距離など、細かい設定ができる。

Trailノード

入力されたジオメトリの動きの軌跡を作成できる。

パーティクルの基本的な制御

POP Networkノード内でパーティクルを発生させる。
エミッターとなるオブジェクトを作成し、input1に接続
popnet内にsourceノードを作成し、パーティクル作成方法を指定

20140420_02_12

パーティクルに対するアトリビュート転送

popnet内にAttribTransferノードを作成。
下図の例ではpopnetのinput2に接続されたジオメトリから頂点カラー(Cd)をパーティクルに対して転送している。

20140420_02_13

popnetでのgroupノード

popnet内でのgroupノードは、特定の条件に当てはまるパーティクルの取り出しに使うことができる。

20140420_02_14

上図の例では、頂点カラーのR値が0.6より大きくなった全パーティクルをredというグループ名で取り出せるようにグルーピングしている。

このグループ名は、以降に続くノードで使用できる。

パーティクルに外力を与える

sourceノードの下流にforceノードを接続する。

パーティクルの動きを制限する

LimitノードやSoftLimitノードを接続する。
20140420_02_15

これらのノードは、パーティクルに何らかの意味を持つ範囲情報を与えることができる。
例えば、その範囲を超えたら消滅する。範囲の境界でバウンスするなどを指定できる。
言ってみれば、コリジョンノードとも言えるかもしれない。