Houdini 20.0 Feathers(羽根)

綿羽(Down)のデザイン

On this page

このやや複雑なプロジェクトでは、いわゆるUncondensed(具現化)の状態にある、分割された羽弁(うべん:Vane)を持つフェザーを作成する方法を紹介します。 この状態では、羽枝(うし:Barb)はポイントを含む実際のカーブジオメトリで構成されます。 仮の羽枝(Barb)を持つCondensed(縮約化)のワークフローとはいくつか違いがあります。 作成したいフェザーに最適なソリューションを選択できますが、フェザーアトラスを作成するときは、どちらか一方の方法を使用することを推奨します。 このUncondensed(具現化)の例では、

綿羽(Down)は、羽枝(Barb)の構造が異なっていることから、他のフェザーと同じではありません。 完全に不規則な綿羽(Down)があり、規則的な部分へと徐々に遷移しています。 また、綿羽(Down)は羽軸(Shaft)が短く、弾力性に富んでいます。 綿羽(Down)のルックや特徴は多種多様ですが、共通する特徴もいくつかあります。 ふわふわした綿羽(Down)の羽枝(Barb)は、

リファレンス画像

出発点となるのはリファレンス画像です。様々なフェザー(羽根)タイプの優れた写真を集めた無料のリソースが豊富に用意されています。

Note

鳥の羽根の採取が禁止されている国は多くあります。 たとえ地面に落ちている1枚のフェザー(羽根)であってもです。 これは、羽根を目的に鳥が捕獲されるのを防ぎ、絶滅危惧種を保護するためです。この理由から、リファレンス写真は既に保存されているものに限定しましょう。

このプロジェクトのフェザーは、典型的な遷移形態を採用しています。 綿羽(Down)には、ふわふわした部分と規則的な部分があり、下の方ではそれらが混在しています。 そこでは、規則正しく並んだ羽枝(Barb)の間から、ふわふわした構造が長く伸びています。 また、このふわふわした羽枝(Barb)は、根元付近の方が短くなっています。 さらに、左側の綿羽(Down)の先端は乱れていますが、右側の羽枝(Barb)はほとんど同じ長さです。 隙間や引裂も、左側の方が多いです。羽軸(Shaft)の幅は全体的に変わりません。

リファレンス画像をロードするには、以下の操作を行ないます。

  1. マウスカーソルをビューポートに移動し、2を押してTopビューに切り替えます。フェザーはHoudiniのXZ空間で のみ 作成できます!

  2. Dを押して、 ディスプレイオプション を開きます

  3. Background タブを開き、 Top タブをクリックします。

  4. Disk File がオンになっていることを確認し、アイコンをクリックしてリファレンス画像をロードします。

  5. Image OffsetImage Scale パラメータを使用して、リファレンス画像を配置およびスケールします。フェザーの元のスケールに注意してください。

フェザーをトレースする

Note

リファレンス画像からフェザーの形状をトレースするために必要な手順とノードは、フェザーを描画するのページですべて説明しています。 描画ガイドに従ってプロファイルまで手順を進めたら、このページに戻って綿羽(Down)を作成するから続けてください。

フェザーをトレースするワークフローは、すべてのフェザータイプで同じです。

  • フェザーカーブは必ずGeometry OBJレベル内にあります。 obj レベルに移動し、Geometry SOPを選択します。 Misc タブを開き、 Shade Open Curves in Viewport をオンにして、羽枝(Barb)が見えるようにします。その後、再びGeometryノードの中に入ります。

  • Curve SOPを使用して、フェザーの羽軸(Shaft)と輪郭を描画します。ここではBezierまたはNURBSが最適です。

  • カーブを微調整して、形状を仕上げます。

  • リファレンス画像に従って、プロファイルを追加し、羽枝(Barb)を形成します。

綿羽(Down)を作成する

次の手順では、カーブをグループ化してから、フェザーにします。

  1. Feather Shape Organize SOPを追加します。

  2. その 1番目 の入力をcurve1の出力に接続します。

    このノードにはパラメータはありませんが、Geometry Spreadsheetを開き、アイコンをクリックすると、作成されたshaftおよびshapeグループを確認できます。

  3. Feather Template from Shape SOPを追加し、その入力をFeather Shape Organizeの出力に接続します。UVグリッドとともにソリッドオブジェクトが表示されるはずです。

羽枝(Barb)を調整する

羽枝(Barb)が非常に太いせいで、羽枝(Barb)の数が不十分であるうえ、ギザギザが目立ちます。 これを解決するために、Feather Template from Shape SOPに対して変更を加えます。

  1. 羽枝(Barb)を細くしてギザギザを取り除くには、 Width Root および Width Tip0.0003に変更します。

  2. “骸骨”のようなルックを修正するため、 Barb Density5000に設定します。これで十分なディテールを含む、密集したフェザーになります。

  3. 最後に、 Barb Segments5に上げて、より滑らかな曲率にします。

左の画像は比較用です。中央の画像ではカーブを確認でき、右の画像では羽枝(Barb)を確認できます。

Uncondensed(具現化)にする

仮の(=Condensed:縮約表現された)羽枝(Barb)を実際のジオメトリに変換するには、ノードが1つだけ必要です。

  1. Feather Uncondense SOPを追加します。

  2. その 1番目 の入力を上流のFeather Template from Shape SOPに接続します。 1番目 の出力をMerge SOPまたはNull SOPの入力に接続します。

    Output Groups セクションを開くと、2つのトグルを確認できます。 それらをオンにして、フェザーの左右の羽枝(Barb)を羽軸(Shaft)から分離します。 Right Barbs GroupLeft Barbs Group に依存していることが分かります。 この2つは共通のbarbsグループ内にまとめられています。 フェザーの左右の羽枝(Barb)を別々に処理したくない場合は、何も変更する必要はありません。そうでない場合は、次の操作を実行します。

  3. Right Barbs Group を右クリックします。メニューから、 Delete Channels を選択してパラメータを分離します。

  4. Left Barbs Groupbarbslと入力します。

  5. Right Barbs Groupbarbsrと入力します。

これで、フェザーはshaftbarbslbarbsrの3つのグループに分かれました。

羽枝(Barb)インデックス

羽枝(Barb)をさらにグループに細分化するには、多くの場合、羽枝(Barb)インデックスが必要になります。

  1. Enumerate SOPを配置し、その入力を上流のFeather Uncondense SOPの出力に接続します。

  2. デフォルト値のままにしますが、 Group TypePrimitives に設定されていることを確認してください。

羽軸(Shaft)と羽枝(Barb)を分離する

Feather Uncondense SOPは、shaftbarbslbarbsrの3つのグループを作成します。 各グループを個別に作業するには、フェザーの要素を分離して、別々のネットワークストリームを作成する必要があります。

Tip

Houdiniのデフォルトの青の背景では、オペレーションの結果を表示したり、評価するのが難しいことがあります。 そのため、Color SOPを追加して、常にネットワークの最後に配置することを推奨します。 Color を黒(または任意の他のカラー)に設定して、フェザーのコントラストを高め、よく見えるようにします。

  1. Blast SOPを2つ追加し、その入力をFeather Uncondense SOPの1番目の出力に接続します。2つのBlastノード同士をつなげないでください。これらで 2つ のストリームを作成します。

  2. 1つ目 のノードの名前をbarbsに、 2つ目 のノードの名前をshaftに変更します。

  3. 1つ目のBlast SOPを選択し、 Group パラメータに移動します。そこにshaftと入力し、羽軸(Shaft)を削除し、羽枝(Barb)を維持します。

  4. 2つ目のBlast SOPでも、 Groupshaftです。 Delete Non Selected をオンにして、羽枝(Barb)を削除します。

    羽枝(Barb)を左右に分離するには、さらに2つのBlast SOPが必要です。

  5. Blast SOPをさらに2つ追加し、それぞれの名前をbarbs_leftbarbs_rightにします。

  6. 両方のノードの Group エントリをbarbsrにします。

  7. barbs_right Blastノードで、 Delete Non Selected をオンにします。

  8. その新しいBlastノードの入力をbarbsノードの出力に接続します。ここでも、2つのBlastノードで別々のストリームを作成したいので、ノード同士をつなげないようにしてください。

これで、すべての部位を個別に作業できるようになりました。以下の図のようなネットワークになっているはずです。

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

羽軸(Shaft)

羽軸(Shaft)は、対処すべきフェザーの3つ目の要素です。 現在のところ、羽軸(Shaft)はただの細いラインですが、実世界では下から上に向かって細くなっています。 最も便利な方法は、Feather Width SOPを使用することです。

  1. Feather Width SOPを追加し、その 1番目 の入力をshaft Blastノードの出力に接続します。既にMerge SOPがある場合は、Feather Widthノードの 1番目 の出力をMergeノードに接続します。

  2. Shaft Width を使用して、羽軸(Shaft)に均一な値を適用できます。先細にしたい場合は、 Ramp ボタンをクリックします。

  3. Presets アイコンをクリックし、ドロップダウンメニューから Smooth を選択します。これにより、先端が太く、根元が細くなります。

  4. Reverse Domain をクリックし、ランプを反転します。

  5. カスタムの羽軸(Shaft)プロファイルを作成するには、コントロールポイントを追加します。

羽軸(Shaft)と羽枝(Barb)にもwidthアトリビュートがあります。 Point Wrangleなどを介してwidthを操作することもできます。 以下は、羽軸(Shaft)の形状に使用されているカーブです(90°傾けています)。

接線空間

グルーミングに慣れている方であれば、カーブに沿って法線を伝播させるためのGuide Tangent Space SOPを既に使ったことがあるでしょう。 後ほど、羽枝(Barb)の方向を決めるために接線空間を必要とするクランプ(束)ノードを追加します。

  1. Guide Tangent Space SOPを追加し、その 1番目 の入力をbarbs Blastノードの出力に接続します。 2番目 の入力をFeather Width SOPの出力に接続します。

  2. 出力をbarbs_left および barbs_rightの入力に接続します

  3. パラメータはデフォルト値のままにします。

ディテールを追加する

左の羽枝(Barb)と右の羽枝(Barb)用に2本の個別のネットワークストリームが必要です。 冒頭で述べたように、フェザーネットワークは大きく複雑になる可能性があるので、ノードに分かりやすい名前を付けるようにしてください。 このガイドで示す値は、あくまでも推奨値です。フェザーのスケール、形状、 Barb Density に応じて、異なる値に設定して、別の結果を得る場合もあります。 フェザーにディテールを追加するのは、高度にカスタマイズされた工程なので、いくらか練習が必要です。

綿羽(Down)の作成にはジオメトリマスクも使用せず、WrangleとVEXコードを使って羽枝(Barb)を分離し、形成します。 ここでは、アトリビュートのカスタマイズ方法やグループの使用方法についてヒントとなるよう、別の方法を紹介します。

左の羽枝(Barb): クランプ(束)

フェザーを見た時、最も分かりやすい特徴はクランプ(束)と隙間です。

  1. Hair Clump SOPを追加し、その名前をhairclump_leftに変更します。

  2. その 1番目 の入力をbarbs_leftの出力に接続します。 2番目 の入力をshaft Blast SOPの出力に接続します。

  3. Shape セクションで、 Method ドロップダウンを開きます。より滑らかな結果を得られるよう、 Linear Blend を選択します。

  4. General セクションに移動します。多くの場合、 Clump Size はかなり小さい値にする必要があり、ごくわずかな変更でもまったく異なる結果になる場合があります。隙間が見えたら、 Blend を下げ、クランプ(束)の効果を制御します。このフェザーの場合、 Blend0.34Clump Size0.0032に設定します。

  5. Shape セクションで、 Clump Profile カーブを見つけます。これを使用してカーブのコントロールポイントを調整しても、クランプ(束)の効果を制御できます。

左の羽枝(Barb): 綿毛(Fluff)

リファレンス画像を見ると、フェザーの下の方にあるふわふわした羽枝(Barb)は、長さがまちまちであることが分かります。 以下は寄りの図です。

VEXコードを使用すると、upperbarbslowerbarbsの2つのグループに羽枝(Barb)を分けることができます。グループの作成を始める前に、hairclump_leftノードを選択し、Geometry Spreadsheetを開きます。index Primitiveアトリビュートを確認してください。 このアトリビュートの番号は連続しておらず、1つおきに番号が欠けていることが分かります。 左の羽枝(Barb)は1, 3, 5, 7,...で、右の羽枝(Barb)は0, 2, 4, 6,...という偶数です。

  1. もう1つEnumerate SOPを追加し、羽枝(Barb)に連続する番号を適用します。ノードの名前をindex_leftに変更します。

  2. その入力をhairclump_left1番目 の出力に接続します。

  3. Attributeindexleftと入力します。

グループ化

indexleftを閾値として使用し、短いVEXスクリプトを介してupperbarbsグループとlowerbarbsグループを作成します。 閾値は、カスタムパラメータでも調整できるようにします。

  1. Primitive Wrangle SOPを追加し、その名前をbargroups_leftに変更します。その 1番目 の入力をindex_leftの出力に接続します。

  2. VEXpression フィールドに次のコードを入力します:

    i@barblimit = chi("barb_limit"); //カスタム整数パラメータを作成する
    
    if (@indexleft > @barblimit) {
        @group_upperbarbs = 1; // upperbarbsにインデックスを追加する
    }
    
    else {
        @group_lowerbarbs = 1; // lowerbarbsにインデックスを追加する
    }
    
  3. Creates spare parameters… ボタンをクリックし、カスタムの Barb Limit パラメータをノードのUIに追加します。

  4. このフェザーでは、 Barb Limit 値を約220に設定します。必要に応じて、この値は後から調整できます。

羽枝(Barb)の長さ

ここでは、upperbarbsグループの羽枝(Barb)のみ変更します。

  1. Guide Process (Set Length) SOPを追加し、その名前をsetlength_left1に変更します。その 1番目 の入力をbargroups_leftの出力に接続します。 2番目 の入力をhairclump_left2番目 の出力に接続します。

  2. ノードの General セクションで、 Group に移動してupperbarbsと入力します。

  3. Randomize をオンにし、 Min LengthMax Length を使用して異なる長さの値を適用します。この例では、0.0270.052の値を使用しました。

    現時点で、一部の羽枝(Barb)は極端に長く、交差しているように見えます。ノイズマスクを使用して、長い羽枝(Barb)をカットし、より自然な外観にします。

  4. Masking タブで、 Noise Mask をオンにします。

  5. Noise Mask Frequency は、必要に応じて400などの高い値に設定します。

  6. Blend パラメータを使用して、羽枝(Barb)を短くします。このシーンでは0.275の値に設定しました。

左の羽枝(Barb): 縮れ(Frizz)

フェザーの下部をもう一度見てみると、非常に長くてふわふわした羽枝(Barb)がいくつか見えます。ただし、大部分の羽枝(Barb)は短く均一です。長い羽枝(Barb)はややグラデーションを成し、根元付近に向かって短くなっています。ここでは、Attribute Wrangleを追加して、カスタマイズ可能な羽枝(Barb)の数を選択する条件を作成します。これらの羽枝(Barb)はfrizzbarbsグループに格納されます。

frizzbarbsグループ

  1. 新しいPrimitive Wrangle SOPを追加し、その名前をfrizzgroup_leftに変更します。

  2. その 1番目 の入力をsetlength_left11番目 の出力に接続します。

  3. Group に移動し、lowerbarbsと入力します。

  4. VEXpression フィールドに次のコードを入力します:

    // 'Number of Barbs'パラメータを作成する
    int num_of_barbs = chi("number_of_barbs");
    
    // 羽枝(Barb)が識別されたら、それをfrizzbarbsグループに追加する
    if (@indexleft % num_of_barbs == 0) {
        @group_frizzbarbs = 1;
    }
    
  5. アイコンをクリックし、 Number of Barbs パラメータを作成します。2と入力すると、lowerbarbsの羽枝(Barb)が1本おきにfrizzbarbsグループに追加されます。3と入力すると、2本おきに追加されるといった具合です。

frizzbarbsの最大長を設定する

もう1つのAttribute Wrangleで、カスタムの Max Base Length パラメータと羽枝(Barb)をスケールする係数の積であるmaxlengthアトリビュートを作成します。

  1. もう1つPrimitive Wrangle SOPを追加し、その名前をmaxlength_leftに変更します。

  2. その 1番目 の入力をfrizzgroup_left1番目 の出力に接続します。

  3. Group パラメータにfrizzbarbsと入力します。

  4. このノードのVEXpressionは以下のようになります。

    //カスタムの'Max Base Length'パラメータを作成する
    float base_length = chf("max_base_length");
    
    // 'indexleft'および'barblimit'を使用して、0.1から1の間の係数を作成する
    float factor = fit(@indexleft, 0, @barblimit, 0.1, 1);
    
    // 'maxlength'アトリビュートを作成する
    @maxlength = base_length * factor;
    
  5. アイコンを再度クリックし、 Max Base Length パラメータを追加します。0.03くらいの小さい値から始め、後で調整できます。オレンジ色のfrizzbarbsは、赤のlowerbarbsのサブグループです。

maxlengthを適用する

maxlengthアトリビュートでfrizzbarbsグループの羽枝(Barb)をスケールする準備が整いました。

  1. Guide Process (Set Length) SOPをもう1つ配置し、その名前をsetlength_left2に変更します。

  2. その 1番目 の入力をmaxlength_leftの出力に接続し、 2番目 の入力をsetlength_left12番目 の出力に接続します。

  3. General セクションで、 Group に移動してfrizzbarbsと入力します。

  4. Operations タブに移動し、 Randomize をオンにします。

  5. Min Length0.02などの値を入力します。

  6. Max Length の横にドロップダウンメニューがあります。それを No Override から Guide Attribute に変更します。

  7. Max Length Attribmaxlengthと入力します。

これで、maxlength_left Primitive Wrangle SOPの Max Base Length パラメータを使用して、羽枝(Barb)の長さを調整できるようになりました。この例では、値は0.029です。

曲げる

この手順では、frizzbarbsグループにランダムな曲率を追加して、よりリファレンス画像のように見えるようにします。

  1. Guide Process (Bend) SOPを追加し、その名前をbend_leftに変更します。

  2. もう一度 Groupfrizzbarbsに設定します。

  3. Mode ドロップダウンから Axis Constant を選択します。

  4. Axis ベクトルは0,1,0です。

  5. Angle スライダを使用して、変更を確認します。ここでは25くらいの値にすると良いでしょう。

  6. Random Angle でも同じことを行ないます。この例では、値は38です。

縮れ

次は羽枝(Barb)をやや不規則にします。

  1. Guide Process (Frizz) SOPを追加し、その名前をfrizz_leftに変更します。

  2. 前と同様、 Group エントリはfrizzbarbsです。

  3. 極端な結果にならないよう Amplitude を下げます。おそらくかなり小さい値に設定する必要があります。ここでは0.0022にしました。

  4. Frequency および Random Frequency を使用して、羽枝(Barb)を“クシャクシャ”にすることができます。両方のパラメータに50の値を試してみてください。

  5. 最後に、 Random Amplitude を上げてバリエーションを加えます。

左の羽枝(Barb)は以下の図のようになります。

右の羽枝(Barb): 注意点

フェザーの右側に対して、これまでの手順すべてを繰り返す必要があります。その際の注意点を以下に紹介します。

  • 先端付近の羽枝(Barb)は乱れていないので、羽枝(Barb)の長さをランダム化するGuide Process (Set Length) SOPは1つだけ必要です。

  • 右側にはクランプ(束)が数個しかありません。

  • Guide Process (Bend) SOPの Angle はマイナス値に設定する必要があります。

フェザーの右側の羽枝(Barb)のネットワークビューです。

結合する

3つに分割された部分を1つにまとめていきます。

  1. Merge SOPを追加します。

  2. frizz_leftおよびfrizz_rightノードの 1番目 の出力をMerge SOPの入力に接続します。

  3. shaft Blast SOPの出力をMerge SOPの入力に接続します。

Condensed(縮約化)の状態を再作成する

Condensed(縮約化)の状態のフェザーは、カーブの代わりに仮の羽枝(Barb)を使用するため、リソース消費が非常に少ないです。 Houdiniのフェザーシステムには、この状態を復元するノードが用意されています。 このオプションを使用すると、何億個にもなる可能性のあるポイントを処理する必要がなくなるため、グルーミングプロセスを高速化できます。

  1. Feather Match Uncondensed SOPを追加します。

  2. その 1番目 の入力をFeather Template from Shape SOPの出力に接続します。

  3. 4番目 の入力を上流のMerge SOPの出力に接続します。

  4. Null SOPでネットワークを終了します。Nullの名前をDOWNGEO (または他の任意の名前)に変更し、その青の Display/Render フラグをオンにします。

このワークショップの結果は以下のようになります。 次の手順では、UVとテクスチャを適用します。このプロセスについては、フェザーのUVとテクスチャのページで説明します。

Feathers(羽根)

基本セットアップ

描画とシェイピング

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

シミュレーション

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

ツール

動画