PavilionDV7の雑多なやつ

Qiitaから移行しました。UE4に関する記事から興味のあることまで色々書きます。

【UE4】減衰するレンダーターゲットの作り方

はじめに

レンダーターゲットを使った作例やチュートリアルは豊富にあるものの、例えば「踏みしめた雪の上に新しい雪が積もり足跡が消える」といった徐々に消えていく効果を解説するような内容のものは非常に少なく感じました。(検索の仕方が良くなかったかもしれません)

今後、同じような表現をレンダーターゲットを用いて実現したい場合に苦労しないよう、備忘録として手順をまとめておきます。

プロジェクトはこちら

プロジェクトはこちらからダウンロードできます。

https://1drv.ms/u/s!Au-8FqgREBKZjn_HwBd43IiTQw6p?e=OxUYC5

減衰するレンダーターゲット

準備

必要なアセットは

  • Actorクラスを継承したブループリント

  • Material x 3つ

  • RenderTarget x 2つ

の6つです。アセット名についてはスクショを参照してください。

f:id:PavilionDV7:20210916154557j:plain

マテリアルのセットアップ

M_Brush

このマテリアルはContent Examples(機能別サンプル)のForceSplatマテリアルをコピーして整形したものです。このマテリアルで定義した形状と色がBrushPosition(UV座標)に従ってレンダーターゲットへ書き込まれます。

BrushPosition、BrushSize、BrushStrengthは「パラメータ」として定義しています。

f:id:PavilionDV7:20210916164928p:plain

M_Canvas

レンダーターゲットを表示する側のアクターに適用されるマテリアルです。ここでは最も単純な例としてレンダーターゲットをそのまま表示するだけの内容にしています。

TargetRTは「パラメータ」として定義しています。

f:id:PavilionDV7:20210916164957p:plain

M_DampingRT

レンダーターゲットの色を5%ずつ薄くするマテリアルです。MultiplyのConst Bに設定されてる値が元の色より何%にするかを決定します。画像では0.95が指定されているので元の色より95%になった色(つまり5%薄くした)をEmissive Colorとしています。

MultiplyのConst Bを1.0未満にすることで薄くなり、値がゼロに近づくほど素早く薄くなります。1.0より大きい値では徐々に色が濃くなります。M_CanvasではレンダーターゲットをEmissive Colorにも接続しているので、1.0より値を大きくするとめちゃくちゃ眩しくなります。

f:id:PavilionDV7:20210916165251p:plain

ブループリントのセットアップ

用意したマテリアルを駆使して、レンダーターゲットへの書き込み、レンダーターゲットを薄める、のサイクルを繰り返して減衰するレンダーターゲットを実装しています。

変数を用意

必要な変数は次の通りです。変数名についてはスクショを参照してください。

  • Static Mesh Actor型 (編集可能(Instance Editable)にチェック)

  • Material Instance Dynamic型 x 3つ

  • Integer型 x 2つ

  • Texture Render Target 2D型の配列

f:id:PavilionDV7:20210916165500p:plain

Begin Playを実装する

Begin Playでは準備したいくつかの変数を初期化します。

f:id:PavilionDV7:20210916200405j:plain

Tickを実装する

ここで登場するノードで注意すべきものは Find Collision UVノード です。これはデフォルトでは呼び出すことが出来ず、Project SettingsにてSupport UV From Hit Resultsにチェックを入れることで呼び出すことが可能となります。

f:id:PavilionDV7:20210916200600j:plain

おわりに

Twitterで同様の質問をしたときに回答してくださった皆さんのおかげで、今回の記事を書くことが出来ました。ありがとうございました。