Ремонт ЖК-телевизора с искажением цвета
Ремонтируем LCD-телевизор Samsung LE40A430T1XRU с неправильным отображением цвета на экране
Рассмотрим ремонт ЖК-телевизора Samsung LE40A430T1XRU с неисправностью гамма-корректора.
Проявляется неисправность как чрезмерная яркость с нарушением правильного отображения цветов, изображение в негативе, искажение контраста и цветопередачи.
В реальности это выглядит так.
На экране ЖК-телевизора неестественные цвета с преобладанием синего и фиолетового цвета, чрезмерно яркий белый фон и шумы.
Чтобы отремонтировать телевизор, первым делом разбираем его. Так как ЖК-матрица (стекло) у ЖК-телевизора является довольно хрупким элементом, то телевизор желательно положить на мягкую поверхность без посторонних предметов.
Сразу скажу, что поломка связана с неисправностью микросхемы-формирователя опорных напряжений. Также эту микросхему называют гамма-корректором, хотя это не совсем правильно.
Данная микросхема участвует в создании градаций цвета, полутонов, а именно, формирует опорные напряжения для работы цифро-аналоговых преобразователей в составе столбцовых драйверов (column driver).
Если сказать по-простому, то всё это необходимо для того, чтобы ЖК-ячейка могла изменять свою прозрачность и пропускать через себя световой поток разной интенсивности. За счёт этого и становиться возможным создание оттенков цвета, полутонов. Например, от насыщенного красного до бледно-розового.
Обычно используется 64 уровня прозрачности. Их называют уровнями серого (gray scale или gray shade), так как ЖК-ячейка не имеет цвета. Она лишь пропускает белый свет, а окраску ему придаёт цветовой фильтр (красный, синий или зелёный).
Таким образом, требуется создать 64 напряжения разного уровня для управления прозрачностью ЖК-ячейки. Из-за особенностей схемотехники ЦАП, часть этих напряжений создаётся отдельной микросхемой, которую и называют формирователем опорных напряжений.
Данная микросхема, как правило, смонтирована на плате T-CON (Timing Controller, TCON или T-CON), которая является обособленной у большинства телевизоров с диагональю 32 дюйма и более.
Плату T-CON найти не составляет особого труда. Обычно к ней идёт широкий шлейф от основной main-платы. У ЖК-телевизора Samsung LE40A430T1 плата T-CON сверху закрыта металлической крышкой, которая используется ещё и как радиатор охлаждения.
Откручиваем четыре болта, фиксирующие металлическую крышку. Два шлейфа, идущих на ЖК-матрицу отсоединяются при отстёгивании вверх чёрных плашек на разъёме. Шлейф LVDS, идущий к основной main-плате отсоединяется при нажатии на фиксаторы, которые расположены по бокам разъёма.
Вот так выглядит T-CON телевизора Samsung LE40A430T1. Плата имеет маркировку T400XW01 V5 Crtl BD 40T01-C00.
При ремонте не стоит трогать руками поверхность теплопроводящей резиновой прокладки, которая приклеена к главному контроллеру на плате. Старайтесь избегать загрязнения её поверхности, так как она отводит тепло от контроллера на ту самую металлическую крышку.
Здесь микросхема AS15-F (EC5575-F) выполняет ту самую функцию – создаёт опорные напряжения необходимые для работы тонкоплёночных TFT-транзисторов жидкокристаллического дисплея (ЖК-матрицы).
На первый взгляд микросхема AS15-F устроена довольно просто. Она состоит из набора операционных усилителей (обозначены на рисунке, как A, B, C. N и Com). Так же их называют буферными. Всего в микросхеме 14+1 усилитель.
Один из усилителей (Com) используется для формирования напряжения противоэлектрода (VCOM), которое подводится ко всем ЖК-ячейкам матрицы. Он отличается от остальных усилителей тем, что имеет максимальный выходной ток 100 mA. Это связано с тем, что он является общим для всех ЖК-ячеек матрицы. Остальные усилители микросхемы (A. N) рассчитаны на выходной ток 30 mA.
На практике для формирования опорных напряжений могут использоваться не все усилители, входящие в состав микросхемы, а только их часть.
Типовая схема включения микросхемы AS15-F показана на рисунке (взята из даташита на TSL1014IF – полный аналог рассматриваемой микросхемы).
Эталонные напряжения, которые затем подаются на буферные усилители (повторители) создаются с помощью резистивных делителей R1. R14.
Опорное напряжение противоэлектрода (Com. ref voltage) формируется отдельным источником и подаётся на вход буферного усилителя COM. В некоторых микросхемах источник опорного напряжения (VREF) встроен в саму микросхему. Здесь же используется внешний.
Аналоги микросхемы AS15-F (EC5575-F): AS15-G, AS15-F, AS15-U, TSL1014IF, EC5575, AS15 H, AS15 HF, SL1014I, HX8915-A, HX8915, AS15, AS15 AF, i78h48, RM5101.
Внимание! Микросхемы c наличием E2 в маркировке (AS15E2-F, AS15E2-G, AS15E2-HF, AS15E2-HG) не подходят для замены, так как имеют другую цоколёвку.
В подавляющем большинстве случаев неисправной является именно микросхема AS15-F, но похожая поломка может быть вызвана выходом из строя столбцовых драйверов ЖК-матрицы. При этом на экране присутствуют ровные вертикальные полосы.
Если микросхема AS15-F сильно греется, то это явный признак того, что она неисправна. В моём же случае микросхема при работе была чуть тёпленькая. Этого недостаточно для того, чтобы 100% судить о её неисправности, ведь причина поломки может быть связана с другими компонентами на плате TCON’а.
Чтобы не гадать, а уж тем более не выбрасывать деньги на ветер при покупке деталей для замены, необходимо провести более тщательную диагностику.
На практике убедился в том, что качественная диагностика бережёт время, деньги и нервы. Поэтому, спешить с выводами не стоит.
Проверить микросхему AS15-F на исправность можно произведя замеры тех самых опорных напряжений, которые она формирует и сравнить с теми, которые присутствуют у исправной микросхемы.
Контрольные точки для замера всех основных напряжений указаны на печатной плате T-CON’а. Нам требуется найти те, что обозначены, как VGAMA. Всего 9 контрольных точек.
В таблице №1 указаны напряжения (VGAMA), которые соответствуют исправной микросхеме AS15-F.
| Контрольная точка | Величина напряжения, V |
| VGAMA1 | 15,09 |
| VGAMA6 | 10,6 |
| VGAMA9 | 9,6 |
| VGAMA10 | 7,6 |
| VGAMA11 | 7,47 |
| VGAMA12 | 6,56 |
| VGAMA14 | 4,85 |
| VGAMA17 | 4,12 |
| VGAMA22 | 0,32 |
В моём случае микросхема AS15-F формировала иные опорные напряжения, отличные от тех, что должны быть в исправном TCON’е. Начиная с VGAMA12 напряжения стали очень сильно отличаться.
| Контрольная точка | Величина напряжения, V |
| VGAMA1 | 15,61 |
| VGAMA6 | 10,92 |
| VGAMA9 | 9,86 |
| VGAMA10 | 7,79 |
| VGAMA11 | 7,61 |
| VGAMA12 | 14,95 |
| VGAMA14 | 11,01 |
| VGAMA17 | 9,33 |
| VGAMA22 | 0,41 |
Именно это отличие опорных напряжений и приводило к искажению цветов на экране телевизора.
Кроме прочего при диагностике не помешает измерить напряжение питания самой микросхемы (AVDD – 15,56V).
Как уже было сказано, опорные напряжения создаются с помощью резистивных делителей и источника опорного напряжения, а усилители микросхемы лишь обеспечивают необходимое усиление по току. Поэтому, не стоит исключать и того, что причиной поломки может быть элементарный непропай тех самых резисторов или выход из строя других элементов на плате TCON, которые влияют на корректную работу микросхемы AS15-F.
Несмотря на это, поломки, связанные с выходом из строя микросхемы AS15-F очень распространены, и для телемастеров они являются «типовухой».
Теперь о том как заменить микросхему AS15-F на новую.
Так как микросхема AS15-F выполнена в корпусе типа «паук» (TQFP-48), то демонтировать её без наличия соответствующего инструмента довольно таки проблематично.
Для выпайки микросхемы понадобится паяльный фен или термовоздушная паяльная станция, паяльник, и, желательно, сплав Розе. Если выпаивать микросхему без применения низкотемпературного сплава, то есть вероятность того, что при демонтаже будут повреждены тонкие медные дорожки на печатной плате T-CON’а.
Они могут отслоиться от чрезмерного нагрева. Или же при плохом прогреве выводов микросхемы может получиться так, что из-за усилия при снятии корпуса неотпаявшиеся выводы оторвут медные пятаки с печатной платы. Восстанавливать тонкие медные дорожки то ещё приключение, поэтому желательно использовать низкотемпературный сплав.
Для начала пропаиваем с использованием сплава Розе все выводы микросхемы. Так родной припой разбавится и температура его плавления заметно уменьшится.
Перед тем как выпаивать микросхему феном, желательно прогреть печатную плату горячим воздухом в районе, прилегающем к микросхеме и с обратной стороны в месте её установки. Сделать это можно тем же паяльным феном просто равномерно обдувая плату.
Так мы имитируем применение нижнего подогрева. Не секрет, что при демонтаже крупных чипов, например, с материнских плат компьютеров, использование нижнего подогрева обязательно. Его применение снижает риск перегрева и порчи выпаиваемого компонента, а также исключает вероятность деформации платы из-за температурного перекоса.
А так, предварительно прогревая область в районе пайки, мы сокращаем время нагрева, а, следовательно, облегчаем демонтаж. Температуру прогрева платы можно и не контролировать, но при использовании нижнего подогрева температуру обычно устанавливают на уровне 50. 80°C.
Без предварительного нагрева выпаять микросхему AS15-F ещё сложнее в том случае, если её корпус имеет металлизированную площадку для теплоотвода с нижней части корпуса.
Эта площадка обычно припаивается к медному полигону на поверхности печатной платы. «Разбавить» родной припой под «пузом» микросхемы мы не можем, но можем предварительно прогреть область пайки, и подготовить микросхему к демонтажу.
После того, как я выпаял микросхему гамма-буфера AS15-F меня удивило то, что она не имела нижней площадки-теплоотвода, хотя в даташите на микросхему он показан. Также новая микросхема под замену неисправной имела такой теплоотвод.
Возможно из-за отсутствия этой площадки-теплоотвода, родная микросхема со временем и вышла из строя, так как при работе она греется, поскольку является усилительным элементом.
После демонтажа микросхемы очищаем контакты на печатной плате от остатков припоя медной оплёткой. Удаляем остатки флюса очистителем (например, изопропиловым спиртом).
Чтобы хоть как-то облегчить температурный режим микросхемы AS15-F перед запайкой новой микросхемы покрыл нижнюю часть её корпуса теплопроводящей пастой КПТ-8. При работе микросхемы часть тепла от неё будет уходить в печатную плату.
После установки микросхемы проверяем качество пайки на предмет наличия перемычек между соседними выводами. К этой операции следует отнестись серьёзно, иначе можно что-нибудь спалить. Платы T-CON’ов стоят довольно дорого. Если есть цифровой микроскоп, то для проверки пайки можно использовать его. Отмыть остатки флюса можно изопропиловым спиртом (универсальным очистителем).
Также не забываем про правильную установку микросхемы. Первый вывод микросхемы обозначен специальным ключом на корпусе. Отсчёт ведётся от него и против часовой стрелки. На печатной плате так же нанесены указатели (белый треугольник и номера выводов).
Устанавливаем TCON на шасси телевизора и подключаем все шлейфы. При первом включении крышку поверх платы TCON’а можно не ставить, так как нам нужно убедиться в исправной работе телевизора. Включаем и проверяем корректно ли отображаются цвета на экране. Если всё нормально, выключаем телевизор, производим окончательную сборку, ставим телевизор на электропрогон.
Напоследок хотелось бы предупредить, что любой ремонт требует аккуратности и внимания. Любая оплошность может привести к невозможности ремонта аппарата. Поэтому, если вы не чувствуете уверенности в своих силах или не имеете опыта, то лучше поручить это дело специалисту.
Гамма-коррекция
Гамма-коррекция — коррекция яркости цифрового изображения или видеопотока. Обыкновенно, используется степенная функция в виде
Гамма-коррекция изначально служит:
Содержание
История возникновения
Исторически введение гамма коррекции было обусловлено тем, что у электронно-лучевой трубки зависимость между количеством испускаемых фотонов и напряжением на катоде близка к степенной формуле. В результате это вошло в стандарт, и для появившихся жидкокристаллических мониторов, проекторов и т.д., где зависимость между напряжением и яркостью имеет более сложный характер, сейчас используются специальные компенсационные схемы.
Стандартное значение параметра гаммы для видеоизображений 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 импульс Телевизионный измерительный сигнал, имеющий форму синусквадратичной функции за один ее период между нулевыми значениями и длительность … Словарь-справочник терминов нормативно-технической документации
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 раз.
Затухание
Еще один момент, который будет иным при использовании гамма-коррекции — затухание освещения. В реальном физическом мире освещение затухает почти обратно пропорционально квадрату расстояния от источника света. На человеческом языке это означает, что сила света уменьшается при удалении от источника света, как показано ниже:
Однако при использовании этого уравнения эффект затухания слишком силен, и световое пятно получает небольшой радиус, что выглядит физически не слишком достоверно. Поэтому мы использовали другие уравнения для затухания (мы обсуждали это в туториале, посвященном основам освещения), которые дают больше возможностей настройки, или вообще линейный вариант:
Без гамма-коррекции линейный вариант дает гораздо более правдоподобные результаты, чем квадратичный, но когда мы включаем гамма-коррекцию, линейное затухание выглядит слишком слабым, и физически верное квадратичное неожиданно дает лучшие результаты. На рисунке ниже показаны различия между вариантами:
Причиной этого различия является то, что функции затухания света меняет яркость, и поскольку мы отображали нашу сцену не в линейном пространстве, мы выбрали функцию затухания, которая выглядела лучше всего на нашем мониторе, хоть и не была физически правильной. Когда мы использовали квадратичную функцию затухания без гамма-коррекции, фактически она превращалась в при отображении на мониторе, что давало гораздо больший эффект затухания. Это также объясняет, почему линейный вариант дает лучшие результаты без гамма-коррекции, ведь при нем
=
, что намного больше напоминает физически правильную зависимость.
Более продвинутая функция затухания, которую мы обсуждали в основах освещения, по-прежнему полезна и в сценах с гамма-коррекцией, поскольку она дает гораздо больший контроль для более точной реализации затухания (но, конечно, требует других параметров при использовании гамма-коррекции).
Я написал простую демо сцену, исходный код которой вы можете найти здесь. Нажимая клавишу пробел, вы можете переключаться между сценами с гамма-коррекцией и без, каждая из которых использует свои текстуры и функции затухания. Это не самая впечатляющая демонстрация, но она показывает, как применять данные техники.
Подведем итоги: гамма-коррекция позволяет вам работать с цветами в линейном пространстве. Поскольку физическому миру присуще линейное пространство, большинство физических вычислений будут давать лучшие результаты, например расчет затухания света. Использование гамма-коррекции позволяет гораздо легче достигать реалистичных результатов по мере усложнения применяемых техник освещения. Именно поэтому рекомендуется сразу же настроить параметры освещения для работы с гамма-коррекцией.
























