記事「レーザーの線で繋ぐエクスプレッション」をスクリプト化。
有料プラグインの「Plexus」を模した「レイヤーとレイヤーを線で繋ぐ」スクリプト。本家「Plexus」のように近い距離のポイント全てと繋ぐワケではなく、エフェクト「レーザー」で2点間の繋ぎを連続して行い、フェイクPlexusを実現します。
決まったレイヤー間を線で繋ぐため、折れ線グラフとして使い勝手がいいです。
「これ以上ヌルレイヤーを増やしたくない人へのスクリプト「smartNuller.jsx」」の処理も含んでいるためフッテージに無闇にヌルレイヤーを増やしません。
[概要]
調整レイヤーを生成し、全選択レイヤー分のレーザーを設定する。繋ぐレイヤーをいちいち設定しなくて済むため、かなりの時間短縮が見込める。
[使い方]
- 線で繋ぎたいレイヤーを全選択する
- スクリプトを実行する
[注意点]
レイヤー選択順に線が伸びるため、レイヤー選択順に注意。
また、最後のレイヤーから最初のレイヤーにも線は循環するため、折れ線グラフで使用する場合は最後のレーザーを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」のレーザーを適用し、調整レイヤーをコントローラーとして
- 長さ
- 開始点の太さ
- 終了点の太さ
- 内側のカラー
- 外側のカラー
を一括制御できます。
レイヤーを移動すればレーザー線が追従してきますので、折れ線グラフや棒人間の関節などを簡単に表現できます。
この記事へのコメントはありません。