On this page |
オブジェクトのサーフェスやポイントに、フェザーを素早く適用する方法が必要ですか? その答えが“はい”なら、フェザーのばら撒きの方法を試してみましょう。 フェザーのばら撒きを使用すれば、マスクをペイントしたり作成して、フェザーの外観を特定の領域に制限することもできます。
基本セットアップ ¶
以下のネットワークを基に、引き続き説明や解説をしていきます。 これまで同様、すべては1枚のフェザーから始まります。以下は、ここで作成していくネットワークのプレビューです。
-
obj レベルで、⇥ Tabを押してTabメニューを開きます。そこからGeometry OBJを作成し、その中に入ります。
-
再度Tabメニューを開いて、 Feather Template ツールを選択し、基本のフェザーのネットワークを作成します。フェザーのカーブを変更してもよいですし、デフォルトの形状を使用しても構いません。
-
Null SOPを追加し、その入力をFeather Template from Shape SOPの出力に接続します。Nullの名前を
FEATHERGEO
に変更します。
ばら撒きポイント ¶
ばら撒きポイントはフェザーのシードとなるもので、任意のサーフェスにこれらのポイントを作成するための汎用的なノードがあります。 ポイントを作成する前に、オブジェクトまたはキャラクタが必要です。
-
Uniform Scale を
0.5
に設定し、フリッピー(Rubber Toy)を小さくします。 -
Hair Generate SOPを配置し、 1番目 の入力をRubber Toyの出力に接続します。このノードは、接続されたオブジェクトの法線を使用してガイドを作成します。フェザーはそのガイドに従うことになります。
-
Total Count パラメータで、フェザーの正確な数を定義できます。
5000
の値から始めましょう。 -
Unguided Hairs セクションに移動し、 Length を変更してフェザーのサイズを制御します。後の章で、パラメータをランダム化するためのアトリビュートの使用方法を紹介します。
-
Guide Tangent Space SOPを追加し、 1番目 の入力を、ヘアー生成ノードの 1番目 の出力に接続します。このノードは、ガイドの根元のポイントの法線方向を使用して、フェザーを正確に方向付けます。
-
Normal Mode ドロップダウンから、 Constant Normal Vector を選択します。このオプションは、 Normal Vector パラメータを使用して
barborient
アトリビュートの値を決定します。 -
Normal Name と Tangent Name をオフにします。これらは不要であり、オンのままでは無駄なリソースを消費することになります。
-
Orient Name をオンにし、デフォルトのエントリを
barborient
に置き換えます。
向きを調整しても、ビューポートには何の変化もありません。設定の効果は、フェザーを追加すると現れます。
ネットワークを接続する ¶
現在のところ、フェザーとグルームガイドは別々のネットワークストリームです。 以下のノードでそれらを1つにまとめ、フェザーをガイドに適用します。
-
Feather Template Interpolate SOPを配置し、 1番目 の入力を接線空間ノードの 1番目 の出力に接続します。 4番目 の入力を、
FEATHERGEO
Nullの出力に接続します。 -
Templates セクションに移動します。 Lookup Method ドロップダウンで、 Group を選択します。このプロジェクトにフェザーテンプレートは1つだけなので、 Template Group を指定する必要はありません。このノードは、 4番目 の入力から受け取る1つ目のテンプレートを使用します。
-
Null SOPを追加し、その入力を補間ノードの 1番目 の出力に接続します。
-
Nullの名前を
GROOM
に変更します。 -
Nullノードの青の Display/Render フラグをオンにして、フェザーを確認します。
すべてが適切な場合、以下の画像のような結果になるはずです。
カラー ¶
真上の画像は色が薄く、フェザーがよく見えません。 色を付けると、フェザーを視覚的に見分けやすくなります。 またカラーを追加して、アトリビュートとその値を表示することもできます。
-
Color SOPをヘアー生成ノードと法線空間ノードの間に配置して、接続します。
-
Class を Primitive に変更し、フェザーオブジェクトに色を付けます。
-
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
が設定されます。これで、マスクができます。
-
Attribute Wrangle SOPを追加し、それをRubber Toyとヘアー生成ノードの間に配置して、 1番目 の入力に接続します。
-
以下から、完全なコードスニペットを⌃ Ctrl + Cでコピーし、Wrangleの VEXPression に⌃ Ctrl + Vでペーストします。
-
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; }
-
Hair Generate SOPの Distribution セクションで、 Density に移動します。関連するドロップダウンから、 Skin Attribute を選択します。
-
Density Attrib に、
slope
と入力します。 -
必要に応じて、 Total Count を変更します。
ペイント ¶
マスクをキャラクタに直接かつインタラクティブにペイントして、フェザーが表示される場所を定義することもできます。 ブラシストロークをミラー化して、ペイント処理を高速化できる便利なオプションもあります。 さらに、1つのペイントノードを通して複数のアトリビュートを管理することも可能です。
Note
Wrangleまたは長さをランダム化するの手順を既に実行している場合は、そこで作成したノードをすべて削除します。 その後、⌃ Ctrl + ⇧ Shift + Sを押して、新しい名前でプロジェクトを保存します。
-
Attribute Create SOPを追加し、それをRubber Toyとヘアー生成ノードの間に配置して、接続します。
-
Name パラメータに、
density
と入力します。density
とは、浮動小数点およびPointアトリビュートです。 -
Attribute Paint SOPをアトリビュート作成ノードとヘアー生成ノードの間に配置して、接続します。
-
Attributes タブを開き、 Attribute Name に移動します。デフォルトのエントリを
density
に置き換えます。 -
Symmetry タブをクリックし、 Enable Mirroring をオンにします。
-
ペイントノードを選択し、マウスカーソルをビューポートに移動し、Enterを押してブラシモードをオンにします。
Brush タブでは、 Soft Edge を調整するなど、ブラシをカスタマイズすることができます。 ブラシ自体は、ビューポートで赤い球として表示され、キャラクタのサーフェスに追従します。 ブラシサイズは、を使用してインタラクティブに変更できます。
マスクをペイントするには、を押したままにします。後ほど、ブラシストローク上にフェザーが表示されます。
-
Hair Generate SOPで、 Distribution セクションに移動します。 Density の横にドロップダウンメニューがあり、 No Override に設定されています。それを Skin Attribute に変更します。デフォルトの Density Attrib は
density
なので、ここでは変更する必要はありません。
Feather Template Interpolate SOPの青の Display/Render フラグをオンにすると、マスクをペイントした領域にフェザーが表示されます。
長さをランダム化する ¶
ノイズの章では、マスクを駆動するのにAttribute Noiseを使用しますが、このノードを使用してアトリビュート(フェザーのunguidedlengthscale
など)をランダム化することもできます。
オンの時、アトリビュートはHair Generate SOPの Length パラメータを制御します。
-
Attribute Noise SOPを追加し、それをRubber Toyとヘアー生成ノードの間(のどこか)に配置して、接続します。
-
アトリビュートの値は単一の浮動小数点のため、 Attribute Names に移動し、ドロップダウンを Float に変更します。
-
入力フィールドで、デフォルトの
Cd
(カラー)エントリをunguidedlengthscale
に置き換えます。 -
Noise Value セクションを開き、 Range Values を Min/Max に変更します。
-
関連する Min Value と Max Value パラメータを使用して、最短と最長のフェザーの長さを定義できます。
0.2
と2.5
にしてみましょう。 -
Pattern Section を開き、 Element Size を
0.01
に下げます。ノイズの場合、このパラメータは解像度です。例えば値が1
の場合、ノイズ要素が非常に大きくなり、長さの違いはほとんど分かりません。
アトリビュートを接続する ¶
これで、フェザー毎に Length パラメータを制御できるアトリビュートができました。
-
Hair Generate SOPの Unguided Section で、 Length に移動します。関連するドロップダウンメニューから、 Skin Attribute を選択します。 Length Attrib のエントリは既に適切に設定されているため、何も変更する必要はありません。
-
Length を使用して、フェザーのグローバルな長さを変更することができます(アトリビュート値にパラメータ値が乗算されます)。
ブラッシングとシミュレーション ¶
現在、フェザーはHair Generate SOPによって作成されたガイドに従っていますが、ほとんどの場合、特定のルックにするためにブラッシングすることになります。 このタスクには、Guide Groom SOPを使できます。 ブラシとツールを使用するの章で、フェザーをグルーミングして、希望通りのルックを実現する方法を紹介しています。
Houdiniのフェザーシステムのツールとワークフローは、すべて相互交換が可能です。 つまり、グルーミングツールではばら撒きの方法を使用でき、同じようにその逆も可能です。 これは、マスキング、長さのランダム化、ビューポートの高速化などのテクニックにも当てはまります。
また、重力、風、乱気流などのエフェクトをシミュレーションするHoudiniの汎用的なVellumテクノロジーも使用できます。
ビューポートの高速化 ¶
以下に示すヒントは、ばら撒きだけでなく、グルーミング全般に推奨です。 フェザーでは、数百万ものポイントやカーブが容易に作成されます。 特にハードウェアが最新でない場合には、そのような巨大なデータを表示するのは難しいことがあります。 その解決策の1つとして、グルーミングのプレビュー用に、ネットワークストリームを分岐させる方法があります。 この例では、Feather Template Interpolate SOPの後に、ネットワークの新しい部分を追加しています。
-
Feather Resample SOPを追加し、 1番目 の入力をテンプレート補間ノードの 1番目 の出力に接続します。
-
Shaft セクションで、 Resample Shaft をオンにします。
-
Segments を
10
以下に下げます。これにより、羽枝(Barb)の数が大幅に減少します。 -
フェザーテンプレートに多数の羽枝(Barb)がある場合、 Resample Barbs をオンにして、 Barb Segments を
3
に設定することもできます。ビューポートが再度応答するようになりましたが、フェザーはほとんど見えません。
-
グルーミングを再度表示するには、Feather Visualize SOPを配置し、 1番目 の入力をリサンプルノードの 1番目 の出力に接続します。
-
Barb Mode ドロップダウンから、 Surface を選択します。
-
表示ノードの青の Display/Render フラグをオンにします。
これで、グルーミングの低解像度バージョンが、サーフェスとして表示されます。数はごくわずかです:
15,000枚のフェザーを含むシーンでは、NVidia GeForce 1080でのGROOM
ノードの再生レートは2fpsです。
Feather Visualize SOPの Display/Render フラグをオンにすると、同じシーンが100fpsになります。