random()・seedRandom()|シェイプを複製してランダムなドット背景を作る

random()・seedRandom()で作る、大きさと位置がばらつくドット背景の作例

丸を1つ作り、複製していくだけで、位置と大きさがばらつくドット背景。random() と seedRandom() を使うと、ドットを1つずつ手で動かさずに、背景のベースを作れます。

今回は再生しても配置が変わらない背景を制作します。基本のドット背景から、文字を載せるタイトル背景、カードを散らした背景へ展開。粒の数・大きさ・配置パターンを変える方法も紹介します。

この記事で使用したAEプロジェクトを無料ダウンロードできます。ダウンロードは記事の最後から。

目次

まずは完成形:複製でドットを増やす

同じシェイプを複製した1個・12個・24個の状態を順に表示。位置と大きさは、再生中ずっと同じです。 6秒・音声なし。再生ボタンで動きを確認できます。

この動画では複製後のレイヤーを用意し、不透明度のホールドキーで表示数を切り替えています。式が時間に合わせて新しいシェイプを生成するわけではありません。実際の制作では、式を入れたシェイプレイヤーをCommand/Ctrl+Dで増やします。

ドットの重なりや偏りもランダム配置の一部です。等間隔に並べる機能や、ほかのドットを避ける機能は含みません。ざっくり背景を作ってから、数や配置パターンを調整する使い方に向いています。

random()とseedRandom()の役割

書き方役割
random(30, 100)30〜100の範囲から数値を選ぶ
seedRandom(1, true)ランダム値のパターンを設定し、時刻で変わらないようにする
seedパターンを変えるための数値。今回の基本値は1
true現在時刻を乱数の種に含めない指定

random() だけでは、時間によって値が変わります。背景を固定したい今回は、先に seedRandom(seed, true) を書きます。trueは「ランダムをやめる」指定ではなく、「時間で変えない」指定です。

AEの乱数には、レイヤー固有の識別情報とプロパティも関係します。同じseedでも、複製したレイヤーや別プロパティがすべて同じ数値になるわけではありません。今回のコードはレイヤー番号のindexを使わず、複製したレイヤーごとの差を利用します。

コピー用コード1:位置をランダムにする

シェイプレイヤー全体の「トランスフォーム」→「位置」へ貼り付けます。シェイプ内のグループの「位置」ではありません。

var seed = 1;
seedRandom(seed, true);
var pad = 80;
[random(pad, thisComp.width - pad),
 random(pad, thisComp.height - pad)];

pad はドットの中心が入る範囲の余白です。1280×720なら、Xは80〜1200、Yは80〜640の範囲になります。端からドットの輪郭までを測る余白ではありません。ドットを大きくする場合は、半径も考えてpadを増やしてください。

コピー用コード2:大きさをばらつかせる

同じレイヤーの「スケール」へ貼り付けます。

var seed = 1;
seedRandom(seed + 1000, true);
var s = random(30, 100);
[s, s];

1つのランダム値sをXとYの両方に使うので、丸の縦横比が保たれます。random(30, 100) の単位は、ここではスケールの%です。元の直径が80pxなら、30〜100%で直径24〜80pxになります。

seed + 1000 は、スケール側のパターンを調整するためのオフセットです。位置とスケールは別のプロパティなので、同じseedを書いたとしても同じ数値になるという意味ではありません。

基本の作り方:1つに式を入れて、レイヤーを複製する

項目今回の条件
制作環境After Effects 26.5×89/macOS/JavaScriptエクスプレッションエンジン
コンポジション1280×720/30fps/6秒/8bpc
シェイプ楕円80×80px/塗りあり/線なし
トランスフォーム2D/親とリンクなし/位置の次元分割なし
アンカーレイヤーのアンカーポイントと楕円の中心を同じ位置に揃える
追加プラグイン不要
  1. 1280×720のコンポジションを作り、「レイヤー」→「新規」→「シェイプレイヤー」で空のシェイプを作ります。
  2. コンテンツの「追加」から「楕円」と「塗り」を追加。楕円のサイズを[80, 80]、楕円パスの位置を[0, 0]にします。
  3. レイヤー全体のアンカーポイントを[0, 0]に揃えます。グループを使う場合はグループの位置・アンカーも0、スケール100%、回転0度にします。
  4. レイヤー全体の「位置」のストップウォッチをOption/Alt+クリックし、位置用コードを貼り付けます。
  5. 同じレイヤーの「スケール」へ、大きさ用コードを貼り付けます。位置とスケールのキーは不要です。
  6. レイヤーを選んでCommand/Ctrl+Dで複製します。シェイプ内のリピーターや楕円パスだけの複製ではなく、レイヤー全体を複製します。
  7. 12〜24個ほどに増やし、再生しても位置と大きさが変わらないことを確認します。

配布プロジェクトではDOTS_BASICがドット本体のコンポジションです。記事の基本動画では、見出しを置くため、そのコンポジションを65%で表示しています。コードの範囲はDOTS_BASIC内の1280×720を基準にしています。

AEの実タイムライン。DOT_01の位置とスケールが式の赤い値になっており、スケールのXとYは同じ。
実際のAE画面。位置とスケールはエクスプレッションで決まり、スケールの縦横は同じ値です。DOT_01を表示のため上へ移動していますが、indexを使わないため配置は変わりません。

配置パターンを変える:seedだけを調整

同じドット数と設定で、seedを1、2、3へ変えた配置パターンの比較。
同じソース内の同じドットを参照し、seedだけを変えた3パターン。ドット数と数値の範囲は同じです。

違う配置を試したいときは、位置用コードの var seed = 1; を2や3へ変えます。大きさのパターンも変えたければ、スケール用コードのseedも変更します。位置だけを変えたい場合は、スケールのseedはそのままにしてください。

この比較は位置とスケールの両方のseedを揃えて変えています。比較用ソースではCTRLのSeedを0・2・4秒で切り替え、各時点を固定して並べています。普段の固定背景では、Seedへ時間変化のキーを入れる必要はありません。

同じコンポジション・レイヤー・プロパティでseedを戻せば、そのパターンを再現できます。一方、別レイヤーへ同じseedを入れただけで、同じ見た目を再現できるとは限りません。良い配置ができたら、プロジェクトごと残しておくと安心です。

粒の大きさを変える:最大スケールだけを調整

ドットの位置とseedを揃え、最小30%を固定して最大40、70、100%を比較。
位置とドット数は同じ。スケールの最小値は30%のまま、最大値だけを変えています。
スケールの範囲元の直径80pxでの範囲背景の印象
30〜40%24〜32px小粒で控えめ
30〜70%24〜56px大きさの差が程よく出る
30〜100%24〜80px大きい粒も混ざる

変更するのは var s = random(30, 100); の右側の数値です。XとYへ別々のrandomを使うと楕円になるため、円のまま使うときは [s, s] を維持してください。

実践1:文字を載せるドット背景

ドット背景をフェードインさせたタイトル画面。ドットの位置と大きさは固定したままです。 6秒・音声なし。再生ボタンで動きを確認できます。
設定値
コンポジション02_TITLE_BACKGROUND
ドット本体DOTS_TITLE_BACKGROUND/42個/元の直径80px
位置・スケールseed 1/余白80px/スケール30〜100%
色・不透明度濃紺の背景に青緑のドット/各ドット32%
動きを付ける部分背景プリコンポーズの不透明度0〜100%を0〜0.8秒で変更
文字の読みやすさ中央へ背景と同色のパネルを置き、その上へ文字を配置

基本のドットを42個へ増やし、色と不透明度を落とします。次に背景をプリコンポーズし、その上へタイトルを置きます。文字とドットが重なる場合は、今回のように背景と同色のパネルで文字の周りを整理できます。

フェードインは、プリコンポーズした背景の不透明度キーで付けています。randomの値を動かしているわけではありません。静止画の背景としても使えますし、全体をフェードさせて動画の導入にも使えます。

実践2:カードを複製して散らす

同じデザインのカードを1枚・6枚・12枚と順に表示。各カードの位置・大きさ・角度は固定です。 6秒・音声なし。再生ボタンで動きを確認できます。

ドットをカードや図形へ変えたいときも、位置とスケールの考え方は同じです。今回のカードは180×110pxで作ったプリコンポーズを使い、アンカーポイントを中心へ揃えています。

設定値
コンポジション03_SCATTER_CARDS/本体はCARD_SCATTER
カード180×110px/同じデザインを12枚
位置の余白pad = 120
スケールrandom(70, 100)
回転random(-18, 18)
注意カード同士の重なりは自動では避けない

基本の位置コードのpadを120、スケールの範囲を70〜100へ変更します。さらに、レイヤー全体の「回転」へ次の式を入れます。

seedRandom(2001, true);
random(-18, 18);

回転の単位は度です。カードの中心がアンカーなら、その中心を基準に少しずつ傾きます。形が大きいほど端からはみ出しやすくなるため、今回の余白はカードの大きさと回転範囲に合わせて広げています。ほかの寸法でも必ず収まる値ではありません。

カード内の文字や模様は、元のCARD_ARTWORKを直せば全カードへ反映されます。ただし、位置や角度の式は外側の各カードレイヤーに入っています。後から全カードの値を揃えて変更するなら、共通のコントローラーを使う構成へ発展させると便利です。

複製するときの注意点と、手作業との使い分け

やりたいこと・症状確認すること
同じ場所へ重なってしまうレイヤー全体を複製しているか確認。1レイヤー内のリピーターは、今回のレイヤー単位の式と別の仕組み
再生するとドットがちらつくseedRandomの第2引数がtrueになっているか、seedに時間変化が入っていないか確認
ドットが楕円になるスケールを1つの値sから[s, s]で返しているか、親や外側のスケールが縦横同じか確認
粒が端から切れるpadは中心の余白。ドットの半径・カードの回転と大きさを考慮して広げる
位置がずれる親なしの2D、位置の次元分割なし、アンカーとシェイプ中心を揃えた状態で試す
seedを同じにしたのに別レイヤーと同じにならないレイヤー固有の識別情報とプロパティも乱数に関係します。同じ数値だけで別レイヤーの見た目は保証されません
複製した後も1つずつ細かく置きたいランダム配置は下地づくりに向く。ロゴや文字を避ける厳密なレイアウトは、配置ルールを加えるか手で整える
ドット同士を重ねたくない今回の式には衝突回避がありません。数やサイズを抑えるか、グリッドを基準にばらつかせる別の構成を使う

背景を素早く作りたい場面では、複製ごとに位置・大きさを手入力しなくて済むのが利点です。一方で、数個の図形を意図した場所へ置くなら手作業の方が早いこともあります。まずは24個程度で試し、粒の数と大きさを少しずつ調整してください。

randomとseedRandomの値・時刻の扱いは、Adobeのエクスプレッション言語リファレンスでも確認できます。動かし続ける揺れを作るwiggleとは役割を分けて使うと、狙った背景に整えやすくなります。

作例プロジェクトをダウンロード

ドットの複製デモ、タイトル背景、カードの散らし、seedと最大スケールの比較を収録。固定背景の位置・スケールにはキーを打たず、表示数やフェードだけを別のキーで演出しています。

項目内容
版・容量v1.0/87,797バイト(約86KiB)
内容編集可能AEP、expressions.txt、はじめに.txt
制作環境After Effects 26.5×89/JavaScript/1280×720/30fps
フォントHiragino Sans W6/Arial Bold。フォント本体は同梱していません
利用条件学習・個人制作で利用と改変可。商用利用は個別相談

商用利用はお問い合わせページからご相談ください。ほかのコードと作例はAEエクスプレッション集へ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

フリーランスとしてPASを運営し、モーションデザインや映像制作を中心に活動しています。

映像をつくることだけでなく、情報をどう捉え、どう組み替え、どう伝えるかという「編集」に関心があります。

また、越境学習に関わる現場にも参加し、対話や問いを通じた学びの場づくりにも取り組んでいます。

コメント

コメントする

目次