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で作業できるだけのマシンスペックが無かったのだ。
おわり。
記事が役に立った!という方はAmazonギフト券(15円〜)で支援してくださると今後のモチベーションになります!「受取人」にshizuka67(アットマーク)gmail.comと入力お願いします 詳しくはこちら
No comments:
Post a Comment