Skip to main content
Inspiring
July 24, 2017
Question

エクスプレッションについて

  • July 24, 2017
  • 8 replies
  • 2333 views

どなたかわかる方がいましたら教えてください。

エクスプレッションの勉強しているのですが、

ある教材にCC particle worldのProducerのPositionXにエクスプレッションで

N=name.split("/",2)[1];

thisComp.layer("position").transform.position.valueAtTime(time-N/25)[0]

とあるのですがこれはどのような意味なのでしょうか?

エクスプレッションはある種のプログラミングだと思うのですが

意味がさっぱり分かりません。

これはポジションXにどのような効果をもたらすのでしょうか?

どなたか分かりましたら

ご教授頂けますと助かります。

何卒よろしくお願い致します。

This topic has been closed for replies.

8 replies

Inspiring
August 22, 2017

Mukaida様

ありがとうございます。

なんとか理解できたように思います。

この度は親切丁寧に教えてくださり大変感謝いたします。

またなにかありましたら

ぜひともよろしくお願いいたします。

ありがとうございました。

Inspiring
August 19, 2017

Mukaida様

ありがとうございます。

解釈が間違っていたようです。

一つ質問させていただきたいのですが、ということは

「(time-N/25)は、(現在の時間"フレーム" / 25fps – レイヤー名の数値 / 25)  となることから、(10/25 – 10/25) で 0 になります。

positionレイヤーの 0フレームの値が 0.4なので、PositionXの値は0.4になります。」

とありますが0という数値は"position"レイヤーの0フレーム(時間)のx軸の数値を示しているという解釈でよろしいでしょうか?

例えばMukaida様のいうようにpa/10のレイヤーの現在時間10フレームをみてみました。

「pa/10の10フレームでのCC particle worldのProducerの数値の画像」


「0フレームでのレイヤー名"position"(ヌル)の数値の画像」

「(time-N/25)は、(現在の時間"フレーム" / 25fps – レイヤー名の数値 / 25)  となることから、(10/25 – 10/25) で 0 になります。

positionレイヤーの 0フレームの値が 0.4なので、PositionXの値は0.4になります。」

とありますが実際の10フレーム時でのCC particle worldのProducerのx軸の数値は-0.38でした。

同じようにy軸も

N=name.split("/",2)[1];

thisComp.layer("position").transform.position.valueAtTime(time-N/25)[1]とあるので

pa/10の場合、Nは10

(10/25-10/25)で0。

0フレーム時のレイヤー名"position"のy軸を見てみますと0.3.

ですが10フレーム時でのy軸は0.29となっております。

z軸も

N=name.split("/",2)[1];

thisComp.layer("position").transform.position.valueAtTime(time-N/25)[2]

とあり

pa/10の場合、Nは10

(10/25-10/25)で0。

0フレーム時のレイヤー名"position"のz軸を見てみますと-0.06

ですが10フレーム時でのz軸は0.03となっております。

これはまた私の解釈がどこかおかしいのでしょうか?

Community Expert
August 19, 2017

> 0という数値は"position"レイヤーの0フレーム(時間)のx軸の数値を示している

   その通りです。

小数点以下で誤差が出ているのは、wiggle が原因と思われます。

wiggleについて調べてもらうといいのですが、三角関数で計算されているので、ほとんどの場合 割り切れないため、切り捨てか四捨五入して表示されているのでしょう。

確認をするのであれば、wiggle のエクスプレッションを無効にして、手動で位置を設定してキーフレームを打ってください。

そして、キーフレームを打ったところで、数値を比較してください。

また、ディスプレイは1ピクセル単位で表示や移動するので、今回の場合 0.1以下の誤差は映像に影響ないものと思います。

今回のエクスプレッションの効果について、<キーフレーム補助/ エクスプレッションをキーフレームに変換> を実行すれば、グラフエディッターで、動作を確認できます。

(エクスプレッションは消えるので注意してください)

<追記>

Lightning Leaf さんの画像を見るとフレームレートは 30fps ですね。

25fpsのところを30fpsに変更して計算してください。

グラフを表示する方法は、キーフレームに変えなくても、position X の周囲にあるグラフのアイコンを押してもできます。

Inspiring
August 18, 2017

Mukaida様

ありがとうございます。

重ね重ねの質問で申し訳ないのですが

下記の画面がプロジェクトの画面なのですが

Mukaida様の理論で行きますとまずN=name.split("/",2)[1];の中のnameとはpa/1のことだと思いますが

Nはその理論でいきますと1になるかと思います。

次にその下のエクスプレッションなのですが

thisComp.layer("position").transform.position.valueAtTime(time-N/25)[0] とありまして

これは"psiotion"というレイヤー(ヌルレイヤー)の位置を (time-N/25)[0] とする、

すなわちtimeは画像のものですと0ですので 0(秒)-1(秒)/25=ー0.04

つまり日本語にすると

"psiotion"というレイヤー(ヌルレイヤー)の位置(x軸)を-0.04とするという

意味になるかと思います。

ところが例の"position"レイヤーのx軸をみてみると下記画像のようにー0.4となっております。

これは私の単位の数え方がどこかおかしいのでしょうか?

もしくは計算方法がどこか間違っているのでしょうか?

Community Expert
August 18, 2017

エクスプレッッションで求めているのは、CC particle worldのProducerのPositionX のはずですよ。

赤い枠で囲まれている数値は、エクスプレッションに wiggle と記載されているので乱数です。

プロジェクトを削除したので確認できていませんが、たしか パーティクルが発生するまでの時間か、または、移動を開始するまでの時間差が変化したような気がします?

Community Expert
August 18, 2017

<追記>

このエクスプレッションは、positionレイヤーの動きを指定した時間が経ってからProducerのPositionXの動作が始まります。

例えば、レイヤー名 pa/10 の場合、現在時間10フレームの値を確認すると positionレイヤーの0フレームにある「–0.4」になっていると思います。

計算式は、コンポジションのフレームレートは25fpsになっているはずなので、

(time-N/25)は、(現在の時間"フレーム" / 25fps – レイヤー名の数値 / 25)  となることから、(10/25 – 10/25) で 0 になります。

positionレイヤーの 0フレームの値が –0.4なので、PositionXの値は –0.4になります。

Inspiring
August 18, 2017

Mukaida様

ありがとうございます。

コンポジション内をくまなく探してみたのですが

コンポジション内にnameというレイヤーはなさそうなのです。

この場合、nameとはなにか特定のものを指すのでしょうか?

(例えば、ヌルなど)

Community Expert
August 18, 2017

name はエクスプレッションを適用したレイヤー名で、split は "/"で区切られた レイヤー名の数字部分のレイヤー2では20、レイヤー3では10 を指しています。

この数値を変えることで、Position Xの位置が変わります。  時間が変わる。

(リンクを貼ったサイトでは、"/" ではなく "_"を推奨しています)

"position"は、レイヤー名が position のレイヤーです。

Lightning Leaf さんが参考にしたプロジェクトと比較してみてください。

Inspiring
August 18, 2017

Mukaida様

お世話になっております。

一通り、プログラミングの本を読んでみました。

そこでN=name.split("/",2)[1];の意味は大体わかったのですが

このnameというのは変数のことなのでしょうか?

コンポジション内を探してみてもnameという変数はありませんし、

なにかAEだけの特殊な表記なのでしょうか?(nameと書けば........をあらわす等)

もしおわかりでしたらご教示いただけますと幸いです。

何卒よろしくお願いいたします。

Community Expert
August 18, 2017

name だけだと、レイヤー名を指しているようです。

レイヤー名に数値が含まれていませんか?

初めの回答でリンクを貼った記事に説明が出ています。

After Effectsユーザーのための、プログラミング入門 その12 シェイプレイヤとエクスプレッション後編 at AEP Project

nameの使い方は、リファレンスに掲載されているので、参考にしてください。

After Effects でのエクスプレッション言語

また、前回の書籍の作者は、「エクスプレッション クイックリファレンス」も発行しているようです。

dA-books

Inspiring
July 27, 2017

Mukaida様

ありがとうございます。

早速購入し読んでみたいと思います。

それでもわからないときはまたご質問させて下さい。

何卒よろしくお願いいたします。

Inspiring
July 25, 2017

MUKAIDA様

お返事ありがとうございます。

リンクも読んでみたのですがなかなかわからず

何度も聞いてしまい申し訳ありません。

まず、自分はそれぞれの意味すら分かってないのですが

N=name.split("/",2)[1];

これは何の数式でしょうか?

「 " / "で区切ったレイヤーの名前から、Nの値が算出されます。」とありますが

Nとは何でしょうか?

name.split と ("/",2)[1]; の意味も分かりません。

2行目の

thisComp.layer("position").transform.position.valueAtTime(time-N/25)[0]

ですが、

thisComp.layer("position")というのは

positionいうレイヤーがという意味だと思いますが

transform.position.valueAtTime(time-N/25)[0]というのはさっぱり意味が分かりません。

申し訳ないのですが

少しづつ分解して教えていただけますと幸いです。

何卒宜しくお願い致します。

Community Expert
July 26, 2017

Lightning Leaf さんは、初めてプログラミングを学ぶようですね。

それでしたら、プログラム言語のJavaScript の入門書またはネットの情報でプログラムの基本を身につけてください。

もしくは、すぐに実戦で使いたい場合は、Kindle版「エクスプレッションがわからん! はじめてのAfter Effects エクスプレッション奮闘記」

または、

同じ内容と思うのですが、単行本「ゼロからのAfterEffectsエクスプレッション奮闘記エクスプレッションがわからん! 」

上記の書籍は、内容はそんなに詰め込まれていませんが、今、疑問に思っていることは、ほぼ理解できるようになると思います。

Community Expert
July 24, 2017

下記サイトのSplitの説明によれば、 " / "で区切ったレイヤーの名前から、Nの値が算出されます。

複数のレイヤーを整列させて配置するのに便利そうです。

After Effectsユーザーのための、プログラミング入門 その12 シェイプレイヤとエクスプレッション後編 at AEP Project