2013年10月24日木曜日

VFXワークフロー Tonemapping

最近、シーンリニア、logなど何かと新しい事が話題の映像業界ですが、今後テーマとなってくるのは「トーンマッピングの共有化」でしょうか?一般的には「カラコレ」の中に含まれているイメージが強いですが、個人的には「トーンマッピング」と「カラコレ」を分けて考えて欲しいという思いがあります。

「CGをフォトリアルに見せたい」「CGをフィルムルックっぽく見せたい」という部分にも共通している部分になります。コンポジターもその画像がどのように出来上がり、どのような画像であるかを知る事で、調整するべきポイントを得るヒントになる部分でもあります。色を合わせやすい画と合わせにくい画というものが存在 します。画像処理が行いやすい画像というものも存在します。また、カラリストもカラコレにおいて何が起きているのかが分かるかと思います。カラコレする際にLUTを使わない人を見かけることもあるので是非参考に してみて下さい。何故LUTが必要か?

扱う画像が今回の説明にはあまり適していないですがあまり気にせず、今回もKodakメルシーさんを使ってALEXAのlog-cを例に説明して行きたいと思います。雰囲気だけお楽しみください。他のLogでも考え方はだいたい同じです。

では、現実世界の光をALEXAで収録し、テレビやPCモニタ等で確認するまでの基本的な流れをみてみます。順番や細かい部分は間違っているかもしれませんが、雰囲気は掴めるかと思います。今回HDRが絡んでくる話なので色の諧調を0.0-1.0のfloating pointで表記したいと思います。

まず、現実世界のイメージです。実際の輝度の物理量を数値化 して、そのままモニタに表示したイメージです。値も適当ですし、普段お目にかかる事はあまりないと思うのであくまでもイメージで。左側に0.0-200.0のグラデーションと右上にあまり状態はよくないですが、シーンリニアでレンダリングしたCGの車を配置しました。(ちなみにCIE-XYZのYは輝度で単位はcd/㎡となってます。)
昼間の輝度を物理量で数値化して表示したイメージ。あくまでもイメージ。
CGでPhysical Sunなどでレンダリングして適正露出をしないとこんな感じの画になりますよね
ALEXAで画像が生成される仕組み。色んなOUTPUTがあるようですが、
今回はALEXA専用の色空間であるLog-C/WideGamutで説明していきます。
Log-CがガンマカーブでWideGamutが色域になります。
技術資料はhttp://www.arri.com/camera/digital_cameras/downloads/
の「 ALEXA LOG C Curve-Usage in VFX」からpdfが入手出来ます。
最新版のNUKEには標準機能として組み込まれています。
光をそのまま画像にしてしまうと先ほどのような事が起きてしまうので、まず、適正露出に収まるように露出が調整されます。NDフィルタ、シャッタースピード、絞り、ISO等
カメラから入った光をCMOSセンサーが受光し、その数値をそのまま書き出したものがARRIRAWとなります(たぶん)。ARRIRAWはARRIRAW Converterを使って一般的なRGBの値に変換して使います。今回はLog-Cの話なので先に進みます。


詳細や順番は不明です。画像もイメージですが、CMOSセンサーから出力されるRGGBの値をCIE-XYZ表系に乗っ取ったALEXA Widegamut(シーンリニア)の色に変換します。(一般的な電子機器や画像の色はCIE-XYZ表で管理されている)色域がsRGBと比べとても広いのでそのままモニターで確認すると彩度が低い画に感じます。
<Alexa Log-C>
このデータをファイルに保存したいのですが、この時に必要になってくるのがLogだそうです。
例えば、ALEXAで収録されるQT(ProRes4444)は10bitだったと思います。
1024 階調ですね。ここにHDR(髪の毛なのどの白飛びしている部分の情報)を持つ広い階調(多分16bit int = 65536)を効率よく収録するために、Logを使って光を10bit(1-1024)に「圧縮」と言っていいのか分かりませんが圧縮して収めます。モニタで確認するための画像処理ではないので、そのままモニタでみるとコントラストが非常に浅い画に見えますね。


イメージとしてはこんな感じです。現実世界の光(シーンリニア)をLogを使って0.0-1.0に効率良く収める。
LinearToLogですね。 intermediate-referred image。中間ファイルですね。

「Autodesk AREA 第4回:異なるカラースペースファミリー間での変換」

VFXで扱う画像には「シーンの光をそのまま画像にしたscene-referred image」
(CGのレンダリング、ACES等)

「シーンリニアに対して
出力デバイスを考慮してガンマ補正がかかっている画像output-referred image」
(おそらくもっとも一般的な画像、カメラから生成されるJpgとかムービーとか)

「シーンリニアに対して何かしらの目的で何かしらの処理がされている画像
intermediate-referred
(Log等)

の3つがある。これ重要ですね。テストに出ます。どれも現実世界の光(シーンリニア)と密接な関係があります。
今後、VFXに関係する人の基礎知識となります。
という事でALEXAからLog-C/Widgamutが出力されました。このLog-Cと言われるファイルですが、
モニターでそのまま見るととても見辛いのですよね。そこでモニターで確認する際にはLUTというものを使用します。なぜわざわざLUTを使うのか?理由は後程説明します。

実際LUTには様々な種類がありますが、今回は最も基本的な考え方のLog-CtoRec709のLUTの主な成分を説明していきたいと思います。実際にはLUTは1つのファイルになるため、これらの成分が含まれたデータとなります。
また、REC709のガンマは今回はgamma2.2としています。
(ここで、こっそりHDRIも追加しました。)

<その1.LogToLin Logのガンマを除去する>
先に説明したように、Logは現実世界の光にLogのガンマがかかっています。
Log-Cの画像に対しLog-Cの逆ガンマを適用する事で元のシーンリニアの状態になります。gamma1.0の状態
 
<その2.色域をsRGBに変更する>
ALEXAから色域をWideGamutで出力した場合、非常に広い色域を持っているため、そのまま一般的なモニタに出力すると彩度が低く感じます。そこで色域(Gamut)をsRGBに変更します。

(※REC709とsRGBは色域は同じ ※この辺は好みが影響する所だったりします。ALEXAの色をそのまま使いたい場合はこの処理を省く事もあります。 ※今回NUKEで変換のシミュレーションを行っていますが、floating point で広い色域を狭い色域に変換するとNegative Value、いわゆるマイナス値が発生してしまう事があります。)
<その3.出力するモニタの逆ガンマを適用する>
上の画像はシーンリニア(Gamma1.0)の画像をモニタに表示したものですが、モニタにはガンマがあるので暗くしまったような感じで出力されてしまいます。

そこで、出力するモニタの逆ガンマ、今回はgamma2.2を想定しているのでその逆のgamma0.4545を適用します。
その状態をgamma2.2のモニタに表示する事でシーンリニア(gamma1.0)の状態で表示されます。
LUTで行われている処理はこのような感じかと思います。
今回は「正しい色を再現する」という目的のLUTになります。


以上のような流れで現実世界の光をモニターに出力しています。

現実世界の光→ALEXA→Log-C/WideGamut→LUT→モニタ

ここにはアーティスティックな要素はありません。理論に基づいて画像処理が行われています。ここで、考慮されていない1つの要素として「Tonemapping」があります。これはCGのレンダリングにも言える事ですね。CGのレンダリングは基本的にはシーンリニア空間で行われるため、同じような現象が起きます。

現在、ほとんどのモニタはHDRに対応していません。
(ドルビー等からHDR対応モニタが販売されている)
そのため、強い輝度の光を再現出来ないのですね。
上のメルシーの場合は髪の毛のハイライトがそれにあたります。
その結果、適正露出の合わせるポイントによって様々な問題が発生します。
特に、屋外等の光量の差が激しい環境ではその差が顕著に出ると思います。


HDRIなどのシーンリニア画像(現実世界の光をのまま画像にしたもの)をモニタに表示するとこんな感じです。


空のディティールを見せようと空の露出を適正にすると、日陰部分が暗くなりすぎてしまいますし・・・。
かといって、人物や暗部をよく見せようとすると光の強い空が白飛びしてしまいます。

モニタが表示できる光の範囲が狭いのが大きな理由だと思うのですが、
ここにさらに人間の目の感度特性というものも入ってくるかと思います。
強い光の環境の見え方と、室内での見え方の違いとか・・・。
この辺り知識がなさすぎるので割愛させてください。

そこで必要になってくるのがトーンマッピングです。
リアル(自然)に見せたいのか、ドラマティックに魅力的に見せたいのか、目的は様々だと思いますが、
モニタに入りきらないHDRや、コントラスト調整等、トーンを調整してモニタにいい感じに表示されるようにする必要があります。

リアルに見えない理由がデータではなくモニタにあるなんてちょっとビックリしますよね。
CGだとレンダリングは正しいはずなのに、なんかリアルではなかったり、魅力的ではなくて後でレンダリング画像をトーンカーブで調整する行為がこれに当たります。ライティングや露出などで調整しようとすると苦労する場合が多いという事ですかね。勉強になりますね。

3dsMAXだとこの辺
Vrayだとこの辺。このReinhardさん有名人ですね。
さて、このTonemappingですが、どこで適用しましょうか?LUTを当てる前?後??
結論を先に言うと、基本的にはLUTを当てる前の工程でトーンマッピングを行います。
「基本的に」と言ったのは今回のNUKEの場合は後でも特に問題ないからですね。この辺の話はややこしくなるので機会があれば説明します。主にLUTの特性によります。
Log-cの画像にLUTを焼きこんだり、または、8bit int、10bit int、16bit intなど一般的な整数の環境でLog-cの画像をシーンリニアに展開した場合、HDRの情報が失われてしまいます。
例えば、上の例はLUTの後でToneを調整しているのですが、画像を暗くしても髪の毛のハイライトの情報が損なわれているため潰れてしまっています。そして、何より現在一般的に扱われるLUT形式は0.0-1.0の範囲しか定義されていません。つまり、LUT適用後は基本的にはHDRの情報は失われてしまうと思っておいた方がいいかもしれません。
現状だとHDRを考慮したい場合はLog+LUTの一択ではないでしょうか?(後述するACESは除く)

point:基本的にLUTを焼きこむとHDRの情報が損なわれる


という事で基本的にはLUTを適用する前のデータに対してトーンマッピングを施すんですね。
そして、HDR(シーンリニア)の情報を保持するためにLUTが必要となるんですね。


LUTを適用する前で「Tonemapping」する事で白飛びしていた髪の毛の情報が出てきますね。分かりづらいかもしれませんが、HDRIの空の情報も見えてきてますよね。ちょっとリッチな気分。

左、トーンマッピングを施した画像。右、LUTを当てただけの画像。
この画像はフィルムで撮影された画像なのですが、右の画像どことなくビデオで撮影されたように見えませんか?

 ここまでが基礎知識です。

「トーンマッピングの共有化」の話をします。何故カラコレと混同して欲しくないのか?なぜ共有する必要があるのか?ここからは、VFX目線の話になります。(実写だけで完結する場合はさほど問題にはならないかもしれません)。 まず、VFXで欲しいデータですが、カラコレする前の何も加工していない状態のLog-C+カラコレ情報です。もしくは、Log-Cの状態が取り出せるワークフローが好ましいです。何故Log-Cのデータが欲しいかと言うと簡単にScene-Linearの画像(現実世界の光)を得ることが出来るからです。何故Scene-Linearのデータが欲しいかと言うと、Scene-Linearの状態がVFX制作に適した環境だからです。今回扱っているNukeの環境もそうですが、目的に応じた非常に柔軟な画像処理が行えます。何よりScene-Linear空間は現実世界と近似した結果が得やすい環境でもあります。

・現実世界と同じ空間
・露出の調整が行いやすい(過去の記事を参考にしてください)
・ホワイトバランスの調整が出来る
・異なる画像同士の色合わせが楽
・フィルタが現実世界と近似した結果を得やすい(フォーカス、グロー、モーションブラー)
・合成した際に自然な結果が得やすい
・HDRIやCGのレンダリングと同じ空間
・力技を行使しやすい環境(色が違っていても、シーンリニアでさえすれば結構なんとかなる)

挙げるときりがないのですが、様々なメリットがあります。例えば最も分かりやすい画像を合成する際の「加算」の例だとこんな感じです。
左:scene-referred image同士の加算合成 右:output-referred image同士の加算合成(一般的なsRGB画像)
ビデオのガンマ補正がかかっている画像同士の加算はすぐに飽和して色飛びを起こします。自然になりづらいので、自然に見せるための工夫が必要となります。シーンリニア以外の環境では、このような工夫や調整を至る所で行っています。コストがかかるんですね。そのため出来るだけ精度の高いScene-Linearの画像が欲しいのです。そのための「トーンマッピングの共有化」です。シーンリニアにおける画像処理の基礎知識などは機会があれば解説したいと思います。

では、今回のALEXAのワークフローの場合、Scene-Linearにどの工程だと戻る事が出来るのか見てみます。 「精度」にも注目して下さい。
という事で今回のワークフローをもう一度見てみます。左から順に画像処理が行われていきます。
まず、一番左がALEXAから出力されたLog-C/WideGamutです。

次の工程がカラコレです。LiveGradeでもDavinciでもなんでもいいです。
ここでは「Tonemapping」と新たに「カラコレ」を追加しました。
ここでいうカラコレは画像のトーンに大きな影響を与えない色調整になります。

それにLUTが当たってモニターに表示されています。

ケース1.最終出力されているものを出力した場合
Scene-Linearに戻るのは絶望的です。現在CMでよく見かけるようになってきたワークフローですね。10bitのREC709のDPXで頂いたりします。もとのProResとビット数は同じなので色数自体は同じですが、保持している階調が全く異なります。せっかく10bitを扱うのであればLUTを外した状態の方がいい気もするのですが、何か意図があるのでしょうか?気になりますね。
この状態の画像はHDRの情報は失われてしまっています。そして何より基本的にLUTは非可逆です。LUTを焼きこんでしまったらその前の状態にはもう戻れないんですね。
ケース2.LUTを当てる前から出力。LUTを各部署で共有する。
このやり方は映画以外ではあまりお目にかかった事がないですね。一見良さそうなのですが、ここで「Tonemapping」の影響が出てきます。Tonemapingの特性にもよるのですが、Tonemappingにより 元のシーンリニアに戻らなくなってしまいます。精度が落ちるという表現でもいいですかね?それによる影響は色々あるのですが画像処理による「フォーカス」の結果を例に見てみます。

左:Scene-Linearのフォーカス処理
右:LUTを当てる前から出力した画像をLog-Cのガンマを使ってシーンリニアにしたものにフォーカス処理
お互い同じ設定のフォーカスを適用しています。
検証用で結果が分かりづらくてあれですが、右の画像はTonemappingの影響により、元のScene-Linearに戻らなくなってしまっています。今回の場合は特にHDRの精度が悪いのですが、結果フォーカスが自然にかかりづらくなってしまっています。この、シーンリニアの精度が損なわれる影響は至る所に及びます。異なるトーンマッピングがされた素材の色合わせとか、モーションブラーなどの見え方や、CGに関して言えば撮影現場でよく見かける銀玉などの撮影素材ですね。あれは現実世界の光を出来るだけ正確に画像にするために行っているのですが、その画像との違いも大きくなります。「Tonemappingの共有化」がされていない場合、この差分はアーティストのスキルで埋められます。

カラコレが適用されているがTonemappingを考慮して、Tonemappingされる前から画像を出力した場合の比較画像はこちら。色のずれはあるものの輝度ベースだとそこまでの破綻は見られない。

追記:画像処理を行う際の順番等も大切ですね。トーンを調整した後では思ったような効果が得られないというケースもありそうですね。
最もベストな状態は素材はLog-Cのまま扱い、カラコレ情報等を共有する方法ですが、言うほど簡単ではないかもしれませんね。技術的な問題も沢山ありそうです。

と言う事で、割とシンプルになりそうなのはこちらの方法。TonemappingをLUTに盛り込んだカスタムLUTを準備して運用することで、Tonemappingの共有を行う。このようにすることで、ある程度元のScene-Linearの精度を保持する事が可能となります。但しこの場合はLUTを晴天、曇り、室内、夜間などでいくつか準備する必要があると思います。この様にする事で、シーンリニアの精度を保ちつつ、丁寧なグレーディングを行えない撮影現場でもプリセットとして扱う事で、一定の品質のものを量産できるというような事も期待出来そうですね。Tonemappingは人間の見え方と関係性が強い要素です。そして光量が著しく違う環境では別途用意する必要があると思うんですね。検証した事ないので憶測なのですが。

追記:詳しくないので言及するのを戸惑っていたのですが、一応言及しておきます。
ここまでの流れで分かるかとは思うのですが、Tonemappingは出力するデバイスによって変わると思います。
本来は出力デバイス毎に準備されるものらしいです。
そのような場合も「共有化」により切り離せる仕組みは役に立ってきます。
「Tonemappingの共有化」 ということで、ACESワークフローにも触れておきます。ACESは今後ポスプロ共通の色空間として期待される規格です。詳しくは

AREA JAPAN 第1回:シーンリニアワークフローとVFX

fxGuide:The Art of Digital Color

Logoscope亀村さんにはいつもお世話になっており、また、このような情報発信にも意欲的で本当に頭が上がりません。ここで紹介しているワークフローの多くは亀村さんとの沢山の議論から生まれています。この場を借りて感謝の意を述べたいと思います。本当にありがとうございます。亀村さんが日本のVFX業界に与えている影響を考えると、誰か表彰してあげてもいいレベルですね。

さて、ACES規格ですがOpenEXRのScene-Linearを標準としています。そして、シーンリニア画像を扱うと必ずトーンマッピングが必要になってくるのですが、ACESではこのトーンマッピングも規格として盛り込まれています。

赤丸の部分のRRTがそれに当たります。
まず、CGや色んなカメラで撮影された素材は一度ACESというシーンリニア空間に統一されます。このACESにRRTを適用してOCESという状態になるそうなのですが、RRTが何かと言うと簡単に言ってしまえば、「現実世界(scene-linear)の光をフィルムに焼いた」みたいな感じだそうです。複雑な画像処理をしているようですが、ここにはトーンマッピングの要素も含まれています。RRTにはACESのシーンリニアを守る役割があるんですね。規格として定義されているので、ACESワークフローを用いることでトーンマッピングの共有化が容易になります。(僕は普段の仕事で、このRRTだけ使ったりすることもあります)
カラコレ情報の共有についてはACS-CDLなどが準備されているようです。また、ACES用のACES logの準備も進んでいるようです。RRTのアルゴリズムなどに興味ある方は多分こちらからDLが可能だと思います。
https://github.com/ampas/aces-dev

という事で試しにACES(Scene-Linear)にしたこちらの画像にRRTとODTを適用してみます。
ODTはOutput Device Transformの略でRRTが適用されたOCESに対してデバイス毎に準備されます。
今回はPCモニタに出力しているのでsRGB用のODTを選択しています。
また、一般的に映像制作ソフトにはRRTとODTはセットになって組み込まれている事が多いようです。

ACESのワークフローにALEXAの画像を流して出来上がる画がこちらになります。
まず、IDTでALEXAの色をACES(Scene-Linear)に変換します。それにRRTとODTを適用して表示されているのが上の画像です。RRTの開発にFUJIFILMが絡んでいるとあって、なかなか魅力的な画が出力されますね。
ワークフローとして規格化されているため、トーンマッピングの共有が非常に楽ですね。
また、先ほどのALEXAのワークフローと比べ非常にシンプルなのも魅力ですね。

また、CG目線だと手軽にフィルムルックの画を手に入れる事が出来ることと(車の状態があれで申し訳ないですが、HDRIのルックがいい感じになっているのが分かりますかね?)

どの環境でも全く同じルックになるのは素晴らしいアイディアだと思います。現場モニター、編集室、グレーディングルーム、劇場シアターなどなど。デバイス毎のODTが準備されればiPadでもなんでも理論上は同じとなります。


注意点として、RRTはまだ規格としてFixされていない事。
また、現在準備さいれているRRTはデイライト用である事。
機材やソフトが急速に対応を始めているものの、対応出来ないソフト等が多い事など色々気を付ける点はあるようです。

ちなみにカラコレはRRT+ODTが適用される前で行います。ACESとRRTの間ですね。


カラーマネジメントの運営は非常に複雑かつ難しいです。情報が失われないような適切なカラースペースとそれに適したファイルフォーマットを選択する必要もあります。誰がそれを管理するのか?DITの人なのかスーパーバイザーなのか?はたまた別のポジションを用意するのか?色をトータルで管理できる人の登場が期待されますね。

今回、これらの情報は業界として共通認識を持ってもらいたいという気持ちを込めて記事にしてみました。

このようなワークフローを「高級」 と言ったり「フルCGには関係ない」というような話も聞きますが、劇場やTVで放映される「データ」として見た際には実写もCGも区別ありません。また、環境に応じた適切なワークフローの構築は可能だと個人的には思っています。ネットでちょっと検索するだけで、FinalCutのワークフローを紹介されていたりします。しかし、紹介されているワークフローが必ずしも、普段のワークフローに適しているとは限りません。新しい技術等を出来るだけ理解して作業の効率化や品質アップのために、業界として模索しながら適した形で運営して行きたいですね。

ちなみにですが、REC709の4Kなどにも対応した次の規格はカラースペースがシーンリニアとなっているそうです。映像業界でシーンリニアが一般化する時が間もなく来るんですかね?

Tonemappingを制する者は画の仕上がりを制す

Kodak Cineon/DPXみんなのメルシー。こちらでダウンロード出来るようなので色々試してみましょう。http://motion.kodak.com/motion/Support/Technical_Information/Lab_Tools_And_Techniques/digitallad.htm 

6 件のコメント:

  1. 通常なら3回分を超えるほどの濃い内容で、しかも皆に分かっていて欲しい貴重な情報をこのように分かりやすく公表する姿勢に感銘を受けます。

    返信削除
  2. 一部の男性にはイケるかと

    返信削除
  3. 掘れ・・じゃなくて惚れました

    返信削除
  4. ワークフローの話しなのでやむをえないとは思うのですが、おっさんにばかりモテて辛いです。

    返信削除