dA-tools.com

HOME > AfterFx > expression > 実践 > のこぎり波

三角波・のこぎり波

徐々に値が増え、途中で逆に値が減るグラフです。

Saw.gif

time%1*100

  • 逆にするには同じ値を100から引きます。

100-time%1*100

  • これは1サイクル1秒で、高さ100のグラフです。
  • フレーム単位のアプローチにするには time*24 % s

上の2つをつなぐと三角波が出来ます。

peak=0.5; //三角頂点の秒数
cycle=1;
if(time%cycle<peak){
 time%cycle*(100/peak)}
else{
 (100-time%cycle*100/cycle)/((cycle-peak)/cycle)
}

sankaku01.jpg

ここまでは数学的な正統アプローチですが、dA-toolsとしては補間関数を使ったAfterFxらしい方法を紹介しようと思います。

補間関数は次のようなパラメータを持つ関数です。

linear ( 変数 , 入力最小値 , 入力最大値 , minに対する出力値 , maxに対する出力値 )

  • 例えばtimeが0から1秒まで変化したときに出力を0から100にするには

UP= linear(time, 0, 1, 0, 100)

  • これは右上がりのグラフです。続いて右下がりにするには

Down= linear(time, 1, 2, 100, 0)

  • 1秒目まではUP、それ以降をDownにするには条件式を使って

(time<1)?UP:Down

  • これで下のグラフを得ることが出来ます。

upDown.jpg

  • このままでは繰り返しにならないので time を time%cycle に置き換えます。さらにこれを元にして、サイクルと振幅、波の頂点も自由に調整できるようにしてみます。

sankakuAni.gif

//サイクルを指定するスライダー

cycle=effect("cycle")("スライダ");

//波の頂点を指定するスライダ

peak=cycle*effect("Peak")("スライダ");

baseTime=time%cycle;
min=0; //波の最小値
max=100; // 波の最大値
UP=linear(baseTime, 0, peak, min, max);
Down= linear(baseTime, peak, cycle, max, min);
(baseTime < peak)? UP : Down ;

  • 補間をeaseに変えるとsin,cosとほとんど変わらない下のような波形を作ることも出来ます。

triSin.gif

  • さらにpeakをもう1つ増やすと図のグラフを作ることが出来ます。
  • 最大値と最小値を保持することが出来るので前述の方形波も再現できます。

daike2.gif

cycle=effect("cycle")("スライダ");
peak1=cycle*effect("Peak")("スライダ");
peak2=cycle*effect("Peak 2")("スライダ");
baseTime=time%cycle;
cycle=cycle-effect("post")("スライダ");
min1=0;
max1=100;
max2=max1*effect("Peak2%")("スライダ");
inter=ease;//inter=linearも可
UP=inter(baseTime, 0, peak1, min1, max1);
Down= inter(baseTime, peak2, cycle, max2, min1);
Mid=inter(baseTime,peak1,peak2,UP,Down);
if(baseTime<=peak1){UP}
else if(baseTime>peak1 && baseTime<peak2){Mid}
else{Down}

※複数のポイントを設定することで様々な波形を簡単に作ることが出来ます。


○3つのオレンジ平面、それぞれがどんなグラフを使ったか分かりますか?