https://qiita.com/advent-calendar/2018/ue4_zwei
アドカレ7日目の記事になります。
# はじめに
アドカレは初めてなので初投稿です、主にUE4を使用してエフェクトを作成しております、0ct0pusといいます。
本日の記事は**マテリアルに一工夫して、エフェクトをリッチにしよう!**という題で記事を書かせていただきます。
1.こんな人向け
・そこまでエフェクトにコストをかけられないけど、もうちょっとリッチに見えるエフェクトを作りたい人。
・細かな調整をしなくても、それっぽく見えるようになって欲しい人
2.今回使ったもの、参考にした資料
・テクスチャはみんなだいすき、Paragonから持ってきました。Paragon Gruxに入っていたものを作例では使用しています。
・https://docs.unrealengine.com/en-us/Engine/Rendering/Materials/CurveAtlasesInMaterials
カーブをテクスチャにするあれこれは上記ドキュメントを参考にしました。
また、実際に作成したCurveAtlasテクスチャは64*64にしています
3.ほんへ
###基本的なマテリアルの最小構成。
パーティクルシステム(以下,PS)を使用してエフェクトを作る際の非常にベーシックな構成です。
これに手を加えていきます。
特徴
組みやすい
シンプルなので負荷も最低限
色変化と、ディゾルブを入れ込みました。
特徴
関数化してないと見づらい。
###第1の肝になる、アルファ情報をもとにした、色変化機能です
UE4からカーブをテクスチャ化できるようになったので、それを利用しています。
Curve Atlas Row Parameter というノードを使ってもいいですが、テクスチャをパラメーター化できるのと、数値(パラメーターのCurve_Index)を変化させるだけでいろいろなカーブにアクセスできたほうが取り回しやすいため、このような構成になっています。
Rチャンネルに0~1のアルファ情報を与えることで、テクスチャの横軸の色を与え
Gチャンネルを数値で制御することで、列を指定しています。
[指定したい列]=[指定したい列番号(Curve_Index)]×[1列の幅(テクスチャが64列ならぶため、1/64)]
で、使いたい列を出しています。add0.5は、テクスチャのボケている部分が出ないようにしています。
ディゾルブ自体は様々な手法がありますが、今回は負荷が比較的軽量で、かつ0~1の数値でコントロールできる手法を取っています。
Dynamicパラメーターで0~1の値で制御します。
0~1の値を、-1~1に変換し、その値をディゾルブさせたいノイズテクスチャに加算します。この値を直接使うと-1~1の値になってしまうので、Saturateで0~1にクランプして、最後にオパシティ情報と乗算します。
更にディゾルブテクスチャがランダムになるように設定。
#4.ここまでかわりました。
左が基本的なマテリアルの最小構成、 右が今回一工夫加えたものです。
HITエフェクト
https://www.youtube.com/watch?v=EFpXkq9zeqQ
パーティクル単体
https://www.youtube.com/watch?v=_yXE-HrKWrA
#5.最後に
より詳細に調整したい場合は、ここに更に複数テクスチャを使用できるようにしたり、タイリング調整やテクスチャのスクロール機能。
テクスチャのディストーションなど様々な機能を入れ込んでいきますが、今回は
**そこまでエフェクトにコストをかけられないけどもうちょっとリッチに見えるエフェクトを作りたい人。**向けのため、かなり機能を絞らせていただきました。(機能が増えると触るパラメーターもカーブも増えてしまうためです。)
はじめてのアドカレということで、至らぬ点もあるとは思いますが、ここまで見てくださいましてありがとうございました。
#6.蛇足
超ものぐさなあなたは
このようにParticle Rerative TimeをOneMinusして、ディゾルブとオパシティにつないでしまいましょう。
パーティクルにライフタイムさえ入っていれば勝手に消えてくれるようになります。