なんとなくいまやってることとか。 このページをアンテナに追加 RSSフィード

2010-12-12

ParticleをLoopさせるやつ

パーティクルをループさせる手順がめんどくさくなってきたのでスクリプトで自動化してみた。

スクリプトと一緒にサンプルプロジェクト(CS3)も用意したので適当に使ってみてください。


手順としては

1.途中で終わるパーティクルを作る

2.新規コンポ or プリコンポしてパーティクルコンポを2つ並べて、パーティクルの終わりとはじめが重なるようにする

3.ParticleLooper.jsxの実行


(ParticleLooper_Sample.aepのParticle Loop Beforeコンポ選んでスクリプト実行するとParticle Loop Afterコンポになります。)


f:id:xxJulexx:20101213045548p:image


スクリプト実行時にレイヤー未選択でいいのですが、上記レイヤー以外にレイヤー作るとおかしくなります。

 レイヤーインデックスで直接指定しちゃってるので。

 スクリプト名適当です(´・ω・`)


http://dl.dropbox.com/u/425107/AE/ParticleLooper.zip


いつもながら、スクリプトとか得意でないので変なところとかあるかもしれないので自己責任で。


追記(2010.12.13)

レイヤーの重複部分がレイヤーの長さの半分以下だとおかしくなる…

誰か改良して。

2010-12-04

ワンクリックでアクティブプロパティにエクスプレッションを適用

rd_ScriptLauncher.jsxにエクスプレッション適用のスクリプト書いて突っ込んでおいて、適当なレイヤーorエフェクトのプロパティを選んでダブルクリック

f:id:xxJulexx:20101205012848p:image

スクリプトの内容は↓みたいな感じ。

var Exp = "wiggle(1,15)";
var undoStr = "Set Expression";
var activeLayer = app.project.activeItem.selectedLayers[0];

app.beginUndoGroup(undoStr);

 var arr=activeLayer.selectedProperties;
 for (var i=0; i<arr.length; i++)
 if (arr[i]) arr[i].expression=Exp;

app.endUndoGroup();

自分で使うようなので動けばいいやってことで、レイヤー未選択時にアラート出たりとかはしてないです。

最初↓みたいにしてたんだけど@rlldiさんにアイデアいただいて前者の方に落ち着いた感じ。

var Exp = "(Math.sin(time)+1)*50";
var myLayer = app.project.activeItem.selectedLayers[0];

if( myLayer.selectedProperties[1] ){
    myLayer.selectedProperties[1].expression = Exp;
}else if( myLayer.selectedProperties[0] ){
    myLayer.selectedProperties[0].expression = Exp;
}else{
    alert("アラート");
}

よく使うものを用意しておくと便利かも。


value+[time*100,0]

wiggle(1,15)

Math.round(random(0,1))*10

(Math.sin(time)+1)*50

2010-11-10

新規平面

新規平面作成時に平面設定を飛ばして作成。

コンポ内でレイヤーを選択している場合はそのレイヤーの一つ上に、未選択の場合はコンポの一番上に作成。


レイヤーサイズ・長さ等はコンポと同じ。

色は黒。

各項目・レイヤー名を変更したい場合は適当にいじってください。


NewSolid.jsx

http://dl.dropbox.com/u/425107/AE/NewSolid.jsx


おかしいとことかあったら教えてください。

というかむしろ直してください。

2010-11-04

フェードイン/アウト

普段手書きorコピペでエクスプレッション記入してたんだけど使いまわしやすいようにスクリプトにしてみました。


適用したいレイヤーを選んでスクリプトを実行すると新規ヌルレイヤーにコントロール用のスライダーが作成され、選択していたレイヤー不透明度に関連付けされます。

スライダーの値はフレームレート。

不透明度にvalue使ってるので、不透明度に普通に数値入力してやれば0->50->50->0みたいに100%まで上がりきらないように出来ます。


fadeI/O with Slider(fps)

http://dl.dropbox.com/u/425107/AE/fade_IO_with_Slider%28fps%29.jsx


fi = linear(time,inPoint,inPoint+thisComp.layer('Fade Control').effect('Fade In Time')('スライダー'),0,value);
fo = linear(time,outPoint-thisComp.layer('Fade Control').effect('Fade Out Time')('スライダー'),outPoint,value,0);
ftime = thisComp.layer('Fade Control').effect('Fade In Time')('スライダー')+thisComp.layer('Fade Control').effect('Fade Out Time')('スライダー');

if((ftime*thisComp.frameDuration)>(outPoint-inPoint)){
Over_Layer_Duration
}else{
if((fi/thisComp.frameDuration)<value){
fi/thisComp.frameDuration
}else{
fo/thisComp.frameDuration
}
}

で、問題がフェードイン/アウトのタイムがかぶった時の処理をどうしようかってことで、フェードイン途中でフェードアウトに移行するべきか迷ったんだけど、確実にフェードインさせないといけなかったりするのでエラー出るようにしました。

エクスプレッションでアラート出せるのかどうかわからないので、とりあえず変な変数ぽいの(Over_Layer_Duration)入れてエラーがわかるようにしてみたんだけど、もとに戻すのにいちいち≠ボタン押さないといけないのが面倒…

誰かいい解決方法教えて。


改良したい人とかいたら適当にどうぞ。


2010.11.11

貼りつけてたものが修正前verだったので修正。。。