2015年9月22日火曜日

Maya色管理5 colorCheckerのテクスチャ

前回はレンダリング空間とカラー値について調べたが、今回はテクスチャ入力について調べる。
カラー値の入力では今のところ入力カラースペースが指定できず、レンダ空間または表示空間で入力することになったが、テクスチャの場合は入力カラースペースを指定できる。

例えば下図のように用途に合わせて好きな色空間を指定できる。
デフォルトはsRGBだが現実にある高彩度な色を使わない場合はこれがよい。
作業環境がadobeRGBの場合は入力カラースペースもadobeRGBがよい。
正しい色のテクスチャを用意したい場合は計測ベースの色となると思うので場合はXYZやACES2065-1が良いと思う。
また法線マップはRGBを利用しているが色ではないのでカラー管理してはダメ。
ライトの色もテクスチャで指定出来ればカラー管理させることができると思う。


入力するカラーテクスチャの色空間は理論的には何でもよい。
但し狭い色空間で広範囲の色を扱うとマイナスがでてくる。
OpenEXRではマイナスを持たせることができるため理論上どんな空間でもテクスチャを持っても良いことになるが前回カラー値の入力で不具合があったのでテクスチャでは問題ないかを確認する

自己発光のテクスチャでダイナミックレンジや諧調が必要となる場合はopenEXRが良い。
ディフューズは8ビットテクスチャでも良いと思っているがXYZ空間等の広い色域で持つと諧調劣化が目立つかもしれないのでこのあたりも後日調査したい。

テクスチャ入力のカラースペースの機能をテスト

異なるカラースペースで同じテクスチャを用意する。
もちろんテクスチャのRGB値はそれぞれ違う色だが、レンダリングに渡されるときにはすべて同じ色になるはずなのでそれを検証した

用意したテクスチャ

CIE XYZ(E) のカラーチェッカーをホワイトバランスをD65に合わせたテクスチャを下記のカラースペースで用意した
これらのテクスチャのRGBの値はそれぞれ違うが、同じ色を表していると考えるとよい

入力テクスチャの色空間と白色点 拡張子 画像
scene-linear CIE XYZ : D65 .exr
ACES2065-1 : D60 .exr
ACEScg : D60 .exr
scene-linear Rec709/sRGB : D65 .exr
sRGB : D65 exr
sRGB : D65 tiff

Noboru Ohta (1997)の分光反射率をそのままXYZ値にした色をcat02の白色変更でホワイトバランスを合わせたもの。
ホワイトバランスは入色空間の規格に合わせた。

Maya色管理4 colorCheckerの数値のところのPyMelでそれぞれのカラーチェッカーを作成してレンダリングしたものをテクスチャ化した

プレビュー結果

レンダ空間はXYZ、表示空間はsRGBとした



プレビュー結果はすべて同じ色に見えるので、それぞれのテクスチャが正しくレンダリング空間へ変換できている。
但し、no18のCyanに関しては入力がsRGB8bitの時のみ色に差が出ている。これは8bitなので負の値がクランプされてしまったために起きていると思う。

負の値のテスト

前にテクスチャではなくカラーの値を入れる時に表示空間で負の値を入れるとバグっぽい問題があったがテクスチャでは問題ないかをテストした。
前回と同様にxyY(0.1, 0.7, 0.5) の色であるXYZ(0.0714, 0.5, 0.1429)を異なる色空間のテクスチャとして用意した


入力テクスチャの色空間と白色点RGB値RGB値8bitフォーマット画像
scene-linear CIE XYZ : D65 0.0523
0.5087
0.1559
13
130
40
.exr
ACES2065-1 : D60 0.0573
0.6857
0.1428
15
175
36
.exr
ACEScg : D60 -0.1098
0.7880
0.1388
-28
201
35
.exr
scene-linear Rec709/sRGB : D65 -0.6901
0.9101
0.0640
-176
232
16
.exr
sRGB : D65 -0.8489
0.9594
0.2805
-216
245
72
exr
sRGB : D65 0
0.9594
0.2805
0
245
72
tiff



プレビュー結果

レンダ空間はXYZ、表示空間はsRGBとした
8bitテクスチャ以外はほぼ同じ値として変換され、マイナス値も正しく変換できていることが解る
8bitテクスチャではマイナスが持ていないため正しく変換できない。


カラー値入力のテストのときはマイナス入力にバグっぽい問題があったがテクスチャでは大丈夫そう

入力テクスチャとして使用できるもの

sRGB

一般的にこれが一番無難だが、色域外の色の取り扱いに注意。
sRGB色域外を表す場合はテクスチャに負の値を持たせることになり、openEXRのフォーマットが必要になる(他にも負の値が持てるフォーマットはあるかもしれないがよくわからない)

scene-linear CIE XYZ、ACES2065-1、ACEScg

広範囲の色を再現するのに向いていると思ったがリニア空間での入力となるので8bitでは諧調が足りないのでFloatのフォーマットが必要。
scene-linear CIE XYZ、ACES2065-1では負の値は出てこない。

sRGBのように暗部諧調が優先され、さらに色域が広いものが欲しい。例えばgamma2.2XYZみたいな。

マニュアルをみてみる

http://help.autodesk.com/view/MAYAUL/2016/JPN//?guid=GUID-2622A6C2-B79B-442E-B5C3-327474409CC7
原色の欄に”変換されない”と書かれているものはレンダ空間に変換されない物らしい

レンダ空間に変換されないものないもの
  • Raw
  • 対数→リニア(Cineon)
  • 対数 → リニア(jzp)
レンダ空間の値を直で持つテクスチャとして扱うことなので注意が必要だが、
レンダ空間を後から変更することがなければ[対数→リニア]等は積極的に使っても良いかもしれない。ただ[対数→リニア]がどんなものかまだよくわかっていない
log系のカーブを持ち、レンダ空間に変換されるもの。
  • ARRI LogC
  • ログ フィルム スキャン(ADX)
  • Sony SLog2
この辺はよくわからないが色域は広そう。 色域も広くlog系なのでテクスチャに向いているかも。
Sony SLog2の色域はS-GAMUT?。

色域の広いXYZやACESの入力テクスチャでガンマ空間を受け付けないのが問題かも。(その場合はカスタム入力変換が必要そう)。
結局何を使えばよいかは解らないが、狭い色域で十分表せるものはsRGB。広い色域を8bitテクスチャで持たせる場合log系のものがよさそう。
openEXRで持って良いなら選択肢は増える。
XYZは見た目が解りずらいのでテクスチャ編集には向いていないかも。


次は色空間とライトの検証をする

0 件のコメント:

コメントを投稿