|
執筆バージョン: Unreal Engine 5.7
|
「Panner」や「Rotator」などのノードを用いてマテリアルアニメーションを作成している場合に、
『アニメーションの速度を「速めて戻す」』という演出を行う際には、少し注意が必要です
直感的には、『”Speed”の値を、上げて戻すだけじゃないの?』と思えるのですが………実際にやってみましょう

- MaterialParamterCollection を作成し、ScalarPameterを追加

-
マテリアルのPannerノードのY軸方向の”Speed”に、➀で作成したパラメーターを繋ぐ

-
LevelBlueprintにタイムラインを追加し、➀のパラメーターを動的に更新する

↓タイムラインの中身( 0 → 1 → 0)

-
実行!
思ってたのと違うッ!
………なぜでしょう?
「Panner」ノードは、「Time」の値に”Speed”を乗算し、UVに加算する(Output = Time × Speed + UV)のですが、
「Time」の値は実行開始から常に加算され続けるため、”Speed”の増減によって、動きが急激に早くなったり、巻き戻ったように見える事になります
例:1秒時点で”Speed”が1、10秒時点で”Speed”が10、20秒時点で”Speed”を1に変更した場合、下記のような結果になります
➀1秒時点の:1 × 1 = 1
➁10秒時点:10 × 10 = 100
③20秒時点:20 × 1 = 20
では、どうしたらマテリアルアニメーションをいい感じに「速めて戻す」事ができるのでしょうか?
まず考えられるのは『「Time」を使用せず、Blueprintで経過時間を記録し、それを MaterialParameterCollection 経由でマテリアルに送る』という手法ですが、
「実行しないとマテリアルアニメーションが再生されなくなる」ため、グラフィックデザイナーからは大いに不興を買うことになりそうです…
「”Speed”ではなく”Time”の方に手を加える」というアイデアは使えそうなので、
『「Time」に加算する数値を、MaterialParameterCollection 経由でタイムラインからマテリアルに送る』という手法であれば、
要件を満たしつつプレビューの利便性を確保できるかもしれません。実際にやってみましょう
- 「Time」に MaterialParamterCollection の値を加算するように、処理を変更します

- Timelineの中身はそのままで、MaterialParamterCollection の値を取得し、Timelineから来た値を(調整して)加算するように、処理を変更します

- 実行!
いい感じッ!
他のマテリアルアニメーションにも適用してみました
演出の幅が広がりそうですね。是非お試しください!