【GameSynth】Modularモデルでカーブを使って制御する
Verは2019.2です
少し前に2019.2の更新が来ました。
とはいえ、今回は新しく増えた機能使ったりはしておりません...
Modularモデルにて、カーブのデータを使って音の制御をしていこう、という内容になります。
Control Signalsに入ってる青いノードなどが、一つの例だと思います。
今回は、このEnvelopeを使っていきます。
制御としては比較的にやりやすいのかな?というのが理由です。
このノード、初期状態で開いてみると、このようになっています。
Loopingはそのまま、カーブをループ処理するか
Variationはランダム性
Durationは時間(単位はおそらく秒?)
Envelopeの入出力ピン
このノードの入力ピンは
Trigger
ここに接続していると、いつ発生するのかを制御します。
例えばLogicの中のClockというノードと、こう繋いだ場合
Clockは出力にTriggerを持っており、これが発生する事に
Envelopeが再生されます。
出力に赤ピンがありますが、これはTriggerではなく
Stoppedです。
これは再生時にトリガーとして発生します。
このようにした場合
上の再生が終わる時に、Stoppedからトリガーとして発生し
それを受け取り、下が再生されます
つまり上の再生が終わると下が再生されます。
同じピンでも、名前によって内容変わってくるので、この辺は注意です。
最後の左下はOutputです。
単純に出力ですね。
実際にカーブを適応してみる
ではここから実際にカーブを使っての制御をしていきます。
ただ、これはあくまでカーブのデータとして見ます。
細かく言うと、音声そのもののデータとしては見ないものとします。
なので、まずは音をループで流しておきましょう
折角なので2019.2で実装されたFireを今回使います。
(ここは基本的に音が鳴るものなら大体何でも問題ないです)
まずは、音量を調整する為にGainというノードを出します。
この赤色のノードになります。
このノードは音量を調整できるノードです。
このように、FireとMonoの間に入れる事で
音量を調整できます。
このノードのパラメータは一つのみで非常にシンプルです。
ここの数値によって、音量の上げ下げのできる、シンプルなノードになります。
単体としての機能はこのようになります。
そしてこのノードには左側に青色のピンがあります。
この意味合いとしては、音量の調整ができる、という内容です。
つまり、ここに接続した情報を使って音量を調整する事が可能です。
ここで、Envelopeで設定したカーブで調整できる、という事になります。
Loopingにチェックを入れると、1秒感覚で、音量がループするように大きくなったり小さくなったりします。
このカーブを設定する事で、同じ音量で流れていたものを、後半は音量小さくしてフェードアウトしたりする事ができるようになります。
また、青ピンでも種類がものによって変わります。
例えば、Pitch Shifterというノードでは
青ピンはありますが、接続名の名前が変わります。
なので、当然同じカーブを使っても、出力される内容も変わってきます。
なので、ピンの色だけでなく、ピンの接続名の方も見ながら、使っていくのが大切なのかな、と思います。
今回ベースの音として使ったこのFireノード
上には1つの赤ピンと
5つもの青ピンがあります。
基本的にベースの音源になったりもする緑のノードは
このように、上に複数の青ピンが付いていることが多いです。
ただ、Fireの場合、上の青ピンにある接続と、同じパラメータがノードそのものの設定でも存在します。
なので、ノードのパラメータを弄って、どんな感じに変化するのかを確認しながら
必要に応じてカーブのデータを接続するのが良いかと思われます。
効果音製作自体はまだまだ慣れないので、作例みたいなのを書けるのはまだまだ先になると思いますが。
作ったエフェクトに合った効果音を作れるようになりたいところですね。
【Niagara】発生位置をクォタニオンで制御する
この記事の続きというか、派生のような内容になります。
こちらでは、クォタニオンで変更する角度をつかって、位置を制御しよう、という内容になります。
こちらの方は、最初からモジュール作って処理作りました
全体図としては、こうなっています。
エミッター側から設定するためのパラメータは4つあります
BaseLocation
ベースとなる座標になります。
基本的にはParticle.Positionとなります
Angle
そのまんま角度ですね
R
これは半径となります
AddAngleByVector
角度を加算するベクトル、という意味で
具体的には、BP側で設定した、RotationをVectorとして、ここに適用します
重要そうな部分だけを拡大するとこんな感じになります。
まず、Angle、つまり角度から方向を示す回転軸をつくります。
角度から、SinとCosを取ってきて、そこからVectorを作ります。
これの時点で、Z軸が0で正規化されているVectorにする事ができます。
次に、BPから持ってきた角度の情報をクォタニオンに変換します。
AddAnglebyVectorを一回BreakVectorで分解します
その後、Euler to Quaternionでクォタニオンに変換します。
その後、Multply Vector with Quaternionを使い、Vecorをクォタニオンで回転させます。
これにより、元々あった方向のVectorがクォタニオンで回転したので
そこに半径であるRを乗算します。
最後に、元の座標であるBaseLocationと加算して完成です。
最終的に何をしたのかっていうと。
Floatの角度からVectorを作ります。
そのVectorにBPから取ってきた角度ベクトルで回します。
最後に半径を掛けます。
内容としてはこの三つになります。
モジュールの名前は変わってはいますが
これが先ほどの手順で作ったモジュールになります。
半径を200、角度を0~360のランダム
そしてBPから取ってきたUser.Rotationの角度を代入すると
このように、斬撃のメッシュと角度が同じになるように作ることができます。
(この白い粒子がそうです)
また、BPからとってくるので、同じ数値を使えば、連動させるような挙動にすることも可能です。
次に発生する角度の制御をしていきます。
とはいえ、設定そのものは時間を取ってこればいいだけなので、非常に簡単です。
Angleの部分に、Emitter.Ageなどの、エフェクトそのものが発生してからの、時間を取得してくるデータを入れてしまえばうまくいきます。
前の記事の続きということで、今回は短いですがここまでになります。
最近は更新頻度下がってきているので、何かしら更新続けていきたい所です。
【Niagara】メッシュの角度をクォタニオンで制御する
VerはUE4.22.3です。
今回は、Niagaraでクォタニオンを使ってちょっとした制御の方法を。
サムネイルが一つの例です。
モーションと合わせる部分は、割とゴリ押しなので、そこはご了承ください。
こちらが、Niagara上で表示されているこのエフェクトです。
エフェクト単体としては、水平に斬ってるだけの角度となっています。
今回のこの斬撃のエフェクトは、モーションに合わせて角度を変更したい。というのがありまして。
なので、固定の角度だけでなく、角度を変更しやすい作りにする必要がありました。
また、管理面も考えて、一つのエフェクトに対して、BPに制御する事でモーションにあった角度で発生させる
というのを目指しました。
タイミングの関係で判りにくいですが、水平に斬るモーションに合わせて、水平に角度を調整しています。
ちょっとした応用として、このように、前方にそのまま飛ばしたりする処理も作ることができます。
飛ばしてるエフェクトは、別途新しく作る必要はあります。
【そもそもクォタニオンについて】
まずクォタニオンについてですが、原理としては4元数とか、3つの虚数が、とかはありますが、ちょっと使う程度なら、原理的な所まではそこまで知る必要はないと思います。
UE4などでクォタニオンを使う場合で知っておいたほうがいい事としては。
4つの数値を持つ型である、という事
4つの数値のうち、3つは回転軸を指定し、もう一つで角度を指定している、という事。
原理から知ろうとするとややこしいですが、使うだけなら結構簡単です。
【Meshをクォタニオンで回転させる】
今回は、この斬撃のをメインに例を出していきます。
なので、まずはNiagara上で、水平に回転するという挙動を作っていきます。
まずは、このようなメッシュがあったとします。(メッシュは使いたい物で大丈夫です)
メッシュを回転させる為のモジュールは最初から入っています。
このMesh Rotation Rateなどがその一つですね。
これを、Particle Updateに入れて、Yawに-360と入れてみると、水平方向に回転するようになります。
Rotation Rate というパラメータがありますが、これは回転の速度を制御します。
数値を大きくするほど、高速で回転するようになります。
ここに、カーブを入れる事で、回転をだんだん遅くしたり、早くしたりする事も可能です。
このモジュール自体がクォタニオンで回転させています。
中身としてはこのようになっています。
デフォルトのモジュールはこれに限らず、結構複雑な事も多いです。
特に重要になりそうなのは、この辺でしょうか
内容としては、Yow、Pitch、Rollで指定した角度を元にクォタニオンを作っています。
Euler to Quaternuonという関数が一番重要となります。
また、設定したクォタニオンは、Particle.MeshOrientation
に設定する事で、角度が決まります。
このパラメータは、クォタニオンの型なので、クォタニオンで計算したら、そのまま適用出来る、というワケです。
特にモジュール自体を使わなくても、この型のパラメータにすれば、角度の制御ができます。
Updateに、この型のパラメータを追加します
モジュールだけでなく、Dynamic Inputにも、クォタニオン専用のデータがデフォルトであります。
こちらは、回転軸と回転角度から指定すもので、こちらの方がイメージしやすいかもしれません。個人的にはこちらのほうが解りやすいとは思います。
ただ、回転角度に固定値を入れても、そのままでは回ってはくれません。
このように、カーブを入れる事で回転をしてくれるようになります。
【クォタニオンでの回転の制御】
ここまでは、単純にクォタニオンで回転させてただけなので
ここから制御出来るようにしていきたいと思います。
今回としては、モーションなどと合わせて回転させるのを目標とします。
結論から言ってしまうと、回転軸をモーションに合わせて差し替えるだけですが。
モーションから角度をとってくる部分は、ちょっとゴリ押しになります、そこはご了承ください。
発生位置を、キャラに持ってきて、再生すると、このように真横に振ります。
角度を制御する下準備として、Spawn System at Locationの後ろに、Set Niagara Variable(Vector 3)
を繋ぎます。
ただ、これ単体では動きません。
Niagaraの、パラメータの部分で、このようにパラメータを追加します。
User. までは固定なので注意してください、頭のみ大文字にしないと上手く反応してくれないようです。
今回は、User.Rotationというパラメータを追加して、ここに角度を入れていきます。
このパラメータを使っている部分に、BPで指定した数値が入ってくる、という事になります。
ここの制御法は、以前の記事で書いています、そちらも参照してください。
ここから、このRotationのVector型のパラメータを使って、角度を制御していく必要があります。
クォタニオンに変換する必要があります。
今回は新規でモジュールを作成しました。
内容としてはVectorをクォタニオンに変換しています。
Particles.InitialRotation というパラメータもありますが。
これはMesh Rotation Rateのモジュール内を見ると解りますが
クォタニオンの角度の合成をする際に使用されています。
なので、ここで入れておくことで、綺麗に角度の合成をしてくれるようになります。
モジュールが完成したら、Particle Spawnに追加します
中身は、BPから取得してきたUser.Rotationを入れます。
今度は、角度を合成する必要があるので、Mesh Rotation Rateの方で回転させるようにしましょう。
XYZをそれぞれ30に設定すると
このように角度が更新されました。
ただし、XYZを固定値で入れて編集しているだけなので、キャラの向きを考慮してくれません。
キャラクターが、地面に立っている状態、つまり2次元での角度のみで良いのであれば。
自分はこのように設定して制御しています。
まず攻撃を出すアクターの角度を取得し、そこからZ軸だけを変数に格納します。
これにより、キャラの向きの動きを取得してこれるので
そこに固定値を足して、常に出したい向きにエフェクトが出るように調整します。
今回はここまでとなります。
次は、クォタニオンを使って、発生位置の制御をやっていきたいと思います。
【GameSynth】Whooshモデルで少し効果音に触れてみる
今回は久々になりますがGameSynthの内容を
今回はWhooshモデルという、風系の音を作るモデルでちょっとした作り方を
というワケで簡単にいくつかの機能に触れてみようかと思います。
機能の一部のみ触れる形になります、ご了承ください。
デフォルトの時点でから、ある程度線をサムネのように引っ張ってあげるだけでも
ある程度それらしい効果音が作ったりはできます。
画面の左下にある、ここのアイコン
これは、引いた線をランダムに配置しなおすような機能です
ランダムに配置しなおすといっても、引いた線の数などは色々引き継がれます。
例えば、このような太さがある程度違い、比較的に長めの線が複数ある
という場合にこの機能で配置をしなおすと
この様になりました。
向きなどはかなり変わっていますが、線の長さや本数などは、比較的維持されています。
なので、ある程度本数を引いたら、この機能を配置を変えて音を調整して、ある程度いい感じになったら、それをベースに使う...
といった事が比較的にやりやすいです。
線を引いて音を作れるといっても、どうやって引けばいいのか?となった場合に
この機能を使っていけば、比較的につくりやすいと思います。
また、これで配置を変えたあとに、更に追加で線を加えたりもできるので
最初のベースはランダムで配置し、その後自分で新しく線を引いたりする、というのも便利です。
画面の左上にあるこのグラフは、時間と音量を設定しています。
デフォルトがこの状態で
右側に並んだアイコンから、ここを自動で変えることができます。
自分自身で微調整も可能です。
右側に6種類アイコンが並んでいますが。
使い勝手がいいのが、特に下の二つになります。
このグラフの上部にあるここが、効果音全体の長さになります。
作るものによって、長さもだいぶ変わりやすいので
再生しながら、ちょうどいい長さにここで調整しましょう。
画面右上にはパラメータが並んでいます。
LFO という項目の中には、4つ並んでいます。
LFO Rate
こちらは、音に加えるノイズの間隔です
右側になるほど、ノイズの間隔が狭くなります。
LFO Amount
こちらは、音に加えるノイズの強さになります。
強くすると、荒ぶるような音になります。
強くすると、かなり濁った感じで目立ちやすくなります。
LFO Delay
こちらは、音に加えるノイズの発生遅延になります。
最初は綺麗だけど、あとから荒ぶるようにしたい、という場合などに
LFO Attack
こちらは、上げると恐らくですが、ノイズが滑らかになる、という感じでしょうか
RateやAmountが高くても、こちらも高くすれば
ノイズでの荒ぶり感は比較的に小さくなります。
ただ、こちらは微調整というイメージになると思います。
最初に重要になってきそうなのは、恐らくこの辺の機能だと思います。
まだまだ機能が多くて自分自身理解できていないところも多いですが
定期的に記事に書いていけたらな、と思います。
【UE4】ノイズ+スクロールによるフェードアウト
Verは
UE4.21.2
となります。
今回作ったものは、このような動きを作るためのものとなります。
#UE4
— moyasi@マテフォの中の人 (@torisutamoyasi) May 13, 2019
漸くやりたいことが、いい感じでできるように
メインは上から消えていくのですが
そこにノイズを混ぜてみました。 pic.twitter.com/IG5Ujdev7i
調整していくと、このようにグラデーションでのフェードアウトに対して
ノイズを混ぜたような描画を作ることが可能となります。
全体の構造はこのようになっています。
構造の解説
まずは左側のこの部分から
ここは、フェードアウトに使うノイズの調整となります。
今回は、ベースと歪み用は、同じテクスチャを使用しています。
上部の方は、タイリング数をXとYでそれぞれ調整する為の場所となります。
TexCoordに、定数を乗算すればその分がタイリングされるので
XとYをそれぞれパラメータ化して、インスタンス側でもいじれるように設定し。
それをタイリング数となるようにしているので
インスタンス側から、自由にタイリング数を変更させる事ができます。
下側は、テクスチャに追加するノイズとなります。
歪みには、XとYがRとGのみ必要になるので、この二つのチャンネルを取り出します。
ノイズはそのまま歪みに適用すると、大きすぎる事が多いので
低めの定数を乗算して、ノイズの強度を調整しておくと綺麗になりやすいです。
今回は、インスタンス側でも調整できるように、パラメータ化してあります。
こうして出来上がった、タイリングと歪みの処理を加算してから
テクスチャのUVsに接続します。
次にこの部分となります。
ここは、グラデーションとノイズを混ぜ合わせる役割となっております。
テクスチャからSqrtに接続しています、これは必須ではありません
使用するテクスチャに大きく影響しますが、フェードアウトの調整として、入れたほうが自然になりやすいかなと思います。
TexCordからGチャンネルを抜き出しているのは、単純にグラデーションを持ってくる為です。
当然ですが、ここを自身で容易したテクスチャを使っても構いません。
その後は、ノイズとグラデーションを乗算します。
その後に再度Sqrtに接続します。
2回Sqrtを使っていますが、このノードは平方根を出してくれます。
最後に平方根を入れているのは
グラデーションとノイズを乗算すると、かなり色が黒くなってしまうので、そこからの調整をする為となります。
グラデーションとノイズを混ぜた結果がこのようになっています。
ノイズの模様も維持しつつ、グラデーションが掛かっているのが解ると思います。
最後にこの部分となります
OPMとなるパラメータが、フェードアウトさせる場合の基準となる部分になります。
エフェクトで使う場合は、ここを動かすことになるので
DynamicParameterに置き換えてください
BPで制御する場合は、ScaleParameterで問題ありません。
OPMは基本的に0~1でフェードアウトの範囲を決定します。
そこに対して、先ほど作ったノイズとグラデーションを合成したものも、0~1の数値になっています。
また、グラデーションを混ぜているので、上は数値が低く、下が数値が高くなっています。
OPMのパラメータから減算する事により
1から0になるにつれて、全体の数値が少なくなります。
グラデーションが混ざっているので、下のほうから少しづつ0になる領域が増えていきます。
最後に、Clampを使い0~1からはみ出た部分を0~1に収めます。
エミッシブカラーは今回はあくまで機能説明なので、単色を使っています。
是非ParticleColorやノイズを混ぜたりしてみてください。
マテリアルとしては終わりですが、最後に一つやることがあります。
デフォルト設定の場合、オパシティマスクの数値は、1/3以下で消される設定になっています。
今回の、この設定の場合では、制御がどうしてもしにくいので
ここを変更しておきます。
作成したマテリアルから、インスタンスを作り
下にある、ここのパラメータを変更してください。
0にしたいところですが、0にした場合、うまく描画されないようなので
小さめの数値を入れておきます。
あとは、インスタンスのOPMのパラメータをいじると、ノイズが混ざったようなフェードアウトになってくれていると思います。
ただし、今回比較的に使用するテクスチャに依存する部分がどうしても大きいので、そこはご了承ください...
今回はここまでとなります。
今回文字ばっかりで、解りにくくてごめんなさい...
【UE4】【Houdini】VATをカスケードで制御する
今回使用するVerは
UE4・・・4.21.2
Houdini・・・17.5.229
今回は、HoudiniとUE4の連携的な内容をしていきたいと思います。
UE4にVATで持っていく手段は、色々な所に情報はありますが
私のような知識の乏しい人の場合
書いてある手段とちょっとでもずれると、途端に解らなくなってしまい...
という事があったので、記事に書いておこうと思います。
今回は基本的なRBDによるシミュレーション前提となります。
ほかのシミュレーションなどの場合は手段も恐らく変わってくると思います。
VATについて
まずはそもそもVATについて
Vertex Animation Textureの略称です
Vertexは頂点
Animationはアニメーション、ざっくり言うと動き
Textureはテクスチャ、ざっくり言うと画像
3Dモデルの動きデータを画像に入れ込んだもの、と考えればいいと思います。
VATを使うには
VATを作る機能は、Houdiniに最初から入っているわけではないので
データをDLする必要があります。
シェルフの部分の、UpdateでDL出来るはずです。
ただ、具体的な手順が若干解っていない所もあります、ご了承下さい
また、自身はsteamのIndie版です
ここが違うと、DLの仕方も変わってくるかもしれません。
まずはシミュレーションを作ってみる
とりあえず、定番のシミュレーションを作ります。
とりあえず、でBoxを作ります。
上空から落とすので、Centerをとりあえず2程度に設定しておきましょう。
その後の設定はこのようにします。
ノードの設定そのものは初期設定で問題ありません。
最後はNUllノードを作り、解りやすくする為に、名前を「OUT」にしています。
その後、OBJまで戻り
ここのシェルフにてシミュレーションを作ります。
シミュレーションを作る際に
この様なメッセージが出てきます。
左側をクリックしておきましょう。
VATでもっていくには、シミュレーションをパック化しておく必要があります。
ほかのシェルフなどで作る場合、UE4にもって行ったときに変な動きになることがあります。
OBJネットワーク上に、DOPのノードが作られるので、中に入ります。
今の段階で再生しても、ただ重力で落ちるだけとなっています。
地面が作られていないので、地面を作ります。
これで、地面に落ちて割れるシミュレーションが作られました。
次に、VATに変換してUE4に組み込みます。
VATの作成
まずは、破壊したBOXを作ったノードに入ります
OUTの下が、シェルフでシミュレーションを作った時に自動で作られたノードです。
このままでは、若干解りにくいので
最後にNULLノードを接続しておきます。
名前はOUT_Simとしました。
OUTネットワークに移動し、VATを作るノードを作成します。
今回はRBDのシミュレーションを作ったので
Rigid、を選択します。
Export Nodeは、変換するノードを選択します。
シミュレーション自体はDOPで作っていますが。
DOPで作ったシミュレーションは、SOPで読み込んでいます
なので、SOPの方のパスを選択しておきます。
最後に作ったOUT_Simを設定しておきましょう。
設定できたら、Renderのボタンで出力します。
プロジェクトのExportというフォルダに出力されたデータが出てくると思います。
UE4への組込み
RBD用の場合は、メッシュと最後にPOSとあるテクスチャとROTとあるテクスチャが書き出されます。
ここは書き出す種類によって変わってきます。
まずは、この書き出した三つのデータをUE4にインポートします。
次にマテリアルが必要になるので、新規でマテリアルを作ります。
HoudiniのVATを作ったノードにこの様な部分があります。
+のボタンを押すと開くので、この中身をコピー&ペーストでUE4に持っていきます。
コードをコピーしたら、UE4のマテリアル上で貼り付けをすると、ノードが作られます。
詳細設定の、ここの矢印をクリックで展開して
ここの設定を3にしておきます。
Houdiniから持ってきたノード群には
コメントで何処に接続すればいいのか?が書いてあるので
それに従い設定していきます。
マテリアルは完成ですが
VAtで動かすには、インスタンスを作っておきます。
作ったマテリアルからインスタンスを作成します。
インスタンスのこの5つのパラメータは編集する必要があるので
チェックを入れて編集します。
ここに入れる数値は
Houdini側の、この部分と同じ数値を入れる必要があります。
インスタンスにある、ここの部分も編集する必要があります。
Houdiniで生成したテクスチャを、ここでそれぞれ設定していきます。
最後に、メッシュに、このインスタンスを設定すれば完成です。
カスケードにて調整する
では次に、カスケード側で調整できるようにしていきます。
まず、VATの動きが、どこで動いているのか、という部分ですが
左の方にひっそりとTimeのノードがあり、ここで制御されています。
なので、ここをDynamicParameterに差し替えればできます。
ただし、時間の制御は、フレーム数ではなく、秒数なので注意が必要です。
ここで一つ問題が出てきます。
恐らくこの時点でそのまま読み込むと、変な形になると思います。
地面に落ちて割れるシミュレーションのはずが
カスケードで読み込むと、変な動きをするようになります。
原因は大きさで、InitialSizeを1に設定すると解決します。
ただ、大きさが完全固定では面倒なので、制御できるようにします。
おそらくですが、カスケード側で大きさを変えると、移動量の計算がおかしくなるようです。
マテリアル側で、ここの大きさを制御してる部分に、DynamicParameterを乗算します。
こうする事で、カスケード側で大きさを変えれる...ようにはなりますが。
InitiarSizeの大きさと同じにする必要が出てくるようです。
ちゃんと乱数で制御したい場合は、どうしてもBPでの制御が必要になってきそうではあります。
今回はここまでになります、VATに関してはまだまだ解っていない部分が多いので、判明次第色々情報纏めていこうかと思います。
【UE4】Materialで極座標の処理を自作してみる
はじめに
今回の記事はかなり憶測部分が多いので、間違っている部分が有ると思いますのでご了承下さい
(コッソリ教えて頂けれると幸いです)
VerはUE4.21.2です
画像の加工などで便利な極座標の処理
便利なので、デフォルトの時点で関数で極座標の処理をするノードが用意されています。
Vector To Radial Value というマテリアル関数です
基本はこれで問題無いのですが、スクロールなどの
ほかの移動などと合わせる際に、どうしてもややこしくなりやすい、うまく制御しにくい。
という部分が多少あったので
極座標の処理そのものから作れば制御しやすくなるのでは?
となったのが、今回処理を自作した理由となります。
そもそもマテリアルのUVs接続について
変形の処理を作る際に、このUVsの接続する情報をある程度把握する必要があるのかなと
まずはタイリングさせたりする基本である
TextureCoordinateをそのまま接続
単体では全く変化がありません。
加算すると、座標が動きます、スクロールの処理を入れたりするときに
使ったりする手段でもあります。
乗算すると、タイリングされます。
インスタンスでタイリング数を制御したい場合などに使う手段でもあります。
加算でノイズテクスチャを混ぜることで
マテリアルそのものの歪み処理なんかも。
ただ、ちゃんと制御するには、ある程度仕組み解ってないと厳しい部分はあるのでは?と。
処理内容としては、恐らくですが、UVsに接続されたRとGチャンネルをそれぞれXとYに置き換え
どこの位置にある数値を取得してくるのか?を定義しているのかなと思います。
例えば、RとGが0.5の場合は、ちょうど中心を指定します
そして、このように定数を繋げる場合
Texの情報のXとYが0.5の位置にある数値を、TextureSampleに適用する事になります。
定数を接続する場合、色の情報を、一箇所からとってきて、それを全ての場所に適用する事になります。
極座標を掛ける処理を考える
こちらはHoudiniで作ったものですが
極座標で、いわゆるこの様な処理を作ります。
X軸を半径
Y軸を角度
にするようにUE4のマテリアルで処理を作ります。
半径の処理を作る
まずは半径から
UVsの接続に使われる情報は、接続している情報の座標をもってきます
なので、Xを半径にしたい場合
この右側のグラデーションの数値が、そのまま半径にします。
つまり左側が中心に、右側が外側になるようにします。
左側の数値の低い部分を中心に
右側の数値の高い部分を外側に持ってくるので
円を描くようにすれば大丈夫です。
0~1の数値になっていますが、黒い部分を中心に持ってきたいので
0.5を減算する事により、-0.5~0.5になり、中心に0が来るようになります。
次に、円を作る手段としては、三平方の定理を利用し、中心からの距離を取得します。
但し、三平方の定理には、XとYが両方必要になってくるのでGチャンネルも必要となります。
三平方の定理は、高さと幅を2条し、その平方根が距離となるので
XとYを2条し、それぞれを加算のあと、平方根を出します
そうすると、中心からの距離を取得が可能となります。
この数値はそのまま半径として使用できます。
角度の処理を作る
次に角度を生成します。
Y軸が角度になるように処理を作りましょう
先ほどの半径は、中心からの半径を出しました
同じように、こちらは中心からの角度を出しましょう。
この時にピッタリなArctangent2というノードがあります。
Atan2と検索すれば出てきます。
Atan2には、XとYの情報から開き角度を取得してくれるノードとなります。
RがXでGがYなので、合うように設定します。
上半分が真っ黒の理由は、0以下の数値になっているからです。
ほかのツールでもそうですが、Atan2は角度を0~360ではなく、-180~180で取得する事が多いので
上半分が0以下になってしまう、というワケです。
また、真っ白の範囲が広いですが、これは角度をラジアン単位で持ってきているのが原因となります。
ラジアン単位の場合、-180~180は、-π~π に変換されます。
この状態では非常に扱いにくいので、扱いやすい数値に変換しましょう。
左下の3.142とあるのが、πの変わりとなります。
表示上では3.142とありますが、数値的には3.141592になっています(これ以上の小数点以下は設定できないようです)
これを加算する事で、全て正の数となります。
(0~2π)
この数値を0~1にしたほうが扱いやすいので
2πで除算する事で、0~1に変換する事が可能です。
最終合成
作った角度を半径の処理を、それぞれ合わせて、UVsに接続する事で、極座標の処理が完成します。
半径の処理のみで接続すると、このようになります。
これは、RとGが同じ数値になるので、中心からの距離が同じ位置には、同じ場所の情報を参照してくる為です。
角度の処理のみで接続すると、このようになります。
半径は、同じ半径の部分に同じ情報を持ってきていましたが
こちらは、同じ角度の部分に同じ情報を持ってくるのでこのようになります。
調整部分
最後に調整の部分です。
最初の方で、持ってくる位置の情報は、小数点以下の数値を参照して持ってくる。
とありました。
なので、この仕様を使えば、中心から外に動いたり、回したりする処理が簡単に作れます。
半径の処理に、Timeで数値を加算すると、外側から中心に移動するようなスクロールとなります。
ここの数値は、そのまま中心からの距離を取得しています。
その数値が増えると、取得する距離が、どんどんと遠くなっていきます。
一番中心であれば、0→0.25→0.5→0.75→1(小数点以下取得なので0)となる為です。
こちらは角度の処理にTimeで数値を加算したものです
こちらは左回りとなります。
原理的には、半径のと同じとなります。
原理が分かってくれば、非常に色々流用できる部分はあると思います。
今回はここまでとなります。
ここから追記です(2019/10/22)
実際のデータがこちらになります
中身を開いて、全て選択からマテリアル内に貼り付けてください。
Dropbox - UE4極座標.txt - Simplify your life