DaVinci Resolveのsettingファイルの再編集(ラベルコントロール編)
ラベルコントロールについて
ラベルコントロールは映像出力には直接関与しないコントロールですが、UI上のコントロールをまとめて折りたたむ事が出来るためオーサリング時のユーザビリティーに大きく関与するコントロールです。
また、ノードに予め設定されているラベルはマクロ書き出し時には書き出せません。
インスペクタのコントロールの編集からラベルコントロールが追加可能でそちらはマクロに書き出す事ができますが、DaVinci Resolve
内ではコントロールの順番を変更する事ができないので適切な位置に差し込むのが困難です。
そこで、ラベルコントロールを活用しようと思ったらテキストエディタでの編集がほぼ不可欠です。
私の場合はDaVinci Resolve
内でラベルコントロールの作成はせずに、テンプレなどを利用してテキストエディタで作成する場合が多いです。
有志の方が作成されたラベルコントロールの作成を簡単にするツール等も公開されているのでそちらを利用するのも良いと思います。
settingファイルにおけるラベルコントロールの記述場所
記述場所
settingファイル
のデータ内のTools = ordered() {...}
のブロック内にノードの詳細なデータが記述してあります。
各ノードに対してユーザーが追加したコントロールや既存のコントロールの設定を変更した項目があればUserControls = ordered() {...}
というブロックが作成されるのでそのブロック内に記述します。
UserControls = ordered() {...}
というブロックが無い場合には作成してその中に記述します。
配置場所
UserControls = ordered() {...}
のブロック内に記述したラベルコントロールをインスペクタ上に配置するにはInputs = ordered() {...}
のブロック内でInstanceInput
で呼び出します。
例えばBackGround1
のノードのUserControls = ordered() {...}
ブロックに記述したID
がLabelControl1
というラベルを配置するなら次のようになります。
Inputxx = InstanceInput {
SourceOp = "BackGround1",
Source = "LabelControl1"
}
ラベルコントロールの記述内容
ControlID = {
INPID_InputControl = "LabelControl",
LINKS_Name = "ラベル名",
LINKID_DataType = "Number",
INP_Integer = true,
INP_MinScale = 0,
INP_MaxScale = 1,
INP_MinAllowed = 0,
INP_MaxAllowed = 1,
LBLC_DropDownButton = true,
INP_Default = 0,
LBLC_NumInputs = 10,
LBLC_NestLevel = 1,
INP_External = false,
INP_Passive = true,
INP_SplineType = "StepIn",
ICS_ControlPage = "Controls"
},
各項目の内容
- ラベルコントロールの値は
0
か1
の2値しか期待されていないです。 - 値は
LBLC_DropDownButton = true
の場合においてのみ有効な値です。 -
0
が閉じた状態、1
が開いた状態
必須の項目
ControlID = {...}
- コントロールのID
- 任意のIDを設定可能。ノードにつき一意のIDである必要があります。
INPID_InputControl
- コントロールの種類
- ラベルコントロールの場合は
"LabelControl"
になります。
LINKS_Name
- コントロールの表示名
- ラベルコントロールの表示名に限り
html
タグが使用できる模様。
どこまで許容されているかは私は未検証。今後非推奨になる可能性も。
LINKS_Name = "<font color = 'red'>ラベル名</font>"
とした場合ラベル名が赤色で表示されました。
今時font
タグなんて使う人居ないのだろうけど<span style="color:red">
より短いから古のタグの使い道がこんな所にあるなんて思いませんでした。
必須ではない項目
ラベルコントロールにはFusionであらかじめ設定されているディフォルト値があるので設定しなければディフォルト値が採用されます。
よって、ディフォルトで良い項目は敢えて記述する必要は無いです。
LINKID_DataType
- 値のデータ型
- ラベルコントロールの場合は値が
0
か1
しかないので数値型となり、値は"Number"
になります。
INP_Integer
- 値が整数であるか
- ラベルコントロールの場合は値が
0
か1
しかないのでtrue
で良いです。
ディフォルトの値は私は未検証です。
最小値と最大値
ラベルコントロールの場合は値が0
か1
しかないので敢えて記述しなくてもディフォルトで以下のようになっていると思われますが、単純にラベルをクリックした時の値を0
と1
でトグルしている可能性もあります。
キー | キーの内容 | 値 |
---|---|---|
INP_MinScale | 値の最小値 | 0 |
INP_MaxScale | 値の最大値 | 1 |
INP_MinAllowed | 許可する値の最小値 | -1e+06 |
INP_MaxAllowed | 許可する値の最大値 | 1e+06 |
LBLC_DropDownButton
- ラベルコントロールを開閉式にするか
- 開閉式にする場合は
true
。true
を指定した場合ラベルで纏める範囲の上下に区切り線が表示されます。 - falseを指定した場合、或いは何も記述しなかった場合は開閉式ではなくなります。
INP_Default
- ディフォルト値。
0
が閉じた状態で1
が開いた状態 - 記述しなかった場合は
0
が採用されます。 - あくまでもディフォルト値なのでノードの
Inputs = {...}
のブロックに
LabelControl = Input { Value = 0 }
等と記述があればそちらの値になります。ディフォルト値を設定しているにもかかわらず意図した状態となっていない場合はそこをチェックすると良いです。
LBLC_NumInputs
- 値が
0
の場合、ラベルコントロール以降のInstanceInput
をいくつ隠すかを数値(整数)で指定します。 - 区切り線や空白、ラベルなどを含む
InstanceInput
の数を指定します。
LBLC_NestLevel
- ラベルの入れ子状態を指定します。
- 特に指定しなくても入れ子状態は自動で判定される模様。
INP_External
- 外部からの制御を許可するか
具体的にはアニメートを可能にするかです。 - 特に何も記述しなければ自動的に
false
になるので特に理由がない限り変更又は省略しない方が無難と思われます。
INP_Passive
- 値が静的か動的か
- 通常はインスペクタ上のユーザー入力によってのみ値が変化するので
true
で良いと思われますが特に記述する必要は無いです。
INP_SplineType
- アニメーションの補完方式
- 特に記述しなければ
"Default"
が採用されますが、値が0
か1
しか無く、アニメーションもしないので明示的に記述するならば"StepIn"
で良いと思われます。
ICS_ControlPage
- ページ設定。既存のページである必要は無く任意のページを作成可能です。
- ここで指定していても
InstanceInput
のPage
で指定した物が優先されるので敢えてここで記述する必要は無いです。
むしろページ設定の設定場所が分散すると管理し辛くなるのでここでは記述しない方が好ましい場合があります。
ラベルコントロールのテンプレ
以上の項目のうち通常のラベルの使用目的はいくつかの項目を折りたたんで隠せるようにする事が殆どだと思うので、最低限の記述をテンプレ化すると以下の様になります。
ラベルのコントロールID = {
INPID_InputControl = "LabelControl",
LINKS_Name = "ラベル名",
LBLC_DropDownButton = true,
INP_Default = 0か1,
LBLC_NumInputs = 隠す数,
INP_External = false,
},
Discussion
ラベルコントロールを空白の代わりに利用する
ラベルコントロールの主な使用目的はインスペクタ上のコントロールをまとめて折りたためるようにする事ですが、単純に見出しのようにして利用する事も可能です。その特性を利用して空白のように利用する事も可能です。
但し、その場合
ApplyBlank
を利用した空白よりも高さが大きくなります。何か高さを指定する方法が存在するかも知れませんが私が試した限りでは高さを小さくする方法は見つけられませんでした。具体的な手順
UserConrols = Orderd() {...}
ブロック内にラベルコントロールを追加する。LINKS_Name
を空文字にしておくINP_External
はfalse
にしておく(キーフレームのスイッチを表示させないため)InstanceInput
で配置する。InstanceInput
は必ずしもInputxx = InstanceInput {...}
の形式である必要はありません。下画像のようにキーの部分は任意の名前でも問題ありません。ApplyBlank
と比べて高さが大きい事が分かります。空白の高さを大きくする方法
高さを小さくする方法は見つけられませんでしたが、大きくする方法は見つけました。実用性としては低いと思われます。
html
タグの改行を利用します。ラベルコントロールのハック的な利用方法として知っておくと良いかもしれません。