AfterEffectsでエクスプレッションを使うと、乱数を簡単に取得できます。また、更新頻度を変えたり、シード値で生成パターンを変えたり、色々なことができるので、様々な乱数の取得方法について詳しく解説していきたいと思います。
乱数とは?
規則性のないランダムな値のことです。
この値をエクスプレッション処理に使うことで、
- 規則性のない動作を作る
- レイヤーごとにオフセット値を変える
- 既存レイヤーのプロパティをランダムに取得する
など、様々なランダム処理を作れるようになります。
乱数の種類
エクスプレッションの乱数は、大きく分けて2種類あります。
random
randomは、指定範囲の値を返すエクスプレッションです。以下の動画をご覧ください。
gaussRandom
gaussRandomは、10%の確率で指定範囲外の値も返すエクスプレッションです。以下の動画を見ると違いが理解できると思います。
random と gaussRandom の違いは、範囲外の値を含むかどうかだけの違いです。それ以外の基本的な動作は変わらないので、これ以降はrandomを例に説明をすすめていきます。
乱数の値を変更
random は、0~1の値を取得します。この値を変える方法について説明していきます。
0~1の値を取得
引数なしでrondomを実行すると、0~1を取得できます。
random();
0~指定値を取得
0~100を取得する場合は、以下のように記述します。一つ引数を指定すると最大値を設定できます。
random(100);
指定範囲の値を取得
100~200の値を取得する場合は、以下のように記述します。2つ引数を指定すると、最小値と最大値を指定できます。
random(100, 200);
乱数の更新頻度
乱数は、固定値として使用したり、フレームごとに変化させたりなど、自由に更新頻度を変えることができます。それぞれのパターンで説明をしていきたいと思います。
フレームごとに更新
乱数は通常、時間の経過と共に変化し続けます。その為、randomエクスプレッションをそのまま使用すれば、フレームごとの更新となります。
random();
指定時間で更新
乱数の指定時間で更新するには、エクスプレッションの更新頻度を変える、posterizeTimeを使用します。
2秒に1回更新する場合は、以下のように記述します。
posterizeTime(0.5);
random();
時間経過で更新しない
シード値(乱数生成に影響する値)をコントロールするのに、seedRandomというエクスプレッションを使用します。
seedRandomの第二引数が、現在時刻をシード値に使用しないかどうかを示すので、これをtrue(現在時刻を使わない)にします。
seedRandom(0, true);
random();
これで、時間経過で変動しない固定値として使用できます。
乱数の生成パターンを変える
乱数が意図したパターンでない場合、シード値を変えることで生成パターンを変えることができます。
レイヤーの位置をずらすなどでも、生成パターンを変えることが出来ますが、seedRandomを使うのが確実です。
seedRandom(100, false);
random();
上記例では、第一引数が100になっていますが、この値を変えることで、生成パターンを変えることができます。
まとめ
とても便利な乱数ですが、random()を実行すると、毎フレーム値が変わってしまい、使いどころがわからかい方が多いのではないかと思い、今回記事化してみました。
具体的な使用例は、以下の記事で説明していますので合わせてご覧ください。
AfterEffectsのエクスプレッションで、ランダムに動作するような処理を手作業で作成すると手間がかかります。このランダム処理を自動化して制作の手間を省く方法をご紹介します。 今回は、他のレイヤーの位置を自動的に取得して、その位[…]
より詳しい情報が知りたい場合は、Adobe公式の「After Effects User Guide」に書いてありますのでご覧ください。