秘密のネタ帳

別に秘密でも何でもない

【AfterEffects】パス上にオブジェクトを配置する +α

今回作りたいのはコレです。

星型パス上にオブジェクトを配置する

事前に

gg ってみます。

惜しいのですが、やりたいことが出ません。

……ので、少し工夫して、

「パスに沿ってオブジェクトを動かす」+エクスプレッションを使って

パスに沿ったオブジェクトの配置をやってみました。

パスに沿ってヌルオブジェクトを動かす

ヌルオブジェクトを作成して、下記の要領でパスに沿って移動するようにトランスフォームを設定します。

オブジェクトをパスに沿ってアニメーション化する |

パスに沿って素材を動かすモーショングラフィックス汎用テクニック/Adobe After Effects CCでできること | カズノコブログ

f:id:ghaos_p:20210418014628g:plain

ぴったり1秒(今回は30f)で終わるように調整しておきます。

f:id:ghaos_p:20210418021441p:plain

ヌルオブジェクトの名前は parent にしました。

オブジェクトを並べるエクスプレッション

事前に、parent にスライダー制御を追加します。

f:id:ghaos_p:20210418015943p:plain

名前は オフセット とし、値は 0.05 としました。

20分割 = 1/20 の値となります。

f:id:ghaos_p:20210418021226p:plain

並べたいものを作ります。今回は小さめの赤丸にてきとうな陰影を付けてプリコンポーズしました。

f:id:ghaos_p:20210418023757p:plain

プリコンポーズしたコンポジションの位置プロパティに、以下のエクスプレッションを追加します。

f:id:ghaos_p:20210418020548p:plain

var parent = thisComp.layer("parent");
var offset = parent.effect("オフセット")("スライダー") * (index - 2);
parent.transform.position.valueAtTime(offset);

Ctrl+D で20個複製

f:id:ghaos_p:20210418021326p:plain

すると星型(=パス上)に20個配置となります。

f:id:ghaos_p:20210418021331p:plain

おまけ 振動させたい

基本波形を作る

parent に BPMVector Length を追加します。

f:id:ghaos_p:20210418022202p:plain

var BPM = effect("BPM")("スライダー");
var curve = 1 - Math.abs(Math.cos(time * Math.PI * BPM / 60));
curve * curve * 80;

キーフレーム変換するとこんな波形に(今回はキーフレーム変換やる必要はありません)。

BPM周期でピークが来る波形になっているはず……。

f:id:ghaos_p:20210418022320p:plain

角度のランダマイザーを作る

parent に 角度を追加します。

f:id:ghaos_p:20210418022658p:plain

並べたオブジェクトのエクスプレッションの更新

f:id:ghaos_p:20210418022929p:plain

var parent = thisComp.layer("parent");
var offset = parent.effect("オフセット")("スライダー") * (index - 2);
var pos = parent.transform.position.valueAtTime(offset);

var theta = parent.effect("角度制御")("角度").valueAtTime(time);
var cos = Math.cos(theta);
var sin = Math.sin(theta);
var len = parent.effect("Vector Length")("スライダー");
var x = len * cos;
var y = len * sin;
pos + [x, y];

以上でこんな感じに。

f:id:ghaos_p:20210418023137g:plain

最後に角度に適当なランダム要素を追加します

f:id:ghaos_p:20210418023433p:plain

var random = (index - 2) * parent.effect("BPM")("スライダー");
var theta = parent.effect("角度制御")("角度").valueAtTime(random + time);

index - 2 の部分がレイヤー毎に異なる値になります。

f:id:ghaos_p:20210418023659g:plain

できました。やったー