C:\ProgramData\Blackmagic Design\DaVinci Resolve\Support\LUT\TY_DCTL\show_internal_value.dctl(3106): warning: parameter "rgb" was set but never used
C:\ProgramData\Blackmagic Design\DaVinci Resolve\Support\LUT\TY_DCTL\show_internal_value.dctl(3148): error: identifier "rgb" is undefined
2 errors detected in the compilation of "C:\ProgramData\Blackmagic Design\DaVinci Resolve\Support\LUT\TY_DCTL\show_internal_value.dctl".
非常に恥ずかしい話なのだが、筆者はこれまで DaVinci の EDITページで色処理を行う経験が殆どなく、
Timeline color space が何のために存在しているのか分かっていなかった(勝手に内部処理は Linear空間で行われると考えていた)。
今回 DCTL のコードを書くことで初めて Timeline color space の意味が理解できた。
筆者の理解は次の通りである。Timeline color space は Color Grading における ACEScct のように、信号処理の内容に応じて適切な色空間を選択するために存在している。
さて、そうなると Timeline color space の値域を正しく理解しておく必要がある。
なぜならば値域を理解しないことには DCTL のコードを書けないからである(HDR の場合は 1.0 を超える値を取り扱うので)。
筆者が調査したところ、0.0 ~ 1.0 に正規化された入力データを使用した場合の
Timeline color space の値域は以下の表1となることが分かった。
表1. 入力の Gamma 設定と Timeline color space の Gamma 設定の組み合わせにおける値域の例
入力の Gamma
Timeline の Gamma Linear
Timeline の Gamma PQ
Timeline の Gamma 2.4
2.4
0.0 ~ 1.0
0.0 ~ 0.508
0.0 ~ 1.0
PQ
0.0 ~ 100.0
0.0 ~ 1.0
0.0 ~ 6.81
設定によって値域が大きく異なるため、Timeline color space で処理を行う DCTL コードを書く際は、この点に注意する必要がある。
4.4. DCTL では CTL のコードをそのまま流用できない
筆者は当初、CTL のコードも include して使い回せると考えていたのだが、そんなことは無かった。
usage: ocioconvert [options] inputimage inputcolorspace outputimage outputcolorspace
or: ocioconvert [options] --lut lutfile inputimage outputimage
or: ocioconvert [options] --view inputimage inputcolorspace outputimage displayname viewname
or: ocioconvert [options] --invertview inputimage displayname viewname outputimage outputcolorspace
Options:
--lut Convert using a LUT rather than a config file
--view Convert to a (display,view) pair rather than to an output color space
--invertview Convert from a (display,view) pair rather than from a color space
--gpu Use GPU color processing instead of CPU (CPU is the default)
--gpulegacy Use the legacy (i.e. baked) GPU color processing instead of the CPU one (--gpu is ignored)
--gpuinfo Output the OCIO shader program
--h Display the help and exit
--help Display the help and exit
-v Display general information
OpenImageIO or OpenEXR options:
--float-attribute %L "name=float" pair defining OIIO float attribute for outputimage
--int-attribute %L "name=int" pair defining an int attribute for outputimage
--string-attribute %L "name=string" pair defining a string attribute for outputimage
残念ながら画面表示用の Display View Transform (※4) は PC Monitor にしか適用されなかった。
そのため Video Monitor への出力は ACEScg のままであり表示のミスマッチが生じる結果となった。
その一方で追加調査の結果、手動でエフェクトを適用することで表示のミスマッチを解決できることが分かった。図4 に示すように Display View Transform の代わりに OCIO Color Space Transform エフェクト(※5) を使用することで解決できた。これにより、筆者の当初の目的であった HDR表示は無事に達成できた。
※4 Display View Transform は After Effects では Display Color Space として設定する (5.2.5 を参照)。Display View Transform の詳細に関しては OCIO v2 の過去記事 を参照
※5After Effects の OCIO Color Space Transform は In/Out の Color Space に Display Color Space を指定することができない。そのため Video Monitor に伝送する映像を Display Color Space に変換するには、事前に Display Color Space と同様の変換が行われる Color Space を config.ocio のcolorspacesブロックに事前に記述しておく必要がある
なお、一般的な用途の場合は After Effects に標準で組み込まれている config.ocio の利用を強く推奨する(筆者の作成した config.ocio は検証用なので)。
カスタマイズを行う場合でも Academy Software Foundation からリリースされている config.ocio をベースに改良することを強く推奨する。
準備した画像ファイルを画面左上の Project パネルにドラッグ&ドロップして読み込ませた。次に各画像ファイル上で右クリックを行い、Interpret Footage --> Main を選択した。
出てくるダイアログで Colorタブを選択し、Override Media Color Space の項目で画像に適した Color Space を選択した。
Color Space は 図8、図9 に示すようにP3D65_ST2084_1920x1080_HEVC.movではInput/P3D65-PQ_ColorSpaceを、それ以外の画像ではACES/ACEScgを選択した。
OCIO を有効にした After Effects では Composition パネルの下部にある Display Color Space メニューからモニターの表示に適用したい Color Space を選択する。
今回は BT.2020 - SMPTE ST 2084 の出力を行うため、図14 に示すように BT.2100-PQ/Simple を選択した。
To manage colors in a dynamically linked composition or for video previews, create a new composition and nest your composition within it; then apply the Color Profile Converter effect to the nested
composition, with Input Profile set to Project Working Space. For video previews, then set the Output Profile to match the color space of the video preview device.
筆者は上記の内容を参考にOCIO Color Space Transformエフェクトを使って Working Color Space から Display Color Space への変換を強制的に行えば良いと考えた。ということで以下の作業を行った。
Display View Transform を無効化するために Display Color Space メニューで None を指定 (図21)
ネストしれ入れた Composition に OCIO Color Space Transformエフェクトを適用 (図22)
Input Color Space: ACES/ACEScg
Output Color Space: Displays/HDR/BT2100-PQ (※6)
※6 本当は Display Color Space のリストに存在する BT2100-PQ/Simple を選択したかったが、残念ながら Output Color Space として選択することは不可能だった。そのため今回は同様の変換が行われる Color Space を事前に config.ocio のcolorspacesブロックに記述して参照した。
図21. Display Color Space で'None'を指定した様子
図22. OCIO Color Space Transform の設定
この設定を行うことで以下の図23 の通り、意図通りの変換を Video Monitor 出力に適用することができた。
図23. OCIO Color Space Transformエフェクト適用後の Video Monitor の表示
表示デバイスへの出力用に Linear to Non-linear の OETF が自動的に適用されてしまう
OCIO のみで色変換処理を完結させるためには、この OETF をキャンセルする必要がある
※2 ツール側で自動的に EOTF/OETF を適用するのは、一般的な色処理のフローを考えると理に適っている。今回は筆者が無理矢理に OCIO を使ったリニアワークフローおよび HDR表示を試そうとしたため不都合が生じた
※3 筆者の推測する、制作ツール内部での Non-Linear to Linear (EOTF) と Linear to Non-Linear (OETF) 変換の様子を図1 に示す。
また、内部処理は全て Display referred で行っている (RRT は存在しない)。本来は ACES2065-1 を Scene referred として扱うべきなのだが、
Scene referred と Display referred の変換を config.ocio に記述するのが面倒だったので省略した。ご容赦頂きたい。