Houdini 20.0 Feathers(羽根)

フェザーのばら撒き

On this page

オブジェクトのサーフェスやポイントに、フェザーを素早く適用する方法が必要ですか? その答えが“はい”なら、フェザーのばら撒きの方法を試してみましょう。 フェザーのばら撒きを使用すれば、マスクをペイントしたり作成して、フェザーの外観を特定の領域に制限することもできます。

基本セットアップ

以下のネットワークを基に、引き続き説明や解説をしていきます。 これまで同様、すべては1枚のフェザーから始まります。以下は、ここで作成していくネットワークのプレビューです。

画像をクリックすると拡大します。
  1. obj レベルで、⇥ Tabを押してTabメニューを開きます。そこからGeometry OBJを作成し、その中に入ります。

  2. 再度Tabメニューを開いて、 Feather Template ツールを選択し、基本のフェザーのネットワークを作成します。フェザーのカーブを変更してもよいですし、デフォルトの形状を使用しても構いません。

  3. Null SOPを追加し、その入力をFeather Template from Shape SOPの出力に接続します。Nullの名前をFEATHERGEOに変更します。

ばら撒きポイント

ばら撒きポイントはフェザーのシードとなるもので、任意のサーフェスにこれらのポイントを作成するための汎用的なノードがあります。 ポイントを作成する前に、オブジェクトまたはキャラクタが必要です。

  1. Test Geometry: Rubber Toy SOPを追加します。

  2. Uniform Scale0.5に設定し、フリッピー(Rubber Toy)を小さくします。

  3. Hair Generate SOPを配置し、 1番目 の入力をRubber Toyの出力に接続します。このノードは、接続されたオブジェクトの法線を使用してガイドを作成します。フェザーはそのガイドに従うことになります。

  4. Total Count パラメータで、フェザーの正確な数を定義できます。5000の値から始めましょう。

  5. Unguided Hairs セクションに移動し、 Length を変更してフェザーのサイズを制御します。後ので、パラメータをランダム化するためのアトリビュートの使用方法を紹介します。

  6. Guide Tangent Space SOPを追加し、 1番目 の入力を、ヘアー生成ノードの 1番目 の出力に接続します。このノードは、ガイドの根元のポイントの法線方向を使用して、フェザーを正確に方向付けます。

  7. Normal Mode ドロップダウンから、 Constant Normal Vector を選択します。このオプションは、 Normal Vector パラメータを使用してbarborientアトリビュートの値を決定します。

  8. Normal NameTangent Name をオフにします。これらは不要であり、オンのままでは無駄なリソースを消費することになります。

  9. Orient Name をオンにし、デフォルトのエントリをbarborientに置き換えます。

向きを調整しても、ビューポートには何の変化もありません。設定の効果は、フェザーを追加すると現れます。

ネットワークを接続する

現在のところ、フェザーとグルームガイドは別々のネットワークストリームです。 以下のノードでそれらを1つにまとめ、フェザーをガイドに適用します。

  1. Feather Template Interpolate SOPを配置し、 1番目 の入力を接線空間ノードの 1番目 の出力に接続します。 4番目 の入力を、FEATHERGEO Nullの出力に接続します。

  2. Templates セクションに移動します。 Lookup Method ドロップダウンで、 Group を選択します。このプロジェクトにフェザーテンプレートは1つだけなので、 Template Group を指定する必要はありません。このノードは、 4番目 の入力から受け取る1つ目のテンプレートを使用します。

  3. Null SOPを追加し、その入力を補間ノードの 1番目 の出力に接続します。

  4. Nullの名前をGROOMに変更します。

  5. Nullノードの青の Display/Render フラグをオンにして、フェザーを確認します。

すべてが適切な場合、以下の画像のような結果になるはずです。

カラー

真上の画像は色が薄く、フェザーがよく見えません。 色を付けると、フェザーを視覚的に見分けやすくなります。 またカラーを追加して、アトリビュートとその値を表示することもできます。

  1. Color SOPをヘアー生成ノードと法線空間ノードの間に配置して、接続します。

  2. ClassPrimitive に変更し、フェザーオブジェクトに色を付けます。

  3. Color Type ドロップダウンから、 Random を選択します。

マスキング

Hair Generate SOPでは、マスクを使用してばら撒きポイントの分布を制御したり、以下で説明するような複数の作業を行なうことができます。

Tip

以下で説明しているすべての方法は、カスタムグルームにも利用できます。 カスタムグルームでは、ブラシを使って手動で、またはフェザーを1つずつ追加して、キャラクタにガイドを適用したり植えたりします。

Wrangle

画像を見ると、フェザーがRubber Toy全体に配置されています。 目、鼻、腹、ひれなどにもフェザーがあります。 例えば、Rubber Toyの背中のみにフェザーを配置するには、Wrangleを使用します。 そこで、slopeアトリビュートをカスタムの Threshold パラメータ(chf("threshold"))と共に作成し、ガイドの分布を制御します。

slopeアトリビュートは、頂点法線とY方向を指すUpベクトルの内積を計算します。どちらのベクトルも正規化されます。結果はその後、より制御しやすいように、0から1の範囲に収められます。内積が指定した Threshold より大きい場合、slopeが設定されます。これで、マスクができます。

  1. Attribute Wrangle SOPを追加し、それをRubber Toyとヘアー生成ノードの間に配置して、 1番目 の入力に接続します。

  2. 以下から、完全なコードスニペットを⌃ Ctrl + Cでコピーし、Wrangleの VEXPression⌃ Ctrl + Vでペーストします。

  3. Creates spare parameters… アイコンをクリックし、カスタムの Threshold パラメータをノードのUIに追加します。これで、パラメータのスライダを使用して、値をインタラクティブに調整できるようになりました。

    vector normal = normalize(v@N);
    vector up = normalize({0, 1, 0});
    float threshold = chf("threshold");
    float dot_product = fit(dot(normal, up), 0, 1, 0,1);
    if (dot_product > threshold) {
        f@slope = dot_product;
    }
    
  4. Hair Generate SOPの Distribution セクションで、 Density に移動します。関連するドロップダウンから、 Skin Attribute を選択します。

  5. Density Attrib に、slopeと入力します。

  6. 必要に応じて、 Total Count を変更します。

ペイント

マスクをキャラクタに直接かつインタラクティブにペイントして、フェザーが表示される場所を定義することもできます。 ブラシストロークをミラー化して、ペイント処理を高速化できる便利なオプションもあります。 さらに、1つのペイントノードを通して複数のアトリビュートを管理することも可能です。

Note

Wrangleまたは長さをランダム化するの手順を既に実行している場合は、そこで作成したノードをすべて削除します。 その後、⌃ Ctrl + ⇧ Shift + Sを押して、新しい名前でプロジェクトを保存します。

  1. Attribute Create SOPを追加し、それをRubber Toyとヘアー生成ノードの間に配置して、接続します。

  2. Name パラメータに、densityと入力します。densityとは、浮動小数点およびPointアトリビュートです。

  3. Attribute Paint SOPをアトリビュート作成ノードとヘアー生成ノードの間に配置して、接続します。

  4. Attributes タブを開き、 Attribute Name に移動します。デフォルトのエントリをdensityに置き換えます。

  5. Symmetry タブをクリックし、 Enable Mirroring をオンにします。

  6. ペイントノードを選択し、マウスカーソルをビューポートに移動し、Enterを押してブラシモードをオンにします。

    Brush タブでは、 Soft Edge を調整するなど、ブラシをカスタマイズすることができます。 ブラシ自体は、ビューポートで赤い球として表示され、キャラクタのサーフェスに追従します。 ブラシサイズは、を使用してインタラクティブに変更できます。

    マスクをペイントするには、を押したままにします。後ほど、ブラシストローク上にフェザーが表示されます。

  7. Hair Generate SOPで、 Distribution セクションに移動します。 Density の横にドロップダウンメニューがあり、 No Override に設定されています。それを Skin Attribute に変更します。デフォルトの Density Attribdensityなので、ここでは変更する必要はありません。

Feather Template Interpolate SOPの青の Display/Render フラグをオンにすると、マスクをペイントした領域にフェザーが表示されます。

長さをランダム化する

ノイズの章では、マスクを駆動するのにAttribute Noiseを使用しますが、このノードを使用してアトリビュート(フェザーのunguidedlengthscaleなど)をランダム化することもできます。 オンの時、アトリビュートはHair Generate SOPの Length パラメータを制御します。

  1. Attribute Noise SOPを追加し、それをRubber Toyとヘアー生成ノードの間(のどこか)に配置して、接続します。

  2. アトリビュートの値は単一の浮動小数点のため、 Attribute Names に移動し、ドロップダウンを Float に変更します。

  3. 入力フィールドで、デフォルトのCd(カラー)エントリをunguidedlengthscaleに置き換えます。

  4. Noise Value セクションを開き、 Range ValuesMin/Max に変更します。

  5. 関連する Min ValueMax Value パラメータを使用して、最短と最長のフェザーの長さを定義できます。0.22.5にしてみましょう。

  6. Pattern Section を開き、 Element Size0.01に下げます。ノイズの場合、このパラメータは解像度です。例えば値が1の場合、ノイズ要素が非常に大きくなり、長さの違いはほとんど分かりません。

アトリビュートを接続する

これで、フェザー毎に Length パラメータを制御できるアトリビュートができました。

  1. Hair Generate SOPの Unguided Section で、 Length に移動します。関連するドロップダウンメニューから、 Skin Attribute を選択します。 Length Attrib のエントリは既に適切に設定されているため、何も変更する必要はありません。

  2. Length を使用して、フェザーのグローバルな長さを変更することができます(アトリビュート値にパラメータ値が乗算されます)。

ブラッシングとシミュレーション

現在、フェザーはHair Generate SOPによって作成されたガイドに従っていますが、ほとんどの場合、特定のルックにするためにブラッシングすることになります。 このタスクには、Guide Groom SOPを使できます。 ブラシとツールを使用するの章で、フェザーをグルーミングして、希望通りのルックを実現する方法を紹介しています。

Houdiniのフェザーシステムのツールとワークフローは、すべて相互交換が可能です。 つまり、グルーミングツールではばら撒きの方法を使用でき、同じようにその逆も可能です。 これは、マスキング長さのランダム化ビューポートの高速化などのテクニックにも当てはまります。

また、重力、風、乱気流などのエフェクトをシミュレーションするHoudiniの汎用的なVellumテクノロジーも使用できます。

ビューポートの高速化

以下に示すヒントは、ばら撒きだけでなく、グルーミング全般に推奨です。 フェザーでは、数百万ものポイントやカーブが容易に作成されます。 特にハードウェアが最新でない場合には、そのような巨大なデータを表示するのは難しいことがあります。 その解決策の1つとして、グルーミングのプレビュー用に、ネットワークストリームを分岐させる方法があります。 この例では、Feather Template Interpolate SOPの後に、ネットワークの新しい部分を追加しています。

画像をクリックすると拡大します。
  1. Feather Resample SOPを追加し、 1番目 の入力をテンプレート補間ノードの 1番目 の出力に接続します。

  2. Shaft セクションで、 Resample Shaft をオンにします。

  3. Segments10以下に下げます。これにより、羽枝(Barb)の数が大幅に減少します。

  4. フェザーテンプレートに多数の羽枝(Barb)がある場合、 Resample Barbs をオンにして、 Barb Segments3に設定することもできます。

    ビューポートが再度応答するようになりましたが、フェザーはほとんど見えません。

  5. グルーミングを再度表示するには、Feather Visualize SOPを配置し、 1番目 の入力をリサンプルノードの 1番目 の出力に接続します。

  6. Barb Mode ドロップダウンから、 Surface を選択します。

  7. 表示ノードの青の Display/Render フラグをオンにします。

これで、グルーミングの低解像度バージョンが、サーフェスとして表示されます。数はごくわずかです:

15,000枚のフェザーを含むシーンでは、NVidia GeForce 1080でのGROOMノードの再生レートは2fpsです。 Feather Visualize SOPの Display/Render フラグをオンにすると、同じシーンが100fpsになります。

Feathers(羽根)

基本セットアップ

描画とシェイピング

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

シミュレーション

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

ツール

動画