On this page |
概要 ¶
VEXの構造体タイプ(通常は“struct”(構造体)と呼びます)は、 メンバー と呼ばれるサブデータの名前付き要素(整数、浮動小数点、ベクトル、マトリックス、他のStruct(構造体)など)で構成された複合データタイプです。
Struct(構造体)の 定義 は、テンプレートと同様にメンバーの名前、データタイプ、UIラベルを指定します。これは、ベクトルやマトリックスと同様に新しい データタイプ を定義します。そして、テンプレートの インスタンス を作成して、メンバーの値を設定します。
Struct、Struct Pack、Struct UnpackのノードによるVOPネットワーク内でStruct(構造体)を使うことができます。
Note
Houdini13では、Struct(構造体)はHoudiniで使われません。Structは複数のワイヤーを整理として束にするために主に役に立ちます。Houdiniの将来のバージョンでは、Structをもっと深く統合します。例えば、現在のところ複数のワイヤー接続で表現したランプとノイズの設定などの要素は、その代わりにStructとして表現することができます。
定義済みStructとアドホック(一時的な)Struct ¶
Houdiniは2通りの方法でVOP内のStructを扱うことができます。
-
“定義済み”Structは、Houdiniパス内のファイルに保存され、Houdiniのどこでも利用可能です。これは、2つ以上のネットワークで再利用/利用したい、またはネットワーク間で共有したいタイプで役に立ちます。Structノードを使うことで、定義済みStructのインスタンスを作成します。
-
“アドホック”(一時的な)Structは、“on-the-fly”(実行中)で作成され、そのノードを含むネットワーク内でのみ利用可能です。これは複数のワイヤーを束にしてネットワークを単純化したい時に役に立ちます。Struct Packノードを使ってアドホックStructのインスタンスを作成します。
ノード ¶
-
Structノードは、別々のワイヤーをStructワイヤーに束ねることができます。このノードは、 定義済みStructタイプ を指定(または作成)して、定義済みのメンバーに基づいて入力/出力を作成する必要があります。
Structノードを使えば、Structワイヤーの 束を解除して 別々のメンバーのワイヤーにすることもできます。
-
Struct Packノードは、別々のワイヤーをStructワイヤーに束ねることができます。Structノードとは違って、このノードは、定義済みStructタイプを指定する必要がありません。そのかわりに、任意の入力ワイヤーのタイプ(とパラメータで指定した名前)を使って、 アドホック(一時的な)Structタイプ を作成します。
-
Struct Unpackノードは、 名前で 入力Structワイヤーから個々のメンバーを展開します。通常では、Structノードを使ってStructワイヤーをメンバーのワイヤーに展開します。しかし、Structノードは位置によってメンバーを抽出するのに対して、このノードは、名前とタイプによってメンバーを抽出するので、 任意のStructタイプ を受け入れるアセット/サブネットワークを記述することができます。
入力Structに指定した名前のメンバーがあっても、そのタイプが間違えていれば、ネットワークでエラーが起きます。Houdiniでは出力のワイヤー接続が入力と同じタイプになるように明示的に必要なタイプを必ず設定しなければなりません(Houdiniは自動的に入力のStructタイプが何かに基づいて出力タイプを変更しません)。
How to ¶
To... | Do this |
---|---|
新しく定義したStructタイプを作成する |
|
定義済みStructのインスタンスを作成する |
|
アドホックStructを作成する |
|
Structから別々のワイヤーを抽出する |
|
名前によってStructから1つ以上のメンバーを抽出する |
|
Structメンバーの値を設定する |
|
Structメンバーの値を修正する |
|
アドホックStructのタイプのワイヤーを指定して、アドホックStructのインスタンスを新しく作成する |
|
役に立つ情報 ¶
-
Structにはデフォルトのワイヤーカラーがありますが、Structを編集する時に、そのStructタイプを持つワイヤーのカラーを指定することができます。
-
“手動で”ディスクのStruct定義ファイルを編集するには、ファイルの場所とフォーマットに関する情報を載せたStructをディスクに保存する方法を参照してください。
-
VOPデジタルアセットを作成する時、定義済みStructを入力と出力タイプとして指定することができます。
-
Houdiniがパス上の定義ファイルを検索するので(上記参照)、共有ネットワークをパスに設定すれば、シェーダを記述する人が使用するSITEの範囲まで使えるStructを定義することができます。
定義タイプの保存 ¶
Houdiniのどこでも利用可能な“定義済み”のStructタイプは、JSONファイルから読み込まれます。Houdiniは、HOUDINI_VOP_DEFINITIONS_PATH
環境変数で定義したパス内の*.json
ファイルを読み込みます。
デフォルトのパスは、HOUDINI_PATH/vop
です。Houdiniのエディタを使って作成したStructタイプのデフォルトファイルは、$HOME/HoudiniX.Y/vop/vopdefinitions.json
です。
Houdiniは、アセットにVopTypeDefinitions
という名前のセクションがあれば、アセットからStruct定義を読み込みます。このセクションには、ファイルと同じフォーマットでJSON
文字列を記述します。
以下の例に、Structタイプ定義ファイルの基本的な構造を載せています。メンバーのconnectorColor
キーとlabel
はオプションです。
{ "typeDefinitions": [ { "type": "struct", "typeName": "StructTest", "connectorColor": { "type": "RGB", "data": [0.25, 0.2, 0.9] }, "variables": [ { "typeName": "int", "name": "a" }, { "typeName": "vector", "name": "b", "label": "Label B" }, { "typeName": "matrix3", "name": "c" } ] } ] }
完全なフォーマットは、$HFS/houdini/vop/TypeDefinitions.json.schema
の“JSONスキーマ”ファイルに定義されています。
独自言語 ¶
JSON設定ファイルは、VOPsに対して独自言語を定義することもできます。
言語は、その言語に属しているVOPsの特定の外観や挙動を定義します。
例えば、言語は、VOPノードの入力/出力データタイプを(varying
だけでなく)uniform
データタイプに対応させるかどうかを決めます。
JSON設定ファイルは、独自言語を定義し、その外観を指定することができます。
言語を定義しその言語に名前を付ければ、VOPオペレータレンダーマスクにその名前を設定して、そのVOPをその言語に割り当てることができるようになります。 VOPs like ParameterやConstantなどのレンダーマスクを持たないVOPsは、作成された時に親から言語を継承します。 親サブネットに対して明示的に言語を設定したいのであれば、そのサブネットを作成するシェルフツール内にHOMのhou.VopNode.setShaderLanguageName()関数を使用すると良いでしょう。 Parameter VOPノードなどに直接その関数を使用することもできます。