Adobe After Effects ユーザーのための支援ファイルセット

QE

QE+ Blog
Quick Effects plusの開発者がお届けするAfter Effectsに関するBlogです

ドットモーションコントロール 1(スキャンライン風)

IMAGE PHOTO

After Effectsの王道はベーシックな2Dモーションではないか。。
などとふと原点に立ち返ってみた私は久々に「ドットモーション」
なるテーマに取り組んでみました。軽い思いつきで始めた訳ですが、
シンプルな動きにも難題続きのエクスプレッション地獄が待っていました。

今回はそんな奮闘記も交えて、ぶらり・つぎはぎだらけのエクスプレッション紀行をつづってみました。

で、それってどんなん?かと言えば、
ほら例えばグリッドに引いた升目(ますめ)間に沿ってキッチリと動くあれです。という説明だけでは何なんで、サンプルです。


この升目間を絶対にまたがない動きがポイントでして、
何だか古めかしくもちょっと新鮮に思いませんか。
操作時に【グリッドへスナップ】する機能はありますが、オブジェクトの軌道にスナップが効いたりはしません。
グリッドに必ず沿って動く緑のドット(平面レイヤー)に適当なキーフレームを打ってモーションさせたクリップと更に[エコー]エフェクトを適用した2クリップのループです。拡大させた場合でも指定した升目分だけ上下左右、均等にスケール調整されます。

これはまぁ発展前の入口部分です。
始めた当初は案外あっさり終わんじゃないのとタカをくくっていたら、これがまぁ〜結果は同じでもプロセスの違う方法があって、表現によって作りのハンドリングに向き不向きがあったり、あれや、これやな発見や、「じゃ、こんなケースは?」などと止めどもなく湧いてくる事案が何だか楽しくなっていた。(ドM?)

で、本日の着地点は以下のドットモーションに挑戦です。


緑のメインのドットが上から下へローラー作戦のようなといいましょうか、
はたまたスキャンライン風に規則的に折り返して動き、白いドットがその軌道を埋めてゆくというモーション設定です。
手付けでやっちまえば簡単。と思われてしまうので、ドットサイズの違うパターンもあってタイミングも柔軟に変更したいとハードルを上げておきましょう。
そうなるとエクスプレッションの方が有効です。
ちなみに上の設定ができると安直にもこんな発展系が考えられます。


ということで、もし興味があれば、このまま読み進めて下さいませ。
今回の着地点は、ほぼ直線的な動きなのでドットそのものをスナップ移動させる直感的な操作方法ではなく、[スライダー]エフェクトを使用してドット位置を制御させる方法を選択してみます。

じゃ早速入口の基本形でも作ってみますか?

※ここで使用しているAfter EffectsのバージョンはCS5 です。CS5ではここ以降に連発される" スライダー "というプロパティ表記がCS4以前では" スライダ "と仕様変更されているので、CS4以前のユーザーの方はコピペで記述を使用される際にエラーの原因となる恐れがあります。留意ください。

▼ STEP 01
最初は、基本のグリッド設定ですが見た目上、升目が丁度割り切れるコンポサイズが分かりやすいですかね。
ここではブログ表示サイズの都合もあって、ひと升を20 x 20 pixelsにした440 x 180 pixelsサイズ、30フレ、10秒間のコンポジションを作成します。もちろん自由です。

そこにコンポサイズと同寸の新規平面レイヤー
(Grid layerと改名)に[グリッド]エフェクトを適用、さらに動き回る緑色のドットの新規平面レイヤー
(G-DOTと改名:升目と同寸の20 x 20 pixels)を作成します。

[グリッド]エフェクトは縦横が必ず正方形のドットにするという仮定で
" グリッドサイズ "の種類は" 幅スライダー "に設定、そして
" 幅 "のプロパティに自動でドット幅のグリッド表示になるよう以下のエクスプレッションを設定します。

thisComp.layer("G-DOT").width
STEP01
こうしておくと、仮に後から〈平面設定〉にてドット幅を変更した場合でも自動でグリッド表示が変更されるようにできます。(下図)
STEP01-2

▼ STEP 02
次に緑のドットの平面レイヤーを選択して【エフェクト】メニュー→【エクスプレッション制御】→【スライダー制御】を適用します。
これを更に2回繰り返すか複製して[スライダー制御]エフェクトをこのレイヤーに3つ適用した後、制御する際に分かりやすい名称に変更します。

1つ目の[スライダー制御]エフェクトをここではドットのX座標位置をコントロールする[X position]
2つ目の[スライダー制御]エフェクトはY座標位置をコントロールする[Y position]
3つ目の[スライダー制御]エフェクトは拡大をコントロールする[scale]
とそれぞれを改名します。

では、ここから立て続けにエクスプレッションを記述します。
STEP02
最初は[X position]と名称変更した[スライダー制御]エフェクトの" スライダー "プロパティに小数点を省くエクスプレッションのMath.floor()を使います。このメゾッドはエクスプレッション言語メニュー▶JavaScript Math▶にあります。
()内はスライダー値が入るようMath.floor(value)のままで構いません。 さらにドット幅だけ進むよう
Math.floor(value)*width;
と記述してこのプロパティは終了。

同様に[Y position]は
Math.floor(value)*height;
と記述。

[scale]はスライダー値に対して常に200倍になるよう
Math.floor(value)*200;
と記述し、この最終サイズ調整を緑のドットレイヤーの" スケール "プロパティで以下のように整えます。
x = effect("scale")("スライダー");
y = effect("scale")("スライダー");
add([100,100],[x, y])

すると、下図のように[scale]のスライダー値が" 0 "の時はドットが原寸の100%で、スライダー値を" 1 "にするとドット一回り分が拡大、" 2 "で二回り分が、" 3 "で三回り分が拡大するようになります。(ドットレイヤーのコラップスはONに)
STEP02
最後に" 位置 "プロパティに
w=width;
x=effect("X position")("スライダー");
y=effect("Y position")("スライダー");
add([w,w]/2,[x,y])

と記述して、
緑のドットに適用した[X position][Y position][scale]の各スライダー値をスクラブ操作すると、
グリッドに沿って移動・拡大する基本形が完成します。
各スライダーにキーフレームを作成すれば、最初のサンプルムービーのようなことが簡単にできますので試してみて下さい。

で、[X position][Y position]の各スライダー値が
" 0 "であれば、左上に整列します。
STEP02-2

さて、この基本形までなら案外すんなりできるのですが、今回の着地点としたスキャンライン風のモーション設定に至るまでには、ここから表現別に細かいエクスプレッションの調整が必要になります。

例えば、現状設定でグリッドの左上に位置しているドットですが、[scale]スライダーでサイズを変更してみると、コンポジションから大きくはみ出す結果に。。

IMAGE

このような不都合が多発します。[scale]スライダーでサイズを変更しても左上にピッタリ合うように変更せねばです。しかもグリッドの升目もドットのサイズに合わせて変化するようにしましょう。

▼ STEP 03
[scale]スライダーでサイズを変更しても左上にピッタリ合うようにドットレイヤーの" 位置 "プロパティの現状エクスプレッション
w=width;
x=effect("X position")("スライダー");
y=effect("Y position")("スライダー");
add([w,w]/2,[x,y])

を以下のように書き換えます。

w=width;
x=effect("X position")("スライダー");
y=effect("Y position")("スライダー");
s=effect("scale")("スライダー")/200;
add([w,w]*s,[x+w/2,y+w/2])
 
 
この通りピッタリです。
STEP03
次はグリッド調整です。
[グリッド]エフェクトの" 幅 "のプロパティのエクスプレッション
thisComp.layer("G-DOT").width
を以下のように変更します。

w=thisComp.layer("G-DOT").width;
s=thisComp.layer("G-DOT").effect("scale")("スライダー")/100;
w+w*s

これでグリッドもドットサイズに合わせて臨機応変に対応できます。めでたし。
STEP03

▼ STEP 04
いや、まだ、めでたくありません。ドットのスケールを変更した際に進むドット幅もスケールに合わせなくてはなりません。
現状の[X position]の" スライダー "プロパティに記述している
Math.floor(value)*width;

s=transform.scale[0]/100;
Math.floor(value)*width*s;

に、
[Y position]の" スライダー "プロパティに記述している
Math.floor(value)*height;

s=transform.scale[1]/100;
Math.floor(value)*height*s;

に書き換えるとスケール変更した移動幅も調整できます。
ふぅ〜。
STEP04
▼ STEP 05
では、ドットのサイズを100%に戻して、ここからはモーション設定に移ります。
まずは、ドットのX座標位置の動きをループ設定にします。
ここでは15フレームで折り返すループにしてみます。

左上からドットが動き出す0フレームと1フレーム目に
[X position]スライダー値の" 0 "で2つのキースレームを作成します。

現在の時間インジケータを14フレーム目まで移動して、[X position]スライダー値をスクラブ操作して右上の端まで直線移動させキーフレームを作成します。
ここでの入力値は" 21 "です。ただ、表示はエクスプレッションによって" 420 "と表示されます。続けて15フレーム目にも同値でキーフレームを作成します。
STEP05
[X position]" スライダー "プロパティに記述しているエクスプレッションを書き換えます。
s=transform.scale[0]/100;
Math.floor(value)*width*s;

この記述のvalueを選択してエクスプレッション言語メニュー▶property▶から
loopOut(type = "cycle", numKeyframes = 0)と入れ替えます。(最後のキーフレーム以降にキーフレーム設定を繰り返すメゾッド)
Math.floor(loopOut(type = "cycle", numKeyframes = 0))*width*s;
となったタイプ記述のcycleをpingpongと変更します。

s=transform.scale[0]/100;
Math.floor(loopOut(type = "pingpong", numKeyframes = 0))*width*s;


これでドットが直線移動して折り返すX座標位置のエクスプレッションができます。長くなるので

s=transform.scale[0]/100;
loop=loopOut(type = "pingpong", numKeyframes = 0); Math.floor(loop)*width*s;


と複文に代用しても同じ結果が得られます。
プレビューしてみてください。
STEP05

▼ STEP 06
次にドットのY座標([Y position]の記述)です。ドットがY座標位置で一列分進んでいく時間間隔はドットがX座標位置で右端まで進む最後のキーフレーム時間の15フレーム毎です。

ただ、この数値を直接エクスプレッションの式に組み込んでしまうと[X position]スライダーのキーフレームのタイミングが変わるたびに式を書き換えることになってしまうので面倒です。
なので、「[X position]スライダーの4番目(最後)のキーフレーム時間で」というように定義します。
時間の記述は以下の通りです。
effect("X position")("スライダー").key(4).time

そして進む数値は一列分、ドットの高さ分、つまりheightです。
これを現状の式の
s=transform.scale[1]/100;
Math.floor(value)*height*s;

を以下のように書き換えます。

t=effect("X position")("スライダー").key(4).time;
s=transform.scale[1]/100;
h=height*s;
Math.floor(time/t+1)*h-h;


これで緑のドットのスキャンライン風の動きが完成です。[scale]スライダーでサイズを変更しても問題ないはずです。プレビューでチェックしてみてください。
STEP06

さて、ドットの動きが完成したので後は動きに合わせて白で塗りつぶしてゆくだけです。 当初は何かエフェクトあんだろ。。と安易な考え。
よく調べてみると。。
マスクパスを描くエフェクトは多くありますが、レイヤー軌道を描いてゆくエフェクトはあまりありません。

標準搭載では[エコー]か[ブラシアニメーション]エフェクトくらいですかね。[エコー]は残像のような見え方なので、グリッドを均等に埋めるのはNGです。
そして[ブラシアニメーション]ですが、ブラシの種類に四角いドット形状のような選択肢があれば良かったのですが、残念ながら点描しかなく、
適用してみると。。


案の定。惜しい結果に。
ただ点描表現のドット処理には使えそうですね。記憶しておきましょう。
が、本ケースではNGなのでエフェクト処理は全滅。
エフェクト一発でつくれないとなると、自力のレイヤー配置なのか。。
暗雲がたちこめます。まだ道のりは遠く更に長くなってしまうので、
着地点前ですが、一旦仕切って次回に持ち越します。

続)ドットモーションコントロール 1(スキャンライン風)へつづく。


日時: 2011年02月21日 15:58