リンクをクリップボードにコピー
コピー完了
下図の星を赤点との距離を変えながら赤点を中心に回したいのですが、
どのような方法がベストでしょうか?
下図は説明用にシェイプで作成しましたが、
実際に動かしたいのは最初の位置が決まっているイラレデータです。
(各オブジェクトはレイヤー分けされています。赤点の位置は変えません。)
赤点を中心に回すのは簡単ですが、
何かと何かの距離を制御する方法が分かりません。
wiggleなども使いたいので、スライダーで簡単に制御できると嬉しいのですが。。
ご教授下さい。宜しくお願いします。
2つのシェイプ間の距離は、length(A - B) で求められます。
length(thisComp.layer("シェイプレイヤー 2").transform.position - thisComp.layer("シェイプレイヤー 1").transform.position)
星を中央に配置している場合は、下記のエクスプレッションで回転できますが、星の位置が決められているので、上記の距離を組み合わせると出来そうな気がします。(ampが距離になるので、一工夫必要です)
freq = 0.5;
amp = 400;
amp2=wiggle(5,20)[1];
x=value[0] + amp*Math.sin(freq*time*Math.PI*2);
y=amp2 + amp*Math.cos(freq*time*Math.PI*2);
[x,y]
リンクをクリップボードにコピー
コピー完了
お早うございます、Kenji OKIRUMEさん
移動と回転を別々にコントロールできる次の方法が良いと思います。お試しください。
①「コンポ 1」コンポジションで、赤点の中心を「アンカーポイント」に合わせます。そして星の位置を移動します。
②「コンポ 2」コンポジションを作成し、「コンポ 2」コンポジションに「コンポ 1」コンポジションを入れます。
③「コンポ 2」コンポジションで、「コンポ 1」コンポジションレイヤーに回転をかけます。
リンクをクリップボードにコピー
コピー完了
150kwさん
すみません、私の説明がイマイチなようです。
赤点はないものとしてお考え下さい。
コンポの中心点との距離を変えながら星をその中心点を基準に回したいと思ってます。
最初の星の位置がどこでも良いのであれば、最初に水平または垂直に配置させてXまたはY軸で移動させ、
回転に関してはアンカーポイントを移動させたり、ヌルとリンクさせれば良いのですが、
現状では最初のデザイン(配置)を決めてしまっていまして、
「やっぱり座標ではなく距離でコントロール出来たら美しいな…」と思っている次第です。
少し説明不足でした、すみません。
次のMukaidaさんへの返信で実際のコンポを添付します。
もし、またアイデアをご提示して頂けるのであれば宜しくお願いします。m(_ _)m
リンクをクリップボードにコピー
コピー完了
2つのシェイプ間の距離は、length(A - B) で求められます。
length(thisComp.layer("シェイプレイヤー 2").transform.position - thisComp.layer("シェイプレイヤー 1").transform.position)
星を中央に配置している場合は、下記のエクスプレッションで回転できますが、星の位置が決められているので、上記の距離を組み合わせると出来そうな気がします。(ampが距離になるので、一工夫必要です)
freq = 0.5;
amp = 400;
amp2=wiggle(5,20)[1];
x=value[0] + amp*Math.sin(freq*time*Math.PI*2);
y=amp2 + amp*Math.cos(freq*time*Math.PI*2);
[x,y]
リンクをクリップボードにコピー
コピー完了
Mukaidaさん
〜遅くなりました。なぜかずっと審査中のままで投稿されていなかったようです。〜
ご返信ありがとうございます。
やっぱりエクスプレッションなのかな?と思っていたところです。
が、エクスプレッションに関しては、数少ない書籍を一冊読んだだけの素人です。
基本的な用語は分かりますが、自分では構築できず、他の人のを解読するのもちょっと苦労します。
隠す必要もないので実際のデザインとコンポを貼っておきます。
イラレで作ったデータをコンポジションとして読み込みこんだものです。
コンポサイズは1920×1080です。
イラレで3つのレイヤーに分けているので、そのまま3つのレイヤーでいじれます。
イラレデータは私が作ったものなので、イラレに戻って再調整する事も可能です。
下図の様に各オブジェクトのアンカーポイントはコンポジションの中心点に置かれています。
この中心点との距離を変えながらゆっくり回したいです。
length(thisComp.layer("シェイプレイヤー 2").transform.position - thisComp.layer("シェイプレイヤー 1").transform.position)
初心者質問になりますが、上記の距離のエクスプレッション(lengthのパラメーター)は
どこに適用すればよいでしょうか?
そしてアンカーポイントとの距離は下記で通用しますでしょうか?
length(thisComp.layer("1").transform.anchorPoint - thisComp.layer("1").transform.position)
距離を変えるということは方向(角度)も考慮しないと座標が決まらないですかね。
方向は純粋に放射状をイメージしているのですが。。
回転させるのは置いておいて、
まずは中心との距離を変動させる方法を見いだしたいと思っております。
長々とすいません。
これを機にエクスプレッションも自分で構築できるようになりたいと思います。m(_ _)m
リンクをクリップボードにコピー
コピー完了
スクリーンショットありがとうございます。
まず、距離を求められていますが、全てのレイヤーの位置がコンポジションの中央になっているため距離は0になります。
読み込みで「レイヤーサイズを保持」した場合は、位置が変わるので距離も変わってきます。
エクスプレッションは、テキストレイヤーのソーステキストに適用すると、文字で表示されます。
なお、CC2018からエクスプレッションを適用したプロパティをプレビュー画面にドラッグすると自動でテキストレイヤーが作成されるようになっています。(ガイドレイヤーなのでレンダリングはされません)
また、位置のプロパティに前の回答にあるエクスプレッションをは追加した時に amp=length() と代入することもできます。
それと、フォーラムへの投稿についてはモデレーターの方の審査後に反映されるため、時間がかかることはありますが、ご辛抱ください。
リンクをクリップボードにコピー
コピー完了
Mukaidaさん
ご返信ありがとうございます。
このデータは「レイヤーサイズを保持」で読み込んだ方が扱い易いですね。ありがとうございます。
エクスプレッションの画面表示の件、
2018アプデ情報にありましたね。完全に忘れてました。。
フォントも変えられるのも嬉しいですね。
今回はやはり基準点(中心点)と方向(角度)を指定しないと、
距離でポジションをコントロール出来ないですね。
それをエクスプレションに記述して計算式を作るには、私の知識が余りにも足りないという事を悟りました。
距離を各ポジションから導く記述を教えて頂いたので、
これからエクスプレッションを学んで行く中で活用させて頂きます。
また色々と学ばせて下さい。m(_ _)m
JavaScriptの入門書をポチりましたw。
リンクをクリップボードにコピー
コピー完了
参考のため、前回のエクスプレションを改良してみました。
コンポジションは、下図のようになります。
まず、整列を使ってオブジェクトを中央に集めます。
controlレイヤーにスライダー制御を2個作成しておきます。
値は、スライダー制御 = 0.1 、スライダー制御2 = 0
各レイヤーの「位置」にエクスプレッションをそれぞれ貼り付けます。
3種類あるので、レイヤーとの組み合わせで元の配置している順番と変わるかもしれません。
var freq1 = thisComp.layer("control").effect("スライダー制御")("スライダー");
var amp1 = 400;
var freq2 = 2;
var amp2 = 50;
var dToR = degreesToRadians(thisComp.layer("control").effect("スライダー制御 2")("スライダー"));
amp3 = amp1 + amp2 * Math.cos(freq2 * time * Math.PI*2);
x = value[0] + amp3 * Math.sin(freq1* time* Math.PI*2 + dToR);
y = value[1] + amp3 * Math.cos(freq1* time * Math.PI*2 + dToR);
[x,y]
var freq1 = thisComp.layer("control").effect("スライダー制御")("スライダー");
var amp1 = 400;
var freq2 = 2;
var amp2 = 50;
var dToR = degreesToRadians(thisComp.layer("control").effect("スライダー制御 2")("スライダー"));
amp3 = amp1 + amp2 * Math.cos(freq2 * time * Math.PI*2);
x = value[0] + amp3 * Math.sin(freq1* time* Math.PI*2 - Math.PI*2/3 + dToR);
y = value[1] + amp3 * Math.cos(freq1* time * Math.PI*2 - Math.PI*2/3 + dToR);
[x,y]
var freq1 = thisComp.layer("control").effect("スライダー制御")("スライダー");
var amp1 = 400;
var freq2 = 2;
var amp2 = 50;
var dToR = degreesToRadians(thisComp.layer("control").effect("スライダー制御 2")("スライダー"));
amp3 = amp1 + amp2 * Math.cos(freq2 * time * Math.PI*2);
x = value[0] + amp3 * Math.sin(freq1* time* Math.PI*2 + Math.PI* 2/3 + dToR);
y = value[1] + amp3 * Math.cos(freq1* time * Math.PI*2 + Math.PI* 2/3 + dToR);
[x,y]
すべてのレイヤーの「回転」に下記を追加します。
value + time * -360 * thisComp.layer("control").effect("スライダー制御")("スライダー")
以上で、回転はしていると思います。
<調整>
各 var の付いている箇所は数値を変えて調整できます。
amp1 は、中央からの距離になるので事前に測定して、数値を貼り付けてください。
dToR は、回転の開始位置の調整です。スライダー制御2 で調整してください。
全体の回転が逆回転する場合は、 freq1 をマイナスの数値にしてください。
オブジェクトを揺らさない場合は、freq2 を 0 にします。
最後にオブジェクトの向きを調整してください。
回転のプロパティの値を変えることで調整できます。
Illustratorから読み込むと、すべてのオブジェクトの角度が 0 になるため、手作業で合わせてください。
回転は、ヌルオブジェクトを中央に追加して親子設定で回すのが無難かもしれません。
リンクをクリップボードにコピー
コピー完了
Mukaidaさん
ご返信ありがとうございます。手順を追って再現中です。
初心者質問ですが、コントロールレイヤーはどのように作成するのでしょうか?
平面レイヤーにスライダー制御を適用して非表示にしてリネームするのでしょうか?
調整レイヤーでも同じですか?
スクリプトを実行したときによく現れる#がついたレイヤーは
みなさんどのように作成されているのか?ご教授頂けたら嬉しいです。
宜しくお願いします。m(_ _)m
リンクをクリップボードにコピー
コピー完了
名前をcontrolにしているだけで、特殊なレイヤーではありません。
プレビュー画面に表示されると邪魔になるので非表示にしていますが、レイヤーメニューからガイドレイヤーを選択して # のマークを付けるとレンダリングされないレイヤーになったと思います。
ご存知とは思いますが、英語版を使用されている場合は、日本語のスラーダー制御はエラーが出るので英語に書き換えて下さい。
リンクをクリップボードにコピー
コピー完了
Mukaidaさん
色々とありがとうございます。
自分なりにアレンジしてみて、いいところまで来た気がするのですが、
各オブジェクトが内側に(中心に)向かって動いているのを
逆に外側に向かって動くようにする事は可能なのでしょうか?
エクスプレッション全体を再構築しなければいけないのであればその必要はありません。
私自身もう少しエクスプレッションの知識を蓄えないとお時間ばかりとらせてしまうことになりますので。
どこかの数値をいじれば簡単に変更出来るのであればお教え頂きたいです。m(_ _)m
リンクをクリップボードにコピー
コピー完了
7行目の式で距離を伸縮させているので、Math.absを追加して絶対値に変換する、または条件式を追加するなど方法も色々で動きも変えることができます。
例えば、下記を7行目と置き換えて下さい。
a = amp1 + amp2 * Math.cos(freq2 * time * Math.PI*2);
amp3 = linear(a,amp1,amp1 + amp2,amp1,amp1 + amp2);
別案
a = amp1 + amp2 * Math.cos(freq2 * time * Math.PI*2);
amp3 = ease(a,amp1-amp2 /2,amp1 + amp2,amp1,amp1 + amp2);
リンクをクリップボードにコピー
コピー完了
例文ありがとうございました。
置き換えてみたのですが、うまく外側への動きにはなりませんでした。
最初の位置合わせがピタリとはいかず、
自分なりにスライダーを追加したりして合わせているのでそれが原因かもしれません。
色々とフォローして頂いてありがとうございました。
勉強を進めて、ちゃんとした質問が出来るまで知識を蓄えてから出直します。m(_ _)m
JavaScriptの入門書が届きました。とても不安ですw。
リンクをクリップボードにコピー
コピー完了
置き換える行数に間違いないでしょうか?
回答で表示されている行番号になるので、amp3=・・・の箇所です。
動きは、初回の設定では
追加したエクスプレッションでは、内側だけ切り取る設定になるので大きく変化することはないと思います。
位置が合わないとのことですが、おそらく読み込んだオブジェクトのアンカーポイントが合っていないのが原因と思います。
同じオブジェクトを使用するなら、1個だけ使用して(水平または垂直に配置してから)コピーを作成したほうが合わせやすいと思います。
アンカーポイントを合わせないなら、Kenji OKIRUMEさんの考えた三角シェイプを使った方法で良いと思います。
伸縮に三角関数を使ったエクスプレッションを使えると思います。
JavaScriptは、配列や条件文など初歩的ですがよく使います。スクリプトの作成時には、エクスプレッションより役に立ちます。
After Effects 独自の要素があるので、サンプル集の書籍をメインに使うと良いかもしれません。
「After Effects エクスプレッション クイックリファレンス」がおすすめです。
新しいエクスプレッションは、
リンクをクリップボードにコピー
コピー完了
Mukaidaさん
詳細までありがとうございます。
円シェイプを3つ作って試したところキレイにイメージ通り動作しました。
おっしゃるように3つのオブジェクトにバラツキがあり、
それがうまく動作していないように見える原因だったようです。
規則的なデザインを規則的に動かすにはイラレの段階で細心の注意が必要ですね。反省します。
ご推奨頂いた書籍も手に入れておきます。
同じ方の書籍を以前に読んでいたのですが、もう一度やり直してみます。
その書籍にも「JavaScriptの全てが必要なわけではない。Aeと関係ない要素がかなりある」とありましたので、
プログラムの世界をのぞき見る感じで気楽に進めていきます。
また幼い質問をしてしまうかもしれませんが、
その時は何卒宜しくお願いします。m(_ _)m
リンクをクリップボードにコピー
コピー完了
Mukaidaさん
すいません。作成方法は分かりました。
選択して、レイヤーメニュー>ガイドレイヤーで作成できました。
みなさん平面レイヤーで作成するのが一般的なのでしょうか?
リンクをクリップボードにコピー
コピー完了
途中経過ですが、、急場しのぎの方法を考えました。
三角シェイプを作ってベジェパスに変換。
以前に教えて頂いたスクリプト「Create Nulls From Paths」でヌルを作成。
いらないヌルを削除して、シェイプレイヤーを回転させ、目分量で各オブジェクトに合わせる。
それぞれ親子付けしてシェイプレイヤーのスケールで中心からの距離を調整。
これで中心からの距離をコントロール出来ました。
が、問題もありまして。。
*スケールにwiggleをかけるとイメージ通りにならない。
*中心からの距離が3つのオブジェクト全て同じにしか出来ない
(三角シェイプを3つ作れば解決しますが)
オブジェクトの数を増やした時などの事を考えると、
距離でのコントロール方法を身につけたいと思っております。
アイデアがあればご教授下さい。自分でもエクスプレッション勉強します。