目的
ACES の RRT+ODT を任意の画像に適用できる環境を構築する。
背景
OCIO について色々と勉強していると、NUKE と DaVinci Resolve で RRT + ODT の結果が異なることが判明した。 この原因を詳しく調べるためには、NUKE, DaVinci Resolve に依存しない Reference となる RRT+ODT の実行環境が必要だと考えた。という訳で準備した。
結論
AMPASの ctlrender というツールを使うことで簡単に実現できる。コマンドラインでの実行例およびテストパターンへの適用例を以下に示す。
$ cd /work/src/misc/resolve_aces $ export CTL_MODULE_PATH=/work/src/misc/resolve_aces/ctl/lib $ ctlrender -ctl ./ctl/rrt/RRT.ctl -ctl ./ctl/odt/sRGB/ODT.Academy.sRGB_100nits_dim.ctl src_linear_ap0_d60.exr dst_srgb.exr
説明 | 画像 |
---|---|
ソース | |
RRT + ODT 適用後 |
解説
AMPAS が公式に定義している RRT および ODT は CTL(Color Transformation Language) と呼ばれる言語で記述されており、以下のリポジトリで公開されている。 今回は transforms/ctl ディレクトリを作業ディレクトリに丸ごとコピーして使用した。
CTL で記述された .ctl ファイルを解釈して画像に適用するツールが ctlrender である。これも同じく AMPAS が作っており、以下のリポジトリで公開されている。
ctlrender を使うには上記リポジトリの README.md に従ってツールをビルドし実行すれば良い。
注意事項
2点ほど注意事項を説明しておく。
環境変数 CTL_MODULE_PATH
の設定
.ctl ファイルは内部で import
文 を使い、外部の .ctl ファイルを読み込む場合がある。
その場合は import
先のパスを事前に CTL_MODULE_PATH
として設定しておく必要がある。
例えば、RRT.ctl は冒頭で以下のように import
を行っている。
import "ACESlib.Utilities"; import "ACESlib.Transform_Common"; import "ACESlib.RRT_Common"; import "ACESlib.Tonescales";
筆者環境では上記ファイルは /work/src/misc/resolve_aces/ctl/lib
に配置されていたため、以下のように環境変数を設定した。
$ export CTL_MODULE_PATH=/work/src/misc/resolve_aces/ctl/lib
複数の .ctl ファイルの適用
今回の RRT+ODT の場合、RRT.ctl と ODT.Academy.sRGB_100nits_dim.ctl の2ファイルを適用する必要があった。
この場合は -ctl
オプションを以下のように複数回使えば良い。
$ ctlrender -ctl first.ctl -ctl second.ctl src.exr dst.exr
感想
こんな便利なツールがあったことに、何で今まで気づかなかったんだろう。結構時間を無駄にした気がする。
しかし、今回の成果によりあらゆる画像へ簡単に RRT+ODT を適用できるようになった。今後の検証が捗りそうだ。