9

ガンマ補正の必要性を完全に理解するには問題があります。皆さんが私を助けてくれることを願っています。

隣接する 256 個のピクセルを表示するとします。これらのピクセルは、黒から白への滑らかなグラデーションである必要があります。0..255.人間の目の非線形性のため、モニターはこれらの値を単純に線形の輝度値に変換してはなりません。隣接するピクセルの輝度値(1/256)*I_max, (2/256)*I_max, et ceteraが .

幸いなことに、モニターは人間の目に対して相反する非線形性を持っています。つまり、線形グレー値0..255をフレーム バッファーに入れると、モニターはそれらを非線形輝度値 x^gamma に変換します。ただし、私たちの目は逆に非線形であるため、滑らかな線形グラデーションを認識します。モニターの非線形性と私たちの目の非線形性は、互いに打ち消し合います。

では、なぜガンマ補正が必要なのでしょうか? モニターが常に線形の輝度値を生成することを望んでいるという本を読んだことがあります。それらによると、モニターの非線形性は、グレー値をフレームバッファーに書き込む前に補償する必要があります。これは、ガンマ補正によって行われます。ただし、ここでの問題は、私が理解している限り、モニターが線形の輝度値を生成するときに、線形の輝度値を認識しない (つまり、滑らかで安定した勾配を認識しない) ことです。

私が見る限り、線形グレー値をフレーム バッファに入れれば完璧です。モニターはこれらの値を非線形の輝度値に変換し、私たちの目は再び線形の明るさの値を認識します。これは、目が相互に非線形であるためです。フレーム バッファ内のグレー値をガンマ補正する必要はなく、モニタに強制的に線形の輝度値を生成させる必要もありません。

これらのことを見る私の方法の何が問題なのですか?ありがとう

4

3 に答える 3

6

私は現在同様の質問に苦しんでおり、答えを見つけたと思うので、この質問を「復活」させてください。他の人にとって役立つかもしれません。または、私が間違っている可能性があり、誰かが私に言うことができます:)

あなたの考え方に間違いはないと思います。何をしているのか分かっていれば、常にガンマ補正を行う必要はありません。それはあなたが何を達成したいかによります。2 つの異なるケースを見てみましょう。

A) ライト シミュレーション (AKA レンダリング)。ライトが向いている拡散サーフェスがあります。次に、光の強度が 2 倍になります。

良い。このような状況で現実の世界で何が起こるか見てみましょう。純粋な拡散サーフェスを想定すると、反射される光の強度は、サーフェスのアルベドに入射光の強度と、入射光の角度と法線の余弦を掛けたものになります。なんでもいい。つまり、入射光強度が 2 倍になると、反射光強度も 2 倍になります。これが、光輸送が線形プロセスであると言われる理由です。おもしろいことに、私たちの知覚は非線形であるため、表面を 2 倍明るく知覚することはありません (これは、いわゆるスティーブンのべき乗則によってモデル化されています)。繰り返しますが、現実の世界では反射光は 2 倍になりますが、2 倍明るく感じることはありません。

では、これをどのようにシミュレートしますか? 表面のアルベドを持つ sRGB テクスチャがある場合は、それを線形化する必要があります (2.2 ガンマを適用することを意味する修正解除によって)。線形になり、光の強度が得られたので、前に述べた式を使用して反射光の強度を計算できます。私たちは線形空間にいるので、強度を 2 倍にすると、現実の世界のように出力が 2 倍になります。次に、結果をガンマ補正します。このため、レンダリングされたイメージを画面に表示すると、ガンマが適用され、線形の応答が得られます。最初のものをシミュレートするときよりも強力な光。したがって、画面から目に届く光の強度は 2 倍になります。実際のライトが影響している実際のサーフェスを見ている場合とまったく同じです。もちろん、2 番目のレンダリングを 2 倍明るく知覚することはできませんが、繰り返しますが、前述したように、これはまさに実際の状況で起こることです。現実世界とシミュレーションでの同じ動作は、シミュレーション (レンダリング) が正しかったことを意味します:)

B)別のケースは、正確に「見たい」グラデーションが必要な場合です(AKAが認識されます)。

画面の非線形応答が非線形視覚認識を相殺するようにするため、ガンマ補正を完全にスキップできます (提案どおり)。または、より正確には、線形空間とガンマ補正で操作を続けますが、非線形に知覚されるピクセル (1,2,3...255) の連続した値ではなく (スティーブンの場合)、値を使用してグラデーションを作成します。知覚的な明るさの反応の逆数によって変換されます (つまり、正規化された値に 1/0.5=2 の指数を適用します。これは、明るさのスティーブンの指数の逆数を適用しています)。

実際のところ、http://scanline.ca/gradients/にあるようなガンマ補正された線形勾配が見られる場合、それが線形であるとはまったく認識されません。より高いもの(予想どおり)。

少なくとも、これはこのトピックに関する私の現在の理解です。誰にでも役立つことを願っています。もう一度お願いします、もし間違っていたら、誰かがそれを指摘してくれると本当にありがたいです...

于 2013-09-26T02:22:22.237 に答える
3

問題は、色の計算を行うときです。たとえば、2 つの色をブレンドする場合、線形強度を使用して計算を行う必要があります。実際に適切な結果を表示するには、線形強度をガンマ補正強度に戻す必要があります。

あなたの目が強度をどのように知覚するかは関係ありません。色の計算を正しく行うには、線形輝度値に依存する光学の物理原理に基づいて行う必要があります。色を計算したら、それがどのように知覚されるかに関係なく、それらの輝度値がモニターによって出力されるようにする必要があるため、モニターが必要な色を直接生成しないという事実を補正する必要があります。

于 2012-10-19T14:02:02.997 に答える
0

これに対するあなたの見方が間違っているという質問に実際に答えることは、実際には何も悪いことではありません。線形フレームバッファがあれば素晴らしいことですが、あなたが言うように、8 ビットの線形フレームバッファを持つことは明らかに素晴らしいことではありません。

8 ビットが非常に扱いやすいという事実は、ガンマ圧縮されたフレーム バッファーと色表記を正当化する唯一の理由です (HTML の #888 を考えてみてください。#888 ではなく中間の灰色に #333 を使用するのはクールではありません)。

モニターについて-入力に対する応答を予測できるようにしたいと考えており、sRGBからそれがどうあるべきかを知っています。通常、知っておく必要があるのはそれだけです。モニターのガンマを補正すればシミュレートできる「線形」出力をモニターが生成する場合、それは「正しい」または何かだと考える人もいます。このような設定を避けることをお勧めします。これにより、標準のガンマを (正しく正気で) 想定しているすべてのアプリが壊れて、壊れていない、思いがけない直線性を前提とするアプリが優先されます。そうしないでください。代わりに、アプリを修正するか、ダンプしてください。

于 2012-10-22T16:17:00.347 に答える