CG study (After Effects, Nuke, Maya...), English study and more.
Back to my website
---http://www.shizukafolio.com

Sunday, April 17, 2011

[Nuke]資料: Nuke's Color Management Demystified by Steve Wright

 Nuke's Color Management Demystified by Steve Wright

Nukeの師匠に教えてもらったドキュメントです。Nukeを使用していなくても役立つ内容。
読んだ当時自分で訳した文章が出てきたので下記に掲載します。(自分の為に書いてたので途中すっとばしたり意訳・要約したり適当です。なんかすごいカン違い翻訳してたらご指摘ください)
専門性が高いのでCG初心者には慣れない内容かもしれませんが、是非知っておいた方が良いです。中級者以上は理解必須。

 ---------------------------------------------------------------------
筆者はCinesiteで長年コンポジターとして働いていたが、linearのCGI画像とcineon log film scansをどうやって合成すれば良いのか、詳しい人に聞いても良く分からなかった。しかし、Nukeのカラーマネジメントを知った瞬間、全ての疑問は吹き飛んだ。Nukeは正しい処理をしている。
Nukeの秘密には3つのポイントがある。Floating Point, HDR images, そしてlinear light spaceである。


[Floating Point]

floating pointの必要性1

8bit 、16bitでは値の数が十分で無い為、計算のプロセスで画像の精度を失っていく

Nukeに画像をインポートする際は、画像の種類に関わらず、自動的に32bitで計算される。(これは不可避である。)
Nukeの優れているところは32bit処理に関わらず計算スピードが断然速いところ。

[HDR Images]

float pointの必要性2
1.0以上の値を持てるHDR画像を表現するのにfloatは最も適している。

Nukeは考えうる最高のクオリティを映画のVFXで表現出来る様、設計された。
設計当初は、10bit CineonとDPX log film scansを合成する事を目的としていた。
多くの人にとっては意外かもしれないが、logファイルというのは結局HDR画像の事である。logファイルはlinearに変換されると、最大13.5までのfloat値となる。OpenEXRは13.5より更に上の値を表現できる。

[Linear Color Space]
Nukeは全ての画像をlinear light spaceに変換する。
多くの画像はカラースペース(sRGBなど)が埋め込まれていて、linearではない。
画像が本来の意味でlinearであれば、値に変化を加えれば画像の明度が全て等しく変化する。
linearのシステム上では、pixelの値を倍にすれば明度も倍になる。しかし、non-linear画像ではそうははならない。

補足:上で使っている明度(brightness)という言葉は人間の目が光の強度(intensity)に対して知覚するものであり、言葉として技術上正しくない。しかし、デジタルアーティストに理解しやすいよう「明度」という言葉を使い続ける。

Nukeが全ての画像をlinear light spaceに変換するのには2つの大きな理由がある。

1.現実世界はlinear light spaceである。CGIは現実世界のシミュレーションなので、レンダリング計算する際linear light spaceを使用する。
Maya, Mental Ray, RenderManにおけるambient&diffuse lighting, reflections, specular highlights, global illumination models等の表現は全てlinearで計算される。これらのCGIと一貫性を保つ為、そして、正しい計算をするという目的でNukeはlinear light spaceを採用している。

2.複数タイプの画像(sRGB, cineon,linear等)を合成する為。
全てのタイプの画像がNuke上でlinearに変換されれば、画像タイプが複数あっても合成時に問題は起こらない。

CGI の問題は一度ディスクに書き出された時点でlinear light spaceで無くなってしまうという点。書き出された画像はモニタで最適に表示するために、ガンマ補正をかけられる。更に悪い事に、ガンマ補正の情報は画 像データにベイクされてしまうので、データを永久に損なってしまう。


[Gamma Corrected Images]
ガンマ補正がベイクされる理由はCRTモニターの歴史と関連がある。
物理学的な理由によって、CRTモニター(TV含む)は画像を少し暗く映す。
よって、モニタで見る際辻褄を合わせるため、事前に画像を少し明るくしなければならない。

写真参照
中略

最近のフラットパネルディスプレイはCRTと同じ性質を持ってないので、ガンマを暗くすることはない。
しかし、考えうる全てのディスプレイで正しく表示されるよう、フラットパネルもCRTと同じようにガンマを暗くする仕様にされている。
これは、世界的にルールとして決められている。

[Nuke's Color Management Workflow]

ここまでなぜほとんどの画像がlinearでないのか説明した。
ここからはNukeにおけるカラーマネジメントの仕組みを説明する。

画像がReadノードで読み込まれると、Nukeは画像に適したLUT(Look Up Table)を選択し、linearに変換する。
計算はlinear light spaceで行われる。重要なのはLUTによるガンマ補正はviewerに与えられているのであって、画像自体ではない。
最後に、レンダリングする時にWriteノードがガンマ補正LUTを適用する。これにより、書き出された画像はモニタで正しく表示される。


(以下、がっつりと省略)
[The Read Node]
[Viewer LUTs]
[The Write Node]

[Conclusion]
以上がNukeの優れたカラーマネジメントである。
読みこむ画像のカラースペースが何であれ、正確な計算をする為にlinearに変換する。
オリジナルの画像のタイプが何であれ、問題はなく、数学的に正しく統合される。
コンポの最後の段階でWriteノードを使ってlinearをカラースペースに変換する。(どのカラースペースに変換するかは目的による)

今まで筆者が中々これらを理解できなかった理由がわかった。理解する為には、floatで作業する必要があったのだが、昔はfloatで作業できるだけのマシンスペックが無かったのだ。

おわり。

No comments:

Post a Comment