Posted at

[UE4] DrawMaterialToRenderTarget で遊ぶ

More than 1 year has passed since last update.

image

Draw Material To Render Target についてです。

4.13で追加されたものですが、なかなか遊び甲斐のある機能です。


機能の概要

公式ドキュメント

https://docs.unrealengine.com/latest/INT/BlueprintAPI/Rendering/DrawMaterialtoRenderTarget/index.html

ようは、マテリアルの適用されたQuadをRenderTargetいっぱいに描画するという機能です。

「そんなことをして何の意味が」

「普通にマテリアルを張ればよいのでは」

と思われるかも知れませんが、たのしい使い方があります。


今回のツボ

描画した結果を次のフレームの入力マテリアルに突っ込んでループさせることで、

時間に沿って変化する感じのエフェクトを作ることができます。

つまり、たとえばRenderTargetを"RT1","RT2"の2枚用意し、

RT1を使ってRT2を更新する

RT2を使ってRT1を更新する

を繰り返します。

具体的にどういうことになるか、いくつかのサンプルを作ってみいました。

(性能低めのPCでやっているため動画の質は今一つです、ご容赦ください)


残像効果

前のフレームをちょっとずつ回したりスケールしたり減衰させたり色をつけたりしつつ、シーンキャプチャーでとった灰色さんを合成するとこういうのができます。

https://youtu.be/De4TSOPNtA4

最も思いつきやすい使い方でしょうか。

僕の微妙センスではこんなもんですが、

使う人によってはかっこよくなるはずです。


ライフゲームもどき

ライフゲームとは・・・

https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0

普通のライフゲームでは芸がないので、周囲のピクセルからたくさんサンプリングしたりライフを小数で表現するようにしてみました。

初期状態としてお馴染みのロゴを使用し、生死判定のパラメータを若干変えつつ並べてあります。

https://youtu.be/lxvE56uiEkA

カンでやってみましたが、SmoothLifeのようにはいきませんね。

しかし何故か脈打つような動きが見られたり網状の組織が生じたりして予想外にキモくなりました。気に入っています。

パラメータ次第ではブワッと広がったり全滅したりします。


波動

https://ja.wikipedia.org/wiki/%E6%B3%A2%E5%8B%95%E6%96%B9%E7%A8%8B%E5%BC%8F

僕を知る人には「またそれか」って思われそうですが、これはいいものです・・・!

波動方程式は時間軸について二階の微分を含む方程式なので、離散化すると過去2ステップの情報を要求する関数になります。

したがってRenderTargetが2枚では足りず、3枚をぐるぐる回して使用することになります。

カスタムノードを使用せずに組むと↓のような感じになります(マテリアルをよく触る人はお分かりかと思いますが、これでけっこうシンプルな内容です)。

image

ここにグレイさんのシルエットをキャプチャーしたものを流し込むと

(さっきのと違って真上からのキャプチャーを使っています)

https://youtu.be/-PIe_jn_AMs

さらにこの結果を使ってグリッド状メッシュの頂点を動かすと・・・

https://youtu.be/4cWszaHRJI0

・・・どこかで見たやつに似てきましたね?


反転させる

面白いことに、過去2ステップの順序を入れ替えるだけで波が巻き戻ります(減衰しない場合)。

つまりこういうことができます。

https://youtu.be/lrHS1FGww4Y

・・・読めましたでしょうか??


まとめ

複数のRenderTargetを用いてDrawMaterialToRenderTargetを活用する例を挙げました。

他にもいろいろな応用があると思います。ぜひ使ってみてください。

以上でおしまいです。

MERRY CHRISTMAS! :D