On this page |
Houdiniのフェザーシステムは、多様なアトリビュートを使用して、形状、向き、クランプ(束)、分割、UV、フェザーの長さなどを制御します。 ほとんどのアトリビュートをカスタマイズすることができ、様々なWrangleやペイントなどを介して、独自の値を計算することができます。
例えば、TabメニューからGuide Process: Bend
ツールを追加し、その Operations タブを開きます。
最後の3つのパラメータには、デフォルトのNo Override
エントリを含むドロップダウンメニューがあります。
そのドロップダウンメニューを開き、 Guide Attribute を選択します。
このオプションは、ノードの 1番目 の入力から入力のアトリビュートを読み込みます。
また、アトリビュートを含む新しい Attrib パラメータも表示されます。
Random Angle パラメータの場合、それ関連のアトリビュートはanglerandscale
です。
そのドロップダウンは、ノード自身のパラメータが上書きできることを示しています。 Bend オペレータを使用すると、 Angle 、 Random Angle 、 Randomness Bias の上書きを定義することができます。
アトリビュートは、フェザー関連のドキュメントの多くのセクションで、既に重要な役割を果たしています。 例えば、ジオメトリマスクを作成する時や様々な羽枝(うし:Barb)の長さを設定する場合などです。 このページでは、アトリビュートを変更し、より詳細に制御するための一般的なテクニックをまとめています。
Geometry Spreadsheetは、オブジェクトのアトリビュートとその値を確認したり監視できる場所です。 また、ノードの ノード情報 ボタンをクリックすると、その現在のアトリビュートを確認することができます。 この情報は、すべてのアトリビュートが選択したノードに存続しているかどうかを確認するのに役立ちます。 また、情報ボックスでアトリビュートをクリックすれば、ビューポートでその値を確認することもできます。 アトリビュートに応じて、色分けされた頂点マップや数値として値が表示されます。
アトリビュートの転送 ¶
フェザーの状態(Condensed(縮約化)またはUncondensed(具現化))によって、アトリビュートは異なります。
フェザーをUncondensed(具現化)にすると、barborient
のようないくつかの重要なアトリビュートが失われます。
barborient
はグルーミング処理に不可欠なので、保持しなければなりません。
-
1つ目の解決策は、Feather Match Uncondensed SOPを追加して、フェザーネットワークを終了させることです。 このノードの 1番目 の入力をFeather Template from Shaft SOPに接続します。テンプレートノードからのすべてのアトリビュートが転送されます。
-
もう1つの方法では、Feather Uncondense SOPを選択し、 Attribute and Group Copy セクションを開きます。 Point Attributes に移動し、転送したいアトリビュートを追加します。
width barborient
のように、複数のアトリビュートはスペースで区切るようにしてください。
Attribute Create SOPを追加して、アトリビュートを作成およびプロモートさせることも可能です。
シグネチャ ¶
アトリビュートやオーバーライドを使って作業する時は、シグネチャを取り扱う必要があります。 パラメータには常に整数やベクトルなど特定の形式の値が必要です。 シグネチャを自分自身で指定しなければならないことも多いので、この区別は大変重要です。 シグネチャは、別名 データタイプ とも呼びます。 以下のテーブルには、よく使用するデータタイプをいくつか載せています。
シグネチャ |
説明 |
integer
|
小数点を除いた正の数、負の数、ゼロ(id 、segments など)
|
float
|
小数点を含む任意の数(density 、angle 、distance 、pscale など)
|
vector3
|
関連する3つの値(整数または浮動小数点)(position 、rotation 、color 、uv 、normal など)
|
vector4
|
関連する4つの値(通常は浮動小数点)(orientation 、color4 (カラー+アルファ)など)
|
string
|
数値も文字として扱われる文字列(name 、path など)
|
アトリビュートを制御する ¶
この標準的なワークフローでは、アトリビュートを操作し、その結果をノードに接続して特定のパラメータを駆動する方法を説明しています。 このガイドの基本は、下図のような任意のフェザーです。 これは、フェザーアトラスを作成するページからの Uncondensed(具現化) の綿羽(Down)で、羽軸(Shaft)、左の羽枝(Barb)、右の羽枝(Barb)に分かれています。
Note
簡略化のために、以下の手順はフェザーの 左 の羽枝(Barb)に対してのみ実行されます。 右の羽枝(Barb)については手順を繰り返す必要がありますが、異なるパラメータ値が必要になる場合もあります。 マスクと羽軸(Shaft)もここでは考慮しません。
以下が、Uncondensed(具現化)フェザーの関連部分です。左右の羽枝(Barb)に分かれています。
Attribute Noise ¶
最初の例では、Attribute Noise SOPを使用して、羽枝(Barb)の長さをランダムにします。 ここで使用する方法は、実際にはGuide Process SOP内部で起きていることです。 違いは、すべてのノイズパラメータに直接アクセスできることと、アトリビュート名をカスタマイズできることです。
-
Guide Process SOPの Operations タブで、 Operation を Set Length に設定します。
-
Length パラメータの 最初 のドロップダウンに移動し、それを Guide Attribute に変更します。新しい Length Attrib パラメータが表示され、
length
がデフォルトで含まれます。 -
Attribute Noise SOPを追加し、
barbs_left
とguideprocess1
の間に配置して接続します。 -
General セクションで、 Attribute Names を
length
に変更し、シグネチャドロップダウンが Float に設定されていることを確認します。 -
Noise Value セクションに移動します。 Range Values ドロップダウンから Min/Max を選択します。
-
Min Value を
0.5
、 Max Value を1
などに設定します。この値は、フェザーの形状やスケールに応じて変えて構いません。どちらの値にも、Guide Attribute SOPの Length パラメータが乗算されます。 Length を変更する場合は、ここで最小値と最大値のパラメータも調整する必要があります。
フェザーの形状によっては、以下の中央の図のように違いがほとんど分からない場合も少なくありません。 フェザーがより幅広く見えたり、羽弁(うべん:Vane)の終点付近に変形が見られることもあります。
-
羽枝(Barb)をランダム化するために Noise Pattern セクションを開きます。 Element Size はノイズのサイズを定義します。非常に細かい羽枝(Barb)に比べると、デフォルト値の
1
は大きすぎます。変化を付けるために、その値を小さくします。以下の画像では、0.002
に設定されています。
左の画像は元の状態です。 中央の画像では、 Min Value および Max Value の影響を確認でき、右側の画像ではランダムにされた羽枝(Barb)を確認できます。
Attribute Wrangle ¶
Attribute Wrangle SOPを使用すると、カスタムのVEXコードを記述し、アトリビュートとその値を操作できます。 非常に汎用性の高い方法ですが、スクリプト言語の知識も必要になります。
Note
前の章でAttribute Noise SOPをシーンに追加した場合は、削除してください。
-
Attribute Wrangle SOPを追加し、
barbs_left
とguideprocess1
の間に配置して接続します。 -
VEXpression フィールドに、
@length = fit(rand(@ptnum), 0, 1, 0.5, 1.1);
と入力します。
このスクリプトは、乱数を@length
アトリビュートに割り当てます。
rand()
関数は、0から1の乱数を作成します。
各羽枝(Barb)で異なるランダム値を取得するために、現在のポイント番号@ptnum
がシードとして使用されます。
fit()
関数は、値の範囲をリマップします。
-
最初の値は乱数です。
-
0, 1
は、rand()
関数で生成される値の範囲を定義します。 -
0.5, 1.1
は、羽枝(Barb)に適用される、リマップされた値です。つまり、各羽枝(Barb)は、0.5から1.1のランダムな@length
アトリビュートを持つことになります。この値は、ノイズノードの Min Value および Max Value パラメータを表します。
乱数の計算方法が異なっているため、Attribute Noiseを使用する方法とは異なる結果になることがあります。
機能拡張 ¶
リマップされた最小値/最大値を調整するカスタムパラメータを定義することで、スクリプトをよりユーザフレンドリーにすることもできます。 VEXpression フィールドで、現在の行を次のコードに置き換えます。
// カスタムパラメータを作成する float min_value = chf("min_value"); float max_value = chf("max_value"); // 入力を使用して@lengthを駆動します @length = fit(rand(@ptnum), 0, 1, min_value, max_value);
このスクリプトは、min_value
とmax_value
という2つのfloatパラメータを作成します。
どちらの変数もWrangleの範囲内でのみ有効です。
@
タグは、変数がアトリビュートであり、他の下流ノードにプロモートされることを示します。
パラメータをWrangleのUIに追加するには、 Creates spare parameters of… をクリックします。
以前のバージョンのfit()
関数の固定値(0.5, 1.1
)は、変数に置き換えられています。
これにより、数値で値を変更したり、パラメータのスライダをドラッグしてインタラクティブに値を変更できるようになりました。
その他のオペレータ ¶
Attribute NoiseおよびAttribute Wrangleの章の例は、 Bend や Frizz など、Guide Process SOPの他のオペレータでも使用できます。
ノイズメソッドは、上記の章で説明したのと同じように機能します。 Attribute Names 、 Range Values のタイプ、そしておそらく Element Size だけ変更する必要があります。 通常はそれだけで十分です。
Wrangleの方は異なります。 各自の要件次第で、VEXスクリプトの複雑さが決まるからです。 上記の例のような基本的な機能であれば、スクリプトの機能拡張バージョンが汎用性の高いテンプレートとなります。
例えば、 Bend オペレーションをランダム化したい場合は、 Angle パラメータをカスタムのanglescale
アトリビュートで上書きします。
ここでは、度とラジアンの2つのオプションがあります。
度は、30°、45°、90°のような角度を使用します。
一方、ラジアン(input_value * 180 / PI
)は0から1の範囲で、入力値を度に再変換するためのdegrees()
関数が必要です。
どちらのアプローチも有効で、好きな方を使用して構いません。1行目のコードは、度単位で値を入力できるカスタムパラメータを作成します。2行目ではラジアンメソッドを使用しています。
-
@anglescale = fit(rand(@ptnum),0.0, 1.0, 0, chf("random_angle"));
-
@anglescale = fit(rand(@ptnum),0.0, 1.0, 0, degrees(chf("random_angle")));
Attribute Create SOP ¶
ネットワークの任意のポイントでアトリビュートを維持したり作成するためのもう1つの方法は、Attribute Create SOPを追加することです。
新しいアトリビュートを作成したり、羽軸(Shaft)のwidth
やフェザーのname
といった既存のアトリビュートを上書きすることができます。
Attribute Create SOPでは、 Number of Attributes パラメータを使用して複数のアトリビュートを定義することができます。 すべてのカスタムアトリビュートを単一のノードで管理できるので、このオプションは非常に便利です。
barborient ¶
このPointアトリビュートはクォータニオン(vector4
)で、Houdiniのフェザーシステムの中心的な要素です。
その名前の通り、このアトリビュートはフェザーの羽枝(Barb)の向きを制御します。
フェザーをUncondensed(具現化)にすると、このアトリビュートは削除されるため、転送しなければなりません。
名前 ¶
名前は、複数のフェザーを区別するのに役立つため、フェザーアトラスの作成時に重要です。 名前をビューポートに表示することで、テンプレートを直接、視覚的に制御することができます。名前を付ける方法はいくつかあります。
-
Feather Template from Shape SOPの Name パラメータを使用します。
-
Name SOPを追加します。
-
Feather Template from Shape SOPの 3番目 のLabel Points入力を使用します。
フェザーをUncondensed(具現化)にすると、すべてのname
アトリビュートが削除されることに注意してください。
Feather Uncondense SOPノードはフェザーのジオメトリを変更し、大量のポイントを作成します。
そのため、このノードは非常に選択的にアトリビュートを使用しますが、name
アトリビュートを転送することは可能です。
id ¶
id
Primitiveアトリビュートは、 Uncondensed(具現化) フェザーでのみ作成されます。
アトリビュートがない場合は、Feather Uncondense SOPの Attribute and Group Copy ▸ Create Output Id From Primitive Number Curve Id Missing がオンになっているかどうかを確認してください。
各フェザーは独自のid
アトリビュートを取得し、羽枝(Barb)のカーブはそのアトリビュートを継承します。
羽枝(Barb)を列挙したい場合は、カスタムのPrimitiveアトリビュートが必要です。
最も便利なのは、Feather Uncondense SOPの 後に Enumerate SOPを追加する方法です。
Attribute には、index
やbarbid
のような名前を入力します。
UV ¶
デフォルトで、Feather Template from Shape SOPの Add Barb UV Attributes はオンになっており、uv
アトリビュートが作成されます。このアトリビュートは、フェザーをUncondensed(具現化)にした後も維持されます。
デフォルトのUVセットを使用したくない場合は、カスタムUVを作成できます。詳細は、フェザーのUVとテクスチャのページを参照してください。
width ¶
羽軸(Shaft)の幅は、Feather Template from Shape SOPを介して調整することができます。
Shaft セクションに、 Width Root と Width Tip があります。
そこに入力した値は、width
アトリビュートという形で羽軸(Shaft)のポイントに書き込まれます。
width
アトリビュートは、フェザーをUncondensed(具現化)にした後も維持されます。
グループ ¶
Houdiniのフェザーシステムは、デフォルトグループをいくつか作成します。 ネットワーク全体を通して維持されるグループもあれば、例えばフェザーをUncondensed(具現化)にした後などに削除されるグループもあります。
グループ |
説明 |
profile
|
羽枝(Barb)の伸びる方向を制御できるプロファイルカーブを含みます。維持されません。 |
shape
|
フェザーの左右の羽弁(Vane)の輪郭となる2つのカーブを含みます。維持されません。 |
shaft
|
羽軸(Shaft)のカーブを含みます。 |
barbs
|
フェザーをUncondensed(具現化)にした後の羽枝(Barb)のポイントを含みます。barbs を上書きして、barbsl やbarbsr などの左右の羽枝(Barb)のグループを作成できます。
|