AfterEffects 6.0 : expression (2)

 今回は、もっと使える(?)expression(エクスプレッション)について説明します。各命令の書式に関してはマニュアルを参照するかオンラインヘルプを参照してください。


●フェードイン/フェードアウト
 フェードインは不透明度にtime * 100;とでも書いておけばできあがりですが、これ以外にイーズ命令(イーズイン、イーズアウト)を使って書く事もできます。以下のようになります。

ease(time,inPoint,inPoint+1,0,100);

 inPointはレイヤーの開始時間(秒)になります。inPoint+1は1秒後にという意味で+5とすると5秒かけてフェードインします。0,100の0が最初の値、100が最後の値になります。easeIn(), easeOut()の場合は以下のようになります。

easeIn(time,inPoint,inPoint+1,0,100);
easeOut(time,inPoint,inPoint+1,0,100);

 フェードインでなくフェードアウトの場合はinPointの代わりにoutPointを指定します。

ease(time,outPoint-1,outPoint,100,0);
easeIn(time,outPoint-1,outPoint,100,0);
easeOut(time,outPoint-1,outPoint,100,0);

 まあ、フェードイン/フェードアウトくらいは手作業でやっても負担はかかりません。しかし、フェードさせるレイヤーの長さが変更されたりした場合には大変です。さらに、そのようなレイヤーの枚数が多くなると修正するのにも一苦労です。そんな時には以下のような自動フェードイン/フェードアウトのexpressionが役に立ちます。

fTime = 2;
if (time >= outPoint-fTime) ease(time,outPoint-fTime,outPoint,100,0);
else ease(time,inPoint,inPoint+fTime,0,100);

 これはレイヤーの長さを自動的に判別し前後2秒でフェードイン/フェードアウトさせるものです。fTime = 2の秒数を変えると任意の時間でフェードイン/フェードアウトさせることができます。fTime=0.5なら0.5秒でフェードイン/フェードアウトです。


●レイヤーを移動させる
 レイヤーを永久に左から右へ移動させ、右端までいったら再度左から出るようにします。トンネルの中のライトの表現や車窓などから見える景色の移動処理に便利です。

x = (time * 200) % (thisComp.width+width) - width/2;
y = thisComp.height / 2;
[x,y];

 thisComp.widthはレイヤーがあるコンポジションの横幅を示します。thisComp.heightはコンポジションの縦幅です。
 左から右でなく、右から左へ移動させるには以下のようになります。コンポジションの横幅からX座標を減算するだけです。

x = (time * 200) % (thisComp.width+width) - width/2;
y = thisComp.height / 2;
[thisComp.width - x,y];


●地震(振動)を表現する
 expressionにはランダム関数がたくさんあるので、地震発生時の地面揺れの表現や、巨大メカや怪獣などが歩く場合の震動などは簡単に表現できそうです。が、実際にはランダムなので自分が意図した震動にはなりません。このような場合は震動させた場合の座標を配列に入れておき、時間に応じて配列内の値を取り出すようにします。このようにすると配列で指定した座標だけをいじれば良いので修正も簡単です。

x = 80;
y = [60,55,56,57,65,60,62,55,60,60,60,60,60,60,62,60,64,58,55,60,50,60,60,60,60];
n = Math.floor((time * 10)) % y.length;
[x, y[n]];

y = [〜]となっている部分が配列で、震動させるレイヤーの表示Y座標になってます。


 工夫次第でexpressionは非常に有益なものになります。特に汎用的なものを一度作ってしまえば、それをずっと使い回すことができます。expressionパレットでも用意されていれば、ドラッグドロップで簡単にできるんじゃないかと思いますが、とりあえずexpressionを使えば手抜きができる事があるはずです。


[サンプルをダウンロード]