【AEエクスプレッション】randomとlinearを使って不透明度を制御する方法!

公開 : 2023/05/12

こんにちは!今回は、After Effects(以下AE)で不透明度を制御する方法を紹介します。
AEのエクスプレッション機能を使い、randomとlinear、ifといった命令を組み合わせることで、簡単に不透明度を変化させることができます。
この記事では、初心者の方にもわかりやすく解説するため、基礎から丁寧に説明します。

例題として不透明度の値をランダムにしている状態で、クリップの終点の1秒前に徐々に不透明度が0になっていくようなエクスプレッション(以下コード)を作ります。

と言いましたが、すぐに知りたい方は、以下のコードを不透明度に入れればOKです。

startOpacity = random(0, 80);//randomを startOpacityに置き換える
endOpacity = 0;//0をendOpacityに置き換える
// 開始からoutPointの1秒前までは不透明度をランダムに変化させる
if (time < outPoint - 1) {
startOpacity; // ランダムを使用する
} else {
linear(time, outPoint – 1, outPoint, startOpacity, endOpacity); // outPointの1秒前から徐々に0%になるように不透明度を変化させる
}

ここからは解説記事なので、興味ある方は参考にしていただけたらと思います。

ランダムと0を変数に置き換える

startOpacity = random(0, 80);//randomを startOpacityに置き換える
endOpacity = 0;//0をendOpacityに置き換える

最初の2行は変数といって、コードを別の文字列に置き換えています。
こうすることで、randomなど何度も使うコードを一括で管理したり、途中に書かれているコードを触ることなく修正できたりします。

変数
エクスプレッション内で値を一時的に保持するための名前をつけることができるので、その名前を「変数」と呼びます。エクスプレッションで変数を使うことで、値を計算する際に参照する値を簡単に変更することができます。

ifで条件分岐させる

if (time < outPoint - 1) {
startOpacity; // ランダムを使用する
} else {
linear(time, outPoint – 1, outPoint, startOpacity, endOpacity); // outPointの1秒前から徐々に0%になるように不透明度を変化させる
}

ここではifで条件分岐させています。分岐の条件は「if(〜〜〜〜)」に書きます。
if( time < outPoint - 1 )の意味は
「もし現在の時間(time)が、レイヤーのアウトポイント(outPoint)から1秒引いた時間よりも小さい(<)場合」です。
クリップの終了点が4秒だったら、3秒のところで分岐される、ということですね。

{
startOpacity; // ランダムを使用する
}

ここでif内の条件が正しい場合、実行するコードを書きます。
つまり現在の時間(time)が小さい場合です。
ここでは変数のstarOpacityを実行させていますね。不透明度がランダムに動きます。

else {
linear(time, outPoint – 1, outPoint, startOpacity, endOpacity); // outPointの1秒前から徐々に0%になるように不透明度を変化させる
}

elseから先は、ifの条件が正しくない場合のコードを書きます。
つまり、アウトポイントから1秒引いた時間から先のコードを書きます。

linear()のコードを使っていますね。
linear()はAfter Effectsのエクスプレッションでよく使われる関数の一つで、2つの範囲(value1からvalue2)とそれに対応する目的の範囲(outValue1からoutValue2)を指定し、指定した値を線形補間します。
具体的には、以下のように使われます。

linear(value, value1, value2, outValue1, outValue2)

ここで、valueは入力値、value1とvalue2は入力値の範囲、outValue1とoutValue2は出力値の範囲です。
入力値がvalue1のとき、出力値はoutValue1になり、入力値がvalue2のとき、出力値はoutValue2になります。
また、valueがvalue1からvalue2の間にある場合、出力値はoutValue1からoutValue2の間に線形補間されます。

たとえば、以下の式は、0から10までの範囲の値を、100から200までの範囲に線形補間するものです。

linear(value, 0, 10, 100, 200)

この式に、入力値として5を与えると、出力値は150になります。入力値が0のときは、出力値は100、入力値が10のときは、出力値は200になります。
linear()を使うことで、値を線形補間することができるため、アニメーションを自然に見せたり、エフェクトの強度を徐々に変化させたりすることができます。