エクスプレッション

レイヤーの点滅を掌握するエクスプレッション

レイヤーを点滅させるエクスプレッション…だけでは味気ないので、少し遊んでみましょう。

では、仕掛けの全容を書き出してみます。

  • とりあえずレイヤーを点滅させる
  • 任意のタイミングでOFFにしたい
  • 点滅の点灯時間と消灯時間を指定したい

これでいいでしょう。

言葉を式に変換していく

段階を踏んで形にしていきます。

点滅するエクスプレッション

とりあえず点滅するだけならこうですね。不透明度のエクスプレッションです。

JavaScript
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する仕組みもできそうです。

JavaScript
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つ追加します。「点灯」「消灯」とリネーム。

全身全霊を込めた「すべて」をエクスプレッションエディターにぶち込みます。

レイヤーの不透明度に記述するエクスプレッション

JavaScript
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も、ツールは使う側にいたいものですね。プログラムが指示を待つように作られているのなら、発火させるのはあなたなのですから。

辺を個別に伸縮する座布団可のシェイプ作成スクリプト「zabTheFlexShaper.jsx」前のページ

速度に応じてシェイプの色を変える次のページ

ピックアップ記事

  1. amazonのスポンサー商品(広告)を非表示にするブックマークレット「amazO…

  2. なぜ?After Effectsのレイヤーをエクスプレッションで効率化

  3. なぜ?After Effectsの操作を「スクリプト」で効率化

  4. フリーランスの開業届提出は開業freeeでとにかく簡単に

  5. YouTubeで一時停止中のコントローラーを非表示にするブックマークレット

関連記事

  1. エクスプレッション

    なぜ?After Effectsのレイヤーをエクスプレッションで効率化

    「なにかの動きに連動する」アニメーションを作るには、キーフレームで頑張…

  2. エクスプレッション

    エクスプレッションでレイヤーを円状に並べる

    レイヤーを丸く、放射状に、くるっと並べるときに、エクスプレッションで頑…

  3. エクスプレッション

    エクスプレッションで簡単ループ

    動画はプロジェクトウィンドウ&gt;右クリック&gt;フッテージを変…

  4. エクスプレッション

    エクスプレッションで一括制御+疑似親子+ミラーリング

    エクスプレッションを使えば、他のレイヤーのプロパティを参照することが…

  5. エクスプレッション

    エクスプレッションでグリッド状に均等配置する

    複数のレイヤーをグリッド状に整列させるエクスプレッションを仕込むスクリ…

  6. エクスプレッション

    エクスプレッションでシェイプを柔軟にサイズ調整する

    シェイプの一辺だけサイズ調整できる仕組みについてアイディアを模索。…

コメント

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

  1. この記事へのトラックバックはありません。

CAPTCHA


PAGE TOP