[3dsmax]CG系雑学その他

ガンマとは何か

CGを扱っていると、ガンマ値、ガンマ補正、モニターガンマ、色々なガンマという言葉を耳にしますが、あまり詳しく考えたことが無かったので調べてみました。
ネット上には様々なガンマについての解説がありますが、正直どれもかなり専門的で難しかったので、なるべく分かりやすく大雑把にまとめてみます。
具体的には「現実世界をカメラで撮影」→「PCに取り込み」→「モニターで出力」→「人間が見る」、という流れの中で、ガンマがどのような働きをしているのか理解できるようにしたいです。
この一連の流れが分かれば、画像編集等でガンマを上げる/下げる、ガンマ補正をかける、ガンマをOFFにする、などの概念も理解できるはず。

 

はじめに

まずガンマには大きく分けて2つの言葉があります。
・ガンマ値
・ガンマ補正
この2つの言葉は似ていますが、全く別の意味なので注意してください。
この2つを混同していると色々混乱します。

メインとなるのはガンマ値の方で、ガンマ=ガンマ値で大丈夫だと思います。
ガンマとはPCモニターやTV画面、映画のプロジェクターなど、画像を出力する装置の発色の特性を示す値です。現実世界の光や色をディスプレイで写す場合、RGBの256階調のデータに置き換える必要があります(256じゃない場合もある)。例えば現実世界の白い紙の明るさは、カメラで撮影したデータ上の数値としては同じRGB値でも、表示する機材によって見た目が変わってしまうのです。その個々の機材の特性を簡単に表せるのがガンマ値なのです。

ガンマとは

ガンマについて詳しく見ていきましょう。
ガンマとは画像を出力する際の公式の変数です。
中学校で習った数学の公式、例えば円周の公式ならば
円の直径をXとすると
円周=X×3.14
Xの値が変化することで円周の値も変化します。
このXを変数と言います。

ガンマとは変数γのことであり、画像の明暗を補正する式で使われます。
B=Aγ

式をもう少し分かりやすくすると
出力される値=元の値γ 

<具体例>

白と黒の中間値、RGB128のグレースケールをガンマ値2.2のモニターで見る場合。

 

0~255のグレースケールを0~1の値に正規化する。
今回の場合128/256=0.5
=======================
出力される値=0.52.2
                 =0.21763764・・・・
      ≒0.22
===========================
0.22*256≒56
RGB128のグレースケールをガンマ値2.2のモニターで見る場合
実際はグレースケール56程度の値で見える。

ガンマの特性

式を見るとなんとなく分かると思いますが、
ガンマの数値による出力される値の変化は下記のようにまとめられます。

 

ガンマ値が1より大きい→元の値よりも暗くなる
ガンマ値が1より小さい→元の値よりも明るくなる
ガンマ値が1の場合→元の値と変わらない
ガンマ値が0の場合→元の値と変わらない

各機材には特定のガンマ値が設定されています。
PCモニター→2.2
HDテレビ→2.4
映画→2.6
日々パソコンを使って絵を描いたり、モデリングをしたりする人は、
ガンマ値2.2の世界で色や光を作っていると言えます。

ガンマ補正

ガンマ補正についても簡単に触れておきます。
ガンマ補正とは、ガンマがかかっている画像に補正をかけて、ガンマを調整することです。
おおむねガンマがかかっている画像のガンマ値を1に戻すときに使われます。
式にすると下記のようになります。
B=A1/γ
単純な話ですが、ガンマ2.2の画像にガンマ補正2.2をかけると互いに補正を打ち消しあい
ガンマが1に戻ります。
式にすると
2.2*A1/2.2=A(2.2*1/2.2)=A
これがガンマ補正です。

このガンマ補正の使われ方は後々解説します。

人間の目

これからの説明の前に、重要な要素があります。
それは人間の視覚についてです。
人間の目にも実はガンマがかかっています。
人間は現実世界の中で、暗い部分の情報に敏感であり、明るい部分の情報に鈍感なのです。
例えば日中に懐中電灯をつけても、全然明るくなった気がしません。
実際は懐中電灯の光の分、光度は上がっているはずなのですが、人間の目はその差をとらえることができないのです。しかし、暗い夜ならば、どんなに小さな明かりでも人間は感知することができます。

人間のガンマ値はおおよそ0.4と言われています。
(ガンマ補正約2.2がかかっているとも言えます。)
暗い部分に敏感ということは、暗い部分を明るく見せる補正がかかっているとも言えますね。

さらに、この敏感と鈍感を言い換えると、
人間の視覚情報は暗い部分の階調が多く、明るい部分の階調が少ないとも言えます。
明暗の情報はデータにすると、256階調にしかなりませんが、
その中で人間は、より暗い部分にリソースを割いているのです。

http://blog-imgs-71.fc2.com/c/o/m/compojigoku/Gamma_007_v002.png

↑コンポジゴクより図を参照

ガンマ2.2の世界

階調についてもう少し深掘りします。
上記の機材のガンマ値を見ると分かりますが、
全ての映像出力機器は元の値よりも暗くなる傾向にあるようです。
では、PCモニターガンマ2.2の世界で絵を描くとはどういうことでしょうか。

ガンマ値2.2をグラフ化すると下記のようになります。
青い線がガンマ値1、赤い線がガンマ値2.2の関数グラフになります。

0が真っ黒、1が真っ白としたとき、
0.5の値は白と黒の丁度中間の色を表しています。
私たちはB(出力される値)を見ながら作業していますが、実際はAのデータが描かれていることになります。例えば現実世界で0.22くらいの情報を描いていると思ったら、それは内部データ的には0.5くらいの値なのです。ここで注意しなければならないのが、0.22の画像はかなり暗いと思われるかもしれませんが実はそうではないことです。人間は暗いところが明るく見えるので、そんなに暗い値には見えません。この辺混乱するので、今はあまり考えなくて良いと思います・・・。

青線と赤線の関係をリソースとして考えてみましょう。
0~1を0~255個の階調とします。
ガンマ値1の現実世界(青線)では、中間値0.5より暗い色に128個のデータリソースを使っていると言えます。
そして現実世界基準で考えると、ガンマ値2.2のフィルター(赤線)では、中間値0.5より暗い色に187個のリソースを使っていると言えます(0.73*256≒187)。
下記の画像では現実世界の0.22までの情報に内部データは丁度半分のリソースを割いていることが分かります。

ガンマ2.2の暗い世界は、現実世界基準で暗い部分にリソースを割いて、暗い部分をより繊細に描ける世界ともいえるのです。

ガンマの流れ

ここまで色々説明して、ようやくガンマの流れを見ることができます。
下記の図の流れを詳しく追っていきましょう。

人間の目で見た現実世界↓

 

①現実世界をカメラで撮影

現実世界をカメラで撮る時、現代のカメラは光を正確に捉えることができるそうです。
しかし、仮にカメラの画像データがリニアにRGB256の階調に変換されるとしたら、その画像の大半が明るい情報になってしまい成り立ちません。「人間の目」の項目で出たグラフを見ると分かりますが、現実世界の白い紙の情報はほぼ黒として描画されることになってしまいます。
おそらくこんな感じ↓

そのためカメラは情報をデータ化するときに、人間の目と同じように暗い部分のリソースを拡張し、明るい部分の情報を圧縮しているのです。その時使われるガンマ値はおよそ0.45。これはガンマ補正2.2をしていることと同義でもあります。(0.45≒1/2.2)
現実の光の情報を0~1、ガンマ値を0.45とすると
カメラのデータ=現実の光の階調0.45
B=A0.45
例えば現実世界の0.2の光は、データ化されると大体0.5になります。

これは人間の目と同じ補正ですね。
人間の目とカメラのデータ化は同じ補正と覚えておけば良さそうです。

②カメラのデータをPCに取り込み

PCに取り込んだ画像データは0.45のガンマがかかっているので、現実世界よりも明るい画像になっているはずです。おそらくこんな感じ↓

しかし人間はこの明るい画像を見ることはありません。
なぜなら人間はPCモニターというフィルターを通して上記の画像を見ているからです。

③データをモニターに表示させる

②で明るく補正がかかった画像をPCモニターで写すとどうなるでしょうか。
一番最初に説明したように、PCモニターにはガンマ値2.2がかかっています。
Aを現実世界の画像とすると・・・

データ上の画像=A0.45
モニターから出力される画像=データ上の画像2.2
モニターから出力される画像=A0.45*A2・2
モニターから出力される画像=A(0.45*2.2)
モニターから出力される画像=A0.99
モニターから出力される画像≒A
モニターから出力される画像≒現実世界の画像

計算すると明るくなったデータ上の画像は、モニターのガンマで見事に相殺され
現実世界とほぼ同じ画像がモニターに映し出されます。

④PCモニターを人間が見る

モニターに映し出された画像を人間が見ると、現実世界とほぼ同じように見えますが、
完全に同じではありません。
そもそも①の時点で現実世界の明るい情報(ろうそくの火~太陽の光)は削減されています。
しかし、人間の目の特徴で説明したように、人間は明るい情報に鈍感なため、明るい情報(ろうそくの火~太陽の光)が削減されていることに気がつきません。
このようにカメラやPCは人間に不要な情報を省き、効率的に情報を伝える仕組みになっているのです。

あれ?人間の目にもガンマフィルターがあるから、モニターに映った画像がさらに変わって見えるのではと混乱する人もいるかもしれませんが、そもそも人間は現実世界をフィルターがかかった目でしか見ていないので、そこは考える必要がありません。将来人間が電脳化して目を使わずに現実世界を見ることができるようになれば話は変わってきますが・・・。

 

PCモニターに写された写真を見た2人の反応
ガンマ0.4の目を持つ普通の人間「普通の画像だ」
ガンマ1の目を持つサイボーグ「なんか暗い画像だなあ・・・」

ガンマをOFFにする

筆者は仕事で3dsmaxを使うことが多いので、この「ガンマをOFFにする」という単語をよく聞きます。
どんな作品でも仕様書にガンマ値について書かれているのですが、余程高級な作品以外、ガンマはOFFにしてください、と書かれます。

このガンマをOFFとはつまり、「ガンマ補正をOFFにする」ということで、ガンマ補正ONの状態だと人間がモニターを見た時に↓の画像のような明るい画像が見えます。

なぜ通常より明るい画像にする必要があるかというと、リニアワークフローという概念が関わってきます。簡単に言うと様々な機材の行き来でガンマがずれるので、一度全てのガンマを取り払い、各素材のガンマを統一させ、最後の最後、全ての素材が合成された状態でガンマの調整をかける作業方式です。
前の説明でモニターから出力される画像=A0.99という式が出ましたが、この時点で少しずれてますよね・・・。この少しの差も許さない作品というのはかなり高級な作品と言えます。

まとめ

今回のガンマについては様々なサイトを見て勉強しましたが、
圧倒的にコンポジゴク様のサイトの説明が分かりやすかったです。しかし、それでも専門性が高く難しい内容でしたので、当ブログではさらに簡単に説明してみました。より詳しいガンマの仕組みを知りたい方は他のサイトも見てみると面白いと思います。
間違ったことを書いていたらご指摘ください。

gesomaをフォローする
CGすくいどる

コメント