要素がバウンドするアニメーションを作成する

らびるん
質問: バウンド効果を作成したい
要素がバウンドするアニメを作成したいです。手っ取り早く簡単に作りたいです。手順を教えてください。

方針

今回は、エクスプレッションを利用してバウンドするアニメを作成する手順を紹介します。

手順

コンポジションを作成し、要素を配置します。今回はキャラクターの画像を配置しました。
要素がバウンドするアニメーションを作成する:画像1

タイムラインのパネルで、要素の[トランスフォーム]の[位置]の項目でキーフレームを作成し、 上から下に移動するアニメを作成します。
要素がバウンドするアニメーションを作成する:画像2

[位置]の項目で右クリックします。ポップアップメニューが表示されますので、[エクスプレッションを編集]の項目をクリックします。
要素がバウンドするアニメーションを作成する:画像3

キーフレームが表示されているタイムラインの下部にエクスプレッションの入力ボックスが表示されます。
要素がバウンドするアニメーションを作成する:画像4

エクスプレッションのコードを入力します。
要素がバウンドするアニメーションを作成する:画像5

入力するコードは以下です。

n = 0; 
if (numKeys > 0){
  n = nearestKey(time).index;
  if (key(n).time > time){n--;}
}
if (n == 0){t = 0;}
else{t = time - key(n).time;}
if (n > 0){
  v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
  amp = .05;
  freq = 6.0;
  decay = 4.0;
  value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{
  value;
}

コードの解説

プロパティに設定されたキーフレームの総数を取得し、キーフレームが無ければバウンス処理はしません。 現在の再生時間 time に最も近いキーフレームを取得し、そのインデックスをnに代入します。 未来のキーであった場合は、1を引き現在時刻より前にある最後のキーをnに設定します。

n = 0; 
if (numKeys > 0){
  n = nearestKey(time).index;
  if (key(n).time > time){n--;}
}


キーが1つもない場合は、経過時間 tを0に設定します。 キーがある場合は、最後のキーフレーム時刻からの「経過秒数」を計算して、tに代入します。

if (n == 0){t = 0;}
else{t = time - key(n).time;}


現在時刻より前にキーがある場合にバウンス処理をします。
velocityAtTime 関数はその時刻の速度ベクトルを求めます。

value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t); により、本来の位置に速度ベクトルと振幅を掛け合わせた値を加算してバウンスの効果を適用した座標を計算します。

if (n > 0){
  v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
  amp = .05;
  freq = 6.0;
  decay = 4.0;
  value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{
  value;
}


変数の値は以下の意味です。

  • amp - 振幅の倍率
  • freq - 振動数
  • decay - 減衰率


補足1

オブジェクトの動画が斜めの場合は、進行方向に対してバウンスします。
要素がバウンドするアニメーションを作成する:画像6

補足2:移動中に振動しないのはなぜ?

最初のキーフレームから2番目のキーフレームの場合は n=0となるので振動しないです。
2番目のキーフレームから3番目のキーフレームへアニメーションする場合は振動するのですが、減衰されるためアニメーション中の影響はほとんどなくなります。

実行結果

再生して実行結果を確認します。バウンドするアニメが再生できます。

動画

AuthorPortraitAlt
著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。 最近は生成AIの画像生成の沼に沈んでいる。
作成日: 2025-04-11
Copyright © 1995–2025 iPentec all rights reserverd.