ウォーター システムでは、GPU 駆動の波のデータを使用して、Water Body アクタ上の波のサーフェスをシミュレートします。Water Waves アセットには、そのシミュレーション モデルで制御される個々の波のパラメータがあります。
Water Waves アセットを作成する
Water Body (水域) は、波シミュレーション モデルを備えています。このモデルは、 [Water Waves Asset (Water Waves アセット)] 割り当てスロットで使用します。デフォルトでは、TODOLINKゲルストナー波シミュレーション モデルを採用しているモデルを使用できます。
Water Body を使用するたびに新しい Water Wave アセットを作成する必要はありません。ただし、シミュレーション モデルからの波の入力のタイプに応じて異なる動作をさせたい場合や、まったく異なる波シミュレーション モデルを使用する必要がある場合などは、Water Wave アセットを作成する必要があります。
独自の Water Waves アセットを作成するには、コンテンツ ブラウザの [Add/Import (追加/インポート)] をクリックするか、 右クリックで表示されるコンテキスト メニュー を使用します。メニューから [Water (ウォーター)] > [Water Waves (水の波)] を選択します。
選択した Water Body で、 [Water Waves Asset (Water Waves アセット)] 割り当てスロットを使用して、このアセットを適用します。
Water Waves アセットを編集する
Water Wave アセットを作成するか、既存の Water Wave アセットを開く際に、複数のシミュレーション モデルを選択できる場合は、使用する波シミュレーションのタイプを選択します。編集可能なプロパティで構成される、シミュレーションの設定パネルが表示されます。
Waves Source では、Water Body での波の生成に使用する波シミュレーション モデルを指定します。シミュレーション モデルが選択されると、選択された Waves Source ファイルを介して公開された波シミュレーションを制御するパラメータが表示されます。たとえば、 Gerstner Water Waves ソースは、 Gerstner Wave Generator の下にパラメータを表示します。
これらのパラメータを設定すると、レベルに配置されている、この Water Wave アセットの割り当て先の Water Body での波シミュレーションの外観を定義することができます。
Unreal Engine では、ゲルストナー波シミュレーション モデルのみを提供しています。ただし、他のモデルや独自のモデルを実装することもできます。これには、複数の指定された入力に基づいて波を出力する関数としてブループリントや C++ コードを使用します。詳細については、このページのTODOLINK「独自の波シミュレーション モデルとウェーブ ジェネレーターを追加する」を参照してください。
Gerstner Water Waves のプロパティ
Gerstner Water Waves (ゲルストナー水波) シミュレーション モデルには、波シミュレーション用の次のパラメータがあります。
プロパティ | 説明 |
---|---|
Default (デフォルト) | |
Num Waves | 合計される波の数。 |
Seed | 波モデルに入力するランダムな値を生成するための確定的な開始点。 |
Randomness | ゲルストナー水波モデルが使用する波長および振幅の最小値から最大値までの補間に、特定のランダム性を加えます。 |
Wavelengths (波長) | |
Min Wavelength | 指定のフォールオフを持つ波同士の間の波長範囲の最小値を指定します。 |
Max Wavelength | 指定のフォールオフを持つ波同士の間の波長範囲の最大値を指定します。 |
Wavelength Falloff | Min Wavelength と Max Wavelength を使用して、連続する波の波頂間の距離を特定します。 |
Amplitude (振幅) | |
Min Amplitude | 指定のフォールオフを持つ生成されたすべての波の振幅の最小値を指定します。 |
Max Amplitude | 指定のフォールオフを持つ生成されるすべての波の振幅の最大値を指定します。 |
Amplitude Falloff | Min Amplitude と Max Amplitude を使用して、生成される波の高さを決定します。 |
Directions (方向) | |
Dominant Wind Angle | 風が吹いてくる主な方向を設定します。 |
Dominant Angular Spread | 風が吹く必要のある、指定の角度の範囲内で、ランダムな風向きを設定します。波はこの方向に進んでいるように見えます。 |
Steepness (スティープネス) | |
Small Wave Steepness | 指定されたフォールオフを持つ小波のスティープネスを指定します。スティープネスは、波頂がどの程度尖っているかを決定します。これは横方向の動きによって達成され、波の横方向の動きを制御します。 |
Large Wave Steepness | 指定されたフォールオフを持つ大波のスティープネスを指定します。スティープネスは、波頂がどの程度尖っているかを決定します。これは横方向の動きによって達成され、波の横方向の動きを制御します。 |
Steepness Falloff | Small Wave Steepness と Large Wave Steepness の値を使用して、発生する波頂の高さの範囲を決定します |
ウォーター システムのサーフェス ディテール用メッシュ レンダリング システムは、波の大まかな動きのパターンや外観を定義するのに適しています。細かいディテールは、メッシュのテッセレーションが品質とパフォーマンスのバランスで制限される法線マップを使用しているウォーター マテリアルで処理を行うのが適しています。
この後のデモでは、Water Wave アセットのみで実現できるマクロレベルのディテールを示すために、マテリアル主導のディテールは無効にしています。
波の数とランダム性を設定する
[Default (デフォルト)] カテゴリのパラメータは、Water Body Lake (湖水域) および Water Body Ocean (海水域) の全体的な外観を定義します。
Num Waves パラメータでは、波の数を指定します。これにより、形成される波の全体的な外観が作成されます。デフォルトでは 16 個の波が使用されます。波の数が少ないほどパフォーマンスは向上しますが、波のランダムな衝突におけるバリエーションは低下します。
Seed パラメータは、ランダムな値の確定的な開始点を作成します。この開始点を波シミュレーション アルゴリズムに渡して波のバリエーションを作成します。Randomness パラメータは、波長と振幅の最小値と最大値にランダムな値を提供することで、波シミュレーションにおける反復パターンを削減できます。
波の波長のシミュレーション
Wavelengths パラメータは、フォールオフ値を使用した場合の波間距離の最小値と最大値の範囲を指定します。Seed および Randomness の値は、波長の最小値および最大値の範囲と連動して、水面の外観をより詳細に定義します。
波の振幅のシミュレーション
Amplitude パラメータは、波間の高さのずれの最小値と最大値の範囲を指定します。これにより、波頂の山と谷を制御します。Seed および Randomness の値は、振幅の最小値および最大値の範囲と連動して、水面の外観をより詳細に定義します。
風の方向と角度の広がり
Directions パラメータは、風向きを指定します。Dominant Wind Angle では、風が全般的な風向きの方向に波を押し進めます。Dominant Wind Angle では、風が全般的な風向きの方向に波を押し進めます。Dominant Angular Spread は、Dominant Wind Angle で設定された方向に波が動いている際に波が進む二次的な角度を指定します。
波のスティープネスのシミュレーション
Steepness パラメータは、波頂がどの程度尖っているか、丸みを帯びているかを指定します。波頂のスティープネスは横方向の動きによって実現され、このスティープネスが波の横方向への移動量を制御します。
スティープネスの値が小さいと、波頂はよりなだらかで丸みを帯びます。スティープネスの値が大きいと、波頂が尖ります。これらの値により、ランダムな波の相互作用が生み出されます。この相互作用により、すべての波頂が完全に丸みを帯びていたり、尖っていたりするのではなく、丸みを帯びた波頂と尖った波頂の両方が生成されます。
独自の波シミュレーション モデルとウェーブ ジェネレーターを追加する
Unreal Engine では、ウォーター システム向けにゲルストナー波シミュレーション モデルを提供しています。ウォーター システムは、設定可能なパラメータを備える Water Wave アセットを使用して、追加の波シミュレーション モデルをサポートすることができます。これは、C++ コードまたはブループリントを使用して行うことができます。
このセクションでは、ゲルストナー波の実装を使用して、水面の波を評価する独自のウェーブ ジェネレーターのバックエンドを作成する作業例を示します。
C++ では、まず UGerstnerWaterWaveGeneratorBase
から派生し、GenerateGerstnerWaves_Implementation(TArray<FGerstnerWave>&OutWaves) const
を使用する、新しい型を作成します。
ブループリントでは、親クラスが GerstnerWaterWaveGeneratorBase クラスを継承します。
ブループリントでは、 Make GerstnerWave ノードと Make GerstnerWaveOctave ノードを使用して、情報を格納する配列に出力する独自の Generate Gerstner Waves 関数をオーバーライドして追加します。
Water Waves アセットでは、 Gerstner Wave Generator の選択ドロップダウン リストに、Gerstner Wave Source から継承するクラスがリストされます。