dA-tools.com

HOME > AfterFx > expression > 実践 > 方形波

方形波・矩形波

ZeroOne.gif
デジタルの基本、0と1、2つの値だけを繰り返します。


  • 上のようなグラフにするには、ある数を2で割ると余りが0か1になることを使います。
  • 1コマごとに0と1を切り替えるにはtimeをコマに変換する必要があります。
  • AfterFxはtimeの単位が秒ですから1コマ=time*24(fps)
  • JavaScriptで余りは[ % ]で表します。
  • これをまとめると次のようになります。

time*24%2

動きに戻しをつけて、 引っかかったように見せる動きです。

Modoshi.jpg

3秒で180度回転するキーフレームをつけて、以下の式をプロパティ「回転」に記述しています。
time*24%2 が1ならば現在の「回転」の値からスライダーの値を引き、0ならば「回転」の値のままになります。

back=effect("スライダ制御")("スライダ");
rotation-(time*24%2)*back

※スライダーで戻し幅を調整できるようにしています。

周期と振幅をコントロール

  • 上の例では1コマ単位で0と1が繰り返されます。
  • このタイミングを制御してみます。
  • まず「ある数X」を2で割って整数化、それを2倍してXから引きます。
  • Xはタイムラインで変化する値=フレームです。
    • timeが返す値をフレームに変換するには fr = time x 24
    • 整数化はJavaScriptのMath.floor( )

fr = time x 24
fr - Math.floor(fr / 2) * 2

  • Math.floor(fr / 2) *2のfrをKeepする単位に置き換えるとその単位だけ値が維持されるようになります。
  • 維持時間をh(= hold)、Keepする単位を unit とすると 

h=3;
unit=Math.floor(fr/h) ;
zereOne=unit-Math.floor(unit/2)*2 ;

  • 振幅を制御するには z に増幅率を a (=amplitude)を掛けます。

zereOne * a ;

ランダムに01

  • 不規則に0と1を切り替える。

Math.floor(random(2))

  • random(2)で0から2未満の乱数を発生させて、Math.floor()で小数点以下を切り捨てます。

ビット演算子 & を使う

  • 論理演算をすると秒単位で0と1を切り替えることが出来ます。
  • あまり応用の利く方法ではありませんが、1,2,4,8..秒サイクルならば有効です。

time & 1

  • これは1秒1サイクルです。