Для чего нужна гамма коррекция

Яркость, контраст и гамма-коррекция камеры на мониторе

В мониторах предусмотрены определённые настройки, которые могут быть изменены оператором для повышения чёткости и детализации выводимых на экран изображений. Для начала можно изменить яркость и контрастность изображения.

Настройка яркости увеличивает либо уменьшает средний уровень освещённости. Настройка контраста увеличивает либо уменьшает разницу в освещённости между максимально и минимально яркими участками изображения.

Регулировка яркости на мониторе

Самым простым методом настройки яркости и контраста является отображение тестовой таблицы, генерируемой электронным путём; желательно, чтобы в таблице присутствовала шкала градаций оттенков серого цвета (от чёр-
ного к белому).

Смысл регулировки сводится к тому, чтобы разница между всеми соседствующими градациями была очевидной и примерно одинаковой. Правильность установки яркости и контраста весьма важны для качественного отображения видеоинформации, и важность эта повышается, если в помещении установлен не один, а несколько просмотровых мониторов.

Некоторые из камер должны выводиться на разные мониторы одновременно, поэтому, если отображение на дисплеях не настроено, один и тот же камерный канал может выглядеть на разных мониторах по-разному.

Гамма-коррекция

Следующим по важности параметром монитора является гамма-коррекция. Гамма-коррекция состоит в кодировании и декодировании видеосигнала с целью компенсации нелинейности видеотракта и согласования с особенностями нелинейности восприятия уровней яркости человеческим зрением. Это способствует максимально эффективному использованию средств отображения видеоинформации с точки зрения особенностей зрительного восприятия света.

Установка гамма-коррекции предусмотрена не во всех моделях мониторов, а там, где она имеется, настройка производится, как правило, через дополнительные опции меню.

Человеческое зрение, как и слух, не может быть описано линейными зависимостями: оно скорее является логарифмическим или экспоненциальным. Если при формировании видеосигнала не прибегать к гамма-коррекции, приращения освещённости будут трактоваться как линейные и человеческий глаз не сможет правильно разли-
чать градации яркости. Простая иллюстрация того, как это работает: представьте себе солнечный день с освещённостью, скажем, 50 тысяч люкс; падение яркости наполовину будет составлять 25 тысяч люкс.

Однако при слабой освещённости, скажем, в 50 лк, аналогичное уменьшение составит 25 лк. В абсолютном выражении величины эти весьма сильно различаются, однако и в том, и в другом случае глаз воспринимает результат снижения освещённости одинаково.

Это и есть нелинейность человеческого зрения. Для её компенсации и служит гамма-коррекция. Поэтому, чтобы лучше различать детали в слабо освещённых частях отображаемой сцены, видеосигнал с камеры усиливается нелинейным образом, и кривая усиления соответствует степенной функции с показателем 2,2. Эта кривая является обратной той, что использовалась при обработке сигнала в трубочных камерах (экспонента с показателем 0,45) — а при помещении кривых на один и тот же график их форма напоминает греческую букву γ (гамма), откуда и происходит название этой коррекции Сенсоры современных полупроводниковых телекамер обладают линейной характеристикой чувствительности, однако на стороне монитора требуемое для адекватного отображения сцены соотношение яркостей имеет скорее нелинейный характер.

В процессе пересчёта сформированных камерой данных в стандартный RGB-видеосигнал производится пересчёт цветового пространства и ряд других преобразований. В числе таких преобразований — гамма-коррекция, которая также улучшает передачу деталей изображения в зонах с относительно невысокой освещённостью, тем самым повышая эффективность компрессии данных. Все стандартные цветовые пространства и форматы файлов используют нелинейное (с учётом гамма-коррекции) кодирование яркости основных цветов. Изображение, которое выводилось на трубочные мониторы, обычно не требовало гамма-коррекции, поскольку в стандартном аналоговом видеосигнале она учитывается таким образом, чтобы при выведении на ЭЛТ-дисплей изображение было достаточно комфортным для просмотра (хотя и не в точности таким, каким оно являлось до коррекции). Гамма-коррекция аналоговых видеосигналов определяется требованиями соответствующих стандартов видеокодирования (PAL либо NTSC) и является величиной фиксированной и известной.

Легенда

Существует заблуждение, согласно которому гамма-коррекция была придумана, чтобы компенсировать характеристики ввода-вывода ЭЛТ-дисплеев. В трубочных мониторах интенсивность электронного пучка, а таким образом и яркость
свечения люминофора, нелинейно зависит от напряжения между катодом и модулятором электронной пушки. Искусственно внося нелинейность во входной сигнал с применением гамма-коррекции, мы можем убрать эту нелинейность таким образом, чтобы изображение на выходе имело требуемые изменения градаций яркости. Однако характеристики гамма-коррекции дисплея никак не влияют на гамма-коррекцию изображений при их формировании: коррекция применяется, чтобы обеспечить максимально высокое визуальное качество изображений вне всякой зависимости от того, на каком мониторе их предполагается отображать.

Физика процессов, происходящих в ЭЛТ-мониторе, предполагает в видеотракте (например, в телекамере) гамма-коррекцию, обратную показателю гаммы монитора, что и имеет место в современных камерах на ПЗС-сенсорах. В трубочных передающих камерах нелинейность преобразования «свет-сигнал» соответствовала показателю гаммы 0,45. Поэтому гамма-корректор в телевизионной камере не требовался; впрочем, это лишь удачное совпадение, которое несколько упростило конструктивные решения камер на самой заре вещательного телевидения. В современных компьютерах с ЖК-мониторами изображения подвергаются при кодировании гамма-коррекции с показателем 0,45, а при декодировании — обратной коррекции с показателем 2,2. Эти коэффициенты коррекции присутствуют на уровне операционной системы. Стоит заметить, что вплоть до момента выпуска компанией Apple операционной системы Mac OS X 10.6 в компьютерах Mac использовалась другая пара коэффициентов — 0,55 и 1,8.

Во всех цифровых изображениях и видеопотоках закодированы значения гамма-коррекции. Это прописано в различных стандартах. Двоичные данные в компрессированных файловых форматах (JPEG, JPEG-2000) являются кодированными. В них содержатся не линейные данные об интенсивности света, а значения, подвергнутые гаммакоррекции. Это касается и сжатых видеопотоков в таких форматах, как MPEG и H.264. Иногда в определённых приложениях либо в определённой комбинации аппаратных средств может потребоваться более точная установка показателя гамма коррекции. К примеру, это используется в издательских системах, где внешний вид изображений на дисплее должен быть максимально приближен к изображениям, выведенным на печать.

При необходимости операционная система в состоянии обеспечить такого рода установки. Как правило, при настройке используются аппаратные средства цветовой калибровки. Возможно, что в полиграфии процесс цветовой калибровки системы (реальный мир – камера – монитор – распечатка) является одним из самых важных. В фотографии и киноиндустрии ему отводятся первые роли, однако такого рода настройки мо гут производиться и в системах видеонаблюдения. Предмет этот весьма сложен, что вызвано прежде всего тем, что при формировании изображений и их печати используются разные цветовые пространства (RGB и CMYK). Не погружаясь в детали, отметим, что цветовая калибровка в принципе возможна. Важно отметить, что при неверных установках яркости, контраста и гамма-коррекции монитора даже самый качественный видеосигнал может предстать перед оператором в виде, непригодном для ведения наблюдения.

На видео: Познавательный рассказ о гамма-коррекции.

Источник

Гамма-коррекция

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

Гамма-коррекция — коррекция яркости цифрового изображения или видеопотока. Обыкновенно, используется степенная функция в виде

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

Гамма-коррекция изначально служит:

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

Содержание

История возникновения

Исторически введение гамма коррекции было обусловлено тем, что у электронно-лучевой трубки зависимость между количеством испускаемых фотонов и напряжением на катоде близка к степенной формуле. В результате это вошло в стандарт, и для появившихся жидкокристаллических мониторов, проекторов и т.д., где зависимость между напряжением и яркостью имеет более сложный характер, сейчас используются специальные компенсационные схемы.

Стандартное значение параметра гаммы для видеоизображений NTSC — 2.2. Для дисплеев компьютера значение гаммы обычно составляет от 1.8 до 2.4. Средства настроек видеокарт позволяют подавать на вход дисплеев модифицированный сигнал, и таким образом корректировать этот параметр.

Гамма коррекция и цветовой профиль

Значения гаммы монитора напрямую влияют на то, с какой яркостью будет показано изображение без применения цветокоррекции.

При переносе графического файла между компьютерами копия изображения может выглядеть светлее или темнее, чем оригинал. В разных операционных системах (например Microsoft Windows, GNU/Linux и Macintosh) существуют разные стандарты встроенной гамма коррекции.

При профессиональной работе программное обеспечение учитывает цветовые профили изображения и монитора и может вносить необходимые коррективы.

Например, встроенная в формат PNG гамма-коррекция работает следующим образом: данные о настройках дисплея, видеоплаты и программного обеспечения (информация о гамме) сохраняется в файле вместе с самим изображением, что и обеспечивает идентичность копии оригиналу при переносе на другой компьютер.

Гамма коррекция как фильтр

В большинство программных продуктов для обработки изображений гамма коррекция встроена, как фильтр эффектов.

При необходимости, если фотоснимок выглядит слишком темным или блеклым, можно использовать гамма коррекцию для исправления этих недостатков.

При осветлении, например, возможно появление новых деталей в тёмных областях, которые ранее не были заметны.

Примечания

См. также

Полезное

Смотреть что такое «Гамма-коррекция» в других словарях:

гамма-коррекция — Коррекция градационных искажений. [ГОСТ 21879 88] гамма коррекция Корректирующий фактор, применяемый к задаваемому значению цвета, чтобы обеспечить линейную зависимость между задаваемым значением и воспроизводимым на принтере или мониторе цветом … Справочник технического переводчика

гамма-коррекция — сущ., кол во синонимов: 1 • коррекция (16) Словарь синонимов ASIS. В.Н. Тришин. 2013 … Словарь синонимов

гамма-коррекция — гамма коррекция, гамма коррекции … Орфографический словарь-справочник

Гамма-коррекция — 47. Гамма коррекция Коррекция градационных искажений Источник: ГОСТ 21879 88: Телевидение вещательное. Термины и определения оригинал документа … Словарь-справочник терминов нормативно-технической документации

Гамма-коррекция — 1. Коррекция градационных искажений Употребляется в документе: Приложение № 1 ГОСТ 21879 88 Телевидение вещательное. Термины и определения … Телекоммуникационный словарь

Гамма-коррекция видеосигнала — (гамма коррекция) нелинейное искажение видеосигнала для лучшего воспроизведения. Гамма коррекция заключается в предыскажении видеосигнала с целью увеличения контрастности изображения на мониторе. Камеры с гамма коррекцией сигнала имеют либо… … Официальная терминология

коррекция — исправление, корректирование, поправка, сторно, корректив, корректировка Словарь русских синонимов. коррекция см. исправление 1 Словарь синонимов русского языка. Практический справочник. М.: Русский язык. З. Е. Ал … Словарь синонимов

Гамма — Гамма: Гамма (буква) третья буква греческого алфавита. Гамма (музыка) музыкальный термин. Цветовая гамма термин в живописи, цветоведении и цветопсихологии. Гамма (единица измерения) единица измерения напряженности… … Википедия

ГОСТ 21879-88: Телевидение вещательное. Термины и определения — Терминология ГОСТ 21879 88: Телевидение вещательное. Термины и определения оригинал документа: 150. 2 T импульс Телевизионный измерительный сигнал, имеющий форму синусквадратичной функции за один ее период между нулевыми значениями и длительность … Словарь-справочник терминов нормативно-технической документации

Источник

Урок №31. Гамма-коррекция в OpenGL

Обновл. 30 Окт 2021 |

На этом уроке мы рассмотрим, что такое гамма и гамма-коррекция в OpenGL.

Гамма

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

Верхняя строка выглядит как корректная, с точки зрения восприятия человеческим глазом, шкала яркости. Удвоение яркости (например, от 0.1 до 0.2 ) действительно представляется так, как будто оно в два раза ярче, с хорошо видимыми последовательными различиями. Однако, когда мы говорим о физической яркости света, например, о количестве фотонов, испускаемых источником света, то физически правильную яркость отображает именно нижняя шкала. Но поскольку наши органы зрения воспринимают яркость по-разному (более восприимчивы к изменениям темных цветов), то это выглядит странно.

Так как человеческие глаза предпочитают воспринимать цвета яркости в соответствии с верхней шкалой, то мониторы (до сих пор) используют определенное соотношение мощности для отображения выходных цветов так, что яркость исходных физических цветов сопоставляется с нелинейными цветами яркости в верхней шкале.

Данное нелинейное сопоставление действительно дает более приятные результаты яркости для нас, но когда дело доходит до рендеринга графики, появляется одна проблема: все параметры цвета и яркости, которые мы настраиваем в наших приложениях, зависят от того, что мы видим на экране монитора, и поэтому все параметры яркости/цвета на самом деле являются нелинейными. Взгляните на следующий график:

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

До этого урока мы предполагали, что находимся в линейном пространстве, но на самом деле мы работали в отображаемом пространстве монитора, поэтому все переменные цвета и освещения, которые мы настроили, не были физически корректными, а просто выглядели таковыми именно на нашем мониторе. По этой причине мы (и художники в том числе) обычно устанавливаем значения освещения намного ярче, чем они должны быть (так как монитор затемняет их), что в результате делает большинство линейных пространственных вычислений некорректными. Обратите внимание, что монитор (ЭЛТ) и линейный график начинаются и заканчиваются в идентичных позициях; промежуточные значения между ними затемняются.

Поскольку настройка цветов происходит в зависимости от того, какая картинка отображается на экране монитора, то все промежуточные вычисления (освещения) в линейном пространстве не являются физически корректными. Это становится все более очевидным при использовании более продвинутых алгоритмов освещения — пример этого вы можете видеть на следующем рисунке:

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

Вы можете видеть, что с гамма-коррекцией (обновленные) значения цвета куда лучше сочетаются друг с другом, а более темные области теперь отображают гораздо больше деталей. В итоге, при помощи нескольких небольших модификаций, мы получаем улучшенное качество изображения.

Без грамотной коррекции гаммы монитора освещение будет выглядеть неправильно, и художникам будет трудно получить реалистичные и красивые результаты. Решение заключается в применении гамма-коррекции.

Гамма-коррекция

Идея гамма-коррекции состоит в том, чтобы применить инверсию гаммы монитора к конечному выходному цвету картинки перед её отображением на экране. Оглядываясь на предыдущий график гамма-кривой, мы видим еще одну пунктирную линию, обратную относительно гамма-кривой монитора. Мы умножаем каждый из линейных выходных цветов на эту обратную гамма-кривую (делая их ярче), и, как только цвета картинки будут отображены на экране компьютера, к ним применится гамма-кривая монитора, в результате чего итоговые цвета становятся линейными. Т.е. по факту мы осветляем промежуточные цвета для того, чтобы, как только монитор затемнит их, они сразу вернулись бы к нормальным значениям.

Примечание: Значение гаммы равное 2.2 является заданным по умолчанию значением, которое приблизительно оценивает среднюю гамму большинства мониторов. Цветовое пространство в результате применения данной гаммы называется цветовым sRGB-пространством (не 100% точным, но близким к нему). Каждый монитор имеет свои собственные гамма-кривые, но гамма-значение 2.2 дает хорошие результаты на большинстве используемых мониторов. По этой причине игры часто позволяют игрокам изменять настройки своей гаммы, поскольку для каждого отдельно взятого монитора она может немного варьироваться.

Есть два способа применить гамма-коррекцию к сцене:

Использовать встроенную в OpenGL поддержку sRGB-фреймбуфера.

Включить опцию GL_FRAMEBUFFER_SRGB так же просто, как и вызвать функцию glEnable():

С этого момента ваши визуализированные изображения будут иметь скорректированную гамму. Единственный момент, который мы должны иметь в виду, используя описываемый подход (и другие подходы тоже), заключается в том, что гамма-коррекция (также) преобразует цвета из линейного пространства в нелинейное пространство, поэтому очень важно выполнять гамма-коррекцию только на последнем (заключительном) этапе. Если мы произведем гамма-коррекцию наших цветов перед окончательным выводом картинки на экран, то все последующие операции с данными цветами будут работать с неверными значениями. Например, если мы используем несколько фреймбуферов, то есть смысл, чтобы промежуточные результаты, передаваемые между фреймбуферами, оставались в линейном пространстве, и только последний фреймбуфер применял гамма-коррекцию перед отправкой изображения на экран монитора.

Второй подход требует немного большей работы (в отличие от первого), но при этом дает нам полный контроль над операциями гамма-коррекции. Мы применяем гамма-коррекцию в конце каждого запуска соответствующего фрагментного шейдера, в результате чего итоговые цвета перед отправкой на монитор будут иметь скорректированную гамму:

Источник

Learn OpenGL. Урок 5.2 — Гамма-коррекция

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

Гамма-коррекция

Итак, мы вычислили цвета всех пикселей сцены, самое время отобразить их на мониторе. На заре цифровой обработки изображений большинство мониторов имели электронно-лучевые трубки (ЭЛТ). Этот тип мониторов имел физическую особенность: повышение входного напряжение в два раза не означало двукратного увеличения яркости. Зависимость между входным напряжением и яркостью выражалась степенной функцией, с показателем примерно 2.2, также известным как гамма монитора.

Часть 1. Начало

Часть 2. Базовое освещение

Часть 3. Загрузка 3D-моделей

Часть 4. Продвинутые возможности OpenGL

Часть 5. Продвинутое освещение

Часть 6. PBR

Эта особенность мониторов (по случайному совпадению) очень напоминает то, как люди воспринимают яркость: с подобной же (но обратной) степенной зависимостью. Чтобы лучше это понять, взгляните на следующее изображение:

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

Верхняя строка показывает как воспринимается яркость человеческим глазом: при увеличении яркости в 2 раза (например, от 0.1 до 0.2) картинка действительно выглядит так, будто она в два раза ярче: изменения видны довольно отчетливо. Однако, когда мы говорим о физической яркости света, как, например, о количестве фотонов, выходящих из источника света, верную картину дает нижняя шкала. На ней удвоение значения дает правильную с физической точки зрения яркость, но поскольку наши глаза более восприимчивы к изменениям темных цветов, это кажется несколько странным.

Поскольку для человеческого глаза более привычен верхний вариант, мониторы и по сей день используют степенную зависимость при выводе цветов, так что исходные, в физическом смысле, значения яркости преобразуются в нелинейные значения яркости, изображенные на верхней шкале. В основном это сделано потому, что так выглядит лучше.

Эта особенность мониторов действительно делает картинку лучше для наших глаз, но когда дело доходит до рендеринга графики появляется одна проблема: все параметры цвета и яркости, которые мы устанавливаем в наших приложениях, основаны на том, что мы видим на мониторе. А это означает что все эти параметры на самом деле являются нелинейными. Взгляните на график:

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

Серая линия соответствует значениям цвета в линейном пространстве; сплошная красная линия представляет собой цветовое пространство отображаемое монитором. Когда мы хотим получить в 2 раза более яркий цвет в линейном пространстве, мы просто берем и удваиваем его значение. Например, возьмем цветовой вектор Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция, то есть темно-красный цвет. Если бы мы удвоили его значение в линейном пространстве, он стал бы равным Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция. С другой стороны, при выводе на дисплей, он будет преобразован в цветовое пространство монитора как Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция, как видно из графика. Вот здесь и возникает проблема: удваивая темно-красный свет в линейном пространстве, мы фактически делаем его более чем в 4.5 раза ярче на мониторе!

До этого туториала мы предполагали, что работали в линейном пространстве, но на самом деле мы работали в цветовом пространстве, определяемом монитором, поэтому все установленные нами цвета и переменные освещения были физически не корректны, а всего лишь выглядели правильными конкретно на нашем мониторе. Руководствуясь данным предположением мы (и художники) обычно устанавливаем значения освещения ярче, чем они должны быть (т.к. монитор затемняет их), что в результате делает большинство последующих вычислений в линейном пространстве неверными. Также обратите внимание, что оба графика начинаются и заканчиваются в одних и тех же точках, затемнению на дисплее подвержены только промежуточные цвета.

Как я уже говорил, поскольку значения цветов выбраны на основании отображаемой монитором картинки, все промежуточные вычисления освещения, проводимые в линейном пространстве физически некорректны. Это становится все очевиднее, когда мы начинаем использовать более продвинутые алгоритмы освещения. Просто взгляните на изображение:

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

Как видно, цветовые значения (которые мы предварительно обновили) с использованием гамма-коррекции куда лучше сочетаются между собой, а темные области становятся светлее, что увеличивает их детализацию. Налицо гораздо лучшее качество изображения, при весьма незначительных модификациях.

Без должным образом настроенной гаммы монитора освещение выглядит неправильно, и художникам будет довольно трудно получить реалистичные и красивые результаты. Чтобы решить эту проблему необходимо применять гамма-коррекцию.

Гамма-коррекция

Идея гамма-коррекции заключается в том, чтобы применить инверсию гаммы монитора к окончательному цвету перед выводом на монитор. Снова посмотрим на график гамма-кривой в начале этого урока, обратив внимание на еще одну линию, обозначенную штрихами, которая является обратной для гамма-кривой монитора. Мы умножаем выводимые значения цветов в линейном пространстве на эту обратную гамма-кривую ( делаем их ярче), и как только они будут выведены на монитор, к ним применится гамма-кривая монитора, и результирующие цвета снова станут линейными. По сути мы делаем промежуточные цвета ярче, чтобы сбалансировать их затенение монитором.

Приведем еще один пример. Допустим, у нас опять есть темно-красный цвет Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция. Перед отображением этого цвета на монитор мы сперва применяем кривую гамма-коррекции к его компонентам. Значения цвета в линейном пространстве, при отображении на мониторе, возводятся в степень, приблизительно равную 2.2, поэтому инверсия требует от нас возведения значений в степень 1 / 2.2. Таким образом, темно-красный цвет с гамма-коррекцией становится Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция= Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция= Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция. Затем этот скорректированные цвет выводится на монитор, и в результате он отображается как Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция= Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция. Как видите, когда мы используем гамма-коррекцию монитор отображает цвета, точно такими, какими мы задаем их в линейном пространстве в нашем приложении.

Гамма равная 2.2 это дефолтное значение, которое приблизительно выражает среднюю гамму большинства дисплеев. Цветовое пространство в результате применения этой гаммы называется цветовым пространством sRGB. Каждый монитор имеет свои собственные гамма-кривые, но значение 2.2 дает хорошие результаты на большинстве мониторов. Из-за этих небольших отличий многие игры позволяют игрокам изменять настройку гаммы.

Существует два способа применения гамма-коррекции к вашим сценам:

Первый вариант проще, но дает вам меньше контроля. Установив флаг GL_FRAMEBUFFER_SRGB, вы сообщаете OpenGL, что каждая следующая за этим команда рисования должна выполнить гамма-коррекцию в цветовое пространство sRGB, прежде чем записать данные в цветовой буфер. После включения GL_FRAMEBUFFER_SRGB OpenGL автоматически выполнит гамма-коррекцию после запуска каждого фрагментного шейдера для всех последующих кадровых буферов, включая дефолтный кадровый буфер.

Включение флага GL_FRAMEBUFFER_SRGB выполняется при помощи обычного вызова glEnable:

Теперь отрендеренные вами буферы цвета будут иметь скорректированную гамму и, поскольку это делается аппаратно это ничего нам не стоит. Единственное, о чем вы должны помнить при таком подходе (хотя и при другом подходе тоже), что гамма-коррекция преобразует цвета из линейного пространства в нелинейное, поэтому очень важно, чтобы вы выполняли гамма-коррекцию только на последнем, заключительном этапе. Если вы примените гамма-коррекцию до окончательного вывода, все последующие операции над этими цветами будут работать с неправильными значениями. Например, если вы используете несколько кадровых буферов, вы, вероятно, хотите, чтобы промежуточные результаты оставались в линейном пространстве и только последний буфер применял гамма-коррекцию перед отправкой на монитор.

Второй подход требует немного больше работы, но зато дает нам полный контроль над операциями с гаммой. Мы применяем гамма-коррекцию на соответствующем этапе фрагментного шейдера, так что к результирующим цветам применяется гамма-коррекция непосредственно перед отправкой на монитор:

Последняя строка кода возводит каждый компонент цвета fragColor в степень Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция, корректируя результат работы данного шейдера.

Проблема этого подхода заключается в том, что вы должны применять гамма-коррекцию для каждого фрагментного шейдера, который вносит свой вклад в окончательный вывод, поэтому, если у вас есть дюжина фрагментных шейдеров для нескольких объектов, вам придется добавить код гамма-коррекции в каждый из них. Более разумным решением было бы добавить этап пост-обработки в ваш цикл рендеринга и применять гамма-коррекцию на финальном кваде в качестве последнего шага. Тогда вам нужно будет сделать это всего один раз.

Собственно, эти 2 строчки кода и представляют собой технические реализации гамма-коррекции. Не слишком впечатляет, правда? Подождите, есть еще пара нюансов, которые вы должны учитывать при гамма-коррекции.

sRGB текстуры

Всякий раз, когда вы рисуете или редактируете изображение на своем компьютере, вы выбираете цвета на основе того, что видите на мониторе. Фактически, это означает, что все созданные или редактируемые вами изображения находятся не в линейном пространстве, а в пространстве sRGB, то есть удвоение темно-красного цвета на экране, основанное на воспринимаемой вами яркости, на деле не равно удвоению красной составляющей цвета.

В результате, художники, рисующие текстуры, создают их в пространстве sRGB, и если мы используем эти текстуры в нашем приложении как они есть, мы должны учитывать это. До того как мы применили гамма-коррекцию это не создавало проблем, поскольку текстуры выглядели хорошо в пространстве sRGB, и без гамма-коррекции мы также работали в этом пространстве, так что текстуры отображались именно так, как задумано. Однако теперь, когда мы отображаем все в линейном пространстве, цвета текстуры передаются неверно, как видно на следующем изображении:

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

Текстура пересвечена, и это происходит потому, что гамма-коррекция, фактически, была применена к ней дважды! Посудите сами: когда мы создаем изображение на основе того, что видим на мониторе, мы корректируем гамму цветовых значений изображения, чтобы они выглядели верно на экране. Поскольку мы снова выполняем гамма-коррекцию при рендере, изображения становятся слишком яркими.

Чтобы решить эту проблему, мы должны убедиться, что художники, рисующие текстуры, работают в линейном пространстве. Однако, поскольку большинство художников даже не знают, что такое гамма-коррекция, и им проще работать в пространстве sRGB, это, скорее всего, не вариант.

Еще одно решение состоит в том, чтобы скорректировать или преобразовать эти sRGB-текстуры обратно в линейное пространство, прежде чем делать какие-либо манипуляции над их цветами. Мы можем сделать это следующим образом:

Тем не менее проделывать это для каждой текстуры в пространстве sRGB довольно хлопотно. К счастью, OpenGL дает нам еще одно решение наших проблем, предоставляя нам внутренние форматы текстур GL_SRGB и GL_SRGB_ALPHA.

Если мы создадим текстуру в OpenGL с любым из указанных двух текстурных форматов sRGB, OpenGL автоматически преобразует их цвета в линейное пространство, как только мы их используем, что позволит нам правильно работать в линейном пространстве со всеми извлеченными из текстуры значениями цвета. Мы можем объявить текстуру как sRGB следующим образом:

Если вы хотите использовать альфа-компонент в своей текстуре, вам нужно будет обозначить внутренний формат текстуры как GL_SRGB_ALPHA.

Вы должны быть осторожны при объявлении своих текстур как sRGB, поскольку не все текстуры будут находиться в пространстве sRGB. Текстуры, используемые для окраски объектов, такие как диффузные карты, почти всегда находятся в пространстве sRGB. Текстуры, используемые для извлечения параметров освещения, такие как бликовые карты и карты нормалей, наоборот, почти всегда находятся в линейном пространстве, поэтому, если вы объявите их как sRGB, освещение поедет. Будьте внимательны, при указании типов текстур.

Объявив наши диффузные текстуры как sRGB, вы снова получите ожидаемый результат, но на этот раз гамма-коррекцию достаточно применить всего 1 раз.

Затухание

Еще один момент, который будет иным при использовании гамма-коррекции — затухание освещения. В реальном физическом мире освещение затухает почти обратно пропорционально квадрату расстояния от источника света. На человеческом языке это означает, что сила света уменьшается при удалении от источника света, как показано ниже:

Однако при использовании этого уравнения эффект затухания слишком силен, и световое пятно получает небольшой радиус, что выглядит физически не слишком достоверно. Поэтому мы использовали другие уравнения для затухания (мы обсуждали это в туториале, посвященном основам освещения), которые дают больше возможностей настройки, или вообще линейный вариант:

Без гамма-коррекции линейный вариант дает гораздо более правдоподобные результаты, чем квадратичный, но когда мы включаем гамма-коррекцию, линейное затухание выглядит слишком слабым, и физически верное квадратичное неожиданно дает лучшие результаты. На рисунке ниже показаны различия между вариантами:

Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция

Причиной этого различия является то, что функции затухания света меняет яркость, и поскольку мы отображали нашу сцену не в линейном пространстве, мы выбрали функцию затухания, которая выглядела лучше всего на нашем мониторе, хоть и не была физически правильной. Когда мы использовали квадратичную функцию затухания без гамма-коррекции, фактически она превращалась в Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекцияпри отображении на мониторе, что давало гораздо больший эффект затухания. Это также объясняет, почему линейный вариант дает лучшие результаты без гамма-коррекции, ведь при нем Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция= Для чего нужна гамма коррекция. Смотреть фото Для чего нужна гамма коррекция. Смотреть картинку Для чего нужна гамма коррекция. Картинка про Для чего нужна гамма коррекция. Фото Для чего нужна гамма коррекция, что намного больше напоминает физически правильную зависимость.

Более продвинутая функция затухания, которую мы обсуждали в основах освещения, по-прежнему полезна и в сценах с гамма-коррекцией, поскольку она дает гораздо больший контроль для более точной реализации затухания (но, конечно, требует других параметров при использовании гамма-коррекции).

Я написал простую демо сцену, исходный код которой вы можете найти здесь. Нажимая клавишу пробел, вы можете переключаться между сценами с гамма-коррекцией и без, каждая из которых использует свои текстуры и функции затухания. Это не самая впечатляющая демонстрация, но она показывает, как применять данные техники.

Подведем итоги: гамма-коррекция позволяет вам работать с цветами в линейном пространстве. Поскольку физическому миру присуще линейное пространство, большинство физических вычислений будут давать лучшие результаты, например расчет затухания света. Использование гамма-коррекции позволяет гораздо легче достигать реалистичных результатов по мере усложнения применяемых техник освещения. Именно поэтому рекомендуется сразу же настроить параметры освещения для работы с гамма-коррекцией.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *