AEで作成した演出をライブラリ化してプレミアで利用するエッセンシャルグラフィックスが、ゲームのようなキャラクターなどの制御に有効なことがわかった。わかったというかそうだと思っていてやってみたらやっぱり有効だった。これについて詳細をポストとして残す。

キャラクターのアニメ制御のカプセル化
※ このサイトは何かを作っている際の自分用のメモが主な目的なのだが今回は前提となる考え方も書いておく。
キャラクターをゲームのように動画上で元気に動かしたいとする。その際にアニメーションの切り替えや状態変化などが必要になったとして、すべてをメインのタイムラインから直接制御するのは厳しい。絵の素材サイズや尺などが変わった場合制御しているエクスプレッションやキーフレーム等をすべて修正しなくてはいけないからだ。ここでは、キャラクターの具体的な制御方法はキャラクターのコンポジット側が知っていて外部からは飛んで!とか右向いて!など実際どうするかの詳細は把握せずにコントロールできるのが好ましい。これをカプセル化という。
実際にこのカプセル化を有効活用しているのがエッセンシャルグラフィックスの仕組みだ。これをキャラクター制御に活用する。
キャラクターコンポジットの構成

タイムラインに左右それぞれが歩くアニメを並べた。

この4画像が1フレームずつ並べられている。左右の反転はスケールをいじってもいいのだが、衣装チェンジや座る・ジャンプするなどの場合もお暗示仕組みが使えるよう、今回は左右反転を素材を並べる実装にした。これをさらにコンポで包んで再生位置をコントロールする。階層を深くしたくないのだが、自身のタイムラインの位置をエクスプレッション等で移動するすべがなさそうなのでそうする。

親コンポには上記コンポとNULLレイヤーを作成しそこにエッセンシャルグラフィックスとして外部から操作するプロパティをエフェクトコントロールとして設定した。

左右反転チェックボックスにチェックを入れるとキャラクターが左を向いて歩くようにする。FPSはキャラクターアニメーションの再生速度を動画のFPSと別に設定する物である。

キャラクターのコンポにはタイムリマップエフェクトを適用しエフェクトコントロールのプロパティ値を元に再生フレームを制御する。※ 下記コードは上の画面キャプチャから少し修正されている。
var actual_fps = 1.0 / thisComp.frameDuration;
var anum_fps = thisComp.layer("SYSTEM").effect("アニメーションFPS")("スライダー");
var flip = thisComp.layer("SYSTEM").effect("左右反転")("チェックボックス") == 0;
var frames_per_anim = 2;
var offset = 0;
if (flip){
offset = frames_per_anim;
}
var frame = ((timeToFrames(time*anum_fps/actual_fps) % frames_per_anim) + offset);
framesToTime(frame);
ここでは右へ歩くアニメーションのコマ数と左へ歩くコマ数は同じ(frames_per_anim = 2)としている。コマ数が異なる場合、アニメーションごとの再生開始位置を簡単に求められなくなるので制御が難しくなるが今回は対応しない。しかしいずれ対応すると思う。他実際の動画FPSとアニメーション再生のFPSをあわせて再生スピードの調整をしている。
エッセンシャルグラフィックスの設定

エフェクトコントロールに設定したプロパティ2つをエッセンシャルグラフィックスのプロパティとして外部公開する。これでエッセンシャルグラフィックスとして作成されたキャラクターコンポジットをライムラインに配置した際に再生スピードやキャラクターの向きを簡単にコントロールできるようになる。
今回は同じAEムービーから利用するのが目的でプレミアで利用する予定がない。よってモーショングラフィックステンプレートの書き出しは行わなくてもいいが、試しに書き出してみた。.mogrt という拡張子のバイナリファイルが書き出される。ファイル内に画像も同梱されているようだ。
PremierePROでのテスト

プレミアで新規プロジェクトを作成し、.mogrtファイルをエッセンシャルグラフィックスパネルにドラッグ&ドロップするとプロジェクトに登録する事が出来た。

AEで設定した外部公開プロパティがそのまま見て取れる。
このエッセンシャルグラフィックスを使って書き出した動画が冒頭の物である。アンチエイリアスがかかってぼけてしまったがプレミアで解除する方法を知らないのでこのままとしておく。



