エクスプレッション

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

関連記事

  1. エクスプレッション

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

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

  2. エクスプレッション

    なぜ?After Effectsのレイヤーをエクスプレッションで効率化

    「なにかの動きに連動する」アニメーションを作るには、キーフレームで頑張…

  3. エクスプレッション

    現在アクティブなフッテージ名を表示するエクスプレッション

    ガイドレイヤーにしたテキストレイヤーで、現在アクティブなレイヤーを一覧…

  4. エクスプレッション

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

    レイヤーの不透明度に、フェードイン・フェードアウトを自動化するエクス…

  5. エクスプレッション

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

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

  6. エクスプレッション

    レーザーの線で繋ぐエクスプレッション

    2点間を線で繋ぐエフェクト「レーザー」を使って、折れ線グラフが簡単に…

コメント

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

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

CAPTCHA