エクスプレッション

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

関連記事

  1. エクスプレッション

    オーディオのフェードイン・アウトをエクスプレッションで自動化する

    オーディオレイヤーの音量のフェードイン・フェードアウトをエクスプレッシ…

  2. エクスプレッション

    レイヤーを自動で拡大・縮小させるエクスプレッション

    選択レイヤーのインポイントからアウトポイントにかけて、指定した%サイズ…

  3. エクスプレッション

    マーカーでリズムを刻むエクスプレッションアイディア

    決まった動きをリズミカルにリピートしたい場合、マーカーを活用して効率を…

  4. エクスプレッション

    エクスプレッションで簡単ループ

    動画はプロジェクトウィンドウ&gt;右クリック&gt;フッテージを変…

  5. エクスプレッション

    エクスプレッションで一括制御+疑似親子+ミラーリング

    エクスプレッションを使えば、他のレイヤーのプロパティを参照することが…

  6. エクスプレッション

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

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

コメント

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

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

CAPTCHA