鉢本 一二のブログ

Unrealで雨が降った後に波紋を出す

作成日 :
更新日 :
folder 3D
local_offer Unreal,作り方

ゲームエンジンを使って雨を降らせるというのを行いたいと思い、google先生で調べたところ おもちゃラボさんの【Unity】広重のような雨のエフェクトを作るが見つかり、雨の感じが自分好みだった。

このような雨の降らせ方をUnrealでもできないかと、素人ながらに試行錯誤し、それらしく作れたのでその時の手順をメモした。

環境

手順

プロジェクトの作成

とりあえず、プロジェクトを作成。
プロジェクト名は、Rain_Projectとする。

床の設定

デフォルトの床のマテリアルを変更する。
Floorを選択し、マテリアルはM_Floor_01にする。
床のマテリアルを設定

雨マテリアルを作成

テクスチャはこのような感じを作成。
名前は、とりあえずT_Rainという名前を付けて、Unrealにインポート。
雨のテクスチャ

次に雨のマテリアルを作成する。
マテリアルの名前は、M_Rainとした。
M_Rainを開くと、メインマテリアルが1つある状態となっている。 雨のマテリアル

メインマテリアルの設定を変更する。

詳細タブにある

OpacueTranslucentに変更。
Translucentに変更

メインマテリアルの詳細に関する設定はこれで終了。
次に、T_Rainをマテリアルに適用するためTexture Sampleノードを追加。 Texture Sampleノードを追加

Texture SampleノードにT_Rainを適用する。

Texutre Sampleノードの詳細タブにあるMaterial Expression Texture BaseTextureの項目でT_Rainを設定する。
T_Rainを設定

これでTexture Sampleノードの詳細に関する設定は終了。
次にノードを繋げていく。

それぞれに接続する。
雨のマテリアル完成系
雨のマテリアルの結果

波紋マテリアルを作成

波紋のテクスチャを用意。
テクスチャ名は、とりあえずT_Reppleという名前にした。
波紋のテクスチャ

波紋のマテリアルを作成する。
マテリアルの名前は、M_Reppleにした。
エミッシブルカラーはTexture Sampleとメインマテリアルをそのまま繋ぐが、オパシティは Texture SampleParticle Color を合わせて使用する。

以下がその完成系。
波紋のマテリアル完成系
波紋のマテリアルの結果

雨を降らせる

雨と波紋それぞれのマテリアルを用意できたので、実際に雨を降らせる。

まず、パーティクルを作成する。
パーティクルの名前は、Rain_Systemという名前を付けた。
作成したRain_Systemを開くと次のような画面がでてくる。
作成したパーティクルの画面

RequiredSpawnというモジュールがあるが、初期のモジュールでは必要なものが無かったり、使わないモジュールがあったりしており、またそれぞれのモジュールの設定などもあるので、なるべく簡潔に説明する。

まず、使ったモジュールは以下である。
Rain_Emitterの必要なモジュール

番号順に説明する。

  1. ここでは、エミッタの名前を変更する。
    Rain Emitterという名前にする。
    エミッタの名前を変更
  2. Requiredモジュール。
    マテリアルを設定する。M_Rainを設定。
    マテリアルを変更
  3. Spawnモジュール。
    発生させるパーティクルの数を設定する。数は、5000にする。
    Constantの値を設定
  4. Event Generatorモジュール。
    パーティクル衝突時に、イベントを生成するようにする。
    このモジュールは、この後説明する波紋を表示のために必要になってくる。
    • 最初に+ボタンでイベントを1つ追加する。
    • Typeコリジョンに設定する。 イベントの発生条件を床と雨が衝突したときにイベントを発生させるため。
    • CustomNameonKilledRainと入力。
      通知するイベント名は、まぁ雨がkillした後のイベントということで。
      Constantの値を設定
  5. Lifetimeモジュール。
    雨のライフタイムを設定。
    • min0.0を設定
    • max0.3を設定
      Lifetimeの設定
  6. Initial Sizeモジュール。
    特に何もしない。
  7. Initial Locationモジュール。
    雨を降らせる範囲を設定。
    • DistributionDistribution Vector Uniformにする。
    • maxは、x=500, y=500, z=500を設定
    • minは、x=-500, y=-500, z=-0.1を設定
      パーティクルの範囲設定
  8. Const Accelerationモジュール。
    雨が降る速度を変更。
    パーティクルを下に移動させるため、マイナスの数字を入力する。z-5000を入力。
    雨の降るスピードを設定
  9. Actor Collisionモジュール。
    これは特になにもしない。
  10. Lock Axisモジュール。これを設定しないと、カメラの向きを変えたときなど雨の降り方がおかしなことになる。
    Lock Axis Flagsの設定をRotate Zを指定する。
    回転を抑制

ここで、一旦設定したパーティクルRain_Systemをビューポートに設置する。
Rain_Systemの位置は、xyzともに 0 にした。次の図のように雨が降ってくるようになった。
ビューポートに設置

波紋を表示

波紋の表示のタイミングは、雨が降る -> 床に当たる -> 波紋を表示、というふうにしたい。
エミッタは左から右に実行されるので、Rain Emitterの右側に波紋用のエミッタを作成する。

波紋用のエミッタを作成

波紋を表示させるために、使ったモジュールは以下である。
必要なモジュール

番号順に説明する。

  1. Requiredモジュール。
    ここでは、マテリアルをM_Reppleに変更する。
    マテリアルを変更
  2. Spawnモジュール。
    このモジュールで、波紋をスポーンしない。なので、数は0にする。
    Constantの値を設定
  3. EventReceiver Spawnモジュール。
    雨のEvent Generatorモジュールが発行したイベントを受け取り、パーティクルをスポーンする。
    • Constantに1を設定。
      なぜ1かというと、雨1粒につき波紋を1つだけスポーンさせたいため
    • Source
      ここでは、上記の雨で設定したEvent Generatorモジュールの値と同じものを入力する。
      • Event Generator Typeは、コリジョンを設定
      • Event Nameは、onKilledRainを入力
        Constantの値を設定
  4. Lifetimeモジュール
    波紋のライフタイムを設定。
    • min0.0を設定
    • max2.0を設定
      Lifetimeの設定
  5. Initial Locationモジュール
    波紋を表示させる位置について、XYについて設定はしない。
    ただし、Z0のままでは、床の上部分と座標が被り波紋の線がはっきりとしない。
    波紋を表示させる高さを変える。一応床より少し上にする。
    MaxMinZ0.01を入力。
    高さの設定
  6. Initial Sizeモジュール
    特に何もしない。
  7. Color Over Lifeモジュール
    徐々に波紋が消えるように色を設定する。
    基本、追加時の初期設定で徐々に消えるようになっているので、特に何もしない。
  8. Size By Lifeモジュール。
    波紋が徐々に広がるようにするために使用。
    Points -> 0 -> Out ValX, Y, Z0を入力。
    Size By Lifeの設定
  9. Lock Axisモジュール
    これを設定しないと、波紋が縦に表示される。
    なので、Lock Axis FlagsZにする。
    Lock Axis Flagsの設定

すべての設定は完了したので、ビューポートで確認。
ビューポート確認