レイヤーを点滅させるエクスプレッション…だけでは味気ないので、少し遊んでみましょう。
では、仕掛けの全容を書き出してみます。
- とりあえずレイヤーを点滅させる
- 任意のタイミングでOFFにしたい
- 点滅の点灯時間と消灯時間を指定したい
これでいいでしょう。
言葉を式に変換していく
段階を踏んで形にしていきます。
点滅するエクスプレッション
とりあえず点滅するだけならこうですね。不透明度のエクスプレッションです。
var fps=1/thisComp.frameDuration;
var frame=Math.floor(time*fps);
if(frame%2==0){
value;
}else{
0;
}1/thisComp.frameDurationでコンポジションの1フレームを調べ、再生バーがあるtimeと掛けて何フレーム進んでいるかを取得します。
その進んでいる現在時間であるframeをif文で2で割ったあまりが0なら不透明度に入力されているvalue、0でなければ不透明度0にします。
これで1フレームごとに不透明度がvalue, 0, value, 0…と繰り返すことで点滅となります。
任意のタイミングで点滅しなくする
ここから点滅をOFFにする、タイミングを指定するなにかが必要です。
何が良いでしょう。そうです。マーカーが便利でしょう。
マーカーを通り過ぎたら点灯状態に移行しましょう。そしてマーカーを通り過ぎたかどうかがわかるのであれば、マーカーの度にON/OFFする仕組みもできそうです。
var fps=1/thisComp.frameDuration;
if(marker.numKeys==0){
value;
}else{
var keyNum=0;
for(var i=1;i<=marker.numKeys;i++){
if(marker.key(i).time<=time){
keyNum=i;
}
}
var on=(keyNum%2==0);
if(on){
var frame=Math.floor(time*fps);
if(frame%2==0){
value;
}else{
0;
}
}else{
value;
}
}まず2~4行目は核心ではありません。レイヤーにマーカーがなければ不透明度はvalueのままです。
5行目からいきましょう。keyNumはマーカーを何個通り過ぎたか格納する箱です。
6~10行目、for文でマーカーの数繰り返しマーカーの時間を再生バーが通り過ぎたか確認し、通り過ぎたマーカーの数をkeyNumに保存します。
11行目でとあるマーカーが何個目かを確認し、偶数ならtrue、奇数ならfalseをonに入れて、次の処理で点滅のON/OFF判定に使います。
ON状態なら、12行目からの処理で先程の点滅スクリプトを走らせればOKですね。
完成
盛り上がって参りました!
ではいよいよ、点滅状態での点灯時間と消灯時間を掌握するお時間です。
レイヤーにはスライダー制御を2つ追加します。「点灯」「消灯」とリネーム。
全身全霊を込めた「すべて」をエクスプレッションエディターにぶち込みます。
レイヤーの不透明度に記述するエクスプレッション
var fps=1/thisComp.frameDuration;
var keyNum=0;
var onFrames =effect("点灯")(1);
var offFrames=effect("消灯")(1);
for(var i=1;i<=marker.numKeys;i++){
if(marker.key(i).time<=time){
keyNum++;
}
}
var blinkOn=(keyNum%2==0);
if(blinkOn){
if (onFrames<1){
onFrames=1;
}
if (offFrames<1){
offFrames=1;
}
var frame=Math.floor(time*fps);
var cycle=onFrames+offFrames;
if((frame%cycle)<onFrames){
value
}else{
0;
}
}else{
value;
}新しい部分は少しだけです。3,4行目でスライダー制御の値を取り込みます。
14~19行目、スライダーが0だと点滅しないので、点滅ON中は最低でも1フレーム刻みで点滅するように保証しておきます。
22行目で点灯フレーム、消灯フレームを1サイクルとしてcycleにぶち込み、23行目の判定で「進行フレームをサイクルで割った余りが点灯時間未満なら」valueで点灯、そうでなければ不透明度0で消灯にします。点灯フレームと消灯フレームを合わせたサイクル時間内で点灯フレームを過ぎたのであれば、消灯フレームと判断しました。
こうしてスクリプトを1行ずつ読んでみてください。そして真似して触ってみてください。コンピューターが言われたことしかできないことがわかると思います。ただし、言われたことは正確に素早く行うという激烈なメリットが、我々のクリエイティブを妨げないのです。
多くの場合、クリエイティブを妨げているのは人間側のアウトプット力です。あなたの指示というアウトプットが足りているなら、インプットされたコンピューターは脅威のスピードで処理して成果物をアウトプットしてきます。望んだ成果物が手に入っていない場合は、コンピューターの能力に追いついていないのでオーバースペックです。悪く言えば使われているのでしょう。人工知能も、After Effectsも、ツールは使う側にいたいものですね。プログラムが指示を待つように作られているのなら、発火させるのはあなたなのですから。






この記事へのコメントはありません。