moyasiエフェクト館

主にエフェクト関係の記事を上げていこうかと思います。


エフェクトに関係する記事上げてきます
エフェクト関係の記事の内容は緩く募集中
自分がわかる範囲であれば書いていこうかなと。

【Niagara】モーションに合わせた角度に調整しやすくする

f:id:tktknkyo:20200621010146p:plain

Verは4.25.0です

 

初めに

今回は、斬撃ブラーなどの

モーションに依存しやすいエフェクトで

そのモーションに合わせた角度調整がやりやすい方法を

 

一応、角度をそれぞれ弄っていっても合わせるのは出来ますが

それだけだとどうしても手間が掛かると思うので

調整をしやすくする手段を

 

今回の記事ではメッシュを使ったエフェクトが対象となります。

 

アニメーション通知での調整

 

Verの更新で、アニメーションシーケンスからも

Niagaraのエフェクトの再生ができるようになり

そこから角度も調整できるようになりました。

 

また、再生しながらNiagaraSystem上で角度を弄ることも当然できます

ただし、角度を微調整するにしても

角度が変わるのは再び再生されるとき

になるようです

 

発生時に角度を決めているので当然といえば当然ですが...

 

また、こちらで調整する場合、角度を調整する手段は

XYZで調整する方法、クォタニオンで調整する方法などがありますが

数値をいれて調整するのは、直感的ではないかなと

 

レベル上で確認して角度を取得する

なぜレベル上かというと

f:id:tktknkyo:20200621011318p:plainf:id:tktknkyo:20200621011338p:plain

このように、アニメーションの再生もここで出来るのが理由です

(静止画だと解りにくいですが)

 

また、手動での調整もしやすいです

 

 

f:id:tktknkyo:20200621011530p:plain

レベル上に、BPなどの装備した状態のメッシュを持ってきて(今回はプレイヤーキャラ)

アニメーションのデータを適応する事で、レベル上での再生ができます

 

問題の角度をどのように調整するかの部分ですが

このキャラのBPに調整したいメッシュを持ってきます

f:id:tktknkyo:20200621011837p:plainf:id:tktknkyo:20200621011902p:plain

 

若干見た目が奇妙な気はしますが

読み込んだあとは、アニメーションを再生し、それに合った角度に調整するだけです

 

f:id:tktknkyo:20200621012052p:plain

このやり方であれば、数値を直接入力するのではなく

向きに合わせて、かなり直感的に角度の調整がしやすいと思います

 

スナップが入っていると調整しにくいので、外すのは忘れずに

また同時に座標の微調整もやりやすいです

 

f:id:tktknkyo:20200622003818p:plainf:id:tktknkyo:20200622003852p:plain

位置などを調整する場合

原点の位置は確認しておきましょう

今回使っているグレーマンのメッシュは足元が原点になっていました

 

 

 

Niagaraで調整する

f:id:tktknkyo:20200621012316p:plain

調整が終わったら、読み込んだメッシュのトランスフォームの所の数値をNiagaraで読み込みます

 

f:id:tktknkyo:20200621012925p:plain

あとは、そのまま同じ数値をNiagaraの方で代入すれば問題ないはずです

ただ、座標はキャラ基準なので、エンジンオーナーPositionとの加算

 

向きはキャラの向きもほしいのであれば、エンジンオーナーRotationは入れておきましょう。

メッシュの角度を決めるMeshOrientationはクォータニオンの型なので

変換する必要があります

 

f:id:tktknkyo:20200621013203p:plain

以前の記事でも出したと思いますが

自身はこのような変換する機能を作ってあります

関数を使えばそこまで手間の掛かるものでもありません

 

今回はここまでとなります

 

大分前にやろうとしたときは一回諦めたのですが

再びやったら結構あっさり解決したのがこの件です...

 

【Effekseer】マテリアルで簡易的に光って見えるようにする

f:id:tktknkyo:20200523204953p:plain

Verは1.51です

 

【初めに】

今回は、マテリアルでちょっと弄れば、手軽に発光みたいなのを作る

という感じの内容になります

 

あくまで簡易的になりますが、とりあえずテクスチャ1枚で手軽に光ってみるようにする感じとなります。

 

 

 【ブルーム】

よく聞くやつですね、お手軽に光らせることができます。

 

f:id:tktknkyo:20200523214214p:plain

ブルームとなるところをOnにすると有効になります、デフォルトだとOffになっています。

 

f:id:tktknkyo:20200523214319p:plain

今回はかなり極端な数値で設定しましたが、上記の設定でこのようになりました。

後ろにある、マテリアル自体で光ってみせる方法と違い

こちらは、エフェクト全体に一括で光らせます

手軽さではこちらの方が高いです

 

f:id:tktknkyo:20200523214914g:plainf:id:tktknkyo:20200523215028g:plain

とりあえず手元にあったエフェクトでブルーム有り無しの比較だとこのようになっています

数値としては

明るさは0.6

しきい値が0.5

穏やかさが1

となります。

 

 

 

【マテリアル】

f:id:tktknkyo:20200523205549p:plain

では本題のマテリアルです

マテリアルの中身自体はこのようになっています。

内容としては、違う乗数したものを加算しただけとなります。

 

f:id:tktknkyo:20200523205837p:plain

単純にテクスチャを使うだけならこうなります。

ここに対して、まずは乗数を入れていきます

 

f:id:tktknkyo:20200523210137p:plain

また、ここの乗数は調整できるようにするので

パラメータからの出力を繋げます

図だとPowBaseと付けました

 

f:id:tktknkyo:20200523210335p:plain

そして、そこに光って見える為の部分の処理を追加しました

それが赤枠の部分となります。

 

PowCoreという名前が、中心の光って見える部分に使う乗数です

こちらはPowBaseよりも高い数値が望ましいです

 

それを加算するのですが、このままだと強過ぎる可能性があるので

ここの強度も調整できるようにしました。

左下のAdd_Core_Levelと付けたパラメータと乗算し

エフェクト毎に変えることができるようにしました。

 

そして、元々Emissiveに繋がっていた部分と、ここの情報を加算して

Emissiveに繋げます。

これで完成となります。

 

【調整】

 

f:id:tktknkyo:20200523210806p:plain

今回はこの様な画像を使いました。

 

f:id:tktknkyo:20200523210903p:plain

その画像を使うとこうなります

各パラメータは

Poebaseが1.1

PowCoreが15.5

Add_Core_Levelが1.3

RGB自体はR0、G101、B255

となります

 

f:id:tktknkyo:20200523211122p:plain

PowCoreの数値を小さくすると、このように白い部分が強くでてくるのでよりクッキリ見えるようにもなります。

 

この方法を使う場合、テクスチャもそれに合わせて色の階調を作ってあげると利便性も高くなります。

 

またマテリアル側もかなりベースの部分のみとなっているので

他のテクスチャと乗算させたり、別のテクスチャを使って色味を追加する

歪みやタイリング、スクロールなど

自分の作るエフェクトに合わせてマテリアルは調整するのが良いと思われます。

 

今回はここまでとなります、なんとなくで光って見えるようにしたい、という場合には手軽さはあるのではないでしょうか。

 

 

【UE4】Niagaraのエフェクトを再生する

f:id:tktknkyo:20200413163005p:plain

Verは4.24です

 

 

【初めに】

今回の記事は、エフェクトそのものを作る内容ではありません

Niagaraで作成したエフェクトの再生関係の内容となります。

Niagaraでエフェクトは作れたけど、良い感じに再生ができない!

などの場合に参考にしてもらえればなと思います。

 

【基本】

かなり基本となる部分から

 

f:id:tktknkyo:20200413164239p:plain

レベルにそのまま配置するだけであれば

ドラッグ&ドロップでカスケードと同じように配置できます。

 

f:id:tktknkyo:20200413164644p:plain

特定のボタンを押したとき、などの場合はこのようになります

とりあえずキーボードのAキーにしてますが

 

カスケード用とは少しだけ名前が変わります

Spawn System at Location

Niagara

Spawn Emitter at Location

がカスケード用となります

 

f:id:tktknkyo:20200413164911p:plain

プレイヤーの位置にエフェクトを再生する場合は

座標をそのまま接続すればいいです

 

ただし、Niagaraの場合Locationは発生位置そのものというより

Engine.Owner.Position

に情報を渡すだけとなります

 

BPから再生は、被ダメ時やモーション再生時などでもできます

この辺はカスケードと同様かなと。

 

【アニメーション連動】

 

f:id:tktknkyo:20200413165748p:plain

今のVerではPlay Niagara Particle Effect

がアニメーション通知で利用する事ができます

これにより、アニメーションシーケンス上でエフェクトを再生する事も可能です

 

f:id:tktknkyo:20200413165935p:plain

設定出来る内容はこのようになっています

座標変更などはある程度はできますが、ある程度でしかできません。

 

f:id:tktknkyo:20200413170044p:plain

なので、このような、User.系統のデータを操作する事がデフォルトでは出来ません。

なので通知を作ってみよう、という事になります。

 

【アニメーション通知を作る】

f:id:tktknkyo:20200413170500p:plain

アニメーション通知を作るためのBPを作ります

Anim 辺で検索すれば出てくるかなと

このAnimNotifyで作ります。

 

f:id:tktknkyo:20200413171313p:plain

上の関数のところから、オーバーライドを選択して作ります。

 

f:id:tktknkyo:20200413171356p:plain

そうすると、この二つのノードが出てきます

あとはこの中で処理を作るだけです。

 

この時点で、アニメーションシーケンス側から

通知で出せるようにもなっています

 

 

f:id:tktknkyo:20200413171847p:plain

恐らくですが、最低限必要と思われる要素はこちらになると思います

アニメーションさせるキャラの座標を持ってくる場合は

Mesh CompからGetWorldLocationで座標を取得しましょう。

ここから更に動かすば場合は、ここにVector+Vector等を追加して、座標を動かします。

 

RotationやScaleは自分の操作しやすいように作っていくのがベストかなと

 

f:id:tktknkyo:20200413172246p:plain

また、アニメーションシーケンス内で操作する場合

変数をインスタンス可能な状態にしておきましょう、右の目のアイコンをクリックするとONにできます

 

あとは、シーケンス上から変えたいパラメータを入れておけばOKです

 

 

【条件によって再生を変える】

 

アニメーション通知を使った例でもう一つ

条件によって再生を変えるというものですが

何の為かというと、属性差分を作りたいなと

 

BPで再生するエフェクトを分離させるだけなら楽ですが

アニメーション通知もBPなので、通知でも同じだろう、という事で作りました。

 

f:id:tktknkyo:20200413191751p:plain

自分が作ったものはこちら

解りやすいようにとりあえず分離は二つにしています。

 

まず属性の判定は、BPインターフェースを使って

現在の属性に使っている変数を取得してきます。

 

属性によって再生するものを分ける処理は

整数型で分離する専用ノードがあるので、これを使うだけです

 

f:id:tktknkyo:20200413192527p:plain

ここに変数のセットが入っていますが

これにはローカル変数を使っています。

 

f:id:tktknkyo:20200413192649p:plain

普通の変数の場合、GetはできますがSetはできない為です。

また、変数をそのまま繋げてはいけない理由として。

 

f:id:tktknkyo:20200413192801p:plain

Niagaraを再生するノード自体が、一つしか変数を入れることができない為です。

なので、条件によって、どちらを取得するのかを、選択し

選択したものを、一度ローカル変数に保存します

そして、そのローカル変数に代入されているデータを再生します。

機能としてはこれにて完成です。

 

大事な点としては

・どれを再生するのかの変数を持ってくる

・その変数で分離する

・一度ローカル変数に保存してから再生する

 

主にこの三つだと思います。

ローカル変数は使わずに済む方法もありそうでしたが

そこまでは自分では判断できませんでした。

 

f:id:tktknkyo:20200413193150p:plain

先ほどので完成はしましたが

確認が面倒なので、確認用の機能も入れたのがこちらになります。

 

上の赤枠部分を追加しただけです

 

やっていることは単純で、Spawn0という名前の変数がONの場合

再生するエフェクトのIDを固定する、というものです。

 

ゲーム中には再生を分けれても、シーケンス上で分ける手段が無かったので

強引に再生するものを弄るものです。

確認しやすくする機能も、あると作る側としては楽になりやすいかなと。

 

 

 

今回はここまでとなります。

発生の制御関係については、あくまで再生に必要だから作っただけであって

そちらがメインではないので

もっとやりやすいやり方、などもあると思います。

あればそっと教えてくれると幸いです。

【Effekseer】マテリアルの基本2(タイリング、スクロール、歪み

f:id:tktknkyo:20200330205716p:plain

Ver1.50となります

 

また、この記事は

tktknkyo.hatenadiary.jp

この記事の続きとなります

 

【初めに】

この記事では、タイリング、スクロール、歪みといった

画像そのものに対する処理などの内容を書いていきます

 

とはいえ、複雑なものではないので

どういう処理になっているのか、の部分も後半に触れていきます

 

【処理の内容】

上に書いたとおり、処理そのものは非常に簡単

f:id:tktknkyo:20200402013343p:plain

f:id:tktknkyo:20200402013432p:plain

f:id:tktknkyo:20200402013554p:plain

これで上から

タイリング、スクロール、歪み

の処理となります

スクロールは静止画だと解りませんが、左上に動き続けています。

ただ、現段階だとエフェクトに合わせて数値を変えたりする手段が無いので

調整をできるように組み直していきます。

(スクロールの処理は移動UV座標という専用ノードがありますが、今回は解説用なので使いません)

 

 

【タイリング、調整】

 

f:id:tktknkyo:20200402013343p:plain

これが2つタイリングしている状態となります

 

f:id:tktknkyo:20200402014300p:plain

これを3回タイリングさせる場合は、このようになります

左下の数字のノードが、そのままタイリング数となります

ノードの上にある文字が、ノード名なのが基本ですが

この数字のノードは定数ノードといいます

 

タイリング数を変える場合

UV座標のノードに、掛けた数値だけタイリングの処理が行われます

(UVとあるピンへの接続は忘れずに)

 

f:id:tktknkyo:20200402014657p:plain

横と縦を別々のタイリングをさせる場合は

このように繋ぎます

とりあえず、UV座標のノードと掛け算すれば、タイリング数を変えることが出来ます。

 

【スクロール、調整】

f:id:tktknkyo:20200402013432p:plain

こちらがスクロールの処理ですが

タイリングでは掛け算でしたが、こちらでは足し算となります

 

f:id:tktknkyo:20200402015401p:plain

静止画では判断できませんが、このようにすると

スクロールの速度が1/4になります

左下の定数ノードの数値がそのまま速度となります

 

f:id:tktknkyo:20200402015640p:plain

横と縦でスクロールの速度を変えたい場合は

このように変えます

タイリングと同様、縦と横を別にしたい場合は

要素結合というノードを使っています。

 

【歪み、調整】

 

f:id:tktknkyo:20200402013554p:plain

歪みを使った例ですが

この場合、動きが大きいので、そもそもどういう事が起こっているのかが解りにくいと思います

 

f:id:tktknkyo:20200402020554p:plain

こうすれば少しは解りやすいでしょうか...?

左下の画像の直後に低い数値(今回は0.2)を掛け算する処理を追加しています

歪みは、使っている画像に対して

定数を掛け算すると、それに応じて強さが変わります

 

【調整用パラメータを外に出す】

 

f:id:tktknkyo:20200406195500p:plain

サンプルに入っているマテリアルを開くと

このように、タイリング数などを

Effekseer上から調整できるようになっているものがあります

この仕様の部分を作っていきます。

とは言っても、これもすぐに終わります

 

f:id:tktknkyo:20200406195711p:plain

このパラメータとある部分のパラメータ1~4が

基本的に使うものになると思います

 

 

f:id:tktknkyo:20200406200004p:plain

例えば、このようにすれば、Effekseer上から

歪みの強度をマテリアル毎に変更する事が出来ます

 

一々マテリアルを個別に作らなくても

一部分だけ数値を変えた差分が欲しいなどの場合は、非常に重宝します。

 

f:id:tktknkyo:20200406200903p:plain

画像のパラメータは、画像にある「パラメータ画像」がそれになります

 

f:id:tktknkyo:20200406201003p:plain

ただしパラメータ画像は、そのままでは使えません。

画像参照ノードと合わせて使うことになります

 

f:id:tktknkyo:20200406200222p:plain

これはパラメータ1~4やパラメータ画像の設定部分となります

一番上の名称は、このマテリアル上で表示される名前となります

ただし、ここには日本語は入力出来ません。

 

その次の優先度、これはEffekseer上でパラメータが表示される優先度となります。

数値が小さいほど上になります

 

次のVとあるのは、デフォルト値となります。

また、マテリアルを編集する画面での数値にもなるので

できれば設定はしておいたほうがいいです

 

次の言語はそのままですね

概要に書いておくと、Effekseer上ではこちらの名前で表示してくれます。

日本語で表示したい場合は、こちらにパラメータの名前として書いておくと便利です。

 

f:id:tktknkyo:20200406200729p:plain

次の詳細は、Effekseer上でカーソルを合わせたときに表示される説明となっています。

 

 

パラメータとしては、細かく制御が可能なカスタムデータ

というものも用意されています

こちらは、エフェクトの途中で数値を変えたりなどもできる情報です

RGBAの色の情報などにはよく使います

f:id:tktknkyo:20200406201436p:plain

カスタムデータは、下の方の別の場所に出てきます

他のパラメータとは位置が違いますので、そこは注意してください。

 

【原理的な話】

 

ここから、タイリングやスクロールなんかの、原理的な部分になります。

知らなくても、最初は特に問題ないと思いますが

自分で処理を作ったりする場合、知ってると色々便利にはなるのかなと思います。

 

f:id:tktknkyo:20200406202026p:plain

タイリングでも、スクロールでも、歪みでも

使うことになるこのUV座標というノード

中身はこのようになっています

Rチャンネルの横のグラデーションと

Gチャンネルの縦のグラデーションになっています

そして黒や白は、数値で表すことが出来ます

 

f:id:tktknkyo:20200406202418p:plain

0は黒

0.5がグレー

1が白

 

つまり黒から白のグラデーションは0から1になっているという事になります

Rは横のグラデーション

Gは縦のグラデーション

これが、そのまま表示する座標となります。

また、右端や下端が1になりますが、それを超えた場合はどうなるのかというと

小数点以下のみ使われます

(※画像参照ノードの詳細をClampにしている場合、1を超えると強制的に1となります)

 

f:id:tktknkyo:20200406203154p:plain

例えばこの場合、UV座標から0.5を加算しています

UV座標は0~1のグラデーションを作るノードなので

0.5を加算する事で0.5~1.5となります

 

左上はRGが両方0.5になります

本来RGが0.5の場所は真ん中になります

なので、画像の真ん中の部分が左上に来るようになっています

UVの接続する情報は

所謂読み込んだ画像の、どの場所を表示するのかを定義します

当然ですが、ここに定数を入れると、画像からその場所を取得し

その色を全体に表示します

 

また、これがスクロールの原理となっています

 

f:id:tktknkyo:20200402013432p:plain

こちらのスクロール用に作った構成

時間ノードは、時間に応じて数値が増えていくノードです

つまり数値がどんどん増えていくわけです

その情報を、UV情報に加算しているので

表示する場所が動き続けることとなります

 

0.1、0.2と加算されて行く事に

画像の表示する座標を少しづつ、ずらしていっているワケです

 

f:id:tktknkyo:20200406204452p:plain

また、掛け算するとタイリング数となるのも

原理は一緒になります

この場合UV座標を2倍します

元々が0-1のグラデーションなので

0-2のグラデーションになります。

更に、小数点の情報を座標として使用するので

1を超えたら0からとなるので

0-1が2回続く情報となります

それが2回続くので、2回タイリングされるという事になります

 

スクロールの時と同様、UVに接続している数値の場所にある

画像の情報を持ってきます

 

f:id:tktknkyo:20200406205101p:plain

最後に歪みの処理についてです。

歪みはスクロールの派生のようなものとなります。

 

まず前提として、画像は0-1の情報となります

そして、0-1のグラデーションになっているUV座標の情報に

この情報を足し算すると

元の画像によって数値が大きく変わります

 

定数を足し算する場合、単純に上下左右に動くだけですが

ここに、画像を使うことで、全てのピクセルでバラバラな方向に動くことになります

画像を使うことで、これを不規則に行うことで

画像を変化させていきます

 

f:id:tktknkyo:20200406205703p:plain

歪み画像を足し算したものを、RとGで分解するとこのようになっています

元の綺麗なグラデーションではなくなっているのが解ると思います。

このズレた情報の場所にある画像の情報を

取得してくることになります

 

f:id:tktknkyo:20200406205936p:plain

これは解りやすく小数点の情報のみ取得したものになります

 

f:id:tktknkyo:20200406210037p:plain

Gチャンネルの情報の場合、例えばこの赤い部分などがかなり白くなってると思います

そして白い部分というのは

画像の下の部分を取得してきます。

つまり、中央付近にある、この白い部分はかなり下の部分を持ってくることとなります

 

 

f:id:tktknkyo:20200406210258p:plain

この状態で適応するとこのようになります(右上)

かなり左上の画像から変わっていると思いますが

これは画像の情報から、変な場所にあるものを取得しているのが原因です

グレーに近いほど、中央になるので、結果は白く

白や黒に近いほど、外側になるので、結果は黒くなっているはずです。

 

 

 

 

今回はここまでとなります。

色々説明が解りにくいかとは思いますが

マテリアルの大元の基本的な部分は書けたのかなと思います。

 

【Effekseer】マテリアルの基本

f:id:tktknkyo:20200330205716p:plain

Verは1.50です

 

EffekseerのVer1.5での新機能の一つであるマテリアル方面を紹介していきます

サムネイルは、サンプルに入っているマテリアルの一つです

ここまで長いのを今回作る、というワケではありません。

 

【マテリアルとは】

UE4のマテリアルやUnityのシェーダーのようなものです

これらのツールを使った事がない人向けに簡単に説明すると

画像同士の合成

みたいな感じに最初は考えてもらえば良いかと思います。

 

画像を使うのは必須でないなど、細かい部分は違うので

厳密には違う部分はありますが

最初はそのくらいの認識で良いのかなと思います。

 

【エディタを開く】

EffekseerMaterialEditor

というファイルがあるので、これから開くことができます

f:id:tktknkyo:20200330210640p:plain

 

また、描画共通から、ファイルを選択して

生成、を押してもエディタを開くことができます

こちらから開く場合は、まずマテリアルのファイルを保存する所からとなります

「.efkmat」という拡張子となっています

f:id:tktknkyo:20200330211008p:plain

 

エディタの操作そのものは

ホイールで拡大縮小

全体を動かす場合(パン)は右ドラッグ

ノードの検索は右クリック

 

ノード選択は左クリック

ノードを動かす場合は左のドラッグになります

範囲選択も左のドラッグとなります

 

 

【マテリアルの基本】

 

f:id:tktknkyo:20200330211453p:plain

開くと、最初はこのような縦長のノードが置いてあります

 

f:id:tktknkyo:20200330211913p:plain

この「出力」とあるノードに

このようにノードを繋いでいきます(文字が暗くなっているのは無効化されています)

全てで10種類あります

デフォルト設定だと、3つは暗くなっているので7種類の出力があります

 

最初から覚えようとするとどうしてもややこしいので

最初は上の画像で接続してある

EmissiveとOpacityのみ覚えればいいです

他の8つはある程度慣れてからをオススメします

 

Emissiveは色(RGB)

Opacityは透明度(A)

と考えるのがわかりやすいと思います

Pngとかの画像みたいなものかと思ってもらえれば

 

f:id:tktknkyo:20200330213123p:plain

これはサンプルの画像を適当に繋いだものです

上の画像からRGBのカラー情報

下の画像からAの透明度

この二つが合わさったものが、出力の下の方に表示されています

これが最終結果となります。

 

f:id:tktknkyo:20200330213456p:plain

あとは、ここに色々計算したりしていくだけとなります

 

【実際に作ってみる】

 

とりあえず、マテリアルで定番であるテクスチャ同士の乗算から

 

f:id:tktknkyo:20200330214203p:plain

まず画像自体を出すには、右クリックから「画像参照」というノードを出しましょう

 

f:id:tktknkyo:20200330214248p:plain

右クリックから検索もできます

画像関係であれば「tex」と打つと画像関係の候補がいくつか出てきます

ノード説明のKeyと書いてある部分で検索してきます

 

f:id:tktknkyo:20200330214457p:plain

とりあえず2枚画像を読み込んでみます。

基本的に何でも問題ありません

 

f:id:tktknkyo:20200330214640p:plain

また、「乗算」というノードも出して接続します

ノード同士の接続は、左のドラッグで引っ張ってくると繋げることができます

 

f:id:tktknkyo:20200330214736p:plain

そしてこのように繋げると、画像同士を掛け算したものが

透明度として出力されます

 

Emissiveではないの?と思われるかもしれませんが

エフェクトの場合、基本的に白黒画像を透明度に繋ぎ

Emissive(RGB)は画像ではなくツール側で制御する事が多いです

 

画像同士の乗算というのは慣れない人は解りにくいと思います

(というより自分が最初中々理解できなかった部分です)

画像の色情報はRGBAそれぞれ0~255の値を持っています

そして、画像同士の乗算は、1Pixel毎にそれぞれ乗算する事になります

 

ただし、乗算する際には0~255の数値を0~1に変換してから計算します

中間の128*128の場合

128*128=16384で255よりかなり高い数値になり...ますが

実際は0~255を0~1に変えてからとなるので

0.5*0.5=0.25

そしてその後0~255に変換すると64となります

 

画像の乗算の場合にはとりあえず

片方が真っ白(255)なら変化なし

片方が真っ黒(0)なら真っ黒になる、と覚えるのも良いかなとは

 

f:id:tktknkyo:20200330220307p:plain

Effekseerそのもので色を変える場合

カスタムデータを使います

 

f:id:tktknkyo:20200330220420p:plain

初期はRGとなっているので

左の方に、このようになっている部分があるので

Bにチェックを入れましょう。

 

Effekseerで適応してみましょう

先ほどのマテリアルを読み込みます

 

f:id:tktknkyo:20200330220913p:plain

ただし、カスタムデータはデフォルトだと全て0なので

固定4などに設定して全て1にしてみると、白で表示されてると思います

 

f:id:tktknkyo:20200330221041p:plain

小さかったので5倍にして画像とっています

 

 

 

基本、という事であまり実用的な部分は入れれてないですが

長くなってきていますので一旦ここまでとなります

他にはスクロール、タイリング、歪みなどがあります。



 

 

【UE4】煙(半透明)のライディング関係

f:id:tktknkyo:20200120195354p:plain

VerはUE4、4.23です

 

初めに

エフェクトとかで煙って使う機会多いのですが

煙っていわゆる光の影響受けたほうが自然に見えやすいですし(真っ暗な洞窟無いで土煙が明るいのは違和感が強い)

ただ、いわゆる半透明になってしまうので、ライディング関係が割とややこしくなってしまいます。

UE4の場合、半透明の基本的な設定だと、うまいこと影の影響などを受けてくれません

なので、色々試したりした結果とかを書いていこうかと思います。

 

とりあえず出してみる

 

f:id:tktknkyo:20200120195838p:plain

マテリアル側は、とりあえずシンプルに煙用の画像と

ParticleColorを混ぜたものを

画像の所には歪みは入れてますが、ここはライディングには特に関係ないです。

 

f:id:tktknkyo:20200120200036p:plain

基本的な半透明の設定だけだと、こんな感じに、影の影響を全く受けていません

 

f:id:tktknkyo:20200120200217p:plain

一応ですが、レベル自体はこんな感じに

謎の物体を用意して、ディレクショナルライトからの影が出るように作っています。

 

煙に影を落とす

 

f:id:tktknkyo:20200120200743p:plain

マテリアルの詳細から

Lighting Modeを

Surfacr ForwardShading

に変更します、そうすると

f:id:tktknkyo:20200120200934p:plain

影が落ちます

 

ここで起きる問題点

 

影自体は落ちますが、これだけだとまだ問題が残ります。

 

f:id:tktknkyo:20200120201059p:plainf:id:tktknkyo:20200120201126p:plain

この二枚、右も左も

同じレベルで再生した、同じエフェクトです。

見てわかると思いますが、明らかに色が違いすぎます。



1枚目の暗い方は、キャラの前の方から光が来ています

2枚目の明るい方は、キャラの後ろから光が来ています

 

つまり、ライディングの影響を受けることにより、影の影響を受けてくれるが

光の角度の影響まで受けてしまい

角度によって色合いが著しく変わってしまう、という問題が起こってきます。

 

f:id:tktknkyo:20200120201907p:plainf:id:tktknkyo:20200120201935p:plain

結構見えにくい部分もありますが

UE4やってると頻繁に見ると思いますが、シェーダーコンパイル中に表示されるものですね。

光としては、キャラの前側から両方来ています。

 

煙用のテクスチャとかを使っていても、ビルボードなので、板ポリに貼ってある状態です。

 

そして、ビルボードは、カメラの向きに合わせて角度が変わります

 

上の二枚の画像、1枚目はキャラの上から、二枚目はキャラの後ろからで

角度が違いますが、ビルボードなので、カメラに向いて配置されます。

 

カメラに向いて配置されるので、カメラの向きによって

煙の板ポリの角度が変化します。

そしてその角度によって、光の入り方が変化します。

 

この例だと、1枚目は斜め上から光が入っていますが

2枚目は、ほぼ後ろから光が入ってきます

後ろからなので、当然暗くなります。それがおそらく原因で

 

f:id:tktknkyo:20200120201126p:plainf:id:tktknkyo:20200120201059p:plain

このような、角度によって光の影響が違いすぎる、というのが起きるのだと思います。

 

画像だけだと解りませんが

カメラのみ動かしても色がどんどん変わっていきます(向きによって変化が大きい、小さいはありますが)

 

問題点の解決策

 

煙に影を落とす処理をするためにした

Lighting Modeを

Surfacr ForwardShading

に変更したことで、マテリアルの最終接続での有効になっているものも変化しています。

f:id:tktknkyo:20200120214207p:plain

Metallic

スペキュラ

ラフネス

Normal

この四つの接続が有効になっています。

 

光の入る角度が問題だったので

 

f:id:tktknkyo:20200120215017p:plain

ノーマルに接続しましょう

 

ビルボードにより、カメラの向きで光の当たる角度が原因

そして、球体であれば、どの向きからでも変わることはないので

 

f:id:tktknkyo:20200120215304p:plain

このような、球体に近づけるような法線を作って適応します。

 

元々ダメ元で試していけただけでしたが

光の反射に計算されるのが、法線によって変形する...

のがおそらく理由だとは思います。

 

f:id:tktknkyo:20200120220145p:plain

また、適応しただけでは影響が小さかったりするので

その下にあるDirectional Lighting Intensity

を10に設定します

 

f:id:tktknkyo:20200120220517p:plain

この時点で、このようになりました

下の方が暗いのは、恐らく法線の範囲が届いていないのが原因かと思われます。

 

法線を入れてない時点では

f:id:tktknkyo:20200120201059p:plain

全体がこんな感じに暗くなりすぎていたので

大分向きによる破綻は抑えれていると思います。

 

ただ、この時点でも、光の影響が寧ろ強すぎるとか出てきたりすると思います。

 

f:id:tktknkyo:20200120221010p:plain

ラフネスは恐らく1の固定でいいと思います

またMetallicは、数値で色合いが結構見え方変わってきます

 

f:id:tktknkyo:20200120221219p:plainf:id:tktknkyo:20200120221259p:plain

これはMetallicの1と0の比較です。

 

Metallicは金属のような反射の為ですが

それが具体的になぜこうなるのか?までは正直解ってないのが現状です。

 

 

 

 

この手法で作った煙をエフェクトのパーツとして入れたものが

このようになります。

最後の部分は原理は解ってない部分がまだありますが、今回はここまでとなります。

【UE4】トゥーンエフェクト用マテリアル

この記事は、UE4アドベントカレンダー用の記事となります
17日のものになります。

qiita.com

 
自身が作ったトゥーン調のエフェクト自体はこのようなものを作りました。

 

【ベースとなるマテリアル】

 

f:id:tktknkyo:20191217002346p:plain

大元のベースとなる部分は、このようになっています。

最後にあるFloorは数値の切り下げとなります。

 

最初に画像同士を乗算し、0~1の数値を出し

その次にAddで基本的に0~1の数値を加算(この場合は0.9)

※ここの数値は、インスタンスなどで調整できるようにすると、非常に楽です

その後に切り下げをすると、1以上の数値が1、1未満なら0となるので

これで0か1にする事ができます

 

必要なエフェクトによってマテリアルを作り直しはしますが

基本はこの考えがベースになってきます。

 

 

 

 

【火用マテリアル】

f:id:tktknkyo:20191217001645p:plain

こちらが、これで作った炎のエフェクトの部分になります。

火用とありますが、煙など、他の物にも流用はしています

 

中央の炎と、煙のマテリアルは殆ど一緒の構成となります。

 

f:id:tktknkyo:20191217001847p:plain

マテリアル単体だと、このような見た目となります。

所々に、緑や紫が混ざる理由は現状不明です...

 

f:id:tktknkyo:20191217002913p:plain

マテリアル全体としてはこうなっています。

ただ左の黄色の部分は、主に歪みやスクロールの処理のみなので、今回は省きます

(この辺はほかの記事などで色々書いてあります)



f:id:tktknkyo:20191217003710p:plain

 

今回のマテリアルを、部分的に分けるとこのようになります

赤枠の部分と、青枠の部分を作り

その二つを乗算しているのが黄色

 

f:id:tktknkyo:20191217102950p:plain

赤枠部分は基本的に四則演算となります

紫の部分は、ParticleColorのAに繋いでいて、ここからも調整しやすいようにしています。

あとはベースとなるマテリアルと同様

テクスチャ2枚を乗算し、その後定数を加算

Floorによる切り捨てで、0か1の二極化します

 

最後にParticleColorと乗算するだけの紫

 

オパシティやオパシティマスクへの接続は、青枠からとなるので

青枠の部分が全体の映る範囲となります

 

f:id:tktknkyo:20191217103221p:plain

そしてこちらは青枠の部分となります。

赤枠と基本は変わりませんが

色を1色ではなく、二色になるようにしてあるので。

全体の色と、色の濃い中心の部分

二つのマスクを作って、最後に加算しています。

 

内容としては、赤枠がベースですが

最後の加算する数値を、インスタンスで調整することで

濃い部分の色の割合を調整できるように組んであります。

Ceilというノードがありますが、これは切り上げの処理となります。

 

黄色の部分は、全体のマスクをとる赤枠部分と、色を取る青枠部分を乗算しています。

 

f:id:tktknkyo:20191217103830p:plain

また、今回のマテリアルは、テクスチャを3枚使っています

全体のマスクに使うテクスチャと

色の部分に使うテクスチャで分けてあります。

 

そのまま乗算すると、薄くなりやすいのですが

Floorにより、整数にする事で、中途半端に薄くなったりがないような処理となっています。

これでマテリアルそのものは完成となります。

 

f:id:tktknkyo:20191217104615p:plain

歪みなどを使う前提であれば、同じ構造で、このようなものも作れます。

 

f:id:tktknkyo:20191217104901p:plain

水の余韻部分でつかったこのようなパーツもありますが

これは極座標ではなく、同じマテリアルにメッシュを使って作っています

 

一部飛び散る粒子や地面のグローなど

例外もありますが、基本的にはこの構成で作っているものとなります。