Гамма-коррекция OpenGL с помощью GL_FRAMEBUFFER_SRGB - PullRequest
0 голосов
/ 18 сентября 2018

Я пишу освещение Blinn Phong (учебное пособие по LearnOpenGL) и пытаюсь получить цвета с гамма-коррекцией в качестве конечного результата.

Прежде чем я начну копать о коррекции гаммы, мое освещение выглядит так:

image 1

Затем я провожу весь день за чтением пространства цветов sRgb и его значения.Я пришел к выводу, что гамма-коррекция цветов приводит к лучшему качеству освещения.

Я не хочу беспокоиться о ручной настройке гаммы в фрагментном шейдере.Я могу позволить opengl сделать это с включением GL_FRAMEBUFFER_SRGB и запросом кадрового буфера с поддержкой sRgb. (?)

Это с включенным GL_FRAMEBUFFER_SRGB и текстурами, загруженными в формате GL_RGB:

image 2

Это ожидаемые результаты.Цвета становятся более яркими, поскольку сэмплированные текстуры имеют цветовую коррекцию дважды. (?)

Это с включенным GL_FRAMEBUFFER_SRGB и текстурами, загруженными в формате GL_SRGB:

image 3 Этоэто неожиданные результаты.Все слишком темно, и не виден размытый цвет, только зеркальный.

Мой вопрос:

Чтобы позволить opengl самостоятельно выполнять гамма-коррекцию (согласно учебному пособию по LearnOpenGL), мне нужно:

• иметь фрейм-буфер с поддержкой SRGB;

• загружать текстуры с флагом SRGB;

Что я делаю не так, или, может, я пропустил что-то важное?

Обновление: диффузная текстура загружена в формате GL_SRGB, а зеркально в GL_RGB.На последнем изображении кажется, что диффузный цвет полностью ослаблен (?), А зеркальная выборка, как и ожидалось.Моя функция ослабления:

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

...