「エクスプレッションでレイヤーをランダムに並べる」で作ったエクスプレッション適用をスクリプト化。
「これ以上ヌルレイヤーを増やしたくない人へのスクリプト「smartNuller.jsx」」の処理も含んでいるためフッテージに無闇にヌルレイヤーを増やしません。
[概要]
複数のレイヤーをランダムに整列させるエクスプレッションを仕込むスクリプト。
[使い方]
- 並べたいレイヤーを全選択する
- スクリプトを実行する
- コントロールレイヤーで全体の調整をする
[オプション]
- コントローラーとしてオレンジのヌル「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をズラしてカメラで前後に移動すれば、ぽいのがすぐ作れます。
この記事へのコメントはありません。