| On this page |
Note
このガイドでは、Height FieldとShallow Water Solverに関する基礎知識が必要です。 また、この章の例の一部は、基本的なセットアップとワークフローに慣れるためにShallow Water Solver入門でのHeight Fieldとソルバの設定を基にしています。
Shallow Water Solver SOP Output タブを見ると、
Velocity(
vel)、加速度(accel)、渦度(vorticity)のデータをレイヤとして格納できる3つのパラメータがあります。
これらの情報は、Velocityや渦度の差を可視化するのに役立つだけでなく、軌道効果の表現にも活用することができます。
また、フィールドをシミュレーションの駆動に利用するという応用例もあります。
Velocity ¶
Velocityはデフォルトで有効になっており、異なるVelocityをシミュレーションに直接マッピングすることができます: Visualization ドロップダウンから Color Water by Layer を選択してください。 Shallow Water Solver入門のページを既にご覧になった方なら、このオプションは水のVelocityを表現したターコイズブルー色のグラデーションを追加することをご存知でしょう。 Visualization パラメータは、そのグラデーションの色分布を制御することができます。
詳細は、Geometry Spreadsheetを開いて、 Primitives ボタンをクリックしてください。
そこには、合成された
velocityレイヤはなくて、代わりに個別のvel.x、vel.y、vel.zのレイヤがあることが分かります。
また、Height Fieldは物理的な高さを持たない2Dグリッドであるため、vel.yは常にゼロであることを知っていることが重要です。
Vorticity ¶
vorticityレイヤには、各ポイントにおける局所的な回転運動が格納されます。
絶対値が大きいほど回転速度が速いことを示します。
プラスのVorticity値は、上から見下ろした際に反時計回りの回転を示し、マイナスのVorticity値は時計回りの回転を示します。
Shallow Water Solverには、Vorticity(渦度)を可視化する組み込み機能が用意されておらず、独自の解決策が必要になります。
Acceleration ¶
Acceleration(加速度)とは、時間における物体のVelocity変化量の速さのことです。
これは、加速、減速、方向転換を表現することができます。
velcoityレイヤと同様に、accelerationレイヤは3つのコンポーネント(accel.x、accel.y、accel.z)で構成されていますが、ここでもXコンポーネントとZコンポーネントのみが関係しています。
このレイヤを表示する既成の機能はなくて、独自の解決策が必要になります。
Force ¶
Shallow Water Solverの Binding タブには、空っぽの Force Mask Layer フィールドが用意されています。 ここで、カスタムのアニメーションマスクを作成し、それをスロットに接続することができます。 Shallow Water Solverは、このマスク値を用いて、水を押し出したり変位させます。
Tip
さらに下部にあるサンプルページでは、脈動する放射状のforceレイヤの作成方法を説明しています。
可視化: レイヤ ¶
HoudiniのHeight FieldにはHeightField Visualize SOPが用意されており、
最大9枚のレイヤに対してカスタムカラーを定義することができます。
このノードの一般的な応用例はテクスチャリングです。
HeightField Visualize SOPは、通常ではネットワークの最終ノードとして配置します。 これによって、すべてのレイヤが利用可能になります。 このノードの使用方法は以下の通りです:
-
Material セクションに Height Ramp があります。 このグラデーションは、
heightレイヤの値に応じて地形を色付けします。 Compute Range ボタンをクリックすると、グラデーションのすべての色域を地形にマッピングすることができます。Presets ボタンをクリックすると、事前定義された様々なカラーランプを選択することができます。
-
9個の Layer パラメータには、すべての既存レイヤをリストする関連ドロップダウンメニューがあります。 そのドロップダウンメニューからレイヤを選択するか、または、レイヤ名をその空っぽのパラメータフィールドに入力してください。 その後、 Color を定義します。レイヤは、その選択した色で表示されます。
Note
このレイヤ番号はレイヤの重ね順も示しています。
例えば、vel.xとvel.zをそれぞれ Layer 1 と Layer 2 に割り当てて、waterを Layer 3 に割り当てた場合を考えてみましょう。
この場合では、waterレイヤがVelocityレイヤを覆い隠すため、それらのレイヤは表示されなくなります。
正しい結果を得るには、waterレイヤを Layer 1 に割り当ててください。
可視化: 軌道 ¶
Volume Trail SOPを使用してShallow Water Solverのレイヤから得られた情報を可視化することで、魅力的な渦巻きやカールの効果を伴った軌道を作成することができます。 Volume Trail SOPは、その名前が示す通りでボリュームを表示するために設計されましたが、Height Fieldは2Dグリッドです。 Y座標は常にゼロであるため、それが原因で平面的な表現しか表示されません。
-
ネットワークに
Volume Trail SOPを追加して、 2番目 の入力をそのShallow Water Solver SOPの出力に接続します。
-
Grid SOPを配置して、その出力をそのShallow Water Solver SOPの 1番目 の入力に接続します。
-
そのGrid SOPの Size パラメータを調整して、
HeightField SOPの Size パラメータの値と一致させます。例えば、Height Fieldが100m×100mの場合、 両方 のノードの Size パラメータの値も
100となります。 -
そのGrid SOPの Rows パラメータおよび Columns パラメータは、軌道の解像度を定義します。 これらは、いくつかの要因に依存するため、正確な値をここで指定することはできません。
-
そのVolume Trail SOPの Velocity Volumes フィールドに、可視化したいフィールド名を入力します。 フィールドは、その関連ドロップダウンメニューから選択することもできます。
-
次に、 Trail Length パラメータを調整します。軌道が長いほど描画に時間がかかり、より密な“マップ”が生成されます。
浅水シミュレーションがキャッシュ化されていれば、プレイバーの再生ヘッドを移動させるか、または、 Play ボタンを押すことで、その軌道の動きを確認することができます。
forceフィールドの作成 ¶
Houdiniではカスタムフィールドを作成するのに多様な方法が用意されています。 しかし、Shallow Water Solverと併用する場合、様々なテクニックで共通する事があります。 それは、フォースをマスクに変換しなければならないことです。 以下の例では、マスクの中心から水を押し出す放射状のアニメーションマスクの描き方を説明しています。
地形 ¶
フォースをより見やすくするために、地形を小さくしてください。
HeightField SOPの Size パラメータを100, 100に設定します。
ディテールを上げるために、 Grid Spacing パラメータを0.5に設定します。
これは、Shallow Water Solver SOPの Voxel Size Scale パラメータの値にもなります。
地表のディテールを増やすために、おそらくHeightField Noise SOPの Amplitude パラメータと Element Size パラメータを下げなければなりません。
-
地形はお好みに合わせて調整して構いませんが、水が地形上を伝播できるよう、あまり高くなりすぎないようにしてください。
-
また、水が生成される位置を決定するために
sourceレイヤが必要です。このレイヤの作成手順は、Shallow Water Solverのページで説明しています。
VEXスクリプト ¶
ここでは、伝播する同心リングを生成し、それをマスクに変換するVEXスクリプトを使用します。
いくつかのカスタムパラメータによって、生成されるフォースを完全に制御することができます。
地形にスクリプトを適用するために、HeightField Wrangle SOPが必要です。
ネットワーク内のShallow Water Solver SOPの 直前 にHeightField Wrangle SOPを配置して、 1番目 の入力を上流ネットワークに接続します。
次に、以下のスクリプトを⌃ Ctrl + Cでコピーして、そのHeightField Wrangle SOPの VEXpression フィールドに⌃ Ctrl + Vでペーストします。
Creates spare parameter for each unique call of ch() ボタンをクリックして、カスタムパラメータをそのWrangleのUIに追加します。
// Parameter section vector center = chv("center"); // カスタムパラメータ: 波の中心 float speed = chf("speed"); // カスタムパラメータ: 波の速度 float frequency = chf("frequency"); // カスタムパラメータ: 波の周波数 float amplitude = chf("amplitude"); // カスタムパラメータ: マスク強度(=フォース強度) float falloff = chf("falloff"); // カスタムパラメータ: 強度減衰係数 float time = @Time; // 現在のシミュレーション時間 // 現在のHeight Field位置 vector pos = @P; // 現在の位置から波の中心までの距離 float dist = distance(pos, center); // 波の作成 float wave = sin(dist * frequency - time * speed); // 波を[0,1]範囲に再マッピングして、その結果を波の強度でスケール float mask = fit(wave, -1, 1, 0, 1) * amplitude; // オプション: 波の強度を波の中心から離れるほど減衰させます mask *= exp(-dist * falloff); // その結果をHeight Fieldの@maskレイヤに書き込み @mask = mask;
パラメータ ¶
下記のテーブルには、カスタムパラメータの役割を載せています。 実際の値は地形サイズに強く依存します。 以下の設定は、100m×100mの地形サイズでテスト済みです。 変更の効果を確認するには、そのHeightField Wrangle SOPの青い Display/Render フラグを有効にしてください。
| パラメータ | 説明 |
|---|---|
| Center |
波の中心を定義します。Height Fieldは2Dであるため、XとZの値のみが必要です。この中心は、ペイントされたsourceマスクの近辺または内側に配置してください。これによって、波が水面に影響を与えるようになります。プラスとマイナスの値を使用することができます。例えば、100m×100mの地形では、 左 端はX = -50、 下 端はZ = 50となります。
|
| Speed |
波の伝播速度。2から5の間の値から始めてください。
|
| Frequency |
このパラメータは、波/リングの数を定義します。値が小さいほど密なパターンになります。値が大きいほど太いリングが生成されます。0.2から1の間の値に留めるようにしてください。
|
| Amplitude |
これは、マスクの強度です。このマスク値はフォースに変換されます。このサンプルシーンでは、1から5の間の値から始めてください。 Amplitude の値が非常に高い場合、不安定な状態を引き起こす可能性があります。
|
| Falloff |
波が中心から離れるにつれて減衰させることができます。このパラメータは非常に敏感なので、0.02程度の小さな値から始めてください。
|
レイヤの作成 ¶
次の手順は、maskレイヤをシミュレーション駆動に使用可能なforceレイヤに変換することです。
sourceレイヤと同様に、HeightField Copy Layer SOPも必要となります。
このノードをそのHeightField Wrangle SOPとそのShallow Water Solver SOPの間に配置して接続して、 Destination フィールドに
forceと入力します。
そのHeightField Copy Layer SOPの下流にHeightField Mask Clear SOPを配置して接続して、円マスクをリセットします。 Layer 1 フィールドに
maskと入力します。
ソルバ調整 ¶
ソルバ側でもいくつかの調整が必要です。 Setup タブのパラメータの大半は、地形の形状やサイズに強く依存しますが、必ず考慮すべき設定がいくつかあります:
-
Setup タブの Constraint Updates セクションに進みます。 Forces Frequency トグルを有効にして、そのドロップダウンメニューから Every Substep を選択します。 これによって、各シミュレーションサブステップで
forceレイヤの値が適用されます。 フレーム毎にフォースを適用することもできますが、(シミュレーション時間が長くなってしまいますが)サブステップ方式の方が結果が滑らかになる傾向があります。 -
Bindings タブの Force Mask Layer フィールドの関連ドロップダウンメニューから
forceを選択して、ソルバと新規レイヤ間の接続を確立します。
Simulation タブの Voxel Size Scale パラメータを調整します。
この例(100m×100mの地形)では0.5の値を使用しましたが、異なる値を入力しても構いません。
また、 Simulation タブの Cache Memory (MB) を増やすことで、その結果をコンピュータのRAMにキャッシュ化して、高速再生を実現することができます。
シミュレーションを実行すると、以下のタイムラプス動画のように、フォースが水を押して弓形の波を生成する様子が確認できるはずです。