Source Video(*.mp4)
UI Design(*.ai)
Log Data(*.csv)
Size : 2704 x 1520 px
FrameRate : 60fps
short : 1周分(約3分)
long : 4周分(約10分30秒)
各パラメーターあたり10万行以上にのぼる大量のログデータをどのように
表示させるかの検証・設計にかなりの時間を要しました。
というよりも、10日ほどのR&Dを行なった結果、技術的に厳しいというご相談をさせていただいた際に必要な部分をご提示いただき
その部分のみをトリミングした際に解決策というか結論が出ました。
それまでは非常に効率の悪い方法でのデータマッピングの手法をとっており、実際問題スケジュールに間に合わせることができそうにありませんでした。
各パラメーターの全データ10万行以上 x 複数列)を配列として定義していましたが
AE Expressionでは配列をフレームバイフレームで取得しなおすため
1フレーム毎すべてのデータを読み込んでしまい、これでは形にするのは不可能と思われるぐらいの時間がかかってしまいます。
最終的に1Lapを単位としてデータを分割することでわかりやすく安定した運行可能な設計にたどり着くことができました。
全体にデータのリマップにはAE Expressionのinterporation
を使用しています。
少しだけデザイン・設計に手間取ったモジュールに関して以下に紹介していきます。
ちなみに文中のクロースアップ画像はおそらく実機になったときはとれないほどの寄りになるとおもいますのでイメージ画像ですね。
興味がある方はGPSログを取るアプリなどもあるので
お時間が許すときにこういったログデータをベースにしたUIを自分なりに設計してみると案外楽しいかもしれません。
GPSデータは緯度経度で与えられます。これらは学校で習ったこともあるので概要はわかっていますが
それを車の軌跡のデータとして描画できるようなコンポジション上の座標に変換し描画する必要があります。
変換に関してはAE Expressionのみでポジションにリマッピングすることで実現可能で、
描画にはRED GIANT Trapcode particularを用いています。
これまでにも何度となく雨、雪などの"降らしモノ"から、ライト・スモークトレイル、モニターグラフィックスのデザインなどでも使ってきましたが
描画→消し込みのようなことができる方法論としてはこれ以外に思いつきません。
変換した座標をemitterのポジション値として与え描画していくのですが
レンダリングを開始してみても問題なくスイスイと進んでいきます。
しかし、9分手前あたりまでレンダリングが進んだ段階で1フレームのレンダリング時間がものすごくかかるようになり、
なんと一枚のレンダリング時間が8分強です。残りの尺が1分半ほどとはいえ、60fpsですから残約720時間(90秒 x 60fps x 8分 ÷ 60分 = 720から算出)となり
先々での修正も考えられるので容認できる状況ではありません。
この問題に関してはLapごとにデータ分割するだけでは解決せず、Praticularの出力レイヤーのデュレーションを
トリミングするなどでも改善されませんでした。さらにトレイルがある分、途中からレンダリングする手も通用しません。
色々やってみましたが、普通に前後でLapをダブらせたものを合成するしかありませんでした。
薄々わかってはいましたが、この結果からParticularのキャッシュはレイヤーではなくコンポジションの全尺分を取るという推論ができます。
長尺でParticularを使用される場合はお気をつけください。
3レイヤーのサイズ・不透明度の異なるサークルで制動(コーナリング時を含む)の軌跡を示す荷重アラートです。
一番上の小さく、不透明度の高いサークルを現在とし、それ以外を小さい順に現在に近い過去の値として残像表示させています。
ご提供いただいたデータに関してはX,Y,Z各軸の重力値で、
XとZに関して適宜数的な処理を施し座標としてマトリックス上に表示しています。
この際、サークル状のマトリックスからはみ出ることがないようなExpression処理もしてあります。
(R&D動画)
Yに関しては今回のコース上でジャンプをすることはないということで、
ほとんど変動がないので表示に影響させておりません。
ちなみに、もしやるとすれば拡大・縮小のようなスケールアニメーションを想定していました。
残像に関してはよくあるディレイですから、以下のAe Expressionで処理しています。
valueAtTime
ディレイ幅に関してはパカパカとした動きにならず気持ちのよいところを探り設定しました。
なんの変哲も無い回転のアニメーションです。
しかし、これが嘘偽り、演出のないログデータに沿った動きをさせるとなると少し事情は違ってきます。
データ的なこともさることながらシフトチェンジと車窓の風景やエンジンノートなどとも感覚的に一致させる必要があります。
サーキット走行ですから頻繁にシフトチェンジがおこなわれ
かつ、600sec/60fpsのデータはデュレーションも長くフレームレートも高いためキーフレームでコントロールするのは現実的ではありません。
また、ログデータがどのような方法で取得されているかわからないのですがfloatになっている点にもつまずきました。
ギアである以上、整数をとらないのは意味不明なのでroundさせるのではなくparseInt
で切り捨てるような処理をしました。
アニメーションに関しては、車のシフトはリニアシフト(バイクのような単純なアップダウン)ではなく、ランダムシフト(任意の値にシフト可能)なので、
設計当初は回転などのアニメーションはなくダイレクトに表示が切り替わるようにしていました。
1stチェックの段階で、floatを取っている値は無視し(前にintを取っていた値を継続する)、
シフトチェンジのアニメーションは回転にしてほしいとのオーダーをいただき、次のギアにチェンジする数秒前からイーズのある回転を仕込む必要がありました。
設計の手順としては、次のギアに変わるのを段数に応じてカウントダウンし、数的なトリガーをつかって回転タイミングを制御するようになっています。
こちらも気持ちいいタイミングを探り設定してあります。
CES2019への出展ということを念頭に、IoT家電を扱う企業ということで電子回路のようなイメージをコンセプトとして制作しました。
複数のパスはCinema4DをつかいX-Particlesで出力し、AEとのバイパス・シェイプレイヤーへコンバート、アニメーション作成、カラーを調整しました。