5

私はレンダリングに OpenGL を使用しています。線形値をデフォルトのフレームバッファに (ガンマ補正なしで) 書き込むと、モニタ上で線形に表示されます。これは、ガンマ補正について私が知っていると思っていたすべてに反します (ここで説明されているように: http://gamedevelopment.tutsplus.com/articles/gamma-correction-and-why-it-matters--gamedev-14466 )。ガンマ補正がなければ、モニターによって中間色が非線形に暗くなることが予想されます。

しかし、これが私が実際に見ているものです。最初はガンマ補正なし、次にガンマ補正あり: ここに画像の説明を入力

これは、ガンマ補正なしのフラグメント シェーダーです (フルスクリーン クワッドでデフォルトのフレーム バッファーに描画されます)。これにより、左側の線形イメージが得られます。

out vec4 fsOut0;

void main( void )
{
    // split the screen into 10 discrete color bands
    float yResolution = 768.0;
    int intVal = int(gl_FragCoord.y / yResolution * 10.0);
    fsOut0.rgb = vec3( float(intVal) / 10.0 );

    fsOut0.a = 1.0;
}

ガンマ補正が追加されたシェーダー (線形空間から sRGB まで) は次のとおりです。これにより、右側の線形よりも明るい画像が得られます。

out vec4 fsOut0;

void main( void )
{
    // split the screen into 10 discrete color bands
    float yResolution = 768.0;
    int intVal = int(gl_FragCoord.y / yResolution * 10.0);
    fsOut0.rgb = vec3( float(intVal) / 10.0 );

    // gamma correction
    fsOut0.rgb = pow( fsOut0.rgb, vec3(1.0/2.2) );

    fsOut0.a = 1.0;
}

色が線形かどうかは、見ただけで検証し、Photoshop のカラー ピッカーを使用して、カラー バンド間の RGB 値の違いを調べています。線形に見える画像の場合、各色の違いは (ほとんど) 一定です。

また、sRGB 対応のデフォルト フレームバッファをリクエストしてみました。この場合、ガンマ補正なしで線形値を書き込むと、2 番目のイメージ (非線形) のように見えます。

私は何を間違っていますか?それとも、私の 2 台のモニターの両方が正しく調整されておらず、Photoshop が線形空間で色を選択していない可能性がありますか? それとも、私の「非線形」画像は実際には正しい線形結果ですが、私の目には線形に見えませんか?

私の質問はこれの複製のようなものです:現代のコンピューター/モニターで最終的な色出力をガンマ補正する必要がありますか ?回答者よりも知識の少ない人のために完全に説明されています。

4

1 に答える 1

1

さて、左と右の写真はどちらも予想どおりです。彼らは完全に元気です、そしてはい、私は自分のものを知っています.

私たちの目もあまり直線的ではないというだけです。たとえば、直線強度 (光度) の 1/5 は「白の半分の明るさ」として認識されます。これは、右側の修正された画像の下部近くに表示されるものです。

これが、ガンマが最初に存在する理由です。目の反応を模倣してエンコードを支援するためです。IOW、ガンマは非線形ランプを線形に見せます。

ただし、物理的に直線的なランプ (右図のように) は、直線的であると認識されるのにはまったく逆です。現実世界のダイナミック レンジは (光度の点で) 非常に大きく、私たちの目はそれを補正していることを思い出してください。これはあなたを混乱させますが、他の多くの人とは異なり、あなたは実際に数字を正しく理解しています.

于 2015-04-30T09:52:00.677 に答える