見出し画像

【DaVinci Resolve】MultiMergeノードをスライダーで切り替える方法

まえがき

どうも、火注ゆかなです。
最近は暑くて参ってしまいますね。日中は日傘使わないと出歩けません。日傘良いですよ、日傘。

今回のお話はDaVinci Resolve Ver.18.5から追加されたMultiMergeノード関連です。
去年追加されたものを1年後に説明するのは如何なものでしょうか。はは。

立ち絵マクロを作成しようとすると、たくさんの画像をLoaderノードで読み込み、Mergeノードをいくつも使って一つずつ結合しなきゃいけませんでした。でもMultiMergeノードなら一つで複数の入力を結合できます。素晴らしい。

下記動画によると入力ノードが64を超えると挙動がおかしくなるようで、無制限に結合できるわけではないようですが、それでもかなり楽になりますね。

さて、MultiMergeノードは複数の入力をレイヤーとして管理できます。
立ち絵マクロなどを組む場合など、このレイヤー表示をスライダーなどで切り替えられれば楽だろうと考える人もいるかもしれません。

結論から言うと、それは実現できます。

レイヤーON/OFFは別コントロールから操作可能

でも多分、この記事を見てる人はそのやり方がわからない方々でしょう。
もしかしたら需要があるかもしれないので、備忘録も兼ねてやり方を記述しておきます。


MultiMergeノードをスライダーで切り替える方法

右クリックのメニューからは数式を追加できない

MultiMergeノードについて調べにきた人なら、さすがにコンポジションとノードについてはご存知でしょうから省略しますね。

ノードにはユーザーコントロールを追加できます。
追加しただけでは何の意味もありませんが、操作したいコントロールに数式を設定することで間接的に操作できるようになります。

コントロールへの数式の追加は基本的に、
対象コントロールを右クリック→「エクスプレッション」をクリック
で追加できます。

対象コントロールを右クリック→「エクスプレッション」で数式追加

ですが、MultiMergeノードのレイヤーON/OFF部分は右クリックをしても「エクスプレッション」が出てきません。

MultiMergeノードのLayerListは「エクスプレッション」がない

とはいえ、諦めることはありません。

一部コントロールはテキスト編集で数式を追加できる

知っている人は知っていることですが、コンポジションのノードはJSON形式のテキストで表現されます。
ノードをCtrl+Cなどでコピーし、テキストエディタに貼り付けると確認・編集ができます。つまりテキストを直接編集して数式を追加してやれば良いのです。

まず、MultiMergeノードに操作用のスライダーコントロールを追加しておきます。
入力レイヤーが4つなので入力範囲は1~4にしておきます。
また、入力レイヤーは先に全て繋いでおいてください。

レイヤー表示切替に用いるスライダー設定

その後、ノードを選択し、テキストエディタへコピペしてください。
すると、こんな感じになるはずです。


{
	Tools = ordered() {
		MultiMerge1 = MultiMerge {
			CtrlWZoom = false,
			Inputs = {
				LayerOrder = Input { Value = ScriptVal { {
							[0] = 1,
							2,
							3,
							4
						} }, },
				LayerName1 = Input { Value = "Text1 Layer", },
				LayerEnabled1 = Input { Value = 0, },     -- LayerEnabledが表示されない場合、レイヤー表示のチェックを外してからコピー
				LayerName2 = Input { Value = "Text1_1 Layer", },
				LayerEnabled2 = Input { Value = 0, },
				LayerName3 = Input { Value = "Text1_2 Layer", },
				LayerEnabled3 = Input { Value = 0, },
				LayerName4 = Input { Value = "Text1_3 Layer", },
				LayerEnabled4 = Input { Value = 0, },
			},
			ViewInfo = OperatorInfo { Pos = { 825, -49.5 } },
			UserControls = ordered() {
				Layer_OnOff_Slider = {
					LINKS_Name = "Layer_OnOff_Slider",
					LINKID_DataType = "Number",
					INPID_InputControl = "SliderControl",
					INP_Default = 1,
					INP_Integer = true,
					INP_MinScale = 1,
					INP_MaxScale = 4,
					INP_MinAllowed = 1,
					INP_MaxAllowed = 4,
					IC_Steps = 1,
					ICS_ControlPage = "Merge"
				}
			}
		}
	},
	ActiveTool = "MultiMerge1"
}

Inputsという項目内のLayerEnabledがレイヤー表示のON/OFFです。ここのInputの設定値が0なら非表示、1なら表示されます。
LayerEnabledが表示されない場合、レイヤー表示のチェックを外してからコピーしてください。

このLayerEnabledのInputに数式を追加します。
レイヤー1なら
Expression = "iif(Layer_OnOff_Slider==1, 1, 0)"
と設定します。Layer_OnOff_Sliderと比較する数値はレイヤー番号に合わせてください。
これを全てのレイヤーに設定すると下記の通りになります。

{
	Tools = ordered() {
		MultiMerge1 = MultiMerge {
			CtrlWZoom = false,
			Inputs = {
				LayerOrder = Input { Value = ScriptVal { {
							[0] = 1,
							2,
							3,
							4
						} }, },
				LayerName1 = Input { Value = "Text1 Layer", },
				LayerEnabled1 = Input { Value = 0, Expression = "iif(Layer_OnOff_Slider==1, 1, 0)",},
				LayerName2 = Input { Value = "Text1_1 Layer", },
				LayerEnabled2 = Input { Value = 0, Expression = "iif(Layer_OnOff_Slider==2, 1, 0)",},
				LayerName3 = Input { Value = "Text1_2 Layer", },
				LayerEnabled3 = Input { Value = 0, Expression = "iif(Layer_OnOff_Slider==3, 1, 0)",},
				LayerName4 = Input { Value = "Text1_3 Layer", },
				LayerEnabled4 = Input { Value = 0, Expression = "iif(Layer_OnOff_Slider==4, 1, 0)", },
			},
			ViewInfo = OperatorInfo { Pos = { 825, -49.5 } },
			UserControls = ordered() {
				Layer_OnOff_Slider = {
					LINKS_Name = "Layer_OnOff_Slider",
					LINKID_DataType = "Number",
					INPID_InputControl = "SliderControl",
					INP_Default = 1,
					INP_Integer = true,
					INP_MinScale = 1,
					INP_MaxScale = 4,
					INP_MinAllowed = 1,
					INP_MaxAllowed = 4,
					IC_Steps = 1,
					ICS_ControlPage = "Merge"
				}
			}
		}
	},
	ActiveTool = "MultiMerge1"
}

数式の追加が終わったらMultiMergeノードを上書きしましょう。
対象テキストをコピーし、MultiMergeノードを右クリック→「設定をペースト」をクリックすれば上書きできます。

「設定をペースト」でノードを上書き

「設定をペースト」だとなんか上手くいかない場合は、何もないところでCtrl+Vで貼り付けると新しいノードとして追加できるので、その後で各入力ノードと再接続して下さい。

これで記事冒頭の動画のように、スライダーで表示レイヤーを切り替えることができるようになりました。

ちなみに過去記事でも触れていますが、LabelControlのネストの開閉なんかもこの方法で間接操作できたりします。実用的かはさておき。


あとがき

今回は通常の方法で数式を設定できないコントロールに、テキストエディタを介して設定する方法を説明しました。
DaVinci Resolveにはユーザーコントロールの順番を入れ替える機能とかはついてない(一応できるけど面倒臭い)ので、その順番を入れ替える際にも役立ちます。

ノードをテキストエディタで編集できるという知識は、海外のDaVinci Resolve関連の情報フォーラム「we suck less」とかを覗くと、Davinci Resolveに長く触ってる人は大抵知ってそうな感じ。https://www.steakunderwater.com/wesuckless/index.php

あと、ノードのコントロールをテキスト編集で設定できるということは、JSON形式のテキスト編集するスクリプトでマクロテンプレートの自動作成ができるってことでもあります。大変ですけどね。

この情報がお役に立てば幸いです。

サポートしていただけるとその分の価値を提供できてるんだなって励みになります。