2022-01-26

ナイアガラでねじり表現 【UE5 】

ナイアガラでリボンをねじる方法。作例として床屋のくるくるしてるアレを作る。

Article Image

作例

Unreal Engine(ナイアガラ)にて次を作る

サインポールというらしい

ねじり表現

正直この作例を作るのであればナイアガラでなくても作れそうだ。

しかし今回はあくまで「ナイアガラで使えるねじり」の表現方法ということで記事を書く。

※あえてナイアガラで書いたほうが後々変形して複雑にするのが楽そうではある。

ビームエミッタをベースに作る

基本はStaticBeamのテンプレートから作ればよい。

ビームが全くわからない人向けに記事を書いているので意味がわからなければまずそちらで。

【ナイアガラ超基礎 #10】ビームをはどうやって作られるか【Unreal Engine】 | 謎の技術研究部

StaticBeam

レンダリング

先にレンダラの設定から

レンダラ

Beam系はRibbon Rendererで行う

Material

マテリアルの設定に次の自作マテリアルを設定

マテリアル設定

マテリアルの内容

次のテクスチャを自作して3x3倍に配置しただけだ。

必要あればテクスチャは自由に使ってもらえればと思うが、ここはお好みで変えてみよう。

マテリアル

重要:リボンシェイプ

リボンシェイプ

ここでリボンシェイプの設定がとても重要(結構下の方にある)

ねじり表現をするためにはデフォルトのPlane(板ポリ)だと視覚的に殆どねじりがわからない。

そこでここをTube(円柱になる)に変更しTube Subdivisionsでポリゴンの解像度を設定する。

大きくすれば良いというものではなく3のような非常に低い数値に設定したほうが「ねじっている感じ」が大きく出る。

値3

※値3だとねじった後ドリルの歯のようになる。

エミッタの更新

エミッタの更新

Emitter State

Life Cycle ModeSelfにしLoop Durationを長め(10秒)に設定。

これを設定することでサインポールのスポーン間隔を明示する。

ポールは1本だけなので1回スポーンすれば良い。

設定しないと数秒で何本もポールが現れて、重なってしまう。

Beam Emitter Setup

Beam EndX=300に設定。

ここでビームの終点を設定することで「長さと方向」が決定される。

Spawn Burst Instantaneous

適当にSpawn Count=100に設定したが5とか極端に少ない値でも問題なかった。

少なくしすぎるとポリゴンがガタガタになったりするので微調整を心がける。

パーティクルのスポーン

パーティクルのスポーン

Initialize Particle

Lifetimeだけ設定してある。

こちらは上で解説した通り1回スポーンするだけなのでEmitter StateLoop Durationと同じ10秒に設定

Spawn Beam

このモジュールは初心者解説に書いてあるとおり挿すだけでOK。

Beam Emitter Setupとセット使わないとエラー。

重要:Beam Width

今回の「ねじり」表現で重要な項目なので画像を張る。

Beam Width設定

まず上の設定Beam Wdthは単純にビームの幅を決定するもなので固定値でよい。

ここでは80

Beam Twist Amountがとても重要で、例えばここになにか定数を一ついれただけだと

定数のみ

上の状態で定数を動かしてもくるくる回るだけで1ミリも「ひねり」にならない。

これは「全てのパーティクルを全く同じ角度ねじっている」 = 「全体を回転させただけ」となっている結果だ。

ということは各パーティクルごとで別々の角度をつけてやらないといけない。

そこでReturn Normalized Exec Indexというダイナミックインプットの出番である。

※ここではMultiply Floatを使ってさらにそれを8倍している

Return Normalized Exec Index

では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している

ねじり後

パーティクル更新

パーティクル更新

実はまだ「ねじり」が入っただけで「回転」のアニメーションは付いていない。静止しているだけだ。

ここでは回転をアニメーションしていく。

Position変数

まずパラメータウィンドウから直接RibbonTwistで検索して出てきたものをパーティクル更新にドラッグしてモジュールに設定する。

RibbonTwist

これは先程Beam Widthで設定したデータが入っている。

この設定に

設定

Add Floatを設置。

AB2つの値があるので、どちらか一つにもう一度RibbonTwistを入れて、もう片方に好きな値を入れる。

すなわち RibbonTwist = RibbonTwist + 定数 の処理をしているだけだ。

これで回転しはじめる。

なんで回転するの?

上でTwistの値に定数を足しても「全体の回転になるだけ」と解説した。

まさにコレを利用してねじり後、定数を足し続けることで全体を回転を表現しているワケだ。

特にパーティクル更新の中にこの処理が入っているので、フレームが更新されるごとに固定値がプラスされ続けるので回転がアニメーションになっている。

※このモジュールをパーティクルのスポーンに移動してもエラーはないが、その場合は回転しなくる。

完成

※冒頭と同じ作例。上下の女神像のようなものはMegascansから

今回Return Normalized Exec Indexをはじめ「ねじり」表現を文字にしてみると思ったより解説が難しかった。

理解していただけたら幸いだ。

今回ねじり+マテリアル(+おまけでパーティクル飛ばし)だけでもう一つ作例を作ったので貼っておく。

あまり派手な例ではないが、ねじり+マテリアルの透過を工夫してやれば様々な表現が可能になってくると思う。



この記事をシェア


謎の技術研究部 (謎技研)