Houdini 20.0 Feathers(羽根)

フェザーのアトリビュートとグループ

On this page

Houdiniのフェザーシステムは、多様なアトリビュートを使用して、形状、向き、クランプ(束)、分割、UV、フェザーの長さなどを制御します。 ほとんどのアトリビュートをカスタマイズすることができ、様々なWrangleやペイントなどを介して、独自の値を計算することができます。

例えば、TabメニューからGuide Process: Bendツールを追加し、その Operations タブを開きます。 最後の3つのパラメータには、デフォルトのNo Overrideエントリを含むドロップダウンメニューがあります。 そのドロップダウンメニューを開き、 Guide Attribute を選択します。 このオプションは、ノードの 1番目 の入力から入力のアトリビュートを読み込みます。 また、アトリビュートを含む新しい Attrib パラメータも表示されます。 Random Angle パラメータの場合、それ関連のアトリビュートはanglerandscaleです。

そのドロップダウンは、ノード自身のパラメータが上書きできることを示しています。 Bend オペレータを使用すると、 AngleRandom AngleRandomness 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 小数点を除いた正の数、負の数、ゼロ(idsegmentsなど)
float 小数点を含む任意の数(densityangledistancepscaleなど)
vector3 関連する3つの値(整数または浮動小数点)(positionrotationcoloruvnormalなど)
vector4 関連する4つの値(通常は浮動小数点)(orientationcolor4(カラー+アルファ)など)
string 数値も文字として扱われる文字列(namepathなど)

アトリビュートを制御する

この標準的なワークフローでは、アトリビュートを操作し、その結果をノードに接続して特定のパラメータを駆動する方法を説明しています。 このガイドの基本は、下図のような任意のフェザーです。 これは、フェザーアトラスを作成するページからの Uncondensed(具現化) の綿羽(Down)で、羽軸(Shaft)、左の羽枝(Barb)、右の羽枝(Barb)に分かれています。

Note

簡略化のために、以下の手順はフェザーの の羽枝(Barb)に対してのみ実行されます。 右の羽枝(Barb)については手順を繰り返す必要がありますが、異なるパラメータ値が必要になる場合もあります。 マスクと羽軸(Shaft)もここでは考慮しません。

以下が、Uncondensed(具現化)フェザーの関連部分です。左右の羽枝(Barb)に分かれています。

画像をクリックすると拡大します。

Attribute Noise

最初の例では、Attribute Noise SOPを使用して、羽枝(Barb)の長さをランダムにします。 ここで使用する方法は、実際にはGuide Process SOP内部で起きていることです。 違いは、すべてのノイズパラメータに直接アクセスできることと、アトリビュート名をカスタマイズできることです。

  1. Guide Process SOPの Operations タブで、 OperationSet Length に設定します。

  2. Length パラメータの 最初 のドロップダウンに移動し、それを Guide Attribute に変更します。新しい Length Attrib パラメータが表示され、lengthがデフォルトで含まれます。

  3. Attribute Noise SOPを追加し、barbs_leftguideprocess1の間に配置して接続します。

  4. General セクションで、 Attribute Nameslengthに変更し、シグネチャドロップダウンが Float に設定されていることを確認します。

  5. Noise Value セクションに移動します。 Range Values ドロップダウンから Min/Max を選択します。

  6. Min Value0.5Max Value1などに設定します。この値は、フェザーの形状やスケールに応じて変えて構いません。

    どちらの値にも、Guide Attribute SOPの Length パラメータが乗算されます。 Length を変更する場合は、ここで最小値と最大値のパラメータも調整する必要があります。

    フェザーの形状によっては、以下の中央の図のように違いがほとんど分からない場合も少なくありません。 フェザーがより幅広く見えたり、羽弁(うべん:Vane)の終点付近に変形が見られることもあります。

  7. 羽枝(Barb)をランダム化するために Noise Pattern セクションを開きます。 Element Size はノイズのサイズを定義します。非常に細かい羽枝(Barb)に比べると、デフォルト値の1は大きすぎます。変化を付けるために、その値を小さくします。以下の画像では、0.002に設定されています。

左の画像は元の状態です。 中央の画像では、 Min Value および Max Value の影響を確認でき、右側の画像ではランダムにされた羽枝(Barb)を確認できます。

Attribute Wrangle

Attribute Wrangle SOPを使用すると、カスタムのVEXコードを記述し、アトリビュートとその値を操作できます。 非常に汎用性の高い方法ですが、スクリプト言語の知識も必要になります。

Note

前の章でAttribute Noise SOPをシーンに追加した場合は、削除してください。

  1. Attribute Wrangle SOPを追加し、barbs_leftguideprocess1の間に配置して接続します。

  2. 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_valuemax_valueという2つのfloatパラメータを作成します。 どちらの変数もWrangleの範囲内でのみ有効です。 @タグは、変数がアトリビュートであり、他の下流ノードにプロモートされることを示します。

パラメータをWrangleのUIに追加するには、 Creates spare parameters of… をクリックします。

以前のバージョンのfit()関数の固定値(0.5, 1.1)は、変数に置き換えられています。 これにより、数値で値を変更したり、パラメータのスライダをドラッグしてインタラクティブに値を変更できるようになりました。

その他のオペレータ

Attribute NoiseおよびAttribute Wrangleの章の例は、 BendFrizz など、Guide Process SOPの他のオペレータでも使用できます。

ノイズメソッドは、上記の章で説明したのと同じように機能します。 Attribute NamesRange 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(具現化)にすると、このアトリビュートは削除されるため、転送しなければなりません。

名前

名前は、複数のフェザーを区別するのに役立つため、フェザーアトラスの作成時に重要です。 名前をビューポートに表示することで、テンプレートを直接、視覚的に制御することができます。名前を付ける方法はいくつかあります。

フェザーを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 には、indexbarbidのような名前を入力します。

UV

デフォルトで、Feather Template from Shape SOPの Add Barb UV Attributes はオンになっており、uvアトリビュートが作成されます。このアトリビュートは、フェザーをUncondensed(具現化)にした後も維持されます。

デフォルトのUVセットを使用したくない場合は、カスタムUVを作成できます。詳細は、フェザーのUVとテクスチャのページを参照してください。

width

羽軸(Shaft)の幅は、Feather Template from Shape SOPを介して調整することができます。 Shaft セクションに、 Width RootWidth Tip があります。 そこに入力した値は、widthアトリビュートという形で羽軸(Shaft)のポイントに書き込まれます。

widthアトリビュートは、フェザーをUncondensed(具現化)にした後も維持されます。

グループ

Houdiniのフェザーシステムは、デフォルトグループをいくつか作成します。 ネットワーク全体を通して維持されるグループもあれば、例えばフェザーをUncondensed(具現化)にした後などに削除されるグループもあります。

グループ

説明

profile 羽枝(Barb)の伸びる方向を制御できるプロファイルカーブを含みます。維持されません。
shape フェザーの左右の羽弁(Vane)の輪郭となる2つのカーブを含みます。維持されません。
shaft 羽軸(Shaft)のカーブを含みます。
barbs フェザーをUncondensed(具現化)にした後の羽枝(Barb)のポイントを含みます。barbs上書きして、barbslbarbsrなどの左右の羽枝(Barb)のグループを作成できます。

Feathers(羽根)

基本セットアップ

描画とシェイピング

ブラッシングとグルーミング

シミュレーション

テクスチャとレンダリング

ツール

動画