Timelineでポストエフェクトを動かそう

2.3K Views

August 06, 24

スライド概要

URPのポストエフェクトはそのままだとTimelineを使ってもうまく動かすことができません。
今回はTimelineでポストエフェクトを自由度高く動かす方法について解説します。

登壇者 : 山本 真史 / 株式会社ディー・エヌ・エー

---------
Unity Timeline/Playable API 完全に理解した 勉強会
https://unity-fully-understood.connpass.com/event/315521/

動画アーカイブ : https://www.youtube.com/watch?v=yUL8V2HSR-g

profile-image

DeNA が社会の技術向上に貢献するため、業務で得た知見を積極的に外部に発信する、DeNA 公式のアカウントです。DeNA エンジニアの登壇資料をお届けします。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Timelineでポストエフェクトを動かそう 山本真史 (aporo) 株式会社ディー・エヌ・エー Unity Timeline/Playable API 完全に理解した 勉強会 2024/05/10 © DeNA Co., Ltd. 1

2.

自己紹介 山本 真史 ● 2018年4月DeNA入社 ● 横断のグラフィックスチーム所属 ● エフェクトやらカットシーンやらの ツールを開発してることが多いです © DeNA Co., Ltd. 2

3.

ポストエフェクトをTimelineでアニメーションさせたい © DeNA Co., Ltd. 3

4.

Unityで使えるポストエフェクト ● URP標準のVolumeを活用 ● CinemachineVolumeSettingsを活用 © DeNA Co., Ltd. 4

5.

URP標準のVolumeを利用 ● GlobalまたはLocalのVolumeで空間に対してパラメータを設定 ● パラメータ自体は専用のScriptableObject(VolumeProfile)から設定 ● シーン中に適当なGameObjectを置いてVolumeComponentから設定 © DeNA Co., Ltd. 5

6.

Cinemachineの機能を利用 ● CinemachineVirtualCameraの Extensionsから利用 ● VirtualCameraごとパラメータを設定 ● パラメータ自体はScriptableObject (VolumeProfile)から設定 © DeNA Co., Ltd. 6

7.

Timelineでポストエフェクトをアニメーションさせられるか ● URP標準のVolumeを利用 ○ AnimationTrackでもキーが打てずにアニメーションしない ● Cinemachineの拡張を利用 ○ CinemachineTrackによってアニメーション可能 © DeNA Co., Ltd. 7

8.

CinemachineTrackでポストエフェクト制御時の問題点 ● VirtualCameraのブレンドによるアニメーションになる ● Volumeに対してキーを打っている訳ではない ● 個々のVirtualCameraをアニメーションキーとして使うイメージ ○ アニメーションキーの数だけ、VirtualCameraとVolumeが必要に © DeNA Co., Ltd. 8

9.

AnimationClipでキーを打てるもの、打てないもの SerializableなStructのフィールドはアニメーションできる SerializableなClassのフィールドはアニメーションできない © DeNA Co., Ltd. 9

10.

AnimationClipの中身を見てみると ● Attributeの名前が直接指定されている ● 特にAttributeの型が何かとかは書かれていない様子 ● scriptはしっかりguidからどのファイルかを参照している © DeNA Co., Ltd. 10

11.

AnimationClipの中身を見てみると AnimationClipのattribute名をserializableStruct2に変更してみる → キーが反応しなくなる © DeNA Co., Ltd. 11

12.

AnimationClipの中身を見てみると C#側でSerializableStructの定義をstructからclassに変更してみる → キーが反応しなくなる © DeNA Co., Ltd. 12

13.

AnimationClipの中身を見てみると C#側でSerializableStructのクラス名をSerializableStruct2に変更してみる → キーは正常に動作 © DeNA Co., Ltd. 13

14.

AnimationClipの中身を見てみると AnimationClipのattribute名をserializableStruct2に変更し、 C#側で新しくSerializableStructのフィールドserializableStruct2を追加 → キーは新しく作ったフィールドのserializableStruct2に反応 © DeNA Co., Ltd. 14

15.

AnimationClipの中身を見てみると ● 入れ子のパラメータはSerializableなStructであればアニメーション対応 ● 一度キーを打ったAnimationClipはattribute名のみ参照する様子 ● SerializableなClassを利用すると対応するフィールドが AnimationClipに元から存在していてもアニメーション非対応 → AnimationClipで動かしたいフィールドは コンポーネントの先頭アドレス+固定オフセットで 一意に決定できる領域である必要がありそう © DeNA Co., Ltd. 15

16.

VolumeProfileの中身をみてみると ポストエフェクトのパラメータを持つVolumeProfileはclassで実装 → 内部の各エフェクト用パラメータのアドレスは一意に計算できない → AnimationClipからキーが打てないのでは © DeNA Co., Ltd. 16

17.

VolumeProfileを活用しつつTimelineでアニメーションさせる方法 動かしたいパラメータを持つクラスを用意して、 自作クラス経由でVolumeProfileの値をアニメーションさせる © DeNA Co., Ltd. 17

18.

VolumeProfileを活用しつつTimelineでアニメーションさせる方法 ● アニメーション用のクラスを用意 ● 内部パラメータにキーを打つ ● VolumeProfileにパラメータを反映 1エフェクトだけなら1クラスに まとめてしまっても問題なさそう エフェクトの数が膨大になってくると? © DeNA Co., Ltd. 18

19.

VolumeProfileを活用しつつTimelineでアニメーションさせる方法 整理してこんな感じ © DeNA Co., Ltd. 19

20.

VolumeProfileを活用しつつTimelineでアニメーションさせる方法 最終的にURP標準搭載のポストエフェクトに対応させると © DeNA Co., Ltd. 20

21.

メリット・デメリット メリット ● Timelineでポストエフェクトのパラメータを動かせるようになる ● パラメータの取捨選択でGUIの整理も自由自在 ● 独自のポストエフェクトにも対応可能 デメリット ● GUIの実装は全部自力で実装する必要が ● URPのアップデートに都度対応する必要が ● パラメータ制御が複数箇所にまたがるので一定煩雑 © DeNA Co., Ltd. 21

22.

まとめ ● 一工夫でTimelineでポストエフェクトにもアニメーションさせられる ● SerializableなClassのプロパティにはキーを打てないので注意 ○ SerializableなStructを利用することでキーが打てるように ● カメラ単位での制御でよければCinemachineTrackを使えばOK © DeNA Co., Ltd. 22