Houdini 基本を掘り下げる

ひと通り公式の基礎チュートリアルが終わったので、ヘルプ参照したり、ググりつつ基本を固めたい。

間違いを発見した時、遠慮なく突っ込んでいただけると喜びます。

用語

・コンテキスト

処理を行う状況や分野のこと。
ModelingやAnimationなど、処理を行う分野が分かれており、内部に作れるノードの種類も変わる。

20140504_01_0

・ch

信号処理を行う
主に扱うネットワークタイプは CHOP

・CHOP
Channel Operators
音声データや関数の組み合わせから波形を組み立てて、任意のパラメータに出力できる。

・obj

モデル、ライト、カメラなどシーンを構成するオブジェクトを処理する
主に扱うネットワークタイプは SOP/VOPなど

・SOP

Surface Operators
Surfaceオペレーションを行うノードのことを一括りにSOPノードなどと呼ぶようだ。(PolyExtrude SOPなどという書き方をよく見かける)
SOPに関しては、コンテキストの一種とは言い難いと思う。

・COP

Composite Operator
色調補正や画像合成を行える。

・DOP

Dynamics Operator
物理演算

・out

レンダリング画像やモデル、画像合成の結果などを出力する
主に扱うネットワークタイプは ROP

・ROP

Render Operator
レンダリング処理

・part

パーティクルの振る舞いを出力する
主に扱うネットワークタイプはPOP

・POP

Particle Operator
パーティクル処理

・shop

シェーディングに関する出力を行う
主に扱うネットワークタイプはSHOP

・SHOP

Shading Operator
カスタムシェーダの作成や3Dテクスチャの生成ができる

・vex

・VOP

VEX Operation
カスタムノード処理

ノードにコンテキスト名をつけて括る理由

例えばGroupノードは、同じ名前でSOP、DOP、VOPなど複数のネットワーク内で作成、使用できるが、所属するネットワークのコンテキストタイプに応じて全く別の働きを持つ。
そのため、どのコンテキストに属しているか明示する意味合いもあるのだろう。

パラメータに関して

Attributeとは

各コンポーネントが持つ固有の値のこと。
コンポーネントとは、Point/Vertex/Primitiveなどのオブジェクトを構成する要素のこと。

GeometryのPointが持つ[P]AttributeはPointの座標を表す。
ParticleのPointならVelocityなども持つ。

Attributeを追加する

Pointにアトリビュートを追加するには、Pointを持つノードの下流にPointノードを接続し、各種Attributeの動作を Add ATTRIBUTE_NAME に変更する。

同様に、Vertexノード、Primitiveノードを接続することで、それぞれに対応するAttributeを追加することができる。
※これらのノードを通った時に通ったデータが持っている情報から、Addした各Attributeを計算し下流で使えるように有効化するという方があってる気がする。

20140504_01_1

各コンポーネントのAttributeの値は、Details Viewで確認できる。
簡易的な内容は、ノードを中ボタンクリックで表示できるポップアップウインドウでも確認できる。

Expression

各種パラメータボックスには、直接計算式を記入することができる。
これは数値型のパラメータにかぎらず、例えばファイルパスなどを格納する文字列パラメータでも同じ。

変数

Expressionには変数名を記入することができる。
例えば、$FF(浮動小数点型のフレームナンバー)など。
この変数名は、そのまま計算に用いることができる。
$FF + 1 などとしてもよい。

どのような変数が使えるかは、Houdini Helpで調べると良い。

Global Expression Variables

Standard Variables

・Local Variables

例・xformノードのLocal Variables

いつ、どの変数が使えるのか?

Standard Variables にリストアップされている変数の中に、特定のノード内で使えるものとそうでないものがあるという、一見して不思議な動作を考察。

変数が見つからず、Expressionが正しく評価できない場合、ノードアイコンが赤い斜線で装飾される。

20140504_01_3

この状態でノード上にカーソルを置き、中ボタンを押すと以下のエラーが確認できる。(下図は別のノードで表示したものなので、パスが違うが)

20140504_01_2

調べた限り、ある変数名が任意のノード中で使えるかどうかを判断するのは、試行錯誤による判断が必要という意見がよく見つかるように思えた。

・対処法 NodeごとのLocal Variablesを使用する

確実に使える変数は、Helpで各ノードの項に記載されているLocal Variables のようだ。ただし、ここに記載されていない変数も使用できるケースが有るのでややこしい。

・対処法 Point/Vertex/Primitive SOPノードを経由させる

また、Point/Vertex/Primitive SOPノードを経由することで作成される変数は、下流で確実に使える状態になっているので、まずはこれらのノードを使用し明示的に変数を作成したあとで、下流で使用する。

・対処法 AttribCreate SOPを使用する

対処法として挙げられていたのは、下流で必要な値を取得したい場合は、予めAttribCreate SOPを使用して任意の値を明示的にAttributeの形で保持し、下流で使用する。

オペレータへ入力するデータの型について

オペレータが操作する対象の型に対し、処理対象として入力するデータの型が適合しているか明確に意識する必要がある。

例えば、Poly ExtrudeなどはPrimitive型のデータを元に処理されるので、Primitive型のデータを入力しなければ正しく処理は行われない。
※GUI上から頂点選択後にPoly Extrudeを実行したとき正しく動作しているようにみえるのは、実行時に選択されている頂点を包含するPrimithiveリストが自動的に割り出され、Poly ExtrudeノードのGroupパラメータに与えられるからである。

同様に、Poly BevelはPointに対する処理を行う。

よって、Groupノードによる下流オペレータへ渡すコンポーネントのフィルタ処理は、渡したいコンポーネントの型を元にフィルタするのが望ましい。

オペレータから出力されるデータの型について

オペレータへの入力が要件を満たしている場合は何事も無く処理後のデータが出力される。

例えば、Polygon Geometryを編集するノードからの出力は、特に出力データタイプを指定できるノードでない限り、Polygon Geometryデータが出力される。

※入力が要件を満たしておらず、ノードのステータスがWariningであれば入力されたデータは何も手を加えることなく下流のノードへ渡されるようだ。

20140504_01_4

ExpressionからAttributeを参照する

参照したいAttributeを保持するコンポーネントの型に応じて、それぞれ以下の関数を使う。

・Point

float point (string surface_node, float point_number, string attribute, float index)

・Vertex

float vertex (string surface_node, float primitive_number, float vertex_number, string attribute, float index)

・Primitive

float prim (string surface_node, float prim_num, string attrib_name, float attrib_index)

・Detail

float detail (string surface_node, string attrib_name, float attrib_index)

Numeric配列型Attribute

AttribCreateを使用すれば、複数の数値を保持する配列型のAttributeを作成することができる。

また、この配列型の値を使用する際、インデックスに応じて以下のように指定する。

  • $varName1
  • $varName2
  • $varName3
  • $varName4

Numeric配列とVector型

・Numeric型

・Vector型

Attributeの可視化

ビューポート上で任意のAttributeの状態を可視化できる。

Display OptionsのMarkersタブから下記のボタンを押してCustom Attributeを追加する。
20140504_01_5

左から順にGeneric/Text/Vector/Scene

上図のボタンを押すと、下図のようなウインドウが現れる。

20140504_01_8

おそらく、Nameはスクリプトなどから呼び出す際のオプション名

・Generic

A generic option is intended to work with primitive render hooks, created through the HDK. It passes an enable/disable value along with a single string argument to any render hook that looks for it. It can be toggled on in one display geometry context (like Display Model) but left off in another (Ghost Scene Object).

・Text

文字で値を表示する。
これは、数値も文字列として表示される。

20140504_01_7

・Vector

ベクトルを線で表示

20140504_01_6

・Scene

A scene option is intended to work with scene render hooks, created through the HDK. Scene hooks can query the enable state of any scene display option. Unlike generic display options, a scene option is global and is not affected by the geometry context.

Attributeの所属クラス変換と全要素を使用する計算

AttribPromoteノードを使用して、任意のAttributeを、別のクラスのAttributeに変換できる。

同時に、Attributeに含まれるすべての値から平均値や最小値、最大値、などいくつかの用意された条件にマッチする値を抜き出すこともできる。

20140504_01_9

・Original Name

検索したいAttribute名

・Original Class

変換元のAttributeが所属しているクラス

・New Class

変換先のクラス

・Promotion Method

Attributeの値をどのように計算して変換先に格納するかを指定

・Change New Name / New Name

変換先のAttribute名を指定し、新規作成する。

・Delete Original

変換元アトリビュートを削除するか決定する。

Attributeを別のノードにコピーする

AttribCopyノードを使って、任意のAttributeを写しこむ。
Attributeのコピーは、各コンポーネントのインデックスがマッチするもの同士で行われる。

20140504_01_10

パラメータ設定はだいたい見たとおり。

・Source/Destination Group 

未記入ならオブジェクト全体の指定クラスからコピー元となるオブジェクトセットを探す。

・Source/Destination Group Type

未記入ならオブジェクト全体の指定クラスからコピー先となるオブジェクトセットを探す。

・Match by Attribute / Attribute Match

コピー元と先に指定した名前のAttributeがある場合にアトリビュート値のコピーを行う。

・Attribute Name

コピーするAttribute名を指定

・Match P Attribute

ポイントのポジションである[P] Attributeの値も強制的にコピーするか指定

・Attribute Class

どのクラスのデータをコピーするか指定する。

・Copy Local Variable

ローカル変数名もまとめてコピーし、下流で使えるようにするか決定する。

Attributeを転送する

AttribTransferノードを使い、距離を元にAttributeを転送できる。

・Attributesタブ

20140504_01_11

一様に転送するAttributeの指定ができる。

・Conditionsタブ

20140504_01_12

距離に応じた転送が行える。

各パラメータの詳細は後日記載する

コメントを残す