皆さんこんにちは。いつもご訪問頂きまして心より感謝申し上げます。
先日、DaVinci Resolve Fusion チュートリアル、
"Expression(エクスプレッション)を使ってレスポンシブなテキストアニメーションを作る方法"
を NsFarm Channel にアップしました。
「知っていると便利なちょっとしたテクニック」など情報の共有となれば嬉しいです。
ツイッター 、インスタグラム もやってますので気が向いたらフォローしていただけますと嬉しいです
過去に配信した DaVinci Resolve 関係のコンテンツは、「NsFarm's DaVinci Resolve And Fusion Official Page」にまとめています。
Expression - Edit Controls - Responsive | Davinci Resolve Fusion チュートリアル
今回のチュートリアルでは以下の内容が学べます。
・DaVinci Resolve の基本的な使い方、編集方法、初め方、手順
・ノードベースの VFX、コンポジット(合成)ソフトウェア Fusion の使い方、編集方法、初め方、手順
・Expression(エクスプレッション)を使ってテキストの高さと幅を取得する方法
・Expression(エクスプレッション)を使ったレスポンシブアニメーションの設定方法
・ノード(ツール)に新しいコントロール(パラメータ)を追加する方法(After Effects のスライダー制御ライク)
・別のノード(ツール)のコントロール(パラメータ)を参照する方法(オリジナル参照ノードの作り方)
・全てのコントロール(パラメータ)を持った Setting ファイルを Macro として登録する方法(パラメータ全部入りのマクロの作成方法)
前回のチュートリアルでは、Instance の機能を使ったレスポンシブなテキストアニメーションを作成方法をご紹介しました。
Instance の機能を使ったレスポンシブなテキストアニメーションのチュートリアル
今回のチュートリアルではさらにグレードアップした"Expression(エクスプレッション)"を使ったレスポンシブテキストアニメーションの作り方を紹介しています。
Expression(エクスプレッション)を使うことでほぼほぼ制限なく Fusion の機能を利用出来るようになるのでより表現したいレスポンシブテキストアニメーションが作成できると思います。
ではなぜ前回は、Instance(インスタンス)の機能を使ったレスポンシブテキストアニメーションの作り方を紹介したかと言うとその時は、
""Expression(エクスプレッション)を使って文字の高さ、幅の取得方法"
がわかっていなかったからです^^;
前回のチュートリアルを Twitter で告知した際に照山明さん(@akiraxe )とコメントのやり取りをさせて頂きました。
GAIPRO.(@gaiprotter )を運営されていて、Youtube チャンネルの GAIPROMOTION ではDaVinciのスキマと題してとってもわかりやす DaVinci Resolve の使い方を紹介されています。
歯切れが良く気持ち良いトークで DaVinci Resolve を使う上でとっても参考になる機能を紹介されています。もしまだチャンネル登録されていない方がいらっしゃいましたら是非チェックしてみてください。
そのコメントのやり取りの中で照山明さんにテキストの高さと幅を取得するエクスプレッションを教えて頂きました(感謝です)。
テキストの高さと幅を取得するエクスプレッション
・テキストの幅の取得
(Text1.Output.DataWindow[3]-Text1.Output.DataWindow[1])/Text1.Output.OriginalWidth
・テキストの高さ取得
(Text1.Output.DataWindow[4]-Text1.Output.DataWindow[2])/Text1.Output.OriginalHeight
こちらは Text1 を使った場合のエクスプレッションなのでもし Text2 などを使用した場合は Text1 の部分を Text2 に置き換えます。
このエクスプレッションの内容は動画内で詳しく解説しているのでもしよろしければそちらをご覧いただいたほうがわかりやすいと思います。
一見難しそうなエクスプレッションですがテキストの幅の取得の方だけみてみると
(Text1.Output.DataWindow[3]-Text1.Output.DataWindow[1])/Text1.Output.OriginalWidth
こちらの数式の構造だけみると
(x-y)/z
という数式となっていて計算式自体は実はシンプルなものに置き換えることが出来ます。
シンプルな式からさらに x にあたる 「(Text1.Output.DataWindow[3]」の部分を取り出してみると
①Test1、②Output、③Datawindow[3]という 3 つの要素が「.(ドット)」で接続されています。この「.(ドット)」は、ドット演算子と呼ばれるものでオブジェクト指向のプログラミングにおいてオブジェクトがもつメンバーにアクセスする際に使用される演算子になります。
プログラミングの経験がないとチンプンカンプンだと思いますが個人的には日本語の「の」に置き換えてあげるとわかりやすいと思います。
「.(ドット)」を「の」に置き換えてみると
Text1 .(の) Output .(の) Datawindow[3]
となります。
つまり、Text1 の中には Output というメンバー(パラメータ)があり更に Output は Datawindow[3] というメンバー(パラメータ)を持っていてそのデータを取り出していることになります。
Datawindow[3] の [3] は、配列と呼ばれるもので人まとまりにしたデータテーブルの 0 相対だと 4 番目のデータを取り出しています。
実際今回のエクスプレッションには、DataWindow[1]、DataWindow[2]、DataWindow[3]、DataWindow[4] が出てきます。
これらを説明すると Fusion のビューワー画面は左下を原点とした座標データで管理されています。左下の座標が(0,0)、右上の座標はプロジェクト設定の解像度。例えば 1920x1080 が設定されている場合は、(1920,1080)となります。
そして、この座標の中に四角があったとするとその左下の座標が(Text1.Output.DataWindow[1], Text1.Output.DataWindow[2])。右上の座標は、(Text1.Output.DataWindow[3], Text1.Output.DataWindow[4])となっていてその値を Fusion のエクスプレッションで取得できるということになります。
つまり、
(Text1.Output.DataWindow[3]-Text1.Output.DataWindow[1])
は、右上の x 座標から左下の x 座標の値を引いていることになり四角の横幅のピクセルデータを取得しています。
これを、「Text1.Output.OriginalWidth」で割り算しています。割り算をしている理由は、ピクセルデータから Fusion の設定データに変換するためです。
Fusion の横幅と高さを設定する Width と Height は、最小が 0 画面の最大で 1 を設定する仕様になっています。これは Fusion が解像度を気にせず値を設定出来るというメリットがあります。
つまり、「Text1.Output.OriginalWidth」は解像度の横幅の最大値、1920x1080 であれば 1920 という値が入っていてその値で割り算することで変換しています。高さも同様に考えることが出来ます。
このエクスプレッションを使ってテキストの高さと横幅が取得出来るので後はこれを Rectangle や Ellipse に設定することでレスポンシブなテキストアニメーションにしようすることが出来ます。
エクスプレッションそのままだと文字と設定した図形との間隔がありません。エクスプレッションにオフセットを追加するかノードの後に Transform を追加してそちらでサイズを調整して使います。
次に紹介しているのがノード(ツール)に新しいコントロール(パラメータ)を追加する方法です。
Fusion のノード(ツール)はデフォルトでたくさんのコントロール(パラメータ)を所有していますがそこに新しいコントロール(パラメータ)を追加することができます。
ノード(ツール)の上で右クリックしてコンテキストメニューから"Edit Controls..."を選択します。するとコントロールを設定できるダイアログが開きます。
追加するコントロールに名前を付けると自動的に ID が割り振られます。Fusion のプログラムは、この ID にアクセスして値を取得したり設定したりしているようです。
名前、ID が設定されたら次に Type を選択します。「Number, Point, Text」の中から選択します。Number は数値系。Point は座標系。Text はテキスト系です。
次に Page を選択します。Page とは Inspector の上部にあるタブのようなものです。Fusion ではタブではなくページと内部的には呼ぶようです。
ここで"User"を選択すると新たに User ページが追加され追加したコントロールを人まとまりに管理することが出来ます。 トップのページに追加したい場合はトップのページを選択します。Inspector のページのアイコンにマウスを持っていくとヘルプでページの名称が表示されます。
次に Input Ctrl で SliderControl とか ScrewControl とかが選べ Default でデフォルト値、Range で設定範囲などを設定出来ます。
今回はこの機能を使って Costom Tool に新しく ①RefWidth、②RefHeight、③RefOffset というのを追加してみました。
そして、RefWidth にテキストの幅を取得する「(Text1.Output.DataWindow[3]-Text1.Output.DataWindow[1])/Text1.Output.OriginalWidth」。
RefHeight にはテキストの高さを取得する「(Text1.Output.DataWindow[4]-Text1.Output.DataWindow[2])/Text1.Output.OriginalHeight」を入力しました。
このようにした理由は、別のノードにエクスプレッションを追加したい時にこの長いエクスプレッションを設定するのではなく Costom Tool のコントロールを参照して使いたかったからです。
Ellipse とか Rectangle とか使用するノードが増えてそれら全てに長いエクスプレッションを設定するのを避けたかったからです。
そうそう Costom Tool は新しく"Ref"という名前をつけました。参照する時に使われる名前になるのでわかりやすい名前を付けると良いと思います。
MyParam とか MyData とか悩みました。
これで参照するある意味オリジナルのノード(ツール)が出来ました。ここからさらに発展した使い方としてこの新たに名前をつけて作成した"Ref"のマクロを作成しました。
通常マクロはノードを右クリックして「Macro → Create Macro...」から Macro Editor を呼び出して作成します。
機能が絞られたマクロを作成する際はこの Macro Editor で使用したいコントロールにチェックマークを付けることで作成します。
ただ今回は全ての項目にチェックマークがついたマクロが作りたかったです。その時に全てのチェックマークにマークをつけていくのは大変です。
その時の裏技的テクニックは"Setting ファイルを Macro フォルダに保存"する方法です。
マクロファイルも Setting ファイルですが前述のように Macro Editor で作成する Setting ファイルはチェックボックスで項目を設定する必要があります。
一方、ノードを右クリックしてコンテキストメニューの"Settings → Save As..."で保存される Setting ファイルは全てのコントロール(パラメーター)を所有しています。
これを Macro フォルダに設定します。Macro フォルダのパスは、Macro Editor を開いて「File → Save As」で保存先のダイアログが開くと思います。そこで取得、調べることが出来ます。
私の環境(Windows10 Pro)では以下のパスになっていました。
C:\Users\ユーザー名\AppData\Roaming\Blackmagic Design\DaVinci Resolve\Support\Fusion\Macros
Macro 化するメリットは Shift + Space キーで表示される Select Tool で呼び出せる点があります。 別の Fusion Conposition でも素早く呼び出せるので作業性は良いと思います。
マスクツールの Rectangle の座標は、上記テキストの Output を Mask に変更します。
左下の座標は、(x, y) は、(Rectangle1.Mask.DataWindow[1],Rectangle1.Mask.DataWindow[2])
右上の座標は、(x, y) は、(Rectangle1.Mask.DataWindow[3],Rectangle1.Mask.DataWindow[4])
で取得可能です。
・Text+
・Rectangle
・Circle
・Merge
・オリジナル Ref(Costom Tool に Edit Controls を使ってコントロールを追加したもの)
制作に使用した時の PC 環境の紹介です。
------------------------------------------
PC: G-Master Spear Z390-Taichi OC
CPU: Intel Core i9-9900K [5.0GHz OC]
GPU: GeForce RTX2080Ti 11GB
Memory: 32GB
Keyboard:Logicool K750r
Mouse:Logicool M220GR
Mic:FIFINE K670
Headset:SONY MDR-XB450
------------------------------------------
いかがだったでしょうか。
今回チュートリアルでは、Expression(エクスプレッション)を使ってテキストの高さと幅を取得しレスポンシブなアニメーションを制作する方法を紹介致しました。 その際に便利に使えるオリジナル参照用の Ref ノードの作り方、それをマクロとして登録する方法も合わせて紹介しています。 もう少し改善が必要な部分もありますがそれは後々やりながら改善できたらと思っています。 次回は、実際に何かレスポンシブなアニメーションを作って紹介出来たらと思っています。
ではではこれからも DaVinci Resolve の使い方、魅力を伝え、皆様の映像制作に少しでも刺激を与えられたらと思っています。
それでは最後まで読んで頂きましてありがとうございました。
皆さんとの技術&作品共有の場になれば幸いです。
関連記事
⇒ NsFarm's DaVinci Resolve And Fusion Official Page、TOP へ
関連記事