Меню

Гамма в настройках камеры это



Цветопередача. Что такое гамма-кривая.

Цветопередача зависит от многих факторов, её нельзя описать одним параметром. Если вам говорят, что, например, у монитора отличная цветопередача – 16 миллионов цветов, это враньё. Количество цветов с цветопередачей связано очень слабо.

Цветопередача зависит в основном от:

  1. вашей фотокамеры и её настроек (например, баланс белого, Picture Control на Никонах)
  2. монитора, на котором вы смотрите фотографии
  3. видеокарты вашего компьютера
  4. окружающего освещения

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

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

Цветопередача монитора зависит от подсветки матрицы и электроники дисплея, насколько корректно она преобразует входящий сигнал. За это отвечает параметр – гамма-кривая.

Гамма-кривая – это степенная функция, которая связывает входное значение сигнала с его яркостью на матрице (выходное значение):

γ – значение гамма, которое в стандарте sRGB приблизительно равно 2,2

На графике пунктир – это гамма 2,2, а красная линия – гамма-функция, предусмотренная стандартом sRGB. Как видно, разница невелика.

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

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

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

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

Обычно производители не утруждают себя и замеряют гамма-кривую по градациям серого. Более правильно, но и более трудоёмко делать это по основным цветам. Для этого потребуется специальное устройство – колориметр. Вот пример неплохо настроенного экрана телефона Samsung Galaxy S2:

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

Однако, не всё так радужно, иногда встречаются и такие экраны:

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

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

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

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

Лично я пользуюсь Spyder3Elite фирмы Datacolor для настройки моих экранов.

Источник

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

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

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

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

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

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

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

Читайте также:  Excel настройка и параметры таблицы

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

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

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

Человеческое зрение, как и слух, не может быть описано линейными зависимостями: оно скорее является логарифмическим или экспоненциальным. Если при формировании видеосигнала не прибегать к гамма-коррекции, приращения освещённости будут трактоваться как линейные и человеческий глаз не сможет правильно разли-
чать градации яркости. Простая иллюстрация того, как это работает: представьте себе солнечный день с освещённостью, скажем, 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). Не погружаясь в детали, отметим, что цветовая калибровка в принципе возможна. Важно отметить, что при неверных установках яркости, контраста и гамма-коррекции монитора даже самый качественный видеосигнал может предстать перед оператором в виде, непригодном для ведения наблюдения.

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

Источник

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

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

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

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

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

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

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

Часть 6. PBR

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

Читайте также:  Настройка erwin process modeler

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Первый вариант проще, но дает вам меньше контроля. Установив флаг 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 раз.

Затухание

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

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

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

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

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

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

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

Источник

Adblock
detector