Choose your operating system:

Windows

macOS

Linux

FS_Header_Image.png

ブループリントとレンダー ターゲットを使うと、発射物とプレイヤーがぶつかった時に水がどうなるかをシミュレーションする流体サーフェスを作成することができます。以下の操作ガイドでは、レンダー ターゲットおよびレンダー ターゲットと機能するように特別に設定したマテリアルを新規作成して、触れたり発射物に当たると反応する流体サーフェス アクタの作成方法を説明します。その後で、流体サーフェスに触れたり発射物が当たると流体サーフェス インタラクションを含んで動かすように、新たなブループリントの作成および設定を行います。

操作ガイドでは、「 ブループリントとレンダー ターゲットでハイト フィールド ペインタを作成する 」操作ガイドで作成したアセットと同じものを使用します。 ブループリントとレンダー ターゲットでハイト フィールド ペインタを作成する がまだお済みでない方は、こちらをまず完了させてください。このサンプル マップは、Epic Games launcher の [Learn] タブからダウンロード可能な Content Example プロジェクトにも入っています。

1 - プロジェク設定

このセクションでは、Fluid Surface (流体サーフェス) ブループリントを作成するためのプロジェクトのセットアップ方法を説明します。

流体サーフェスのプロジェクト設定は、ハイト フィールド ペインタの設定と同じです。この設定をしていない場合は、「 ブループリントとレンダー ターゲットでハイト フィールド ペインタを作成する 」の プロジェクト設定 セクションをまずご確認ください。設定が完了すると Game Mode と HUD が作成されています。プロジェクトを実行すると以下の画像のようになるはずです。

HFP_PS_07.jpg

次のセクションで、Fluid Surface ブループリントを作成するために必要なすべてのアセットの作成方法を説明します。

2 - 必要なアセットの作成と設定

流体サーフェスを正しく機能させるには、新しいアセットを作成する必要があります。ハイト フィールド ペインター用に作成したアセットもいくつか使用します。次のセクションでは、これらのアセットの設定方法と、使用する必要のある特別なプロパティについて説明します。

レンダー ターゲットの作成と設定

流体サーフェスを正しく機能させるには、レンダー ターゲットを新規作成する必要があります。手順は、 コンテンツ ブラウザ の右クリック メニューから [Create Advanced Asset (詳細アセットの作成)] > [Materials & Textures (マテリアルとテクスチャ)] 、そして [Render Target] オプションを選択します。

HFP_RT_Creation_00.png

作成されたレンダー ターゲットに以下の名前を付けます。

  • Height0

  • Height1

  • Height2

  • HeightfieldNormal

FS_Render_Targets.png

マテリアルの作成と設定

流体シミュレーションを機能させるには、水とハイトマップ シミュレーションのそれぞれにマテリアルを 1 つずつ、合計 2 つのマテリアルを新規作成する必要があります。マテリアルを作成するには、 コンテンツ ブラウザ を右クリックして [Create Basic Assets (基本アセットを作成)] リストから [Material] オプションを選択します。

ブループリントは必ずコンパイルおよび保存して、使える状態にしておきましょう。

  • WaterMaterial は、サーフェスに水のような外観と動きを与えるマテリアルです。WaterMaterial マテリアルを作成する前に、WaterMaterial マテリアルの [Details (詳細)] パネルで、以下のオプションが設定されていることを確認してください。

    • Blend Mode: Translucent

    • Lighting Mode: Surface Translucency Volume

    • Used with Static Lighting: True

    • Uses Distortion: True

    • Refraction Mode: Pixel Normal Offset

    Copy Expression Graph

    FS_Water_Material.png

  • HeightSim は、流体シミュレーションのサーフェスに向かって発砲した時に、さまざまな種類の波を発生させるマテリアルです。HeightSim マテリアルを作成する前に、HeightSim マテリアルの [Details (詳細)] パネルで、以下のオプションが設定されていることを確認してください。

    • [Shading Model]: Unlit (ライティング無し)

    • Allow Negative Emissive Color: True

    Copy Expression Graph

    FS_HeighSim_Material.png

  • ComputeNormal マテリアルは、水のサーフェスに必要となる法線を作成するマテリアルです。ComputeNormal マテリアルを作成する前に、ComputeNormal マテリアルの [Details (詳細)] パネルで、以下のオプションが設定されていることを確認してください。

    • Shading Model: Unlit (ライティング無し)

    • Allow Negative Emissive Color: True

    Copy Expression Graph

    FS_ComputeNormal_Material.png

  • MAT_ForceSplat は、衝撃を受ける場所と衝撃の大きさを決定するマテリアルです。MAT_ForceSplat マテリアルを作成する前に、MAT_ForceSplat マテリアルの [Details (詳細)] パネルで、以下のオプションが設定されていることを確認してください。

    • Blend Mode: 加算ブラシ

    • [Shading Model]: Unlit (ライティング無し)

    • Allow Negative Emissive Color: チェックを入れる

    Copy Expression Graph

    HFP_Material_Creation_03.png

    MAT_ForceSplat マテリアルは ハイトフィールド ペインター で使われているマテリアルと同じものです。作成済みのマテリアルをお持ちであれば、自由に使用してください。

必要なアセットの設定はこれで完了です。次のセクションで、Fluid Surface ブループリントを作成するために各要素を連動させる方法を説明します。

3 - ブループリントの設定

必要なマテリアルとレンダー ターゲットを作成し設定したら、次はブループリントを新規作成し、流体サーフェス アクタとして機能するように設定します。

ブループリントの作成と変数の設定

  1. コンテンツ ブラウザ を右クリックして、 [Create Basic Asset (基本アセットの作成)] セクションの [Blueprint Class] オプションをクリックします。

    HFP_BP_Setup_00.png

  2. [Pick Parent Class] ウィンドウから [Actor] を選択して、「 WaterSurface_BP 」と名前を付けます。

    FS_Water_BP_Creation.png

  3. WaterSurface_BP をダブルクリックして開き、以下の変数型を追加します。

    FS_Var_Creation.png

  4. 次に、変数を次のデフォルト値に設定します。

    変数名

    変数型

    デフォルト値

    WaterMeshAsset

    Static Mesh

    SM_Plane1000_512 (コンテンツ サンプル マップに含まれる)

    WaterMaterial

    Material Interface

    WaterMaterial

    HeightState

    Integer

    0

    TimeAccumulator

    Float

    0.0

    WaterMID

    MaterialInstanceDynamic

    N/A

    UpdateRate

    Float

    60.0

    TouchingCharacter

    Actor

    N/A

    LastTouchingActorPosition

    Vector

    0, 0, 0

    InteractionDistance

    Float

    1.0

    MouseDown

    Bool

    Un-Checked

ブループリント関数の作成と設定

必要な変数でブループリントを作成したら、次は関数を作成します。次のセクションでは、この 3 つの関数と設定方法について説明します。

ブループリントは必ずコンパイルおよび保存して、使える状態にしておきましょう。

  • GetHeightRT 関数は、後で使用できるように、レンダー ターゲットの高さを取得および格納します。この関数を作成する前に、次のデータを使って関数の入力と出力を設定してください。

    • 入力 :

      • 名前:インデックス

      • 型:整数

    • 出力 :

      • 名前:Heigh RT

      • 型:Texture Render Target 2D

      Copy Node Graph

      FS_Get_Height_Function.png

      3 のレンダー ターゲットのいずれかを Return ノードの Height RT 入力に必ず追加してください。

  • GetLastHeight は、最後に取得した流体サーフェスの高さを後で使うために格納しておく関数です。この関数を作成する前に、次のデータを使って関数の入力と出力を設定してください。

    • 入力 :

      • 名前:CurrentHeightIndex

      • 型:整数

      • 名前:NumFramesOld

      • 型:整数

    • 出力 :

      • 名前:Heigh RT

      • 型:Texture Render Target 2D

      Copy Node Graph

      FS_Store_Last_Height.png

  • Trace From Camera は、Height Field Painter ブループリントで使用したトレースと同じものです。この関数は、入力と出力の変数を設定する必要はありません。

    Copy Node Graph

    HFP_BP_Setup_05.png

ブループリントのコンストラクション グラフの設定

コンストラクション グラフは、流体シミュレーションを正しく機能させるために必要なスタティックメッシュとマテリアルの両方を作成し設定します。次のセクションでは、この 3 つの関数と設定方法について説明します。

ブループリントは必ずコンパイルおよび保存して、使える状態にしておきましょう。

  • コンストラクション グラフを使って、流体サーフェスに必要なスタティックメッシュを作成し、その後で動的マテリアル インスタンスを作成して水面をシミュレーションするスタティックメッシュに適用します。

    Copy Node Graph

    FS_Con_Script.png

ブループリントのイベント グラフの設定

イベントグラフは、このエフェクトを正しく追加および機能させるために必要なすべてが入っている場所です。次のセクションでは、イベント グラフの各セクションの機能、および最終的なブループリントをワールドに配置した場合の影響について説明します。

ブループリントは必ずコンパイルおよび保存して、使える状態にしておきましょう。

  • Clear all render targets of data は、ブループリントの初回実行時にアーティファクトの発生を確実に防ぐために、含まれている可能性のある以前のデータのレンダー ターゲットをすべてクリアします。

    Copy Node Graph

    FS_Clear_All_RT.png

    この 3 つのレンダー ターゲットのそれぞれを Return ノードの Height RT 入力に必ず追加してください。

  • Check to see if Left Mouse Button is held down は、ユーザーがマウスの左ボタンを押しているかどうかを確認します。ユーザーがマウスの左ボタンを押していれば MouseDown が true、そうでなければ false に設定されます。

    Copy Node Graph

    FS_Check_If_Left_Mouse.png

  • Take Damage Force セクションは、衝撃イベントをシミュレートしているサーフェスをオフセットできるように、ヒットされたスタティックメッシュの位置を見つけて ForceSplat マテリアルをそのセクションに適用します。

    Copy Node Graph

    FS_Take_Damage_Force.png

  • Begin & End Overlap セクションは、プレイヤーがワールドに配置された流体サーフェス アクタに触れているかどうかを確認するセクションです。

    Copy Node Graph

    FS_Begin_End_Overlap.png

  • Shoot when mouse is down は、ユーザーがマウスの左ボタンを押しているかどうかをティックごとに確認します。マウスの左ボタンが押されていると、 Trace From Camera 関数が呼び出されて、カメラの中心からワールドの中へトレースします。

    Copy Node Graph

    FS_Shoot_When_Mouse_Is_Down.png

  • Touching Character Force は、プレイヤーが流体サーフェスに触れた時に、流体サーフェス アクタに適用しているフォースの適用と更新を行います。

    Copy Node Graph

    FS_Touching_Char_FOrce.png

  • Fixed timestep, so fluid speed is framerate independent は、流体サーフェスを伝わる波動伝搬がプロジェクトのフレームレートに結びついていない独自のフレームレートをもっていることを確認します。基本的に、流体サーフェスの波の速度は、レベル内で起きていることの影響を受けなくなります。

    Copy Node Graph

    FS_Fixed_Time_Step.png

  • Cycle Active heightfield は、流体サーフェスに発射物が当たる、または接触した時に、サーフェスがより動的に見えるようにするために、サーフェスに対してさまざまなレンダー ターゲットを周期的に繰り返します。

    Copy Node Graph

    FS_Cycle_Active_Heightfield.png

  • Apply fluid surface simulation kernel, which propagates waves は、流体サーフェス アクタ上で波動伝搬処理をすることで、時間経過と共に波が消えていくように見せます。

    Copy Node Graph

    FS_ApplySim.png

  • Compute Surface Normal は、さざ波をもっと見やすくするための法線を流体のサーフェスに適用します。

    Copy Node Graph

    FS_Compute_Surface_Normal.png

ブループリントの設定はこれで完了です。次のセクションでは、UE4 で使用する設定について説明します。

4 - 最終結果

流体サーフェスの様々な構成要素がすべて Fluid Surface ブループリントに接続されると、Fluid Surface ブループリントのコンパイルと保存が完了してレベルに追加されます。レベル内にそれらが配置されると、マウスの左ボタンを押して流体サーフェスめがけて撃つ、もしくはキャラクターを使って流体サーフェス上を歩いたりして、レベルをプレイし Fluid Surface ブループリントとインタラクトすることが可能になります。この 2 種類のインタラクションを以下の動画で見てみましょう。

  • まずこちらは、Fluid Surface ブループリントをめがけて撃った場合です。

  • そしてこちらは、ポーン ベースのキャラクターを使って Fluid Surface ブループリント上を歩いた場合です。

Copy Node Graph

FS_Completed_Blueprint.png

  • こちらは、完成した Fluid Surface ブループリント全体のコピーです。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる