このセクションに記載されている例の多くは、Dan Ebberts によって提供されたエクスプレッションに基づいています。

エクスプレッションの例に関するオンラインリソース

Dan Ebberts が、MotionScript の Web サイトで、エクスプレッションの例とエクスプレッションの使用方法のチュートリアルを公開しています。例えば、Dan は、衝突検出に関するページを公開しています。

Colin Braley が、彼自身の Web サイトで、エクスプレッションを使用して、1 つのレイヤーが他のレイヤーを自然に反発するようにする方法を示すチュートリアルとサンプルプロジェクトを公開しています。

AE Enhancers フォーラムには、エクスプレッションの他に、スクリプトやアニメーションプリセットの例や役に立つ情報が多数公開されています。AE Enhancers フォーラムのこの投稿では、Paul Tuersley が、エクスプレッションを使用して大群内の複数のレイヤーをアニメートする方法を示すチュートリアルとサンプルプロジェクトを公開しています。

Rick Gerard が、彼自身の Web サイトで、側面が床の平面と接するように四角形のオブジェクトを床に沿って転がす方法を示す例を公開しています。

Carl Larsen が、Creative COW の Web サイトで、エクスプレッションと親子関係を使用して、前後輪の回転と車両の動きを一致させる方法に関するビデオチュートリアルを公開しています。

Chris Zwar が、彼自身の Web サイトで、静止画やビデオを自動的にグリッドに配置する(ビデオウォール状)サンプルプロジェクトを公開しています。エクスプレッションのシステムに関連付けられているスライダーを使用して、簡単に位置と間隔を調整できます。プロジェクトには、静止画用、ビデオ用、およびユーザー定義の間隔でビデオをサンプリングしてグリッドに整列させる自動ストーリーボードの作成用の 3 つのコンポジションがあります。

JJ Gifford の Web サイトでは、エクスプレッションの使用方法を示すサンプルプロジェクトをいくつか公開しています。

Maltaannon(Jerzy Drozda, Jr.)が、彼自身の Web サイトで、エクスプレッションを使用して、「オーディオをキーフレームに変換」コマンドの結果を使ってボリュームメーターを作成する方法を示すビデオチュートリアルを公開しています。

Harry Frank が、graymachine の Web サイトで、エクスプレッションを使用して、外部テキストファイルからデータを読み取る方法を示すチュートリアルを公開しています。

エクスプレッションの例:レイヤーを円周に沿って回転させる

他のレイヤーのプロパティを使用せずにエクスプレッションを作成することもできます。例えば、完全な円に沿ってレイヤーを回転させることができます。

  1. レイヤーを選択してから P キーを押して、タイムラインパネルに「位置」プロパティを表示し、次に Alt キー(Windows)または Option キー(Mac OS)を押しながらプロパティ名の左側のストップウォッチをクリックします。
  2. エクスプレッションフィールドに次のように入力します。
      [(thisComp.width/2), (thisComp.height/2)] + [Math.sin(time)*50, -Math.cos(time)*50]

エクスプレッションの例:時計の針を回転させる

ピックウイップを使って時計の 2 つの針の各レイヤーの回転値をリンクし、時針が 1 時間ごとに動き、分針が時計盤を 1 周するようなアニメーションを作成できます。このようなアニメーションを作成するために両方の針にキーフレームを設定する必要があるとしたら非常に時間がかかりますが、ピックウイップを使用すればほんの数分で済みます。

  1. 時針と分針の 2 つの細長い平面レイヤーを読み込むか、作成します(平面レイヤーと平面フッテージアイテムを参照)。
  2. レイヤーの端にアンカーポイントを設定します(レイヤーのアンカーポイントを参照)。
  3. アンカーポイントがコンポジションの中心にくるように、レイヤーを動かします(空間上でレイヤーを移動するを参照)。
  4. 時針の回転キーフレームを設定します(キーフレームの設定と追加を参照)。
  5. 分針の回転プロパティを選択して、アニメーション/エクスプレッションを追加を選択します。
  6. ピックウイップを時針の「回転」プロパティにドラッグします。次のエクスプレッションが表示されます。
      thisComp.layer("hour hand").rotation
  7. 分針を時針の 12 倍速く回転させるには、エクスプレッションの末尾に次のように「*12」を追加します。
      thisComp.layer("hour hand").rotation*12

エクスプレッションの例:レイヤーを 2 つのレイヤーの間に配置する

以下のエクスプレッションの例では、1 つのレイヤーを他の 2 つのレイヤーから同じ距離に配置し、同じ距離が保たれるようにします。

  1. 3 つのレイヤーを使って作業を開始します(レイヤーの作成を参照)。

  2. タイムラインパネルで、最初の 2 つのレイヤーの位置をアニメートします(モーションパスを参照)。

  3. 3 番目のレイヤーを選択してから P キーを押して「位置」プロパティを表示し、次に Alt キー(Windows)または Option キー(Mac OS)を押しながらプロパティ名の左側のストップウォッチ ボタンをクリックします。
  4. エクスプレッションフィールドに次のように入力します。
      (thisComp.layer(1).position + thisComp.layer(2).position)/2

エクスプレッションの例:イメージの軌跡を作成する

以下の例のエクスプレッションでは、レイヤーを、タイムラインパネルで 1 つ高い位置にあるレイヤーと同じ位置に配置しますが、指定した時間だけ遅らせて配置します(この場合は 0.5 秒)。その他の幾何学的プロパティにも同様のエクスプレッションを使用できます。

  1. コンポジションサイズの約 30%に縮小された 2 つの平面レイヤーを使って作業を開始します(平面レイヤーと平面フッテージアイテムを参照)。
  2. 最初のレイヤーの位置をアニメートします(モーションパスを参照)。
  3. 2 番目のレイヤーを選択してから P キーを押して「位置」プロパティを表示し、次に Alt キー(Windows)または Option キー(Mac OS)を押しながらプロパティ名の左側のストップウォッチ ボタンをクリックします。
  4. エクスプレッションフィールドに次のように入力します。
      thisComp.layer(thisLayer, -1).position.valueAtTime(time - .5)
  5. 最後のレイヤーを選択し、Ctrl + D キー(Windows)または Command + D キー(Mac OS)を押して、5 回複製します。

すべてのレイヤーが同じパスを通り、各レイヤーが直前のレイヤーから 0.5 秒遅れて移動します

Dan Ebberts が MotionScript の Web サイトで、イメージの軌跡を作成する際の例とテクニックを公開しています。

エクスプレッションの例:2 つのレイヤー間のバルジを作成する

次のエクスプレッションでは、1 つのレイヤーにある「バルジ」エフェクトの Bulge Center 引数を別のレイヤーの位置と同期させることができます。例えば、レイヤー上で拡大鏡(つまり上のレイヤー)を動かすと、拡大鏡の下の内容がレンズを通して膨らむようなエフェクトを作成できます。このエクスプレッションでは fromWorld メソッドを使用しているため、拡大鏡とその下のレイヤーのどちらを動かしても、適切に動作します。下のレイヤーを回転させたりスケールを変更したりしても、エクスプレッションに変化はありません。

このエクスプレッションは波紋などの別のエフェクトにも使用できます。

  1. 2 つのレイヤーを使って作業を開始します。1 つのレイヤーを拡大鏡または中央に穴が開いた類似のオブジェクトにして、Magnifier という名前を付けます(レイヤーの作成を参照)。
  2. 拡大鏡レイヤーの位置をアニメートします(モーションパスを参照)。
  3. もう 1 つのレイヤーに「バルジ」エフェクトを適用します(エフェクトまたはアニメーションプリセットを適用するを参照)。
  4. タイムラインパネルで「バルジ」エフェクトの「バルジの中心」プロパティを選択して、アニメーション/エクスプレッションを追加を選択するか、Alt キー(Windows)または Option キー(Mac OS)を押しながらプロパティのストップウォッチ ボタンをクリックします。
  5. 初期設定のエクスプレッションテキストを選択して、次のように入力します。
      fromWorld(thisComp.layer("Magnifier").position)

エクスプレッションの例:カメラからの距離に応じて 3D レイヤーの不透明度をフェードする

  • 3D レイヤーの「不透明度」プロパティに次のエクスプレッションを適用します。
      startFade = 500; // Start fade 500 pixels from camera. 
      endFade = 1500;  // End fade 1500 pixels from camera. 
      try
      { // Check whether there's a camera
          C = thisComp.activeCamera.toWorld([0,0,0]); 
      }
      catch(err)
      { // No camera, so assume 50mm
          w = thisComp.width * thisComp.pixelAspect; 
          z = (w/2)/Math.tan(degreesToRadians(19.799)); 
          C = [0,0,-z]; 
      } 
      P = toWorld(anchorPoint); 
      d = length(C,P); 
      linear(d,startFade,endFade,100,0)

    フェードは、カメラから 500 ピクセル離れた地点から開始され、カメラから 1500 ピクセルの地点で終了します。linear メソッドは、距離の値を不透明度の値にマップするのに使用します。

エクスプレッションの例:カメラに面していない場合に 3D レイヤーを透明にする

  • 3D レイヤーの「不透明度」プロパティに次のエクスプレッションを適用します。
      if (toCompVec([0, 0, 1])[2] > 0 ) value else 0

Dan Ebberts が、このエクスプレッションについて MotionScript の Web サイトで説明しています。

エクスプレッションの例:カメラに面していない場合にレイヤーを水平方向に反転する

  • 3D レイヤーのスケールプロパティに次のエクスプレッションを適用します。
      if (toCompVec([0, 0, 1])[2] > 0 ) value else [-value[0], value[1], value[2]]

エクスプレッションの例:各レイヤーマーカーの位置でスケールをアニメートする

  • 次のエクスプレッションを「スケール」プロパティに適用して、各マーカーの位置でレイヤーが揺れるようにします。
      n = 0; 
      t = 0; 
      if (marker.numKeys > 0){ 
          n = marker.nearestKey(time).index; 
          if (marker.key(n).time > time) n--; 
      } 
      if (n > 0) t = time - marker.key(n).time; 
        
      amp = 15; 
      freq = 5; 
      decay = 3.0; 
        
      angle = freq * 2 * Math.PI * t; 
      scaleFact = (100 + amp * Math.sin(angle) / Math.exp(decay * t)) / 100; 
      [value[0] * scaleFact, value[1] / scaleFact];

エクスプレッションの例:特定の時間でウィグルを開始または停止する

ここで使用している wiggle 以外のエクスプレッションを使用して、特定の時間でそのエクスプレッションの効果を開始または停止することもできます。

次のエクスプレッションをプロパティに適用すると、2 秒経過した時点でウィグルを開始します。

timeToStart = 2;
if (time > timeToStart)
{
  wiggle(3,25);
}
else
{
  value;
}

次のエクスプレッションをプロパティに適用すると、4 秒経過した時点でウィグルを停止します。

timeToStop = 4;
if (time > timeToStop)
{
  value;
}
else
{
  wiggle(3,25);
}

次のエクスプレッションをプロパティに適用すると、2 秒経過した時点でウィグルを開始し、4 秒経過した時点で停止します。

timeToStart = 2;
timeToStop = 4;
if ((time > timeToStart) && (time < timeToStop))
{
  wiggle(3,25);
}
else
{
  value;
}

エクスプレッションの例:カメラのフォーカルプレーンを別のレイヤーに一致させる

  • 次のエクスプレッションをカメラレイヤーの「フォーカス距離」プロパティに適用し、このフォーカス距離が「target」という名前のレイヤーのアンカーポイントへの距離と一致するようにします。
      target = thisComp.layer("target"); 
      V1 = target.toWorld(target.anchorPoint) - toWorld([0,0,0]); 
      V2 = toWorldVec([0,0,1]); 
      dot(V1,V2);

Dan Ebberts が、彼自身の Motionscript の Web サイトで、このエクスプレッションの例について詳細に説明しています。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー