4

私は Blinn Phong (LearnOpenGL チュートリアル) ライティングを作成しており、ガンマ補正された色を最終結果として取得しようとしています。

ガンマ補正について掘り下げる前に、私の照明は次のようになります。

画像1

それから私は一日中sRgb色空間とその意味について読んでいます。ガンマ補正された色を使用すると、ライティングの品質が向上するという結論に達しました。

フラグメント シェーダーでガンマを手動で調整するのは面倒です。GL_FRAMEBUFFER_SRGB を有効にして、sRgb 対応のフレームバッファを要求することで、opengl にそれをさせることができます。(?)

これは、GL_FRAMEBUFFER_SRGB を有効にし、テクスチャを GL_RGB 形式でロードした場合です。

画像2

これは期待される結果です。サンプリングされたテクスチャが 2 回色補正されるため、色がより明るくなります。(?)

これは、GL_FRAMEBUFFER_SRGB を有効にし、テクスチャを GL_SRGB 形式でロードした場合です。

画像3 これは予想外の結果です。すべてが暗すぎて、拡散色が見えず、スペキュラーのみです。

私の質問は:

(LearnOpenGL チュートリアルに従って) OpenGL が独自にガンマ補正を実行できるようにするには、次のことを行う必要があります。

• SRGB をサポートするフレームバッファを持っている。

• SRGB フラグを使用してテクスチャをロードします。

何が間違っているのですか、それとも何か重要なことを見逃しているのでしょうか?

更新: GL_SRGB 形式でロードされたディフューズ テクスチャ、GL_RGB のスペキュラ。最後の画像では、拡散反射光が期待どおりにサンプリングされているのに対し、拡散反射光の色は完全に減衰 (?) されているように見えます。私の減衰関数は次のとおりです。

float attenuation = max(1.0 - distance / light.radius, 0.0);

4

0 に答える 0