RGB 値ついて

Blender の RGB による色指定は、通常とは異なるところが見受けられます。

その 1 つが、それぞれ 0 - 255 の範囲ではなく、0.0 - 1.0 という範囲であること。
それと、RGB 値による色の変化が非線形であることです。
(カラーマネージメントされているため、sRGB ではなくリニア RGB だから…ということが判明)

そのため、256 階調の RGB 値を 0-1 に計算してしまうと、思った色が出ません。

例えば、ニュートラルグレー 128,128,128 は、単純に計算すると 0.5,0.5,0.5 ということになります。
しかし、その値を設定してみると、明るめのグレーとなり、Hex は BCBCBC という値になります。

RGB : 0.5,0.5,0.5 Hex : BCBCBC
RGB_0.5.png Hex_BCBCBC.png

そこで、Hex でニュートラルグレー 808080 を指定してみます。
すると、表示される色はニュートラルグレーになりますが、RGB は 0.216,0.216,0.216 という値になります。

Hex : 808080 RGB : 0.216,0.216,0.216
Hex_808080.png RGB_0.216.png

以上のことから、RGB は非線形ではないということが分かります。

そこで、RGB が、どのような推移をしているのかを、Hex で 8 刻みで調べてみたところ、以下の様になりました。

RGB_ColorCurve1.png

どこかで見たことがあると思われた方も多いのではないかと思います。
そうです、ガンマ補正前のディスプレイガンマカーブですね。
もうちょっと詳しくは、WIKI を参照してください。

そこで、y = x 2.2 のグラフと重ね合わせたところ、ほぼ一致することが分かりました。

RGB_ColorCurve2.png

これは、HSV 値でも同様の結果となります。

以上の事から、モニター特性を加味した ガンマ補正なしの色味の指定では RGB もしくは HSV を利用する方が良く、ガンマ 2.2 補正された値で指定するには Hex を利用することが良いことがわかりました。
それで Hex のところにだけ Gamma Corrected と表記されているのですね。

ちなみに、Hex 値の求め方ですが、GIMP 等の画像編集ソフトでは、HTML での表記用に、Hex 値を表示してくれますので、これらを利用すると便利です。

また、もし sRGB 値として色情報を持っていて、表計算等で変換したい場合は、RGB - Hex 変換を参照してください。

※仕様を把握した上での説明ではありません。あくまでも経験則による話です。

カラーマネージメント (追記)

どおやら、Blender 2.5 で、カラーマネージメント機能に対応していたようです。

管理者は、Blender 2.4 の時代にすこし使ったことがあるものの、2.5 では使う機会がなく、2.6 になって Cycles が追加されたことで再度利用させてもらうことにしたので、2.5 の経緯を把握していませんでした。(すみません。言い訳です)

で、カラーマネージメントについてですが、Blender 内部レンダラではこの機能を使うか使わないかを設定できましたが、Cycles の場合は否応なしに使うようです。
実際、上のリンク先に書かれている「sRGB 空間でのシェーディングの計算は、1 + 1 が 3 になる世界で計算をしているようなものなのです。」を防ぐには、確かにリニア化されていることが望ましいですね。

というわけで、Cycles で言う RGB とは、リニア RGB のことだという事です。
リニア RGB での指定に関しては、値で指定することを目的とするよりは、見た目の色で指定した結果の値という認識のほうが良いかもしれませんね。

ちなみに、RGBGammaDiffuse BSDFMaterial Output と接続し、RGB 0.5,0.5,0.5、Gamma 2.2 としたところ、ほぼナチュラルグレーで表示されました。
なので、sRGB の値を 255 で割った値を Cycles で使う場合は、上の様にノード接続してガンマ補正することで sRGB カラーとしてレンダリングできるというわけです。



コメントを投稿するには画像の文字を半角数字で入力してください。


画像認証

  • 最終更新:2012-03-15 22:22:44

このWIKIを編集するにはパスワード入力が必要です

認証パスワード