dA-tools.com

HOME > AfterFx > expression > 実践 > サンプルイメージ

サンプルイメージ

画像の特定のピクセルにアクセスすることが出来るメソッドです。

  • 例えばレイヤーの位置[100,120]のRGBα値を取得して他のレイヤーの色を変更したりすることが出来ます。値の取得のみ可能で、設定は出来ません。

CS3で新たに加わったメソッドです。

sampleImage(point,radius=[.5,.5],postEffect=true,t=time)

戻り値はarray[4] : [red,green,blue,alpha]

パラメーター

point

  • pointはレイヤー上で値を取得したい位置を指定します。
  • 2次元配列 [ x , y ]です。

radius

  • pointで指定した位置を中心として縦横どれくらいの範囲をサンプルするか指定します。
  • 2次元配列 [ x , y ]です。

postEffect

  • レイヤーの色を変更するエフェクトなどが適用されている場合に、そのエフェクトの適用前か適用後のどちらの値を返すかを決めます。
  • true かfalse で指定します。

time

  • timeは適用する時間を指定します。

SampleImage.jpgpoint以外のパラメータにデフォルト値が設定されています。

  • radius = [ 0.5 ,0.5]
  • postEffect = true
  • t = time

実例 1:スポイトで色を拾う

CS3から新たに加わったシェイプレイヤー,レイヤーエフェクトも使ったサンプルです。まず次の3つのレイヤーを用意しました。

  1. グラデーション背景="BG"
  2. 五角形="PENTA"
  3. 白い丸="spuit"

PENTAはシェイプレイヤーで作り、レイヤーエフェクトのエンボスとドロップシャドーを適用してあります。PENTAの色は回転している白い丸の中央の色を拾って決定しています。PENTAの「塗り」→「カラー」に次のexpressionを書いています。

p=thisComp.layer("spuit").position;
thisComp.layer("BG").sampleImage(p);

デフォルトのパラメーターは省略しています。

実例2:レーザーを文字に当てる

sampleImage( )は色だけでなくアルファーチャンネルの値(マスク)も参照出来るので、文字のある部分だけパーティクルが発生するようにしてみました。

  1. 平面 + CC Perticle sys2
  2. テキストレイヤー="Text"

平面に「CC Particle Systems II」を適用して、パラメータ "Producer" の "Position"が文字の上をジグザグに動くようにキーフレームを打っています。そのままだとずっとパーティクルが発生してしまうので、パラメータ"Birth Rate"に下のエクスプレッションを書いて発生をコントロールします。

mask = thisComp.layer("Text").sampleImage(effect("CC Particle Systems II")("Position"), radius = [1, 1]);

rate = linear(mask[3], 0, 1, 0, 0.6) ;

デフォルトのパラメーターは省略しています。

  • 1行目:パーティクルのProducerの位置にテキストがあるかどうかを確認するために、sampleImage( )で色の値を取得して、変数maskに渡しています。
  • 2行目:変数maskは配列[ R,B,G,alpha]なのでアルファーの値だけをインデックス[3]で取り出します。その値は0から1なので linear( ) を使ってパーティクルの発生率に変換しています。
  • 関連参考:配列linear( )

このようにアルファチャンネルの値でエフェクトのパラメーターをコントロールすることも出来ます。