Unreal Engine(ナイアガラ)にて次を作る
サインポールというらしい
正直この作例を作るのであればナイアガラでなくても作れそうだ。
しかし今回はあくまで「ナイアガラで使えるねじり」の表現方法ということで記事を書く。
※あえてナイアガラで書いたほうが後々変形して複雑にするのが楽そうではある。
基本はStaticBeamのテンプレートから作ればよい。
ビームが全くわからない人向けに記事を書いているので意味がわからなければまずそちらで。
【ナイアガラ超基礎 #10】ビームをはどうやって作られるか【Unreal Engine】 | 謎の技術研究部
先にレンダラの設定から
Beam系はRibbon Rendererで行う
マテリアルの設定に次の自作マテリアルを設定
次のテクスチャを自作して3x3倍に配置しただけだ。
必要あればテクスチャは自由に使ってもらえればと思うが、ここはお好みで変えてみよう。
ここでリボンシェイプの設定がとても重要(結構下の方にある)
ねじり表現をするためにはデフォルトのPlane(板ポリ)だと視覚的に殆どねじりがわからない。
そこでここをTube(円柱になる)に変更しTube Subdivisionsでポリゴンの解像度を設定する。
大きくすれば良いというものではなく3のような非常に低い数値に設定したほうが「ねじっている感じ」が大きく出る。
※値3だとねじった後ドリルの歯のようになる。
Life Cycle ModeをSelfにしLoop Durationを長め(10秒)に設定。
これを設定することでサインポールのスポーン間隔を明示する。
ポールは1本だけなので1回スポーンすれば良い。
設定しないと数秒で何本もポールが現れて、重なってしまう。
Beam EndのX=300に設定。
ここでビームの終点を設定することで「長さと方向」が決定される。
適当にSpawn Count=100に設定したが5とか極端に少ない値でも問題なかった。
少なくしすぎるとポリゴンがガタガタになったりするので微調整を心がける。
Lifetimeだけ設定してある。
こちらは上で解説した通り1回スポーンするだけなのでEmitter StateのLoop Durationと同じ10秒に設定
このモジュールは初心者解説に書いてあるとおり挿すだけでOK。
Beam Emitter Setupとセット使わないとエラー。
今回の「ねじり」表現で重要な項目なので画像を張る。
まず上の設定Beam Wdthは単純にビームの幅を決定するもなので固定値でよい。
ここでは80。
Beam Twist Amountがとても重要で、例えばここになにか定数を一ついれただけだと
上の状態で定数を動かしてもくるくる回るだけで1ミリも「ひねり」にならない。
これは「全てのパーティクルを全く同じ角度ねじっている」 = 「全体を回転させただけ」となっている結果だ。
ということは各パーティクルごとで別々の角度をつけてやらないといけない。
そこでReturn Normalized Exec Indexというダイナミックインプットの出番である。
※ここではMultiply Floatを使ってさらにそれを8倍している
ではReturn Normalized Exec Indexとはなんだろうか。
Normalizedというのは「正規化された」という意味である。
※意味がわからなければ読み飛ばす
例えばパーティクルのIDが0~256まで生成されていたとして、この数字を0~1の範囲に収めるという処理をしている。
具体的に数字を入れると256個あるうちの213は全体の何%のところにある? >> 83.2%(=0.832)になる。
ここでは難しく考える必要はなく、生成されたパーティクル順に0~1の値を別々に付与していると理解できれば良い。
Return Normalized Exec Indexその名の通り各パーティクルのインデックスを正規化した値が出力される。
Beam Emitterでは配列(Index)の順番にパーティクルが並んでいるので、このインデックスの数字が増えるごとにちょっと角度を増やして回転してやれば「ねじり」になる。
これは各パーティクルごとに違った値になるので、この値を角度に設定してやれば徐々に角度は増える=ねじりとなるわけ。
※正規化されているので直接角度に設定するには値が小さいためMultiplyしている
実はまだ「ねじり」が入っただけで「回転」のアニメーションは付いていない。静止しているだけだ。
ここでは回転をアニメーションしていく。
まずパラメータウィンドウから直接RibbonTwistで検索して出てきたものをパーティクル更新にドラッグしてモジュールに設定する。
これは先程Beam Widthで設定したデータが入っている。
この設定に
Add Floatを設置。
AB2つの値があるので、どちらか一つにもう一度RibbonTwistを入れて、もう片方に好きな値を入れる。
すなわち RibbonTwist = RibbonTwist + 定数 の処理をしているだけだ。
これで回転しはじめる。
上でTwistの値に定数を足しても「全体の回転になるだけ」と解説した。
まさにコレを利用してねじり後、定数を足し続けることで全体を回転を表現しているワケだ。
特にパーティクル更新の中にこの処理が入っているので、フレームが更新されるごとに固定値がプラスされ続けるので回転がアニメーションになっている。
※このモジュールをパーティクルのスポーンに移動してもエラーはないが、その場合は回転しなくる。
※冒頭と同じ作例。上下の女神像のようなものはMegascansから
今回Return Normalized Exec Indexをはじめ「ねじり」表現を文字にしてみると思ったより解説が難しかった。
理解していただけたら幸いだ。
今回ねじり+マテリアル(+おまけでパーティクル飛ばし)だけでもう一つ作例を作ったので貼っておく。
あまり派手な例ではないが、ねじり+マテリアルの透過を工夫してやれば様々な表現が可能になってくると思う。
