On this page |
概要 ¶
Oceanシェルフタブには、海のシミュレーションを作成するツールが含まれています。
Small Oceanツールは、海のようなサーフェスを作成するのに役立ちます。 しかしながら、これはシミュレーションではなく、DOPをまったく使用しないデフォーマです。 タイムラインをスクラブさせると、シミュレーションなしで海洋が変化することが確認できます。 海洋のシミュレーションに関しては、Wave Tankツールを使用します。
Large Oceanツールは、非常に大きな距離でもタイルをリピートさせることなく大規模な海洋を作成するのに役立ちます。 しかしながら、これはシミュレーションではなく、DOPをまったく使用しないデフォーマです。 タイムラインをスクラブさせると、シミュレーションなしで海洋が変化することが確認できます。 海洋のシミュレーションに関しては、Wave Tankツールを使用します。
Guided Ocean Layerツールは、海面上に薄いパーティクル層のガイドFLIPシミュレーションを作成します。 パーティクルは海のVelocityで初期化されます。指定した深度の海面はパーティクルの下のCollisionレイヤーとして働くため、パーティクルを海の波にほぼ一致させることができます。 パーティクルの境界レイヤは、タンクのエッジの反射を抑制し、海のVelocityをシミュレーションへ戻し、海に一致するように水のボリュームレベルを維持します。 FLIPシミュレーションは、ボリュームをガイドする手法を使用することで、シミュレーションによる海のVelocityを維持します。
Wave Tankツールは、Velocityを持つ海面から初期化されたパーティクルを使用したFLIPタンクシミュレーションを作成します。 パーティクルの境界レイヤは、タンクのエッジの反射を抑制し、海の速度をシミュレーションへ戻し、海に一致するように水のボリュームレベルを維持します。
Beach Tankツールは、ビーチや浅瀬の地形で砕ける波のFLIPタンクシミュレーションを作成します。 このツールはWave Tankに似ていますが、タンクの長さにわたって、ある特定の方向に海のVelocityを減少させるオプションが有効になります。 Velocityを減少させると、水が浅くなるにつれ、海の波が自然に砕けるようになります。
Flat Tankツールは、FLIP Tankツールに似た、パーティクルのフラットなタンクのFLIPタンクシミュレーションを作成しますが、パーティクルの境界レイヤが追加され、タンクのエッジでの反射を抑制し、時間の経過とともに水位を維持します。 また、境界レイヤにより、タンクは移動オブジェクトをトラックし、オブジェクトのまわりの領域だけをシミュレーションできます。
Karmaによるオーシャンサーフェスのレンダリング ¶
新しく追加されたKarma Ocean LOPを使用すれば、Karma CPUでオーシャンをレンダリングすることができます。 以下に基本的なシーンのクィックガイドを載せます。
-
Oceans シェルフタブの Small Ocean ツールをクリックして、
ocean_geometry
ノードの中に入ります。このシェルフツールは、自動的にネットワークエディタの stage レベルでKarma Oceanノードを作成します。 -
プロジェクトを保存します。
-
save_spectra
という名前のROP Geometry Output SOPをクリックします。 -
Valid Frame Range を Render Frame Range に設定し、 Save to Disk in Background ボタンをクリックしてシーンをキャッシュ化します。
-
bake_foam
という名前のFile Cache SOPに対してもステップ4と同じ操作をします。 -
そのFile Cache SOPの出力をMerge SOP(
merge_foam
)の入力に接続します。タイムラインのスライダを動かすと、泡沫が表示されるはずです。 -
ネットワークエディタの stage レベルに移動し、Karma Oceanノードをクリックします。
-
Foam File チェックボックスを有効にします。既に適切なパスが利用可能になっているはずです。
-
反復処理を速くするために、 Dicing Quality を
0.25
に設定し、 Interior Geometry チェックボックスを無効にします。 -
Environment Lightノードを追加します。
-
そのEnvironment Lightノードの入力をKarma Oceanノードの出力に接続します。
-
ビューポート内で、Viewportオプションメニューを開いて Karma を選択して、レンダリングプレビューを表示します。
Masterclass ¶
Ocean Tankのタイプの違い ¶
Tankシミュレーション ¶
海面上にFLIPパーティクルの層を作成します。FLIPパーティクルの層は、ほぼ海面の形状をした衝突オブジェクト上に乗ります。海面の上層でのみシミュレーションをします。
タンク全体をFLIPパーティクルで満たします。タンク全体でシミュレーションをします。
タンク全体から地形オブジェクトを引いた領域をFLIPパーティクルで満たします。タンク全体でシミュレーションをします。
タンク全体をFLIPパーティクルで満たします。タンク全体でシミュレーションをします。
タンク全体をFLIPパーティクルで満たします。タンク全体でシミュレーションをします。
波 ¶
Ccean SpectrumノードからVelocityを引き込んで、一定の波のシミュレーションを作成します。
初期の波だけをセットアップします。 最初のフレームの後は、シミュレーションが大元のOcean Spectrumから逸脱し始めます。 とはいえ、そのシミュレーション境界に適用されたVelocityは、そのサーフェス上のエネルギーを維持します。
Ccean SpectrumノードからVelocityを引き込んで、タンクの大きさに渡って一方向の波を作成します。
波を生成しないで始めますが、波を乱すオブジェクトに反応します。
波を生成しないで始めますが、波を乱すオブジェクトに反応します。レンダリング時に波が追加されます。
追跡 ¶
移動オブジェクトを追跡することができます。
移動オブジェクトを追跡することができます。
移動オブジェクトを追跡することができません。
移動オブジェクトを追跡することができます。
移動オブジェクトを追跡することができます。
役に立つ時 ¶
ボートのように水面を浅く沈んで移動するオブジェクトで役に立ちます。
海の形状や動きを制御する必要のない場所で短い海のシミュレーションをする時に役に立ちます。
ビーチや浅瀬に打ち寄せる波のシミュレーションで役に立ちます。
波を必要としない静かな水のシミュレーション、動きまわって水面から飛び出す鯨のようにたくさんの水を変位するシミュレーションで役に立ちます。
作用するオブジェクトが波の動きよりも非常に大きかったり速いシミュレーションで役立ちます。レンダリング時にOceanディスプレイスメントをポスト処理として追加することができます。
ノードのネットワークを理解する ¶
海を作成する時に焦点となる重要な層が3つあります。最初にOcean(海)を作成し、次にWhitewater(白波)を作成し、最後にWhitewater(白波)のスペキュラーを追加します。
Tip
Ocean(海)で作業している間は、OBJレベルでWhitewaterノードすべてを無効にし、Whitewater(白波)で作業している間は、Oceanノードすべてを無効にします。
最初のノードのセットは、Ocean(海)そのものを制御します。
-
fluidtank_initial
はシミュレーションの最初のフレームを制御します。これは、Ocean Spectrumを使って初期フレームのタンクの形状を変更し、Ocean Sourceを使って出力を制御することができます。これには、タンクのサイズ、水の深さなどを含んでいます。 -
AutoDopNetwork
はタンクのシミュレーションを制御します。これは、FLIP ObjectとFLIP Solverを見つけます。FLIPシミュレーションには、境界層のパーティクルの流出と流入をするVolume Source DOPと、シミュレーションに海のVelocityを追加するGas Guiding Volume DOPが含まれています。Beach Tankシェルフツールは、POP Advect By Volumes DOPを使用して海のVelocityを注入することに注意してください。 -
fluidtank_fluid
は、1.と2.を組み合わせた結果で、その結果がレンダリングされる場所です。シミュレーションが行なわれた後に、このノードが流体パーティクルを収集して、マテリアルをセットアップし、サーフェス化するためのノードを作成してエフェクトを仕上げます。 -
fluidtank_interior
は、レンダリングにも使用され、流体の内部にシェーダを適用してボリューム効果を作成するのにも使われます。これは、水の濁り具合などの海面下のボリュームを制御します。
次のノードのセットは、Whitewater(白波)を制御します。
Note
Whitewater(白波)をシミュレーションに追加するには、 Oceans シェルフのWhitewaterツールを使用します。
-
whitewater_source
は、Spray(飛沫)とFoam(泡沫)が生じる場所です。 -
whitewater_sim
は、Whitewater(白波)をシミュレーションする場所です。これは、アニメーションを修正することができます。 -
import_whitewater
は、1.と2.を組み合わせた結果です。
詳細は、白波で波の水槽をアニメーションする方法を参照してください。
Note
(例えば、Large OceanまたはSmall Oceanのシェルフツールを使用して)完全にプロシージャルな海を構築するのであれば、Ocean Foam SOPを使用します。
海の見た目の変更 ¶
To... | Do this |
---|---|
波の高さを設定する |
Ocean Spectrumノードに移動し、 Wave Amplitude タブの Wave Scale パラメータを調整します。 この値は、 Wind タブの Speed パラメータで乗算されます。
|
波の方向を設定する |
Ocean Spectrumノードに移動し、 Wind タブの Directional Bias パラメータを調整します。 これは、風と同じ方向に移動する頻度を制御します。この値を上げることで、同じ方向に移動する頻度が多くなるので、海岸線の効果を作成するのに役に立ちます。 Directional Movement パラメータを上げようとすることもできます。これは、風と反対方向に移動する波を弱くして、同じ方向に移動する波だけを残します。
|
波の頂上の高さを制御する |
Ocean Spectrumノードに移動し、 Wind タブの Chop パラメータを調整します。 このパラメータを上げると、波の頂上が鋭くなります。しかし、この値を高くしすぎると、波が反転してしまう場合があります。
|
海にディテールを加える |
Ocean Spectrumノードの Resolution Exponent パラメータを上げます。 Note Resolution Exponent パラメータは、海の品質だけでなく、最終的に書き出されるテクスチャマップのサイズも決定します。
|
広大な海を作成する |
Large Oceanシェルフツールを使用します。 |
延長されたOceanサーフェスノードを理解する ¶
Guided Ocean LayerツールとOcean Flat Tankツールは、“延長された”流体サーフェスをレンダリングするためのネットワークも作成します。 この流体サーフェスは、FLIPシミュレーションとその周囲のソースのオーシャン間をシームレスに統合できるように、水平に伸ばしたり、Oceanディスプレイスメントを使ってレンダリングすることができます。
-
Particle Fluid Surfaceノード(
particlefluidsurface1
)は、延長されたFLIPメッシュを作成します。このノードの Flattening タブの設定は、シミュレーション領域のエッジ付近の流体シミュレーションを平坦化し、そのポリゴンメッシュのエッジを外側に押し出すことで、延長された平坦なサーフェスを形成します。そのシミュレーションを囲んだこの平坦な領域は、Oceanディスプレイスメントを使ってレンダリングされます。 -
2つのParticle Fluid Maskノード(
particlefluidmask1
とhifrequency_mask
)は、入力のOceanスペクトルにマスクを作成します。このマスクは、レンダリング時のOceanディスプレイスメントをそのシミュレーションの特定の領域に制限します。通常では、この領域には流体のベロシティ、渦、高い飛沫のない領域を指定します。これらのノードは、シミュレーション境界ボックスのエッジ付近のOceanディスプレイスメントを、サーフェス化と同時に適用した平坦化されたサーフェスに合致するようにブレンドします。さらに、hifrequency_mask
ノードは、入力のOceanスペクトルをフィルタリングして、最も高い周波数の波以外を除去します。通常では、シミュレーションしたFLIPメッシュにそれらの波を適用することができるので、その周囲のオーシャンとうまく統合させることができます。 -
surface_preview
ノードは、FLIPシミュレーションの高速プレビュー用であり、作成されたマスクをサンプリングして、そのmask
アトリビュートに対してビューポートビジュアライザを使用することで、そのOceanの寄与度を可視化することができます。oceanevaluate1
ノードは、計算されたマスクに基づいて、Oceanディスプレイスメントをそのプレビューに適用します。 -
split_spectra_masks
ノードは、マスクノードで作成された時間依存のマスクから静的なOceanスペクトルを取り出します。Ocean Surfaceマテリアルがスペクトルとマスクの入力を別々に持つことができることを活かすために、これらのスペクトルは2つの異なるファイルのセットにキャッシュ化されます。