On this page |
|
このやや複雑なプロジェクトでは、いわゆるUncondensed(具現化)の状態にある、分割された羽弁(うべん:Vane)を持つフェザーを作成する方法を紹介します。 この状態では、羽枝(うし:Barb)はポイントを含む実際のカーブジオメトリで構成されます。 仮の羽枝(Barb)を持つCondensed(縮約化)のワークフローとはいくつか違いがあります。 作成したいフェザーに最適なソリューションを選択できますが、フェザーアトラスを作成するときは、どちらか一方の方法を使用することを推奨します。 このUncondensed(具現化)の例では、
-
フェザーは羽軸(うじく:Shaft)、左の羽枝(Barb)、右の羽枝(Barb)の別々のネットワークに分割されます。
-
Guide Process SOPオペレーションは カーブ に適用されます。
-
Hair Clump SOPを使用してクランプ(束)を追加します。
-
ネットワークはFeather Uncondense SOPを使用します。
-
Attribute Wrangle SOPによって羽枝(Barb)のカーブを識別します。
綿羽(Down)は、羽枝(Barb)の構造が異なっていることから、他のフェザーと同じではありません。 完全に不規則な綿羽(Down)があり、規則的な部分へと徐々に遷移しています。 また、綿羽(Down)は羽軸(Shaft)が短く、弾力性に富んでいます。 綿羽(Down)のルックや特徴は多種多様ですが、共通する特徴もいくつかあります。 ふわふわした綿羽(Down)の羽枝(Barb)は、
-
羽枝(Barb)をつなぎ合わせる鉤(かぎ)形の小突起である小羽枝(Barbule)を持ちません。
-
空気を閉じ込めて鳥を保温する機能を通常は持ちません。
-
柔らかいです。
リファレンス画像 ¶
出発点となるのはリファレンス画像です。様々なフェザー(羽根)タイプの優れた写真を集めた無料のリソースが豊富に用意されています。
Note
鳥の羽根の採取が禁止されている国は多くあります。 たとえ地面に落ちている1枚のフェザー(羽根)であってもです。 これは、羽根を目的に鳥が捕獲されるのを防ぎ、絶滅危惧種を保護するためです。この理由から、リファレンス写真は既に保存されているものに限定しましょう。
このプロジェクトのフェザーは、典型的な遷移形態を採用しています。 綿羽(Down)には、ふわふわした部分と規則的な部分があり、下の方ではそれらが混在しています。 そこでは、規則正しく並んだ羽枝(Barb)の間から、ふわふわした構造が長く伸びています。 また、このふわふわした羽枝(Barb)は、根元付近の方が短くなっています。 さらに、左側の綿羽(Down)の先端は乱れていますが、右側の羽枝(Barb)はほとんど同じ長さです。 隙間や引裂も、左側の方が多いです。羽軸(Shaft)の幅は全体的に変わりません。
リファレンス画像をロードするには、以下の操作を行ないます。
-
マウスカーソルをビューポートに移動し、2を押してTopビューに切り替えます。フェザーはHoudiniのXZ空間で のみ 作成できます!
-
Dを押して、 ディスプレイオプション を開きます
-
Background タブを開き、 Top タブをクリックします。
-
Disk File がオンになっていることを確認し、アイコンをクリックしてリファレンス画像をロードします。
-
Image Offset と Image Scale パラメータを使用して、リファレンス画像を配置およびスケールします。フェザーの元のスケールに注意してください。
フェザーをトレースする ¶
Note
リファレンス画像からフェザーの形状をトレースするために必要な手順とノードは、フェザーを描画するのページですべて説明しています。 描画ガイドに従ってプロファイルまで手順を進めたら、このページに戻って綿羽(Down)を作成するから続けてください。
フェザーをトレースするワークフローは、すべてのフェザータイプで同じです。
-
フェザーカーブは必ずGeometry OBJレベル内にあります。 obj レベルに移動し、Geometry SOPを選択します。 Misc タブを開き、 Shade Open Curves in Viewport をオンにして、羽枝(Barb)が見えるようにします。その後、再びGeometryノードの中に入ります。
-
Curve SOPを使用して、フェザーの羽軸(Shaft)と輪郭を描画します。ここではBezierまたはNURBSが最適です。
-
カーブを微調整して、形状を仕上げます。
-
リファレンス画像に従って、プロファイルを追加し、羽枝(Barb)を形成します。
綿羽(Down)を作成する ¶
次の手順では、カーブをグループ化してから、フェザーにします。
-
Feather Shape Organize SOPを追加します。
-
その 1番目 の入力を
curve1
の出力に接続します。このノードにはパラメータはありませんが、Geometry Spreadsheetを開き、アイコンをクリックすると、作成された
shaft
およびshape
グループを確認できます。 -
Feather Template from Shape SOPを追加し、その入力をFeather Shape Organizeの出力に接続します。UVグリッドとともにソリッドオブジェクトが表示されるはずです。
羽枝(Barb)を調整する ¶
羽枝(Barb)が非常に太いせいで、羽枝(Barb)の数が不十分であるうえ、ギザギザが目立ちます。 これを解決するために、Feather Template from Shape SOPに対して変更を加えます。
-
羽枝(Barb)を細くしてギザギザを取り除くには、 Width Root および Width Tip を
0.0003
に変更します。 -
“骸骨”のようなルックを修正するため、 Barb Density を
5000
に設定します。これで十分なディテールを含む、密集したフェザーになります。 -
最後に、 Barb Segments を
5
に上げて、より滑らかな曲率にします。
左の画像は比較用です。中央の画像ではカーブを確認でき、右の画像では羽枝(Barb)を確認できます。
Uncondensed(具現化)にする ¶
仮の(=Condensed:縮約表現された)羽枝(Barb)を実際のジオメトリに変換するには、ノードが1つだけ必要です。
-
Feather Uncondense SOPを追加します。
-
その 1番目 の入力を上流のFeather Template from Shape SOPに接続します。 1番目 の出力をMerge SOPまたはNull SOPの入力に接続します。
Output Groups セクションを開くと、2つのトグルを確認できます。 それらをオンにして、フェザーの左右の羽枝(Barb)を羽軸(Shaft)から分離します。 Right Barbs Group が Left Barbs Group に依存していることが分かります。 この2つは共通の
barbs
グループ内にまとめられています。 フェザーの左右の羽枝(Barb)を別々に処理したくない場合は、何も変更する必要はありません。そうでない場合は、次の操作を実行します。 -
Right Barbs Group を右クリックします。メニューから、 Delete Channels を選択してパラメータを分離します。
-
Left Barbs Group に
barbsl
と入力します。 -
Right Barbs Group に
barbsr
と入力します。
これで、フェザーはshaft
、barbsl
、barbsr
の3つのグループに分かれました。
羽枝(Barb)インデックス ¶
羽枝(Barb)をさらにグループに細分化するには、多くの場合、羽枝(Barb)インデックスが必要になります。
-
Enumerate SOPを配置し、その入力を上流のFeather Uncondense SOPの出力に接続します。
-
デフォルト値のままにしますが、 Group Type が Primitives に設定されていることを確認してください。
羽軸(Shaft)と羽枝(Barb)を分離する ¶
Feather Uncondense SOPは、shaft
、barbsl
、barbsr
の3つのグループを作成します。
各グループを個別に作業するには、フェザーの要素を分離して、別々のネットワークストリームを作成する必要があります。
Tip
Houdiniのデフォルトの青の背景では、オペレーションの結果を表示したり、評価するのが難しいことがあります。 そのため、Color SOPを追加して、常にネットワークの最後に配置することを推奨します。 Color を黒(または任意の他のカラー)に設定して、フェザーのコントラストを高め、よく見えるようにします。
-
Blast SOPを2つ追加し、その入力をFeather Uncondense SOPの1番目の出力に接続します。2つのBlastノード同士をつなげないでください。これらで 2つ のストリームを作成します。
-
1つ目 のノードの名前を
barbs
に、 2つ目 のノードの名前をshaft
に変更します。 -
1つ目のBlast SOPを選択し、 Group パラメータに移動します。そこに
shaft
と入力し、羽軸(Shaft)を削除し、羽枝(Barb)を維持します。 -
2つ目のBlast SOPでも、 Group は
shaft
です。 Delete Non Selected をオンにして、羽枝(Barb)を削除します。羽枝(Barb)を左右に分離するには、さらに2つのBlast SOPが必要です。
-
Blast SOPをさらに2つ追加し、それぞれの名前を
barbs_left
、barbs_right
にします。 -
両方のノードの Group エントリを
barbsr
にします。 -
barbs_right
Blastノードで、 Delete Non Selected をオンにします。 -
その新しいBlastノードの入力を
barbs
ノードの出力に接続します。ここでも、2つのBlastノードで別々のストリームを作成したいので、ノード同士をつなげないようにしてください。
これで、すべての部位を個別に作業できるようになりました。以下の図のようなネットワークになっているはずです。
羽軸(Shaft) ¶
羽軸(Shaft)は、対処すべきフェザーの3つ目の要素です。 現在のところ、羽軸(Shaft)はただの細いラインですが、実世界では下から上に向かって細くなっています。 最も便利な方法は、Feather Width SOPを使用することです。
-
Feather Width SOPを追加し、その 1番目 の入力を
shaft
Blastノードの出力に接続します。既にMerge SOPがある場合は、Feather Widthノードの 1番目 の出力をMergeノードに接続します。 -
Shaft Width を使用して、羽軸(Shaft)に均一な値を適用できます。先細にしたい場合は、 Ramp ボタンをクリックします。
-
Presets アイコンをクリックし、ドロップダウンメニューから Smooth を選択します。これにより、先端が太く、根元が細くなります。
-
Reverse Domain をクリックし、ランプを反転します。
-
カスタムの羽軸(Shaft)プロファイルを作成するには、コントロールポイントを追加します。
羽軸(Shaft)と羽枝(Barb)にもwidth
アトリビュートがあります。
Point Wrangleなどを介してwidth
を操作することもできます。
以下は、羽軸(Shaft)の形状に使用されているカーブです(90°傾けています)。
接線空間 ¶
グルーミングに慣れている方であれば、カーブに沿って法線を伝播させるためのGuide Tangent Space SOPを既に使ったことがあるでしょう。 後ほど、羽枝(Barb)の方向を決めるために接線空間を必要とするクランプ(束)ノードを追加します。
-
Guide Tangent Space SOPを追加し、その 1番目 の入力を
barbs
Blastノードの出力に接続します。 2番目 の入力をFeather Width SOPの出力に接続します。 -
出力を
barbs_left
およびbarbs_right
の入力に接続します -
パラメータはデフォルト値のままにします。
ディテールを追加する ¶
左の羽枝(Barb)と右の羽枝(Barb)用に2本の個別のネットワークストリームが必要です。 冒頭で述べたように、フェザーネットワークは大きく複雑になる可能性があるので、ノードに分かりやすい名前を付けるようにしてください。 このガイドで示す値は、あくまでも推奨値です。フェザーのスケール、形状、 Barb Density に応じて、異なる値に設定して、別の結果を得る場合もあります。 フェザーにディテールを追加するのは、高度にカスタマイズされた工程なので、いくらか練習が必要です。
綿羽(Down)の作成にはジオメトリマスクも使用せず、WrangleとVEXコードを使って羽枝(Barb)を分離し、形成します。 ここでは、アトリビュートのカスタマイズ方法やグループの使用方法についてヒントとなるよう、別の方法を紹介します。
左の羽枝(Barb): クランプ(束) ¶
フェザーを見た時、最も分かりやすい特徴はクランプ(束)と隙間です。
-
Hair Clump SOPを追加し、その名前を
hairclump_left
に変更します。 -
その 1番目 の入力を
barbs_left
の出力に接続します。 2番目 の入力をshaft
Blast SOPの出力に接続します。 -
Shape セクションで、 Method ドロップダウンを開きます。より滑らかな結果を得られるよう、 Linear Blend を選択します。
-
General セクションに移動します。多くの場合、 Clump Size はかなり小さい値にする必要があり、ごくわずかな変更でもまったく異なる結果になる場合があります。隙間が見えたら、 Blend を下げ、クランプ(束)の効果を制御します。このフェザーの場合、 Blend は
0.34
、 Clump Size は0.0032
に設定します。 -
Shape セクションで、 Clump Profile カーブを見つけます。これを使用してカーブのコントロールポイントを調整しても、クランプ(束)の効果を制御できます。
左の羽枝(Barb): 綿毛(Fluff) ¶
リファレンス画像を見ると、フェザーの下の方にあるふわふわした羽枝(Barb)は、長さがまちまちであることが分かります。 以下は寄りの図です。
VEXコードを使用すると、upperbarbs
とlowerbarbs
の2つのグループに羽枝(Barb)を分けることができます。グループの作成を始める前に、hairclump_left
ノードを選択し、Geometry Spreadsheetを開きます。index
Primitiveアトリビュートを確認してください。
このアトリビュートの番号は連続しておらず、1つおきに番号が欠けていることが分かります。
左の羽枝(Barb)は1, 3, 5, 7,...
で、右の羽枝(Barb)は0, 2, 4, 6,...
という偶数です。
-
もう1つEnumerate SOPを追加し、羽枝(Barb)に連続する番号を適用します。ノードの名前を
index_left
に変更します。 -
その入力を
hairclump_left
の 1番目 の出力に接続します。 -
Attribute に
indexleft
と入力します。
グループ化 ¶
indexleft
を閾値として使用し、短いVEXスクリプトを介してupperbarbs
グループとlowerbarbs
グループを作成します。
閾値は、カスタムパラメータでも調整できるようにします。
-
Primitive Wrangle SOPを追加し、その名前を
bargroups_left
に変更します。その 1番目 の入力をindex_left
の出力に接続します。 -
VEXpression フィールドに次のコードを入力します:
i@barblimit = chi("barb_limit"); //カスタム整数パラメータを作成する if (@indexleft > @barblimit) { @group_upperbarbs = 1; // upperbarbsにインデックスを追加する } else { @group_lowerbarbs = 1; // lowerbarbsにインデックスを追加する }
-
Creates spare parameters… ボタンをクリックし、カスタムの Barb Limit パラメータをノードのUIに追加します。
-
このフェザーでは、 Barb Limit 値を約
220
に設定します。必要に応じて、この値は後から調整できます。
羽枝(Barb)の長さ ¶
ここでは、upperbarbs
グループの羽枝(Barb)のみ変更します。
-
Guide Process (Set Length) SOPを追加し、その名前を
setlength_left1
に変更します。その 1番目 の入力をbargroups_left
の出力に接続します。 2番目 の入力をhairclump_left
の 2番目 の出力に接続します。 -
ノードの General セクションで、 Group に移動して
upperbarbs
と入力します。 -
Randomize をオンにし、 Min Length と Max Length を使用して異なる長さの値を適用します。この例では、
0.027
と0.052
の値を使用しました。現時点で、一部の羽枝(Barb)は極端に長く、交差しているように見えます。ノイズマスクを使用して、長い羽枝(Barb)をカットし、より自然な外観にします。
-
Masking タブで、 Noise Mask をオンにします。
-
Noise Mask Frequency は、必要に応じて
400
などの高い値に設定します。 -
Blend パラメータを使用して、羽枝(Barb)を短くします。このシーンでは
0.275
の値に設定しました。
左の羽枝(Barb): 縮れ(Frizz) ¶
フェザーの下部をもう一度見てみると、非常に長くてふわふわした羽枝(Barb)がいくつか見えます。ただし、大部分の羽枝(Barb)は短く均一です。長い羽枝(Barb)はややグラデーションを成し、根元付近に向かって短くなっています。ここでは、Attribute Wrangleを追加して、カスタマイズ可能な羽枝(Barb)の数を選択する条件を作成します。これらの羽枝(Barb)はfrizzbarbs
グループに格納されます。
frizzbarbsグループ ¶
-
新しいPrimitive Wrangle SOPを追加し、その名前を
frizzgroup_left
に変更します。 -
その 1番目 の入力を
setlength_left1
の 1番目 の出力に接続します。 -
Group に移動し、
lowerbarbs
と入力します。 -
VEXpression フィールドに次のコードを入力します:
// 'Number of Barbs'パラメータを作成する int num_of_barbs = chi("number_of_barbs"); // 羽枝(Barb)が識別されたら、それをfrizzbarbsグループに追加する if (@indexleft % num_of_barbs == 0) { @group_frizzbarbs = 1; }
-
アイコンをクリックし、 Number of Barbs パラメータを作成します。
2
と入力すると、lowerbarbs
の羽枝(Barb)が1本おきにfrizzbarbs
グループに追加されます。3
と入力すると、2本おきに追加されるといった具合です。
frizzbarbsの最大長を設定する ¶
もう1つのAttribute Wrangleで、カスタムの Max Base Length パラメータと羽枝(Barb)をスケールする係数の積であるmaxlength
アトリビュートを作成します。
-
もう1つPrimitive Wrangle SOPを追加し、その名前を
maxlength_left
に変更します。 -
その 1番目 の入力を
frizzgroup_left
の 1番目 の出力に接続します。 -
Group パラメータに
frizzbarbs
と入力します。 -
このノードの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;
-
アイコンを再度クリックし、 Max Base Length パラメータを追加します。
0.03
くらいの小さい値から始め、後で調整できます。オレンジ色のfrizzbarbs
は、赤のlowerbarbs
のサブグループです。
maxlengthを適用する ¶
maxlength
アトリビュートでfrizzbarbs
グループの羽枝(Barb)をスケールする準備が整いました。
-
Guide Process (Set Length) SOPをもう1つ配置し、その名前を
setlength_left2
に変更します。 -
その 1番目 の入力を
maxlength_left
の出力に接続し、 2番目 の入力をsetlength_left1
の 2番目 の出力に接続します。 -
General セクションで、 Group に移動して
frizzbarbs
と入力します。 -
Operations タブに移動し、 Randomize をオンにします。
-
Min Length に
0.02
などの値を入力します。 -
Max Length の横にドロップダウンメニューがあります。それを No Override から Guide Attribute に変更します。
-
Max Length Attrib に
maxlength
と入力します。
これで、maxlength_left
Primitive Wrangle SOPの Max Base Length パラメータを使用して、羽枝(Barb)の長さを調整できるようになりました。この例では、値は0.029
です。
曲げる ¶
この手順では、frizzbarbs
グループにランダムな曲率を追加して、よりリファレンス画像のように見えるようにします。
-
Guide Process (Bend) SOPを追加し、その名前を
bend_left
に変更します。 -
もう一度 Group を
frizzbarbs
に設定します。 -
Mode ドロップダウンから Axis Constant を選択します。
-
Axis ベクトルは
0,1,0
です。 -
Angle スライダを使用して、変更を確認します。ここでは
25
くらいの値にすると良いでしょう。 -
Random Angle でも同じことを行ないます。この例では、値は
38
です。
縮れ ¶
次は羽枝(Barb)をやや不規則にします。
-
Guide Process (Frizz) SOPを追加し、その名前を
frizz_left
に変更します。 -
前と同様、 Group エントリは
frizzbarbs
です。 -
極端な結果にならないよう Amplitude を下げます。おそらくかなり小さい値に設定する必要があります。ここでは
0.0022
にしました。 -
Frequency および Random Frequency を使用して、羽枝(Barb)を“クシャクシャ”にすることができます。両方のパラメータに
50
の値を試してみてください。 -
最後に、 Random Amplitude を上げてバリエーションを加えます。
左の羽枝(Barb)は以下の図のようになります。
右の羽枝(Barb): 注意点 ¶
フェザーの右側に対して、これまでの手順すべてを繰り返す必要があります。その際の注意点を以下に紹介します。
-
先端付近の羽枝(Barb)は乱れていないので、羽枝(Barb)の長さをランダム化するGuide Process (Set Length) SOPは1つだけ必要です。
-
右側にはクランプ(束)が数個しかありません。
-
Guide Process (Bend) SOPの Angle はマイナス値に設定する必要があります。
フェザーの右側の羽枝(Barb)のネットワークビューです。
結合する ¶
3つに分割された部分を1つにまとめていきます。
-
Merge SOPを追加します。
-
frizz_left
およびfrizz_right
ノードの 1番目 の出力をMerge SOPの入力に接続します。 -
shaft
Blast SOPの出力をMerge SOPの入力に接続します。
Condensed(縮約化)の状態を再作成する ¶
Condensed(縮約化)の状態のフェザーは、カーブの代わりに仮の羽枝(Barb)を使用するため、リソース消費が非常に少ないです。 Houdiniのフェザーシステムには、この状態を復元するノードが用意されています。 このオプションを使用すると、何億個にもなる可能性のあるポイントを処理する必要がなくなるため、グルーミングプロセスを高速化できます。
-
その 1番目 の入力をFeather Template from Shape SOPの出力に接続します。
-
4番目 の入力を上流のMerge SOPの出力に接続します。
-
Null SOPでネットワークを終了します。Nullの名前を
DOWNGEO
(または他の任意の名前)に変更し、その青の Display/Render フラグをオンにします。
このワークショップの結果は以下のようになります。 次の手順では、UVとテクスチャを適用します。このプロセスについては、フェザーのUVとテクスチャのページで説明します。