見出し画像

テキストアニメーターのみで再現するランダム文字モーション


GG分解でいちいちキーフレーム打って動かすの面倒くさい!
エクスプレッションでなんとかならないの!?

本記事はそんな人に向けた記事になっています。
先行記事が見当たらなかったため作成いたしました。
AE中・上級者向けです。
 内容をしっかり理解するにはある程度の数学JavaScriptの知識も必要です。(高校数学で大丈夫です)
 コード無理!数学無理!諦めた!という方は有料になりますがプリセットを配布予定なのでそちらをご購入ください。

最初に

初めまして、映像クリエイターのロロロと申します。
本noteでは、テキストアニメーターのエクスプレッションセレクターを用いたランダム方向から文字が登場するアニメーションの作り方について解説致します。
 テキストアニメーターの基礎的な解説は、個人的にはプッティ氏(@PuttiMV)のものが一番分かりやすかったです。


エクスプレッションセレクターとは?

まず初めに、エクスプレッションセレクターについて個人的な見解の範疇で解説させて頂きます。
まずアニメーターとは、アニメーターによって追加された値と元々レイヤー自体に設定している値の差を利用するものです。
エクスプレッションセレクターは、追加したアニメーションの影響度をエクスプレッションで制御するものと認識しています。
また、エクスプレッションセレクターの値selectValueは配列オブジェクトなのでxyz軸それぞれで分割、処理が可能です。
これによりプラグインを使わずとも、ある程度の制限はあれどプログラム次第で多種多様な文字モーションを作り出すことができます。


ランダム4方向から登場するモーション

工程1 アニメーターの追加

では、具体的な作り方を説明致します。
テキストを適当に配置し、「追加」→「プロパティ」→「位置」で位置アニメーション100,100に設定します。
範囲セレクター」→「高度」→シェイプ」で「上に傾斜」にしておきましょう。
オフセットを-100→100にリニアで移動させて再生すると斜めから順番に元の位置へと移動するアニメーションになっていると思います。
今回は、位置の設定値100,100をエクスプレッションセレクターの位置オフセットとして使用します。


工程2 エクスプレッションの書き込み


追加」→「セレクター」→「エクスプレッション」でエクスプレッションセレクターを追加し、量の値にエクスプレッションを追加していきます。
書き込むプログラムは以下のものになります。

seedRandom((textIndex*index),true);
var p = Math.round(random(100));
var freq=Math.pow(-1,p);
if(p <= 49){
    selectorValue=[0,freq*selectorValue[2]];
}
else{
    selectorValue=[freq*selectorValue[1],0];
}

プログラムの解説

プログラムについて、行ごとに解説していこうと思います。

Block1

1ブロック目は

seedRandom((textIndex*index),true);

になります。

  1. 選択された文字自体に割り当てられた変数textindex

  2. エクスプレッションが書き込まれたレイヤー全体に割り当てられた変数index

以上の2値の乗算値をランダムシードとし固定化する事で、文字ごとのランダム性、レイヤーごとのランダム性の両方を担保しています。
※気分の問題ではあるので、textindexのみでも問題ありません。

Block2

2ブロック目は

var p = Math.round(random(100));

です。

新規に変数pを宣言し、Block1にて設定されたシード値から生成された0〜100までのランダムな値を四捨五入し格納します。

Block3

3ブロック目は

var freq = Math.pow(-1,p);

です。

新規に変数freqを宣言し、-1^pを格納します。

位置オフセットの値に-1を乗ずるか1を乗ずるかで順・逆方向のランダマイズをしている関係上、-1か1をランダムに出力する必要があります。

数列の話になりますが-1^n、つまりは初項・公比共に-1であるような数列は

-1^n = 1,-1,1,-1,... (n = 0,1,2,3…)

と、1と-1の2値を繰り返すものです。
ここで、nにランダムな整数であるpを代入することで-1か1をランダムに出力しています。

Block4

4ブロック目は、

if(p <= 49){
selectorValue=[0,freq*selectorValue[2]];
}

です。
pの値が49以下である時のみ当ブロックが機能します。

selectorValueに格納された配列に変更を加えます。
位置のx軸の影響度を0に、y軸にfreqを乗ずることで動きを順方向か逆方向へランダムに変換します。
配列オブジェクトの概念が絡みますので、難しい方は以下記事を参照してみて下さい。

Block 5


5ブロック目は

else{
selectorValue=[freq*selectorValue[1],0];
}

です。
Block4が機能しなかった場合、つまりはpが50以上の場合に機能します。
Block4のx軸とy軸を入れ替えた処理を行います。
つまり、x軸にfreqを乗じてy軸は0にする処理になります。

工程3 スケールや不透明度で味付け

新規アニメーターでスケールや不透明度、回転などを追加し、お好みでニュアンスを変えます
不透明度とスケールを共に0にすると、癖のないランダム登場になったりします。
更に別のエクスプレッションを使っても面白いかもしれませんね。
スライダーの高度オプションにあるイーズ(高く)やイーズ(低く)の値などを触ってみてもモーションのニュアンスが広がるかと思います。

完成!

本記事の内容を応用することで、こんな感じのモーションを作ったりもできます。

このモーションのプリセットは、何らかの形で解説付きで有料配布する予定なので続報をお待ち下さい

最後に

以上がランダムな4方向から文字が登場するアニメーションの作り方でした。いかがでしょうか。
私自身もAEを触り始めてまだ2ヶ月ですし、javaも少し理解できるくらいなのでまだまだ改善の余地があるかもしれません。
XのリプライでもDMでもいいので、気付いたことや気になることがあれば話しかけて下さるととても嬉しいです。
noteに関しても、今後エクスプレッション関係で気付きなどがあれば随時更新していく予定なので応援していただければ幸いです。

この記事が気に入ったらサポートをしてみませんか?