編集(管理者用) | 編集 | 差分 | 新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴
== o ==
ねこまたや web出張所
INDEX

トップページ
お知らせ
twitter
お道具箱
技術資料と雑談
ライブラリ
雑貨や(ダウンロード)
最近の更新
ねこまたやについて

twitter

ねこまたやのついった

企画モノ

psAxe情報ページ
自主制作アニメ
ぽこあぽこ られんたんど


あやかしあやし
エフェクトネタ帳



りまぴん
AE エクスプレッション
レンダー乙女とか
簡易版XPSリンカ
おまけギャラリ

BBS

ねこまたやBBS
開発室BBS

Language



開発室みたいなものでしたが
spamアクセスがはげしいのでページは凍結中です。
書き換えは管理人のみが可能です。
Nekomataya/2024

follow - [[AEexpression]]


目次

AEexpression

follow指定用エクスプレッション

説明

ほかにも、同様のものが結構あるとは思いますが、唐突に思いついたので既存のエクスプレッションを改装して作成。

レイヤ名を参照して動作します。 このエクスプレッションを 「トランスフォームエフェクト」またはレイヤ本体の位置プロパティに適用して、 レイヤ名を以下のように変更します。

 "follow 0.25mm/k ← 200dpi"
 "follow 0.5mm/k 36° 72dpi"
 "slide ↑ 6.5mm/12k 45度"

このエクスプレッションは、レイヤ名を分解して

を読み取って勝手に動作します。 想定している作業形態は、このエクスプレッションをトランスフォームエフェクトか、またはオフセットエフェクトあたりに適用して、レイヤ本来の位置プロパティで位置合わせをしてしまおうと言う趣向です。

"follow"は、実は書かなくてもfollow動作をします。が書いておいた方が良いかなと思うでございます。

パラメータを書く順番は順不同で。関係ない単語を書いても動作します。 以下のように本来のレイヤの名前を書いて、その脇に指定するのが良いと思います。

 "A_001 follow(0.5cm/2k)"
 "背景-1 ←(台)0.3mm/k"

指定を複数書いてしまった場合は、先にマッチしたほうが使用されます。

 "1mm/k 3cm/11k" > 1mm/k のほうが優先

パラメータを省略した場合は、エクスプレッション冒頭の値が使用されますので、よく使う環境はエクスプレッションのアタマを自分で書き換えて使うのが良いと思うです。 ローカルに保存して使うなら長ったらしいコメントは切って捨ててください。

このエクスプレッションはパラメータをレイヤ名で指定するために、カット内で値の変更ができません。その必要のない場合にお使いください。

一番の利点は、どのセルにどれだけのfollow速度をつけたかがプロパティを開かなくても見えることだと思います。 作業手順も少し楽かと。

但し、計算のオーバーヘッドがあるので直接プロパティにキーを作るよりも若干レンダリングに時間がかかります。

ソース

follow(レイヤ名指定版)
 var DefaultSpeed=0.0;		//初期値(移動なし)
 var DefaultAngle=90;		//右へ(度数)
 var DefaultResolution=144	//セルの解像度(dpi)
 var SlideFlag=false;		//台チェック
 
 /*	follow(mm/k)AE Ver0.2 試験版 [位置プロパティ]
 follow速度をmm/kで指定して、xy座標のピクセル値に変換するエクスプレッションです。
 フォロー指定をレイヤの「名前」で行います。
 このエクスプレッションを適用したレイヤにサンプルのように名前を付けてください。
 エクスプレッションは名前を読んでそこからパラメータを抽出します。
 そのため、この判では フォロー速度や、方向等にキーフレームを作ることはできません。(カット途中で変更できません。)
 
 例
 "follow(0.125mm/k) →"
 "slide(2mm/2k) 45度 200dpi"
 
 	レイヤの名前に"slide"または"台"が含まれていると、移動方向を逆転します。
 	速度は、mm cm in px いずれかの単位が使えます。
 	コマうちの引きの場合は / の後ろ k の前に コマ数で指定します。
 	1コマ引きの場合はもちろん省略可能。
 	解像度は、dpi または dpc で。
 	引き方向は[矢印]または[角度]で。
 	矢印だと90度単位でしか指定できませんので細かい角度を指定する場合は
 	45° / 45度 / 45d(egrees) これらのいずれかで指定してください。
 	0(=360)度が12時方向です。	
 
 パラメータが指定されていない場合はエクスプレッション冒頭の省略値を使用します。
 このエクスプレッションは、2次元の配列を出力します。レイヤの位置パラメータまたはトランスフォームエフェクトなどに適用してください。
 
 --- おことわり
 このプログラムの著作権は「ねこまたや」にあります。
 
 あなたは、このプログラムのこの著作権表示を改変しないかぎり
 自由にプログラムの使用・複製・再配布などを行うことができます。
 
 あなたは、このプログラムを自己の目的にしたがって改造することができます。
 その場合、このプログラムを改造したものであることを明記して、この著作権表示を
 添付するように努めてください。
 
 このプログラムを使うも使わないもあなたの自由なのです。
 
 作者はこのプログラムを使用したことによって起きたいかなる
 不利益に対しても責任を負いません。
 あなたは、あなたの判断と責任においてこのプログラムを使用するのです。
 
 なんか、困ったことがあったら以下で連絡してもらえると何とかなるかもしれません。
 http://www.nekomataya.info/
 mailto:nekomata_ya@mac.com
 
 そんな感じです。
 
 追伸 このプログラムは、現在AE 5.5/6.5 では動作確認済みですが、6.0では確認してません。持ってないので、でもきっと大丈夫
 2004/04/19	元版作成
 2005/05/22	名前でパラメータ指定するために改造
 */
 
 Follow=new Object();//followオブジェクトを作る。
 Follow.step=1;
 //	解像度取得
 if(this.name.match(/([1-9]\d*\.?\d*]*)(dp[ic])/)){
 	var Resolution=RegExp.$1	;
 	var Resolution_unit=RegExp.$2	;
 } else {
 	var Resolution = 144	;
 	var Resolution_unit ="dpi"	;
 }
 //	引き速度取得
 if(this.name.match(/(\d+\.?\d*)([mcip][mnx])\/([1-9]?\d*)k/i)){
 
 Follow.spd=RegExp.$1	;	Follow.unit=RegExp.$2;	Follow.step=(RegExp.$3)?RegExp.$3:1;
 }else{
 Follow.spd=DefaultSpeed	;	Follow.unit="mm"	;	Follow.step=1	;
 }
 //	引き方向取得
 		Follow.angle = DefaultAngle;
 if(this.name.match(/(\d+\.?\d*)[度°d]/i)){
 	Follow.angle = RegExp.$1;
 }else{
 	if(this.name.match(/([→↓↑←])/)){
 		switch(RegExp.$1){
 case	"→":	Follow.angle = 90	;break;
 case	"↓":	Follow.angle = 180	;break;
 case	"↑":	Follow.angle = 0 	;break;
 case	"←":	Follow.angle = 270	;break;
 		}
 	}
 }
 //	台フラグ取得
 if(this.name.match(/(Slide)/i) ||this.name.match(/台/)){SlideFlag=true;}
 //if(this.name.match(/(台|Slide)/i)){SlideFlag=true;}
 
 //	解像度をミリあたりの値に直す
 var DPM=(Resolution_unit.toString().match(/dpi/))? Resolution/25.40 : Resolution/10 ;
 //	速度をmmに変換
 	switch(Follow.unit){
 case	"mm":	divider=1 ;	break;
 case	"cm":	divider=10 ;	break;
 case	"in":	divider=25.40 ;	break;
 default	:	divider=DPM;	break;
 	}
 //	初期オフセットをソースの中央に設定
 var offsetX = width/2;var offsetY = height/2;
 //	方向オフセットを設定(三角関数は3時方向反時計まわり)
 var _angle = Follow.angle - 90;
 //	チェックがはいっていたら方向を反転
 if (! SlideFlag) {_angle += 180}
 //	単位フレームあたりの移動距離を計算
 var followX = DPM*Follow.spd/divider * Math.cos(Math.PI * (_angle / 180));
 var followY = DPM*Follow.spd/divider * Math.sin(Math.PI * (_angle / 180));
 //	時間から位置を算出(時間0は例外)
 var time_unit = Math.floor(((time-start_time)/this_comp.frame_duration)/Follow.step);
 if (this_comp.time == 0) {
 	_X=offsetX;_Y=offsetY;
 } else {
 	_X= offsetX + followX * time_unit;
 	_Y= offsetY + followY * time_unit;
 }
 [_X,_Y]
 // Nekomataya/kiyo/2005

サンプルプロジェクト

http://www.nekomataya.info/cgi-bin/control.cgi?PAGE=85&ITEM=050535