On this page |
デフォルトでは、Vellum ConstraintsノードとVellum Solverノードには、放出の正確な方向を決定する専用パラメータはありません。 パーティクルは、ソルバに組み込まれている重力と風(アクティブな場合)にのみ追従します。 例えば、パーティクルをソースオブジェクトの法線方向に放出したい、または、流体を上向き60度で流したいとしましょう。 このようなタスクには、作成時にパーティクルの初期方向を設定するカスタム関数が必要です。
パーティクルの軌道を変更したい場合は、POPフォースを追加すると良いでしょう。 Houdiniには事前設定されたPOPノードが用意されていますが、POP VOP DOPを介してカスタムフォースを組み立てることもできます。 最もよく使用するフォースの1つがPOP Drag DOPです。 このフォースは空気摩擦を模倣して、素早く動く流体を減速させながら、パーティクルが離れないようにします。 もう1つの非常に便利なノードはPOP Attract DOPです。 このノードでは、パーティクルをゴール位置の方へ誘導させることができます。 POP VOPフォースの典型的な例は、Curl Noise VOPまたはTurbulent Noise VOPで、パーティクルをランダムに変位させて面白い構造を作成することができます。
初期方向 ¶
既に冒頭の方で一般的な2つの問題を挙げましたが、オブジェクトの法線方向にパーティクルを放出したり、放出する特定の角度を指定する方法については明記していませんでした。 どちらの場合も、鍵となるのは速度です。 やりたいのは、パーティクルが特定の方向へ移動するようにパーティクルのVelocityを変更することです。 以下の画像では、基本的なSphere SOPの法線が確認できます。 考え方としては、これらの法線をVelocityに変換することで、法線をパーティクルの“ガイド”として使用します。 法線とVelocityはXYZ成分で構成され、それらの成分が合わさってベクトルになります。 以下の例のセットアップでは、パーティクルを球の表面上にランダムにばら撒いてから、法線方向に加速させます。
基本的な流体のセットアップ ¶
Note
このサンプルシーンはSOPベースです。 DOPネットワークやシェルフツールを用いたい場合は、Vellum Fluidのセットアップページを参照してください。 Vellum Fluidをセットアップする様々な方法について詳しく説明しています。
-
obj レベルで、⇥ Tabを押してTABメニューを呼び出します。そこからGeometry OBJを作成し、ダブルクリックしてそのノードの中に入ります。
-
Sphere SOP(Create)を作成します。
-
Uniform Scale を
0.5
に設定します。 -
Rows を
52
、 Columns を96
に上げて、サーフェスを滑らかにします。 -
Display Normals アイコンをクリックして、法線を表示します。法線が長すぎる場合は、ビューポート上にマウスカーソルを置いてDを押しますこのホットキーは Display Options を開きます。 Guides タブをクリックし、 Scale Normal を
0.05
に設定します。 -
Scatter SOPを追加し、その入力をSphere SOPの出力に接続します。
-
Scatter SOPで、 Force Total Count を
10000
に上げ、十分なパーティクルが得られるようにします。
次に、Vellum Fluidネットワークを作成します。
-
Vellum Configure Fluid SOPを追加します。
-
その 1番目 の入力をScatter SOPの出力に接続して、パーティクルを転送します。
-
Create Points from Volume をオフにして、パーティクルが球の表面を覆うようにします。
-
Particle Size を
0.005
かそれ以下に設定し、個々の流体パーティクルを表示します。 -
2個のNull SOPを追加し、それらをVellum Configure Fluid SOPの 1番目 の出力( Geometry )と 2番目 の出力( Constraints )に接続します。
-
1番目の出力のNullを
GEO
(ジオメトリ)に、2番目の出力のNullをCON
(拘束)に変更します。 -
Vellum Solver SOPを追加します。
-
Vellum Configure Fluid SOPの3番目の出力をソルバの 3番目 の入力( Collision Geometry )に接続します。
残り2つの入力は必須ですが、ここでは空っぽのままにしていることに注意してください。 後でソルバの中に入って別のノードを使ってこの接続を確立します。 ここでは、すべての法線がマイナスZ方向に向いています。現在表示されているものは、パーティクル法線です。
-
Vellum Solver SOPをダブルクリックして、中に入ります。
-
TABメニューから、Vellum Source DOPを追加します。
-
それを
SOURCE
Output DOPに接続します。 -
Vellum Source DOPのパラメータエディタで、 SOP Path パラメータに
/obj/geo1/GEO
と入力します。 -
Constraint SOP Path パラメータに
/obj/geo1/CON
と入力します。ここで、ジオメトリと拘束がソルバに接続されます。このように回り道をする理由は、 Emission Type パラメータにアクセスするためです。 -
Emission Type ドロップダウンから、 Each Substep を選択します。
-
geo1 レベルに戻り、Vellum Solver SOPを選択してパラメータエディタを開きます。
-
Solver タブで、 Substeps を
5
(流体の標準値)に上げます。 -
Constraint Iterations を
20
に下げ、流体があまり固くならないようにします。 -
流体には Smoothing Iterations は必要ないため、
0
に設定します。 -
Forces タブを開き、 Gravity を
0,0,0
に変更します。
法線の取り込み ¶
シミュレーションすると、ほんのわずかなパーティクルだけがランダムに動いています。 パーティクルをこの球の法線に追従させるには、ノードがもう2個必要です。
-
geo1 レベルに戻り、TABメニューを開きます。2個のPoint Wrangle SOPsを追加します。
-
1つ目のWrangleをSphereとScatterの間に配置して接続します。
-
VEXpression フィールドで、
@N = @N;
と入力します(末尾のセミコロンも含めます)。このVEXpressionは、球の法線を取得し、それを新しい@N
変数に格納します。@N
は、ポジションの@P
と同じく標準ジオメトリアトリビュートです。Houdiniは、標準の変数とそのデータタイプを認識します。例えば、法線はベクトルです。ベクトルは、@N.x
、@N.y
、@N.z
を使用して成分に分けることができます。これが面白いのは、例えば法線のY値のみを使用したい場合です。独自の式または固定値を使ってXとZが置き換えられます。 -
Vellum Configure Fluid SOPの青色の Display/Render フラグをオンにします。
これで、パーティクルの法線が球の外側を向くようになりました。オブジェクトの法線がパーティクルに転送されています。
法線からVelocityを定義 ¶
この手順では、法線を使用してVelocityを定義します。 パーティクル生成時にそのパーティクルの速度がどのくらいなのか分からないので、係数を使用して速度を制御できるようにするのがお勧めです。
-
2つ目のPoint WrangleをScatter SOPとVellum Configure Fluid SOPの間に配置して接続します。
-
VEXpression フィールドで、
v@v = set(normalize(@N) * chf("speed_multiplier"));
と入力します。念のためにいいますね。セミコロンを忘れないでください!
このエクスプレッションは、Velocityベクトルv@v
を取り込みます。
@v
は@N
のようなもう1つの標準アトリビュートなので、名前を変更してはいけません。
set
コマンドは、Velocityベクトルを設定します。
@N
は既にベクトルなので、XYZのベクトル成分を手動で定義する必要はありません。
normalize
関数は、法線を0から1の間の値に再計算します。
この工程はもはやスタンダードと言って良いほどで、予想通りの結果が返るようになります。
最後に、speed_multiplier
カスタムパラメータを取り込みます。
この値を使用して、パーティクルの初期速度をスケールすることができます。
-
アイコンをクリックして、カスタムの Speed Multiplier パラメータを表示します。値は
0.2
と入力します。 -
Vellum Solver SOPの Display/Render フラグをオンにし、をクリックしてシミュレーションします。
パーティクルが球の法線に追従し、 Speed Multiplier カスタムパラメータを使用してその速度を遅くしたり速くしたりできます。
法線は、付随するポリゴンに対して垂直ですが、さらにVEXpressionを足して法線をランダムにすることができます。 これには無限の可能性があり、様々なVEXpression関数を組み合わせることで面白い結果を得られます。
-
1つ目のAttribute Wrangle SOPを選択します。 VEXpression フィールドで、
@N = curlnoise(@N);
の行を追加し、捻れた法線フィールドを作成します。下図に示すように、球状のオブジェクトにはcurlnoise
関数がうまく機能するようです。
カスタムの放出方向 ¶
法線のメソッドは、グリッドのような2Dエミッターにも使用することができます。
この方法では、グリッドを回転させるだけでパーティクルを特定の方向に放つことができます。
滑らかなパーティクルのストリームにするには、Vellum Solver SOPの中に入り、vellumsource1
ノードの Emission Type を Each Substep に変更します。
放出の方向を反対にするには、v@normals = -@N;
でオブジェクトの法線をマイナスにします。
下図のグリッドの Rotate 値は、45,0,30
です。
もう1つの方法は、カスタムの初期Velocityを定義することです。 ここでは法線は不要なので、2個のWrangleをまだ削除していなければ、削除しても構いません。
-
新しいPoint Wrangle SOPを追加して、Scatter SOPとVellum Configure Fluid SOPの間に配置します。
-
パーティクルソースとしてGrid SOPがある場合、それを小さいSphere SOPで置き換えます。
-
Velocityはベクトルであり、XYZ成分で構成されています。完全なベクトルにするには、3つの値を定義する必要があります。 VEXpression フィールドで、まず
v@v = set();
と入力します。このエクスプレッションは、Houdiniに初期Velocityを設定するよう指示するものです。実際のXYZ値は、括弧内に記述します。 -
任意の有効な関数を使用できます。関数は、静的、時間依存、またはその両方のメソッドの組み合わせです。完全なVelocityベクトルは、
v@v = chf("speed_multiplier")*set(sin(@Frame/4),0,cos(@Frame/4));
のようなエクスプレションになります。
フォースを適用する ¶
最初に決めるべきことは、DOPネットワークとSOPネットワークのどちらを使用するかです。 どちらのネットワークタイプでもPOPフォースでパーティクルを駆動させることができますが、それらのフォースを追加する場所が異なります。
-
Vellum Solver SOPの Force タブに、 Gravity と Wind パラメータがあります。SOPネットワークで、Vellum Solver SOPをダブルクリックして中に入ります。このノード内には
FORCE
という名前のOutput DOPがあります。ここに、新しいフォースを接続します。 -
Vellum Solver DOPには Force タブがなく、標準の重力でさえ個別に下流ノードを通して導入する必要があります。これは、DOPネットワークのすべてのフォースに当てはまります。
この例では、螺旋に追従させる方法を説明します。 Vellumでフォースを使用するためのサンプルネットワークと考えてください。シーンはSOPセットアップを使用します。 Vellum Grain shelf toolなどを使用して作成されるDOPネットワークでは、ソルバの前か後のAutoDopNetwork DOP内にフォースを追加します。
パーティクルの経路 ¶
変形させた螺旋から流体の経路を作成します。
-
obj レベルで、⇥ Tabを押してTABメニューを呼び出し、Geometry OBJを作成します。そのノードをダブルクリックして中に入ります。
-
Helix SOPを作成します。
-
Height を
5
に変更します。 -
Turns は
1.8
です。これは、カーブの Height に対する Turns の数です。 -
Radius セクションで、 Start Radius を
0.25
にして螺旋を細くします。 -
Construction に移動して、 Start Angle を
120
度に上げて螺旋の開始点をずらします。 -
Divisions per Turn を
100
にして、カーブを滑らかにします。
もっと乱れるように螺旋を変形させます。
-
Attribute Noise SOPを追加し、その入力を上流のSpiralノードに接続します。
-
General セクションの Attribute Names で、
Cd
を削除して(position
を意味する)P
を入力します。 -
Noise Value セクションの Amplitude を
0.3
に変更し、螺旋を滑らかにして、極端な変位がないようにします。 -
Noise Pattern の Element Size を
0.7
に下げると、構造がもっと細かくなります。
螺旋がシーンの原点から開始するようにトランスフォームさせます。
-
Transform SOPを追加します。その入力をAttribute Noise SOPの出力に接続します。
-
Translate を
-0.1,0.02,0
に設定します。 -
Rotate を
0,45,-90
度に設定して螺旋を傾け、X軸と揃えます。
Vellum Fluidネットワーク ¶
Note
Vellum Fluidネットワークについては何度か説明しています(上記の基本的な流体のセットアップの章など)。このシーンでは、ワークフローの説明は簡略化し、最も重要な手順について説明します。
-
Sphere SOP(どのタイプでも可)を作成し、 Uniform Scale を
0.2
に設定します。螺旋の開始点がその球内に入っていることを確認します。 -
Vellum Configure Fluid SOPを追加し、 1番目 の入力をSphere SOPの出力に接続します。
-
Particle Size を
0.007
に設定し、十分なパーティクルが得られるようにします。 -
Physical Attributes セクションを展開し、 Surface Tension をオンにして
25
と入力します。 -
2個のNull SOPを追加して、それらの名前を
GEO
とCON
に変更します。 -
GEO
をVellum Configure Fluid SOPの 1番目 の出力に、CON
を 2番目 の出力に接続します。
次の手順では、ソルバを設定します。
-
Vellum Solver SOPを配置します。その 3番目 の入力を、Vellum Configure Fluid SOPの 3番目 の出力に接続します。
-
Solver ▸ Time Scale を
0.25
に変更し、シミュレーションの速度を4分の1にします。 -
後の3つのパラメータ( Substeps 、 Constraint Iterations 、 Smoothing Iterations )には、それぞれ流体向けの標準値である
5
、20
、0
を設定します。 -
Forces タブを開き、 Gravity を
0,0,0
に設定します。 -
Vellum Solver SOPをダブルクリックして中に入ります。
-
Vellum Source DOPを追加し、それを
SOURCE
ノードに接続します。 -
SOP Path パラメータに
/obj/geo1/GEO
と入力します。 -
Constraint SOP Path パラメータに
/obj/geo1/CON
と入力します。これで、パーティクルと拘束がソルバに接続されました。 -
Emission Type ドロップダウンメニューから、 Each Substep を選択します。
-
Activation パラメータに
$FF<50
というエクスプレッションを入力します。現行フレームがフレーム50手前までパーティクルがソーシングされます。フレーム50以降ではソースは非アクティブになります。
フォース ¶
パーティクルが螺旋に追従し巻き付くようにします。 滴も必要ですが、流体の主体には十分な乱流を加えて良い感じのルックを作成します。まずはカーブフォースから始めます。
-
Vellum Solver SOPの内部で、POP Curve Force DOPを追加し、それを
FORCE
ノードに接続します。 -
SOP Path で、
/obj/geo1/transform1
と入力します。これは螺旋ネットワークの最後のノードです。 -
Max Influence Radius は
0.4
です。値を変更すると、赤いチューブが細くなるのが確認できます。チューブは、パーティクルがカーブフォースの影響を受ける領域をマークします。 -
Follow Scale は
4
です。これは、パーティクルをカーブ沿いに移動させるフォースです。 -
Suction Scale を
12
にして、カーブの方に流体を引き寄せます。 -
Orbit Scale を
3
にして、カーブを軸とする周回フォースを生成します。
これらのフォースのバランスをとるのがなかなか難しいことがあります。 1つのフォースを上げたら、効果が過大にならないよう、通常は、別のパラメータを下げる必要があります。 パーティクルが速すぎる場合は、パラメータを下げてみましょう。
-
POP Drag DOPを追加し、カーブフォースと
FORCE
の間に配置します。 -
Air Resistance はパーティクルを減速させます。ここでは
0.62
と入力します。
シミュレーションすると、流体は螺旋に追従しますが、乱流がほとんどないため、すべてが滑らかに見えます。もっとランダムにするために以下の処理を加えます。
-
POP Force DOPを追加し、カーブフォースとDrag(抵抗)フォースの間に配置します。
-
Noise ▸ Amplitude で、
17
と入力します。ノイズフィールドにより流体が引き裂かれ、滴が生成されます。
この最終シミュレーションを開始して、流体がカーブに巻き付くのを確認します。 細い領域と太い領域があり、パーティクルは螺旋のターン時に減速し、滴が見えます。 およそ120フレーム後に、最初のパーティクルが螺旋から離れ始めます。シミュレーションを150フレームに制限しても構いません。