2015-11-25

動きのパターンをキーで管理するエクスプレッション

sample_main
いくつかの動きのパターンをキーフレームによって管理する方法をご紹介します。イメージとしては格闘ゲーム等のキャラクターアニメーションが近いです。

とりわけ高度なことではありませんが、汎用性が高そうなのと調べ直すのに苦労したので順を追って説明します。

一つ手前のキーフレーム番号を取得する

nearestKey(time)を用いてキーを取得するのですが、「前後に関わらず一番距離の近いキー」を取得してしまうため不便です。残念ながら代替できそうな手段もありません。

そこでまずは「直前のキーのインデックス」を常に取得するため、下記のように現在時間と対象のキーの時間を比較し値を補正します。サンプルはこれをソーステキストに適用したものです。

nKey = effect("control")("スライダー").nearestKey(time);
if(time < nKey.time){
	cIndex = nKey.index-1;
} else {
	cIndex= nKey.index;
}
cIndex


sample_01
同様にマーカーに対しても使えます。

nKey = marker.nearestKey(time);
if(time < nKey.time){
	cIndex = nKey.index-1;
} else {
	cIndex= nKey.index;
}
cIndex


sample_02
これだけでも例えば長尺モノのカット番号など、タイムコード的に使うことができるかと思います。

タイムリマップによって再生ヘッドを呼び出す

直前キーインデックスの取得さえできてしまえばあとは算数です。

動きのパターンを等間隔のタイミングで並べたコンポを作り、スライダー(”control”)をつけた上でそのコンポのタイムリマップに対し下記のエクスプレッションを適用します。

motionDuration = 5; // 一つのモーションの尺
nKey = effect("control")("スライダー").nearestKey(time);
if(time < nKey.time){
	cIndex = nKey.index-1;
} else {
	cIndex= nKey.index;
}
if(cIndex > 0){
	cKey = effect("control")("スライダー").key(cIndex);
	time-cKey.time+cKey*motionDuration
} else {0}


sample_main
こうすることで、スライダーの数によってコンポ内の「n番目の動き」が擬似的に呼びだされます。なお動作中に次のキーがあると無視して次の動きを始めます。

動きのパターンは開始点が等間隔でさえあれば良いので、十分な間隔をとってしまえば個々の動きの長さの差は問題になりません。パターン追加が必要な際もコンポそのものを伸ばしてしまえばそのまま対応できます。

注意点としてはスライダーのキーに少数が入ると半端なタイミングが呼び出されます。好きな人は端数の処理とかすると良いと思います。
sample_cc

Licence: Free for all
AE Version: CC



タグ : , [タグを追加する]


この記事の投稿者について:yama_ko
フリーランスでMVを中心に映像制作を行なってます。音楽と調和した映像が好きです。 この投稿者のTwitter @yama_ko

フィードバック

1 Star2 Stars3 Stars4 Stars5 Stars
(評価回数:7 , 平均:4.29)
Loading...Loading...

コメントをどうぞ!




特集