1K 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
DeNA が社会の技術向上に貢献するため、業務で得た知見を積極的に外部に発信する、DeNA 公式のアカウントです。DeNA エンジニアの登壇資料をお届けします。
Timelineでポストエフェクトを動かそう 山本真史 (aporo) 株式会社ディー・エヌ・エー Unity Timeline/Playable API 完全に理解した 勉強会 2024/05/10 © DeNA Co., Ltd. 1
自己紹介 山本 真史 ● 2018年4月DeNA入社 ● 横断のグラフィックスチーム所属 ● エフェクトやらカットシーンやらの ツールを開発してることが多いです © DeNA Co., Ltd. 2
ポストエフェクトをTimelineでアニメーションさせたい © DeNA Co., Ltd. 3
Unityで使えるポストエフェクト ● URP標準のVolumeを活用 ● CinemachineVolumeSettingsを活用 © DeNA Co., Ltd. 4
URP標準のVolumeを利用 ● GlobalまたはLocalのVolumeで空間に対してパラメータを設定 ● パラメータ自体は専用のScriptableObject(VolumeProfile)から設定 ● シーン中に適当なGameObjectを置いてVolumeComponentから設定 © DeNA Co., Ltd. 5
Cinemachineの機能を利用 ● CinemachineVirtualCameraの Extensionsから利用 ● VirtualCameraごとパラメータを設定 ● パラメータ自体はScriptableObject (VolumeProfile)から設定 © DeNA Co., Ltd. 6
Timelineでポストエフェクトをアニメーションさせられるか ● URP標準のVolumeを利用 ○ AnimationTrackでもキーが打てずにアニメーションしない ● Cinemachineの拡張を利用 ○ CinemachineTrackによってアニメーション可能 © DeNA Co., Ltd. 7
CinemachineTrackでポストエフェクト制御時の問題点 ● VirtualCameraのブレンドによるアニメーションになる ● Volumeに対してキーを打っている訳ではない ● 個々のVirtualCameraをアニメーションキーとして使うイメージ ○ アニメーションキーの数だけ、VirtualCameraとVolumeが必要に © DeNA Co., Ltd. 8
AnimationClipでキーを打てるもの、打てないもの SerializableなStructのフィールドはアニメーションできる SerializableなClassのフィールドはアニメーションできない © DeNA Co., Ltd. 9
AnimationClipの中身を見てみると ● Attributeの名前が直接指定されている ● 特にAttributeの型が何かとかは書かれていない様子 ● scriptはしっかりguidからどのファイルかを参照している © DeNA Co., Ltd. 10
AnimationClipの中身を見てみると AnimationClipのattribute名をserializableStruct2に変更してみる → キーが反応しなくなる © DeNA Co., Ltd. 11
AnimationClipの中身を見てみると C#側でSerializableStructの定義をstructからclassに変更してみる → キーが反応しなくなる © DeNA Co., Ltd. 12
AnimationClipの中身を見てみると C#側でSerializableStructのクラス名をSerializableStruct2に変更してみる → キーは正常に動作 © DeNA Co., Ltd. 13
AnimationClipの中身を見てみると AnimationClipのattribute名をserializableStruct2に変更し、 C#側で新しくSerializableStructのフィールドserializableStruct2を追加 → キーは新しく作ったフィールドのserializableStruct2に反応 © DeNA Co., Ltd. 14
AnimationClipの中身を見てみると ● 入れ子のパラメータはSerializableなStructであればアニメーション対応 ● 一度キーを打ったAnimationClipはattribute名のみ参照する様子 ● SerializableなClassを利用すると対応するフィールドが AnimationClipに元から存在していてもアニメーション非対応 → AnimationClipで動かしたいフィールドは コンポーネントの先頭アドレス+固定オフセットで 一意に決定できる領域である必要がありそう © DeNA Co., Ltd. 15
VolumeProfileの中身をみてみると ポストエフェクトのパラメータを持つVolumeProfileはclassで実装 → 内部の各エフェクト用パラメータのアドレスは一意に計算できない → AnimationClipからキーが打てないのでは © DeNA Co., Ltd. 16
VolumeProfileを活用しつつTimelineでアニメーションさせる方法 動かしたいパラメータを持つクラスを用意して、 自作クラス経由でVolumeProfileの値をアニメーションさせる © DeNA Co., Ltd. 17
VolumeProfileを活用しつつTimelineでアニメーションさせる方法 ● アニメーション用のクラスを用意 ● 内部パラメータにキーを打つ ● VolumeProfileにパラメータを反映 1エフェクトだけなら1クラスに まとめてしまっても問題なさそう エフェクトの数が膨大になってくると? © DeNA Co., Ltd. 18
VolumeProfileを活用しつつTimelineでアニメーションさせる方法 整理してこんな感じ © DeNA Co., Ltd. 19
VolumeProfileを活用しつつTimelineでアニメーションさせる方法 最終的にURP標準搭載のポストエフェクトに対応させると © DeNA Co., Ltd. 20
メリット・デメリット メリット ● Timelineでポストエフェクトのパラメータを動かせるようになる ● パラメータの取捨選択でGUIの整理も自由自在 ● 独自のポストエフェクトにも対応可能 デメリット ● GUIの実装は全部自力で実装する必要が ● URPのアップデートに都度対応する必要が ● パラメータ制御が複数箇所にまたがるので一定煩雑 © DeNA Co., Ltd. 21
まとめ ● 一工夫でTimelineでポストエフェクトにもアニメーションさせられる ● SerializableなClassのプロパティにはキーを打てないので注意 ○ SerializableなStructを利用することでキーが打てるように ● カメラ単位での制御でよければCinemachineTrackを使えばOK © DeNA Co., Ltd. 22