2007年9月17日月曜日

AfterEffectsエクスプレッション講座 その11(ゆらゆらした動きを与える)

平面にゆらゆらした動きを与える。(三角関数を使う)

三角関数を用いたコードの第2弾です。今度は位置に使って見ましょう。
次のコードを位置のエクスプレションフィールドに入力してください。
(コンポとレイヤーは自由に設定してください。)

h = 10 ; 
yh = this_comp.height/2 ;
t = 3 ;
r = 360/t;
d = degrees_to_radians(time*r-90);
[position[0],Math.sin(d)*h+yh]

いかがでしょうか?ここまで読み進めてくるとなんとなくコードの意味
も分かるようになってくると思います。まず、

h = 10 ; 

はゆれ幅をピクセル数で指定しています。

yh = this_comp.height/2 ;

見た目は違いますが、これも変数yhに値を保存しています。
this_comp.heightは現在のコンポの高さを取得してくれます。
このようにある値を取得してくることをプログラムの世界で
「返す」といいます。(今の場合「this_comp.heightは現在の
コンポの高さを返す」のように使われます。)
さらに高さを2で割ることでゆれの中心を求めています。

t = 3 ;

は前回同様、ゆれのループする時間指定です。

r = 360/t;
d = degrees_to_radians(time*r-90);

の部分は前回と全く同じです。

[position[0],Math.sin(d)*h+yh]

コードの本体です。position[0]はx座標、Math.sin(d)*h+yhは
y座標でy座標のみ三角関数を用いてるので縦にゆらゆらする
という仕組みです。

2007年9月10日月曜日

音と映像と光 その7

久しぶりの更新です。
更新までの間にいろいろと見聞を広げることができました。

まず恥ずかしながら、数ヶ月前初めて「メディアサーバー」
なるものに触れる機会があり、今まで長々と
「高機能なVJソフトがない」とぼやいておりましたが…

「あったんじゃん!」みたいな。

どーゆーモノか簡単にご説明すると、
照明卓からイーサネット経由で映像をストックしたメディアサーバー
(様はパソコン)にアクセスできるというもの。
リアルタイムに映像のスピードはもちろん、色の変化、レイヤーに
してマスクにしたり、はては3Dエフェクトまで…

正直、リアルタイムエフェクトなんて興味はないのですが、
特筆すべきは映像をキューとして扱えるということ。
照明卓の機能で映像を管理できたら今まで
人間の手でできなかった、VJプレイが可能です。

が、大きな問題が一つ。アホみたいに高い。
どれもこれも高級外車が買えるよーな値段です。誰が買うんでしょーか?
照明卓と映像編集とメディアサーバーを全部こなせるよーな人材、
日本に何人いるのやらって状態でその値段じゃ当分メディアサーバー
すごいってことにはならなそうです。

と、思ってた矢先、arkaos/dmxなるソフトを仕事でさわる機会がありました。
ほとんど自分が欲しかったメディアサーバーとしての機能を網羅して
10万円台!結構感動ものです。映像をフィクスチャーとして扱う発想
は自分が考えていたソフトそのもの。ちがいは照明卓がいるかどうか。
ほんとに今までと映像の扱いかたが変わります。

実は今までちまちまとVJソフトを自作していたんですが、これを知って
作業は止まっております。だってarkaosでいいじゃんって。
ただarkaosも結局照明卓必要とするんでそれだと扱える人間偏るん
ですよね。やっぱ仕上げるべきかな。

AfterEffectsエクスプレッション講座 その10(無限に明滅させる)

平面を無限に明滅させる三角関数を使う

三角関数を使うと言うと面倒くさそうですよね。ですが、非常に便利です。例えば…

1 平面を無限に明滅させる。
2 平面にゆらゆらした動きを与える。
3 平面をサークル運動させる。

といったことができるのですが、
何はともあれ実践してみるのが手っ取り早いです。

1 平面を無限に明滅させる為には…

t = 3 ;
r = 360/t;
d = degrees_to_radians(time*r-90);
Math.sin(d)*50+50

以上のコードを透明度のエクスプレッションフィールドに入力してください。
透明度が0%から100%そして0%と3秒間のサイクルでループします。
細かく説明すると長くなるので大雑把に説明すると、

t = 3 ;

はプログラム用語で変数とよばれる記述で、ここでは「t」という記号に「3」を
保存しています。ここでの「3」はループする時間になので「3」を「5」に
書き換えると5秒でループするようになります。

r = 360/t;

は「r」という変数に360÷t(今の場合「3」)の結果「120」を保存しています。
何をしているのかというと角度を求めています。詳しくは割愛します。

d = degrees_to_radians(time*r-90);

は「time*r-90」でフレームごとの角度を計算し、「degrees_to_radians()」
というプログラム用語でメソッドと呼ばれるもの
(あらかじめ用意してある簡単なプログラムみたいなものだと思ってください)
で「角度」から「ラジアン」に変換してから変数「d」に保存しています。
ちなみに「-90」は0~360の間で変えるとスタートの値が変化します。

Math.sin(d)*50+50

ですが、Math.sin(d)の部分がこのコードの本体で「Math.sin()」
というメソッドは()のなかに入れたラジアンのsine値を計算してくれます。
ここでは上の部分で計算したラジアン「d」を入れることでsine値を
計算しています。sineは「-1~1」までの答えしか出してくれません。
したがって「0~100」に変換する為に「50」を掛けたあと「50」を
足しています。ちなみに掛ける「50」と足す「50」は値を変えると
消え残しの効果などを作ることができます。

※例「40」を掛けて「60」を足すと「20~100」透明度で変化する。