スクリプト

選択順にレーザー線で繋ぐスクリプト「fakePlexus.jsx」

記事「レーザーの線で繋ぐエクスプレッション」をスクリプト化。

有料プラグインの「Plexus」を模した「レイヤーとレイヤーを線で繋ぐ」スクリプト。本家「Plexus」のように近い距離のポイント全てと繋ぐワケではなく、エフェクト「レーザー」で2点間の繋ぎを連続して行い、フェイクPlexusを実現します。

決まったレイヤー間を線で繋ぐため、折れ線グラフとして使い勝手がいいです。

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

[概要]

調整レイヤーを生成し、全選択レイヤー分のレーザーを設定する。繋ぐレイヤーをいちいち設定しなくて済むため、かなりの時間短縮が見込める。

[使い方]

  1. 線で繋ぎたいレイヤーを全選択する
  2. スクリプトを実行する

[注意点]

レイヤー選択順に線が伸びるため、レイヤー選択順に注意。

また、最後のレイヤーから最初のレイヤーにも線は循環するため、折れ線グラフで使用する場合は最後のレーザーをOFFにすればOKです。

[オプション]

  • 調整レイヤーがコントローラーになり、線の太さ、色を一括設定できる
  • 逆に個別に設定を変えたい場合は、エクスプレッションを切ってください

[解説]

function f_fakePlexus(){
    var Itm = app.project.items; //全てのアイテムを取得
    var actCmp=app.project.activeItem;
    var sel=actCmp.selectedLayers;
    var targetNum=0;
    var efRsr;
    var targetProperty;

    var adjustLyr=actCmp.layers.addSolid([1, 1, 1], "fakePlexus 平面", actCmp.width, actCmp.height, actCmp.pixelAspect);
    adjustLyr.adjustmentLayer=true;
    adjustLyr.name="レーザー";

    var nullLyr=f_smartNuller();
        nullLyr.name="fakePlexus Ctrl";
        nullLyr.label=11;//オレンジ
    var nullFx=[];

        nullFx[0]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
        nullFx[0].name="長さ";
        nullFx[0].enabled=false;
        nullFx[0](1).setValue(100);
        nullFx[1]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
        nullFx[1].name="開始点の太さ";
        nullFx[1].enabled=false;
        nullFx[1](1).setValue(2);
        nullFx[2]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Slider Control");
        nullFx[2].name="終了点の太さ";
        nullFx[2].enabled=false;
        nullFx[2](1).setValue(2);
        nullFx[3]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Color Control");
        nullFx[3].name="内側のカラー";
        nullFx[3].enabled=false;
        nullFx[3](1).setValue([1,1,1]);
        nullFx[4]=nullLyr.property("ADBE Effect Parade").addProperty("ADBE Color Control");
        nullFx[4].name="外側のカラー";
        nullFx[4].enabled=false;
        nullFx[4](1).setValue([1,1,1]);
    
    
    for(var j=1;j<=sel.length;j++){//調整レイヤー
        if(j==sel.length){
            targetNum=sel.length;
        }else{
            targetNum=0;
        }
        efRsr=adjustLyr.property("ADBE Effect Parade").addProperty("ADBE Laser");
        efRsr.name="レーザー"+j;
        targetProperty=adjustLyr.property("ADBE Effect Parade")("レーザー"+j);
        targetProperty(1).expression=
            'thisComp.layer("'+sel[j-1].name+'").transform.position';//開始点
        targetProperty(2).expression=
            'thisComp.layer("'+sel[j-targetNum].name+'").transform.position';//終了点
        targetProperty(3).expression=
            'thisComp.layer("'+nullLyr.name+'").effect("長さ")(1)';//長さ
        targetProperty(5).expression=
            'thisComp.layer("'+nullLyr.name+'").effect("開始点の太さ")(1)';//開始点の太さ
        targetProperty(6).expression=
            'thisComp.layer("'+nullLyr.name+'").effect("終了点の太さ")(1)';//終了点の太さ
        targetProperty(7).setValue(0);//柔らかさ
        targetProperty(8).expression=
            'thisComp.layer("'+nullLyr.name+'").effect("内側のカラー")(1)';//内側のカラー
        targetProperty(9).expression=
            'thisComp.layer("'+nullLyr.name+'").effect("外側のカラー")(1)';//外側のカラー
        targetProperty(11).setValue(true);
    }//for
    adjustLyr.locked=true;
}

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("fakePlexus");
    f_fakePlexus();
app.endUndoGroup();

選択順に線が繋がるように「レイヤーの数-1」のレーザーを適用し、調整レイヤーをコントローラーとして

  • 長さ
  • 開始点の太さ
  • 終了点の太さ
  • 内側のカラー
  • 外側のカラー

を一括制御できます。

レイヤーを移動すればレーザー線が追従してきますので、折れ線グラフや棒人間の関節などを簡単に表現できます。

ダウンロード

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

Aeでも前方選択するスクリプト「selectForward.jsx」次のページ

ピックアップ記事

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

関連記事

  1. スクリプト

    放射状に配置するスクリプト「posCircleAlign.jsx」

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

  2. After Effects

    ショットリスト.aep【Aeで撮影資料を制作するアイディア】

    続・全てをAfter Effectsで作る体になってしまった方へ。…

  3. スクリプト

    なぜ?After Effectsの操作を「スクリプト」で効率化

    出来る範囲はマウスやキーボードで編集者が直接できる操作に限られますが、…

コメント

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

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

CAPTCHA