エクスプレッション

ランダムに配置するスクリプト「posUn-Align.jsx」

エクスプレッションでレイヤーをランダムに並べる」で作ったエクスプレッション適用をスクリプト化。

これ以上ヌルレイヤーを増やしたくない人へのスクリプト「smartNuller.jsx」」の処理も含んでいるためフッテージに無闇にヌルレイヤーを増やしません。

[概要]

複数のレイヤーをランダムに整列させるエクスプレッションを仕込むスクリプト。

[使い方]

  1. 並べたいレイヤーを全選択する
  2. スクリプトを実行する
  3. コントロールレイヤーで全体の調整をする

[オプション]

  • コントローラーとしてオレンジのヌル「random_Control」レイヤーが追加される。
  • コントローラーが一番上、その後選択順に下に向かって並び変える。
  • 「ズレ」でX,Y,Zそれぞれズラす最大ピクセル数を指定(Zは配置レイヤーが3Dの場合のみ)。
  • 「シード値」でランダムパターンを変更。
  • レイヤー個別に移動、回転など調整もできる。

[解説]

//////////////////////////////////////////////////
// ランダムに配置するスクリプト
//////////////////////////////////////////////////

var actCmp=app.project.activeItem;
var sel=actCmp.selectedLayers;

function f_posRandomAlign(){
    var efName1="ズレ";
    var efName2="シード値";
    var addFx;

    if(sel.length>0){
        for(var i=0;i<sel.length-1;i++){
            sel[i].moveBefore(sel[sel.length-1]);
        }

        var topLyr=actCmp.layer(Math.min(sel[0].index,sel[sel.length-1].index));

        var nullLyr1=f_smartNuller();
            nullLyr1.moveBefore(topLyr);
            nullLyr1.name="random_Control";
        nullLyr1.label=11;//オレンジ

        if(nullLyr1.property("ADBE Effect Parade")(efName1)==null){//"ズレ"あれば中止
            addFx=nullLyr1.property("ADBE Effect Parade").addProperty("ADBE Point3D Control");
            addFx.enabled=false;
            addFx.name=efName1;
            addFx=nullLyr1.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
            addFx.enabled=false;
            addFx.name=efName2;
        }

        for(i=0;i<sel.length;i++){
            sel[i].position.expression=
            'var ctrl=thisComp.layer("'+nullLyr1.name+'");\r'+
            'var fx=ctrl.effect("'+efName1+'")(1);\r\r'+

            'seedRandom(ctrl.effect("'+efName2+'")(1)+index, true);\r\r'+

            'var x=wiggle(0,fx[0]);\r'+
            'var y=wiggle(0,fx[1]);\r'+
            'var z=wiggle(0,fx[2]);\r'+

            'if(position.value.length==2){\r'+
            '   [x[0],y[1]];\r'+
            '}else{\r'+
            '   [x[0],y[1],z[2]];\r'+
            '}';
        }//for
    }// if(sel.length>0)
}

function f_smartNuller(){
    var addLyr=app.project.activeItem.layers.addNull(); // nullレイヤー追加

    for(i=1;i<=app.project.items.length;i++){
        //[平面]か[ヌル]であることを判別
        if( (app.project.items[i].mainSource == "[object SolidSource]")&&(app.project.items[i].name=="ヌル 1") ){
            addLyr.replaceSource(app.project.items[i],true);
        break;
        }
    }

    for(i=app.project.items.length;i>=1;i--){
        //使用されていない[ヌル n]のみ削除
        if( (app.project.items[i].mainSource == "[object SolidSource]")&&(app.project.items[i].name.indexOf("ヌル")!=-1)&&(app.project.items[i].name!="ヌル 1")&&(app.project.items[i].usedIn=="") ){
            app.project.items[i].remove();
        }
    }
    return addLyr;
}

app.beginUndoGroup("posRandomAlign");
    f_posRandomAlign();
app.endUndoGroup();

14行目からのfor文は選択順にタイムラインのレイヤーを上から並び替え。

20行目から23行目はコントローラーのヌルレイヤーを追加→リネーム→ラベルカラーをオレンジに。

54行目からの関数「f_smartNuller()」を呼び出しています。
これ以上ヌルレイヤーを増やしたくない人へのスクリプト「smartNuller.jsx」」で無闇に増やさない処理も含めています。

コントローラーを整える

if(nullLyr1.property("ADBE Effect Parade")(efName1)==null){//"ズレ"あれば中止
    addFx=nullLyr1.property("ADBE Effect Parade").addProperty("ADBE Point3D Control");
    addFx.enabled=false;
    addFx.name=efName1;
    addFx=nullLyr1.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
    addFx.enabled=false;
    addFx.name=efName2;
}

25行目以降がコントローラーの整形シーンです。if文で既に「ズレ」というエフェクトが入っていればさらに追加してしまうことになるので回避します。

その後「3Dポイント制御」「スライダー制御」エフェクトを追加し、「ズレ」「シード値」にリネームします。初期値は特にセットしないので今回はこれだけでOKです。

配置レイヤーにエクスプレッションをセット

34行目からのfor文で選択した配置用レイヤーにエクスプレッションを追加

for(i=0;i<sel.length;i++){
    sel[i].position.expression=
    'var ctrl=thisComp.layer("'+nullLyr1.name+'");\r'+
    'var fx=ctrl.effect("'+efName1+'")(1);\r\r'+

    'seedRandom(ctrl.effect("'+efName2+'")(1)+index, true);\r\r'+

    'var x=wiggle(0,fx[0]);\r'+
    'var y=wiggle(0,fx[1]);\r'+
    'var z=wiggle(0,fx[2]);\r'+

    'if(position.value.length==2){\r'+
    '   [x[0],y[1]];\r'+
    '}else{\r'+
    '   [x[0],y[1],z[2]];\r'+
    '}';
}//for

備考

3DレイヤーにしてZをズラしてカメラで前後に移動すれば、ぽいのがすぐ作れます。

ダウンロード

エクスプレッションでレイヤーをランダムに並べる前のページ

2点をつまんで描ける矢印シェイプ(.ffx配布あり)「Shape-Arrow」次のページ

ピックアップ記事

  1. なぜ?After Effectsのレイヤーをエクスプレッションで効率化
  2. amazonのスポンサー商品(広告)を非表示にするブックマークレット「amazO…
  3. なぜ?After Effectsの操作を「スクリプト」で効率化
  4. YouTubeで一時停止中のコントローラーを非表示にするブックマークレット
  5. フリーランスの開業届提出は開業freeeでとにかく簡単に

関連記事

  1. エクスプレッション

    エクスプレッションでレイヤーをランダムに並べる

    エクスプレッションで複数のレイヤーを散らかしましょう。…

  2. エクスプレッション

    お手軽エクスプレッションwiggle()で揺らす

    今回は初めからAfter Effectsで用意されている関数「wig…

  3. エクスプレッション

    オートコンプリートでエクスプレッションを簡単適用

    プロパティのストップウォッチアイコンをキーを押しながらクリックで開く…

  4. エクスプレッション

    エクスプレッションでレイヤーを円状に並べる

    レイヤーを丸く、放射状に、くるっと並べるときに、エクスプレッションで頑…

  5. エクスプレッション

    エクスプレッションでグリッド状に均等配置する

    複数のレイヤーをグリッド状に整列させるエクスプレッションを仕込むスクリ…

  6. エクスプレッション

    アナログ時計でエクスプレッションの考え方を学ぶ

    エクスプレッションという「計算式で導くアニメーション」を、アナログ時…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA