今週は、AfterEffects CC 2014から、画像やビデオ等からカラーを抽出し、他のレイヤーに適用するsampleImageメソッド(エクスプレッション)をご紹介します。
sampleImageメソッドは、指定したレイヤーの、指定した座標値・範囲にあるピクセルの平均値カラーを抽出するメソッドです。カラーが頻繁に変化するものに使用すると、そのカラーの移り変わりを他のレイヤーに適用することが可能になります。
抽出するカラーはRGBAで抽出しますので、RGBAに対応したカラーを適用するエフェクトに対して、エクスプレッションでコントロールする、という形になります。
まずは、カラー情報を持っているレイヤーを配置します。画像でもビデオでもかまいませんが、今回は、色の変化の激しい以下のビデオを使用します(音は鳴りません)。
激しくカラーが変化していますが、このビデオの中から特定のピクセル範囲を指定し、そのカラーの変化を他のレイヤーに適用します。
今回は、以下のように、ビデオの中心にあるサインボードからカラーを抽出することにします。
抽出してきたカラーは、何らかのレイヤーのエフェクトとして適用するため、今回は平面レイヤーを使用し、以下のようなざぶとんを作成します。後にこのレイヤーのカラーは変更するため、作成時の平面レイヤーのカラーは何色でもかまいません。
次に、RGBAでカラーを指定できるエフェクトを指定します。平面レイヤーを選択し、エフェクトメニュー>描画>塗り、を選択します。
エフェクトコントロールパネルから、カラーと不透明度を設定します。カラー・ホワイト、不透明度50%で以下のようになりますので、テキストを入れる場合は、この上に重ねると読みやすいですね。
次に、この「塗り」のエフェクトに使用したカラーを、sampleImageメソッドで塗り替えます。このレイヤーはホワイトで塗っていますが、エクスプレッションで塗り替えるため、「塗り」のエフェクトで使用する最初のカラーは特に何色でもかまいません。
まずは、カラーを抽出したい箇所にマウスカーソルを沿えて、情報パネルでピクセルの座標値を調べておきます。
次に、「塗り」のエフェクトを指定した平面レイヤーのカラーに、以下のエクスプレッションを追加します。
sampleImage()メソッドは、以下のように値を指定します。
thisComp.layer(2).sampleImage([922, 551], [2, 2])
【コンポジション名.レイヤー名.sampleImage([X座標値, Y座標値], [幅の半径, 高さの半径])】となり、意訳では「このコンポジションの、レイヤー2番の、X座標922・Y座標551から、幅高さ4px(エクスプレッションで指定してるのは半径であるため、範囲(直径)としては倍の4pxになる)の範囲内の平均カラー値」をサンプルする、になります。
取得できるカラー値は、RGBAを取得するため、同様にRGBAでカラーを指定する他のエフェクトにもこのエクスプレッションは有効です。
この状態でレンダリングすると以下のようになります。
さぶとんのカラーが、サインボードから抽出したカラーと同じカラーに変化していきます。
ざぶとんの上にテキストを作成し、アルファマットで平面を抜いた後、ビデオにぼけ足付きのマスクで型抜きを行ったものが以下のビデオになります。テキストがビデオの中のカラーの変化と同じ変化をし、結果カラー変化のスピード感もビデオと一致することになります。
なお、今回のように後からテキストレイヤーなど、何らかのレイヤーを追加すると、エクスプレッションで指定したlayer(2)のレイヤー番号が変わってしまうため、レイヤーを追加した場合は、レイヤー番号も変更する必要がありますので、注意してください。
AfterEffects CC 2014の2014年12月リリース版までは、このsampleImageメソッドを使用した際、マルチプロセス機能(環境設定>メモリー&マルチプロセッサー>AfterEffectsマルチプロセッサー)が無効になっていましたが、AfterEffects CC 2014の2014年12月リリース版で改善していますので、アップデートがまだの方はぜひ12月リリース版にアップデート行った後に、このエクスプレッションを試してみてください。