【After Effectsで】トラッキングとエクスプレッションで図形描画【サッカー動画をつくってみよう】
まずこちらを。
▫︎概要
《 やること 》
今回は、Adobe After Effectsを使って
・2人の選手を繋いで動く直線
・3人以上の選手を繋いで動く図形
を描画できるようにします。
プログラミングでできることが増えるのを体感するいい機会になるかと思います。
《 エクスプレッションとは 》
After Effects内で使えるプログラミングです。
上記サイトにある様々なモーショングラフィックスのように、時間と経過とともに図形を複雑に変化させようとした時、全てを手作業で設定していくのはとても大変です。
エクスプレッションを使い、数式や関数、他の要素から引用することで細かい作業を大幅に減らすことができます。
教材もあります。
《 自己紹介 》
あ、ジーノです。
去年のワールドカップの時、After Effectsで冒頭の動画を作りました。
なんか見にくいし、あんまり意味もないし、そもそも(黙れ(圧
そんな動画ですが、これまで何度か「どうやって作ったのか」とか「なんのソフト使ってるの」とか、具体的に「人をつなぐ方法がわからない」と言った質問が飛んできました。
《 ものづくりの壁 》
さて、どういったジャンルでも「ああ、なかなかスムーズに実現できない、、、」ということは往々にしてあり、コンテンツ制作用ソフトウェアはまさにその典型です。
色々なことができるソフトほど、簡単に表現できないことは少なくないです。
一方で、Coach Paintのような専用のソフトはシンプルで簡単な代わりに「めちゃめちゃ価格が高い」わけです。
駆け出しの人たちにとっては八方塞がりな状態。
《 内 容 》
そこで今回は、After Effectsを使ったサッカーの現象解説動画制作について「調べてもなかなか見つからなくて自分で考えざるを得なかった部分」をメインに書いていきます。
他にもっと簡単なやり方もあるやもしれません。こんなやり方あるよーって方はおしえてください。笑
めんどくさがりなので、After Effects初心者の方向けの説明はおおよそ外部リンクに頼ります。
《 いるもの 》
・ソコソコ性能のあるグラフィックボードを積んだPC
・After Effects
・結構画質のいい試合動画
です。当然のラインナップ。
加えて
・プログラミングへの嫌悪感を捨てる
・手持ちの手段だけで解決策を考える根気
精神面。笑
応用の利かせ方はあなた次第です。。。
さあ!それでは始めていきましょう。
▫︎初期設定など
早速他の人に任せます(
とりあえず最初からコンポジションの設定を変更するくらいまでやってみながら、編集したい試合のシーンをペタッとしてみてください。
たった30秒の動画でも最初は相当時間かかります。ほんの数秒がいいです。
ちなみにとりあえず上のページの項目を押さえておけば「After Effects全くわからない」というところは脱出です。
こんな感じで、操作方法は都度リンクを紹介していくので、頑張ってついてきてください。
▫︎2人の選手を繋いで動く直線
1.《 概要 》
さて、フランス戦の動画は、サムネイルの時点でアルゼンチンのMF4人を囲んだ楕円とそれらを結んだ線が描画されてるかと思います。
After Effectsで、「ある点とある点を結ぶ直線を描く」といったことをする場合、調べると出てくるのはだいたいレーザーというエフェクトを使う方法です。
この方法を使って、選手のモーショントラッキングを引用すると2選手をつなぐ線はとても簡単に描画できます。
しかし、エフェクト名通りレーザーみたいになっているため、あんまり見た目的にいい感じにならないし、応用も効きません。
今回は他の方法を。
線ができるようになれば、選手を楕円で囲むのは応用なので、今回は線だけ説明して、楕円は画像でざっと。
流れ
①モーショントラッキングをして2選手の位置情報を取得
②シェイプレイヤーの新規パスにエクスプレッションを追加
③createPath()関数に位置情報等を記入
今回は、槙野選手とマウリシオ選手をつなぐ線を作るということで。。
2.《 ヌルオブジェクトを作る 》
今回は繋げたい選手の位置情報をゲットしていくわけですが、その情報の入れ物を作っておきましょう。
ヌルオブジェクトを2つ作ります。
オブジェクトの名前は追跡する選手の名前とか背番号とかにしておけば扱いやすいです。
それぞれ槙野、マウリシオと設定しましょう。
3.《 選手のトラッキング 》
できた赤い枠が、選手をおってくれるように設定していきましょう。
続いてトラッキング。ここまでは「調べてできたんだけど、、」という人が多いです。
カーソルはもちろん選手に合わせて、「ターゲットを設定する」のところは先ほど作ったヌルオブジェクトに。
トラッキングの様子は処理中表示されるので、うまく追いかけてくれているか都度確認しましょう。
※画質が低いとうまくいかないです。
諦めるか、もしくは作ったヌルオブジェクトを時間をずらしながら手動で動かしていくと、いびつだけど一応選手を追ってくれる感じにはなります。
4.《 シェイプレイヤーを作成 》
ここが選手をつなぐ線の入れ物になります。
シェイプレイヤーを作成したら、追加から「空のグループ」「パス」「線」を順番に追加してください。
グループの中に、パスと線が入っている状態になればオッケーです。
5.《 エクスプレッション追加 》
新しく追加されたパスの▶︎をクリックすると、下にストップウォッチ的なマークが出てくると思います。
そこにエクスプレッションを追加します。
右に書き込みするための枠が出てきます。
6.《 createPath()とは 》
さて、線を書く際は、createPath()という関数を使っていきます。
名前の通り、「パスを作る」ことができます。
リファレンスには
createPath(points = [[0, 0], [100, 0], [100, 100], [0, 100]], inTangents = [], outTangents = [], is_closed = true)
と書いてあります。
ざっと説明すると、
createPath( points = [選手1の位置情報, 選手2の位置情報, ...], inTangents = [今回は空欄] ,outTangents = [今回は空欄], is_closed = 3人以上繋いだ時に最初と最後の選手を繋いで一周させるかどうか)
みたいな感じで記入してくれという意味です。
7.《 他のレイヤーの情報を引用する 》
さて、選手の位置情報は先ほど作ったヌルオブジェクトに収められています。ね。
このオブジェクトの位置情報を引用しましょう。
ヌルオブジェクトの名前を「槙野」にしている場合、その位置を引用するときは、
thisComp.layer("槙野").transform.position
と書きます。
このコンポジションにある、槙野というレイヤーの、トランスフォームの、位置情報を引用して
と伝えています。辿っていけば表示通りです。
オブジェクトの名前を背番号にしているなら
thisComp.layer("5").transform.position
みたいな感じです。
また、この他にも「回転の項目を引用して」とか色々できます。
8.《 位置情報の修正 》
さて、位置情報の引用の仕方がわかったら、こうかけばいいんだ!と思うはずです。
createPath(points = [thisComp.layer("槙野").transform.position, thisComp.layer("マウリシオ").transform.position], inTangents = [], outTangents = [], is_closed = false)
考え方としては間違っていませんが、思ったように表示されないかと思います。
createPath()で使う位置情報はワールド基準(画面を縦横に100分割)、一方モーショントラックで得たものはレイヤー基準(ピクセルかな?曖昧ですw)になっています。
違う尺度なので、そのまま引用すると思ったように表示されません。
モーショントラッキングで得た位置情報をワールド基準を合わせるために使うのはfromComp()という関数です。コンポジション基準で、みたいな感じだと思います。
先ほどの関数を括弧中に書きます。
fromComp(thisComp.layer("槙野").transform.position)
これで位置情報は整いました。
9.《 createPath() 》
例えば「槙野とマウリシオを繋いでよ」ってお願いするときはこのようになります。
createPath(points = [fromComp(thisComp.layer("槙野").transform.position),fromComp(thisComp.layer("マウリシオ").transform.position)], inTangents = [], outTangents = [], is_closed = false)
これで、トラッキングした2選手を繋ぐ線ができます。再生してみると、線も動くはずです。
10.《 デザインを変更 》
先ほど紹介した動画を参考に、線の各項目をいじると色を変えたり点線にしたりできます。
11.《 応用 》
動画のように複数人を楕円でそれぞれ囲ってつなぐ場合は、
シェイプレイヤーの項で作ったグループ内に「楕円1、1と2をつなぐ線、楕円2、2と3をつなぐ線、楕円3」といった順番でパスを追加していきます。
楕円の位置は、同様にエクスプレッションで選手のヌルオブジェクトの位置情報を指定してください。同じくfromComp()です。
続いて、グループにパスを結合を追加、モードを「追加」にすると、多分縁の中には線が続かないようになります。
(無理やり作ったのでエラー出てますが気にせず)
色の設定等は、先ほどと同様です。
▫︎3人の選手を繋いで動く図形
1.《 概要 》
続いては、動画序盤で「スペース」と書かれ明るくなっていた部分の描画方法についてです。
先ほどのように線を書いているわけではなく、多角形の範囲内の明るさを変更しています。
ここでも、createPath()を使っていきます。
同様に、
流れ
①モーショントラッキングをして3選手の位置情報を取得
②調整レイヤーを作成し、エフェクトを追加して見た目を変える
③調整レイヤーにマスクを追加し、範囲を指定する
となりますが、序盤は同じ作業なので、ぶっ飛ばして2からいきます。
僕は浦和サポなので、「青木、柏木、エヴェルトンが作る三角形を表示する」ということで進めていきます。
2.《 調整レイヤーを作る 》
調整レイヤーはお化粧みたいなものです。映像を明るく見せたり、陰影を濃くしたり、見た目を変えることができます。
フランス戦の動画では、アルゼンチンの前線と中盤の選手の間にできたギャップを表現するため、できたスペースについては輝度を高くしています。
まずは、何も考えず映像全体の輝度を変更しましょう。
調整レイヤーを作成したら、エフェクト→カラー補正→輝度&コントラストをクリック。
調整レイヤー内にエフェクトというのができているので、そこから輝度を変更してください。
3. 《 調整レイヤーにマスクを追加する 》
マスクを使うと、切り抜きを行うことができます。
調整レイヤーにマスクを加えることで、指定の範囲のみに調整を加えることが可能になります。
調整レイヤーに合わせておいて、レイヤー→マスク→新規マスクを選択。レイヤー内にマスクという項目が追加されます。
▶︎を開いていくと、マスクパスというのが出てきます。
そうです、、、!!ここにcreatePath()を追加しましょう。
4.《 createPath()で多角形を作る 》
多角形は、三つ以上の線分で囲まれた平面図形です。囲むためには、ぐるっと最初の位置に戻ってくれればいいわけです。
createPath()には、最初の位置に戻るかどうか書き込むところがあります。確認しましょう。
createPath( points = [選手の位置情報1, 選手の位置情報2, ...], inTangents = [今回は空欄] ,outTangents = [今回は空欄], is_closed = 3人以上繋いだ時に最初と最後の選手を繋いで一周させるかどうか)
最後のis_closed =のところをtrueにすることで、「囲んでね」と伝えることができます。
createPath(points = [fromComp(thisComp.layer("青木").transform.position),fromComp(thisComp.layer("柏木").transform.position),fromComp(thisComp.layer("エヴェルトン").transform.position)], inTangents = [], outTangents = [], is_closed = true)
これで動く図形もできました。
▫︎まとめ
記事の構成としては、サッカー関連で動画を作ってみたい人がいつの間にかプログラミングにも触れ合ってる、という流れで書いてみました。
難しいプログラミング言語も、基本的には似たように「これ教えて」とか「こんなことやって」とお願いするような形式になっています。
そうすると、PCやらゲーム機は「こんなのでてきたよ〜」とか「できたよ〜」とか返してくれるわけです。
今後は分析でも統計やAIなどを用いることが増えてくることと思います。
敬遠せずに、できることを増やして試行錯誤することを楽しむきっかけになれば嬉しいです。
この記事が気に入ったらサポートをしてみませんか?