Я пишу освещение Blinn Phong (учебное пособие по LearnOpenGL) и пытаюсь получить цвета с гамма-коррекцией в качестве конечного результата.
Прежде чем я начну копать о коррекции гаммы, мое освещение выглядит так:
Затем я провожу весь день за чтением пространства цветов sRgb и его значения.Я пришел к выводу, что гамма-коррекция цветов приводит к лучшему качеству освещения.
Я не хочу беспокоиться о ручной настройке гаммы в фрагментном шейдере.Я могу позволить opengl сделать это с включением GL_FRAMEBUFFER_SRGB и запросом кадрового буфера с поддержкой sRgb. (?)
Это с включенным GL_FRAMEBUFFER_SRGB и текстурами, загруженными в формате GL_RGB:
Это ожидаемые результаты.Цвета становятся более яркими, поскольку сэмплированные текстуры имеют цветовую коррекцию дважды. (?)
Это с включенным GL_FRAMEBUFFER_SRGB и текстурами, загруженными в формате GL_SRGB:
Этоэто неожиданные результаты.Все слишком темно, и не виден размытый цвет, только зеркальный.
Мой вопрос:
Чтобы позволить opengl самостоятельно выполнять гамма-коррекцию (согласно учебному пособию по LearnOpenGL), мне нужно:
• иметь фрейм-буфер с поддержкой SRGB;
• загружать текстуры с флагом SRGB;
Что я делаю не так, или, может, я пропустил что-то важное?
Обновление: диффузная текстура загружена в формате GL_SRGB, а зеркально в GL_RGB.На последнем изображении кажется, что диффузный цвет полностью ослаблен (?), А зеркальная выборка, как и ожидалось.Моя функция ослабления:
float attenuation = max(1.0 - distance / light.radius, 0.0);