IndyZone Cafe 6/9 質問回答 (アトリビュートの設定について)


2021年6月9日(水)に第3回IndyZone Cafeを開催させていただきました。
アンケートで、以下のご質問がありましたので、記事にしました。

==============================================================
Q. アトリビュート名は小文字、大文字の区別がいまひとつ慣れず、よくエラーになります。
何かルールがあれば教えていただきたいです。

A. アトリビュート名が小文字であること、大文字であることには特に規則性はありません。
ただし、Houdiniにおけるアトリビュートには、「組み込みアトリビュート」と呼ばれる予め役割が定義されている
アトリビュートがあります。
==============================================================

Houdiniにおけるアトリビュートとは、ジオメトリコンポーネント(Points、Vertices、Primitives、Detail)に記録される名前のついた値を指します。

例えばモデリングの場合、モデルを構成しているポリゴンの向きを判断するためには、法線ベクトル情報が必要です。この情報は「N」という名前でポイントや頂点に保存されます。また、カーブに対して厚みをつけるためには、「pscale」もしくは「width」という名前のアトリビュートが役立ちます。

シミュレーションの場合、DOP階層内で計算を行うための初期値をSOP階層内で用意する必要があります。
例えば、煙の密度情報を制御する場合は、よく「density」という名前のアトリビュートとして設定されます。
この数値がDOP Network内で毎フレーム計算される際に考慮されることで、シミュレーションは進行します。

一部ですが、例として上記のような数値の保持や処理を行うことできます。

Houdiniのアトリビュートは大きく分けて、型による区別、値を記録できるジオメトリコンポーネントによる区別、
組み込みアトリビュート(予めHoudini内に用意されている既知のアトリビュート)による区別の3つがあります。

今回は、Pyroシミュレーションの作成時によく使用するアトリビュートやPyroシミュレーションと組み合わせて
使用するSOPノードを説明します。

1.組み込みアトリビュートについて

Houdiniにおけるアトリビュートには、「組み込みアトリビュート」と呼ばれる予め役割が定義されている
アトリビュートがあります。
ここでは、組み込みアトリビュートの中でもよく使用されるものを一覧としてまとめています。

※他にも、組み込みアトリビュートは多数用意されていますが、その中でも特に使用する機会が多いアトリビュートをまとめました。

ご注意▼

組み込みアトリビュートはスペルが予め決まっているので、使用時の大文字小文字の区別には注意して下さい。

また、先に作成したアトリビュート名と後に作成したアトリビュート名がスペルミス等で異なる場合にはエラー扱いとなります。

よく使用される組み込みアトリビュート一覧▼

アトリビュート名(スペル) 詳細
vector P ポイントの座標位置
vector rest 1フレーム目のポイント座標位値
vector N 法線
vector v 速度ベクトル
vector Cd 色情報(RGB)
vector uv UV座標
vector up パーティクル/ポイントの向き
float pscale レンダリング時のポイントのサイズ
float width カーブの線幅
float Alpha 透明度(A)
string name 取得したプリミティブの名前

補足▼

組み込みアトリビュートはAttribute Wrangle SOP等で記述を行う際に、float型であれば「f@」、int型であれば「i@」、
vector型であれば「v@」のような型の宣言を行わずに使用することができます。

2.アトリビュートの作成について

「Pyro Source SOP」「Pyro Burst Source SOP」「Pyro Trail Source SOP」ではノード上で「Attribute」パラメータの
プルダウンメニューから、作成するアトリビュート名を選択できます。

以下では、それぞれのノードについて作成可能なアトリビュート、ノード追加時に自動で作成されるアトリビュート等について説明します。

ジオメトリコンポーネントとは、アトリビュートを持たせることができるジオメトリ要素(Point、Vertices、Primitives、Detail)のことを指します。

※組み込みアトリビュートに該当するアトリビュートには「*」を付けて表記しています。

一覧の各項目の意味合い▼

アトリビュート名 詳細 ジオメトリコンポーネント
float(浮動小数値)
integer(整数値)
vector(3つの数値からなる値)
アトリビュート名の
スペル
各アトリビュートの意味 アトリビュートが与えられる
ジオメトリコンポーネント

2.1「Pyro Source SOP」を使用したアトリビュートの作成

Attributeパラメータから作成可能なアトリビュート▼

アトリビュート名 詳細 ジオメトリコンポーネント
vector Cd* 色情報 Points
vector v* 速度ベクトル Points
float density 密度 Points
float temperature 温度 Points
float burn 燃焼 Points
float fuel 燃料 Points
float Alpha* 透明度 Points

ノード追加時に自動で作成されるアトリビュート▼

アトリビュート名 詳細 ジオメトリコンポーネント
float pscale* ポイントのサイズ Points
group:particles 入力されたポイントに設定されるグループ名 Points

※こちらのアトリビュートは「Pyro Source SOP」追加時に、ポイントに対して自動で追加されるアトリビュートです。「Attribute」パラメータの設定とは関係なく追加されます。

補足1▼

プルダウンメニュ—内に「Custom」コンポーネントが用意されています。
そのため、上記以外の任意のアトリビュートを作成することも可能です。

補足2▼

「Cd*」、「v*」、「Alpha*」、「pscale*」は組み込みアトリビュートのため、任意にアトリビュート名を変更して値を
持たせることはできません。

2.2「Pyro Burst Source SOP」を使用したアトリビュートの作成

Attributeパラメータから作成可能なアトリビュート▼

アトリビュート名 詳細 ジオメトリコンポーネント
vector Cd* 色情報 Points
float density 密度 Points
float temperature 温度 Points
float divergence 発散 Points
float burn 燃焼 Points
float Alpha* 透明度 Points

補足▼

「Cd*」と「Alpha*」は組み込みアトリビュートのため、任意にアトリビュート名を変更して値を持たせることはできません。
一方で、「density」「temperature」「divergence」「burn」については、任意のアトリビュート名に変更した後に値を持たせた場合でも、シミュレーションを動作させることができます。

追加アトリビュート (「Output Attributes」タブ)▼

アトリビュート名 詳細 ジオメトリコンポーネント
string source_name アトリビュート名の保持 Points
float pscale* ポイントのサイズ Points
vector v* 速度ベクトル Points
float agen ポイントの生死を判定する0から1の範囲の数値 Points
float trailingpos 軌道に沿った各ソースポイントの位置 Points
vector rest* Burstの開始時点における各ポイントの位置 Points
integer burstid 「Randomization By」パラメータで使用されている値 Points

補足▼

追加アトリビュートの作成は「Output Attribute」タブから行えます。
組み込みアトリビュートである「v*」「pscale*」以外は、パラメータからアトリビュート名の変更ができます。
例外として、「rest*」も任意のアトリビュート名に変更できます。

2.3「Pyro Trail Source SOP」を使用したアトリビュートの作成

Attributeパラメータから作成可能なアトリビュート▼

アトリビュート名 詳細 ジオメトリコンポーネント
vector Cd* 色情報 Points
float density 密度 Points
float temperature 温度 Points
float divergence 発散 Points
float burn 燃焼 Points
float Alpha* 透明度 Points

補足▼

「Cd*」と「Alpha*」は組み込みアトリビュートのため、任意にアトリビュート名に変更して値を持たせることはできません。
一方で、「density」「temperature」「divergence」「burn」については、任意のアトリビュート名に変更した後に値を持たせた場合でも、シミュレーションを動作させることができます。

追加アトリビュート (「Output Attributes」タブ)▼

アトリビュート名 詳細 ジオメトリコンポーネント
string source_name アトリビュート名の保持 Points
float pscale* ポイントのサイズ Points
vector v* 速度ベクトル Points
float agen ポイントの生死を判定する0から1の範囲の数値 Points
float trailingpos 軌道に沿った各ソースポイントの位置 Points
vector rest* Burstの開始時点における各ポイントの位置 Points
integer burstid 「Randomization By」パラメータで使用されている値 Points

補足▼

追加アトリビュートの作成は「Output Attribute」タブから行えます。
組み込みアトリビュートである「v*」「pscale*」以外は、パラメータからアトリビュート名の変更ができます。
例外として、「rest*」も任意のアトリビュート名に変更できます。

2.4「Pyro Trail Path SOP」を使用したアトリビュートの作成

追加アトリビュート (「Output Attributes」タブ)▼

アトリビュート名 詳細 ジオメトリコンポーネント
integer trailid 生成されたパス毎の固有ID Primitives
integer trailidx 生成された軌道のインデックス番号 Primitives
float launchspeed 各軌道の始点における
速度ベクトルの長さ
Primitives
float endtime 軌道が終了した時間 Primitives
float burstid 「Randomization By」パラメータで使用されている値 Primitives

補足▼

「Pyro Trail Path SOP」の「Output Attribute」タブで追加可能なアトリビュートは、ポリゴン辺に対して保存されます。そのため、ジオメトリコンポーネントとしては「Primitives」に対して保存される形になります。

3.カスタマイズアトリビュートについて

「Pyro Burst Source SOP」「Pyro Trail Source SOP」「Pyro Trail Path SOP」には、各ノードで扱うことができる専用のカスタマイズアトリビュートが存在します。
ここで使用されるアトリビュートは少し特殊で、パラメータに入力する数値の代わりとして使用することができます。

また、これらのアトリビュートは保持できる数値範囲が決められている場合があります。

※組み込みアトリビュートに該当するアトリビュートには「*」を付けて表記しています。

一覧の各項目の意味合い▼

パラメータ名 設定可能な数値範囲 アトリビュート名
各ノード上のパラメータの名前 アトリビュートに設定できる
数値の範囲
float(浮動小数値)
integer(整数値)
vector(3つの数値からなる値)
アトリビュートの名前とスペル

3.1  カスタムアトリビュートの使い方

ここでは、「startframe」アトリビュートを例に説明します。

1. 発生位置をポイントで決定します。ここでは、「Add SOP」で発生位置を決めています。

2. 例として「Pyro Trail Path SOP」を作成します。

3.「Trail Generation」タブの「Start Frame」パラメータを、事前に作成した「startframe」アトリビュートの値で調整できるように設定します。

「Attribute Wrangle SOP」を追加し、以下の簡単なVEXpressionを入力します。
以下のVEXpressionは、アニメーションを24フレーム目から開始させるために記述します。例えば、10フレーム目から開始させたい場合は、「f@startframe=10.0;」と入力することになります。

VEXpression▼

f@startframe = 24.0;

4. 「Pyro Trail Path SOP」上の「Start Frame」パラメータに戻り、「Set Uniform」(パラメータで数値を入力するモード)を「Use Attribute」(アトリビュートの数値を入力値とするモード)に切り替えます。

5. アニメーションの開始フレームが24フレーム目に変更されます。

ここでは「startframe」アトリビュートを例にとりましたが、各パラメータの隣に下の画像のようなプルダウンメニューが用意されている場合は、制御用のカスタムアトリビュートが用意されており、アトリビュートによる制御が可能です。

3.2「Pyro Burst Source SOP」のカスタムアトリビュート

ここでは、「Pyro Burst Source SOP」内で扱うことができるカスタムアトリビュートと対応するパラメータを一覧を
説明します。

パラメータ▼

カスタマイズアトリビュート一覧▼

パラメータ名 設定可能な数値範囲 アトリビュート名
① Initial Size 0以上 float pscale*
② Direction (-1,-1,-1)~(1,1,1) vector N*
③ Spread Angle 0~180 float spread_angle
④ Roundness 0~1 float roundness
⑤ Number of Tailings 0以上 integer trailingnum
⑥Trailing Separation 0.001以上 float trailingsep
⑦Start Frame float startframe
⑧Frame Duration 1以上 integer life
⑨ Outward Expansion 0以上 float expansion_outscale
⑩ Directional Expansion 0以上 float expansion_dirscale

補足▼

一部のカスタマイズアトリビュートでは、組み込みアトリビュートを参照する仕様となっています。(例:pscale*、N*)

3.3「Pyro Trail Source SOP」のカスタムアトリビュート

ここでは、「Pyro Trail Source SOP」内で扱うことができるカスタムアトリビュートと対応するパラメータの一覧を
説明します。

パラメータ▼

カスタマイズアトリビュート一覧▼

パラメータ名 設定可能な数値範囲 アトリビュート名
① Point Separation 0以上 float trailingsep
② Lengh 0以上 float trail_length
③ Radius 0以上 float trail_radius
④ Start Frame float startframe
⑤ Speed 0以上 float speed
⑥ Fade by Age 0以上 float fade_startage

補足▼

⑥は「Scale Along Trailing」オプションと「Scale Further Using Age」オプションの両方が有効になっている場合に表示されます。

3.4「Pyro Trail Path SOP」のカスタムアトリビュート

ここでは、「Pyro Trail Path SOP」内で扱うことができるカスタムアトリビュートと対応するパラメータの一覧を
説明します。

パラメータ▼

カスタマイズアトリビュート一覧▼

パラメータ名 設定可能な数値範囲 アトリビュート名
① Initial Size 0以上 float pscale*
② Direction (-1,-1,-1)~(1,1,1) vector N*
③ Number of Trails 0以上 integer copynum
④ Spread Start Angle 0~180 float spread_startangle
⑤ Spread Angle 0~180 float spread_angle
⑥ Azimuth Start Angle 0~360 float azimuth_startangle
⑦ Azimuth Angle 0~360 float azimuth_angle
⑧ Line Start 0以上 float line_start
⑨ Line Length 0以上 float line_length
⑩ Velocity Scale 0以上 float vscale
⑪ Drag 0以上 float drag
⑫ Mass 0以上 float mass
⑬ Start Frame float startframe
⑭ Trail Duration 0以上 float life
⑮ Speed Scale 0以上 float speed

補足1▼

⑧、⑨は「Shape」パラメータが「Line」タイプに切り替わっている場合に表示されます。

補足2▼

一部のカスタマイズアトリビュートでは、組み込みアトリビュートを参照する仕様となっています。(例:pscale*、N*)

ここまで、アトリビュートの区別やルールについて、簡単ですが紹介しました。

今回は、Pyroシミュレーションにおけるアトリビュート設定に焦点を当て、間違いやすいアトリビュート名や
アトリビュートの扱いについてまとめました。

基本的にアトリビュート名は数値を区別するための名前に過ぎませんが、組み込みアトリビュートのように名前自体が意味を持つアトリビュートも存在しています。

HoudiniのPyroシミュレーションを行う際にご参考にしていただければと思います。