そこで、“タイムリマップ”と“エクスプレッション”を使ったコンポジションの繰り返し方法の紹介です。以下は手順です。
- コンポジション"コンポ1"を用意する
コンポジションを入れ子にする。
新規コンポジション"コンポ2"を目的の秒数で作り、コンポ1を入れて下さい。
コンポジションにタイムリマップをかける。
タイムラインウィンドウのコンポ1を選択した状態で、【メニュー>レイヤー>時間>タイムリマップ使用可能】を選びます。タイムリマップが使用できるようになります。
エクスプレッションを適応する。
コンポ2のタイムラインウィンドウのコンポ1のタイムリマップを選択した状態で【メニュー>アニメーション>エクスプレッションの追加】を選びます。
エクスプレッションを書く。
タイムリマップのエクスプレッションに以下の記述をします。
//現在時間(秒)からレイヤの開始時間(秒)を引いたものをフレームに変換
tf=timeToFrames(time - thisLayer.inPoint);
//コンポ1の尺(秒)をコンポ1の尺(フレーム)に変換
cf=timeToFrames(source.duration);
//"現在時間(フレーム)÷コンポ1の尺(フレーム)"の余り(フレーム)を計算
f=tf%cf;
//余り(フレーム)を余り(秒)に変換
framesToTime(f);
以上です。tf=timeToFrames(time - thisLayer.inPoint);
//コンポ1の尺(秒)をコンポ1の尺(フレーム)に変換
cf=timeToFrames(source.duration);
//"現在時間(フレーム)÷コンポ1の尺(フレーム)"の余り(フレーム)を計算
f=tf%cf;
//余り(フレーム)を余り(秒)に変換
framesToTime(f);
■検算
"time"は現在の時間(秒)。"thisLayer.inPoint"はレイヤの開始時間(秒)。
"source.duration"はコンポ1の尺(秒)です。timeToFrames()とframesToTime()は秒数とフレーム数を変換する関数です。"%"は割り算の余りを表し"A%B"は"A÷Bの余り"の事です。例えばコンポ1の尺が1秒(30フレーム)ならば、
0 フレーム目: 0÷30=0… 0
1 フレーム目: 1÷30=0… 1
2 フレーム目: 2÷30=0… 2
3 フレーム目: 3÷30=0… 3
:
29フレーム目:29÷30=0…29
30フレーム目:30÷30=1… 0
31フレーム目:31÷30=1… 1
:
1 フレーム目: 1÷30=0… 1
2 フレーム目: 2÷30=0… 2
3 フレーム目: 3÷30=0… 3
:
29フレーム目:29÷30=0…29
30フレーム目:30÷30=1… 0
31フレーム目:31÷30=1… 1
:
と0から29フレームを繰り返します。これを再度秒数に変換するわけです。1から30フレームの繰り返しではないのですが、AEでは尺を1秒(30フレーム)と指定すると0から29フレームまでのコンポが作成されるので目的のフレームを呼び出せているのです。応用するとコンポの指定秒数間を繰り返すなどもできます。
……調べてる間に見つけたのですが、コチラのサイトによると、
loopOut(type = "cycle", numKeyframes = 0)
と入力すれば簡単にループしてくれそうです。参考
・Adobe公式エクスプレッションリファレンス Time Conversion のメソッド
・アニメの道具箱 ループ
ラベル:AfterEffects
|
|
…動画・絵・漫画・脚本などの作品紹介 |
|
|
…広告・実験・講習用映像のyoutubeチャンネル |
|
|
…作画配信のyoutubeチャンネル |
|
|
…絵、デザイン資料、漫画、実験画像 |
karsauno10のTwitter
|
…考え、宣伝 |
karsauno10のTwitter
