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シミュレーションを行う際にご参考にしていただければと思います。