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
をはじめ「ねじり」表現を文字にしてみると思ったより解説が難しかった。
理解していただけたら幸いだ。
今回ねじり+マテリアル(+おまけでパーティクル飛ばし)だけでもう一つ作例を作ったので貼っておく。
あまり派手な例ではないが、ねじり+マテリアルの透過を工夫してやれば様々な表現が可能になってくると思う。