toruのブログ

月1くらいで記事書きたい。

CTLで記述された ACES の RRT と ODT を画像に適用する

目的

ACES の RRT+ODT を任意の画像に適用できる環境を構築する。

背景

OCIO について色々と勉強していると、NUKE と DaVinci Resolve で RRT + ODT の結果が異なることが判明した。 この原因を詳しく調べるためには、NUKE, DaVinci Resolve に依存しない Reference となる RRT+ODT の実行環境が必要だと考えた。という訳で準備した。

結論

AMPASctlrender というツールを使うことで簡単に実現できる。コマンドラインでの実行例およびテストパターンへの適用例を以下に示す。

$ 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
表1. テストパターン画像へ RRT + ODT(for sRGB) を適用した結果
説明 画像
ソース f:id:takuver4:20190601152009p:plain
RRT + ODT 適用後 f:id:takuver4:20190601151338p:plain

解説

AMPAS が公式に定義している RRT および ODT は CTL(Color Transformation Language) と呼ばれる言語で記述されており、以下のリポジトリで公開されている。 今回は transforms/ctl ディレクトリを作業ディレクトリに丸ごとコピーして使用した。

github.com

CTL で記述された .ctl ファイルを解釈して画像に適用するツールが ctlrender である。これも同じく AMPAS が作っており、以下のリポジトリで公開されている。

github.com

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 を適用できるようになった。今後の検証が捗りそうだ。