Хроматическая аберрация в играх что
Что такое хроматические аберрации в играх?
Задавая в поисковую систему, хроматические аберрации что это, пользователь наткнётся на лекции по физики, примеры из кинематографа и основ трёхмерного моделирования. Знаком данный термин и фотографам, и профессиональным операторам видео.
Нас же интересуют примеры в сфере видеоигр, поскольку данный FX повсеместно используется командами разработчиков. Причин несколько: создание интересного художественного образа, сглаживание неровностей моделей и устранение недостатков графического движка. Порой же эксплуатация происходит совершенно не к месту.
Хроматические аберрации – объяснение термина
Суть сводится к эффекту просмотра через очки под необычным углом, когда на границе объекта появляется спектральный свет (голубой, оранжевый, либо всей радужной гаммы сразу).
Яркий пример изображён на картинке к статье (скриншот взят из Tom Clancy’s The Division). Странность заключается в том, что игровой персонаж ходит без очков и не использует линзы. Следовательно, подобные опции выглядят крайне странно, но зачастую отключаются в опциях меню.
Ещё можно вспомнить зомби-выживалку Dying Light, где по умолчанию хроматические аберрации нельзя было выключить. В яркую солнечную погоду игроки испытывали повышенную нагрузку на зрение, быстрее утомлялись и уставали. Лишь под влиянием общественности авторы выпустили патч, добавляющий настройку.
Какие эффекты в играх вас раздражают? Блюр? Солнечные блики и засветы а-ля Майкл Бэй? Напишите об этом в комментариях.
Хроматические аберрации в играх, что это такое и насколько требователен этот эффект?
Chromatic Aberrations – это эффект, вызванный преломлением света в линзе камеры. Объектив не может сфокусировать все цвета в одну точку из-за разной длины волны, вызывая незначительные искажения цвета по краям изображения. Особенно заметен этот сдвиг по краям объектов, которые могут размываться, двоиться и распадаться на синий, зеленый и красный каналы.
Хроматические аберрации в играх
В фотографии это естественный эффект, возникающий в зависимости от типа и качества используемого объектива. Но каким образом это работает в играх?
Конечно, никакой линзы в этом случае нет. Схожий эффект достигается с помощью программной обработки изображения, чтобы сделать картинку в игре фотореалистичной. Это применяется в некоторых играх для усиления кинематографического эффекта. Для той же цели иногда применяются такие эффекты, как film grain, motion blur и так далее.
Насколько требователен этот эффект?
По сути это просто фильтр, чем-то похожий на виньетирование. Он довольно легкий и не требует серьезных ресурсов. Если его выключить, то в лучшем случае экономится один дополнительный кадр.
Стоит ли использовать CA?
Все зависит от личных предпочтений. Если игроку хочется сделать картинку больше похожей на фильм, или ему просто нравится этот эффект – никаких проблем. Но в некоторых играх с графикой, далекой от фотореализма, CA оказывается не к месту. В других играх, таких как Alien Isolation, эффект может помочь погрузиться в атмосферу. Отключение CA пойдет картинке на пользу, если игрок предпочитает изображение повышенной четкости. Кроме того, искажение цветов по краям экрана может раздражать, а в некоторых случаях от него устают глаза. При подобных симптомах хроматические аберрации лучше отключать, как и некоторые другие эффекты пост-обработки.
Armored Warfare: Проект Армата. Хроматическая аберрация
Armored Warfare: Проект Армата — бесплатный танковый онлайн-экшн, разрабатываемый Allods Team, игровой студией MY.GAMES. Несмотря на то, что игра сделана на CryEngine, достаточно популярном движке с неплохим realtime render’ом, для нашей игры приходится многое дорабатывать и создавать с нуля. В этой статье я хочу рассказать о том, как мы реализовывали хроматическую аберрацию для вида от первого лица, и что это такое.
Что такое хроматическая аберрация?
Хроматическая аберрация – это дефект линзы, при котором в одну и ту же точку приходят не все цвета. Это связано с тем, что показатель преломления среды зависит от длины волны света (см. дисперсия). Вот так, например, выглядит ситуация, когда линза не болеет хроматической аберрацией:
А вот уже линза с дефектом:
Кстати, ситуация выше называется продольной (или осевой) хроматической аберрацией. Возникает она в случае, когда различные длины волн не сходятся в одной и той же точке фокальной плоскости после прохождения через линзу. Тогда дефект виден по всей картинке:
На картинке выше можно увидеть, что из-за дефекта выделяются фиолетовый и зелёный цвета. Не видно? А на этой картинке?
Также существует боковая (или поперечная) хроматическая аберрация. Возникает она в случае, когда свет падает под углом к линзе. По итогу, различные длины волн света сходятся в разных точках фокальной плоскости. Вот вам картинка для понимания:
Можно уже по схеме увидеть, что в итоге мы получаем полноценное разложение света от красного до фиолетового. В отличии от продольной, боковая хроматическая аберрация никогда не проявляется в центре, только ближе к краям изображения. Чтобы вы понимали, о чём я, вот вам ещё одна картинка из интернета:
Ну, раз с теорией мы закончили, давайте переходить к сути.
Боковая хроматическая аберрация с учётом разложения света
Начну я всё же с того, что отвечу на вопрос, который мог возникнуть в голове у многих из вас: «а разве в CryEngine нет реализованной хроматической аберрации?» Есть. Но применяется она на этапе пост-процессинга в одном шейдере с sharpening, а алгоритм выглядит так (ссылка на код):
Что, в принципе, работает. Но у нас игра про танки. Нам этот эффект нужен только для вида от первого лица, и только для красоты, то есть чтобы в центре всё было в фокусе (привет боковой аберрации). Поэтому текущая реализация не устраивала как минимум тем, что её эффект был виден по всей картинке.
Так выглядела сама аберрация (внимание на левую сторону):
А так она выглядела, если перекрутить параметры:
Поэтому, своей целью мы поставили:
Видимый спектр света лежит в диапазоне длин волн от 380 нм (фиолетовый) до 780 нм (красный). И, о чудо, длину волны можно конвертировать в RGB-палитру. На Python код, который занимается этой магией, выглядит так:
В итоге мы получаем следующее распределение цвета:
Если коротко, то на графике показано сколько и какого цвета содержится в волне с конкретной длиной. По оси ординат у нас как раз получаются те самые веса, о которых я говорил ранее. Теперь мы можем реализовать полностью алгоритм, с учётом оговоренного ранее:
Аппроксимация всего диапазона видимого спектра
Итак, из графика выше мы знаем примерное соотношение и примерные значения RGB палитры для каждой длины волны. Например, для длины волны 380 нм (фиолетовый цвет) (см. тот же график) видим, что RGB(0.4, 0, 0.4). Вот именно эти значения мы и берём за веса, о которых я говорил ранее.
Попробуем теперь избавиться от функции получения цвета полиномом четвёртой степени, чтобы вычисления были дешевле (мы не студия Pixar, а игровая студия: чем дешевле вычисления, тем лучше). Этот полином четвёртой степени должен аппроксимировать полученные графики. Для построения полинома я воспользовался библиотекой SciPy:
В итоге получается следующий результат (я разбил на 3 отдельных графика, соответствующих каждому отдельному каналу, чтобы проще было сравнить с точным значением):
Недостающие параметры startWaveLength и endWaveLength в данном случае являются 780 нм и 380 нм, соответственно. Результат на практике с sampleCount=3 получается следующий (см. края картинки):
Если же подкрутить значения, увеличить sampleCount до 400, то всё становится лучше:
К сожалению, у нас realtime render, в котором мы не можем позволить 400 сэмплов (примерно 3-4) в одном шейдере. Поэтому мы немного сократили диапазон длин волн.
Аппроксимация по части диапазона видимого спектра
Возьмём такой диапазон, чтобы у нас по итогу были и чисто красный, и чисто синий цвета. От хвостика красного цвета слева тоже отказываемся, так как он очень сильно влияет на итоговый полином. В итоге, получаем распределение на отрезке [440, 670]:
Также нет необходимости интерполировать по всему отрезку, так как мы теперь можем получить полином только того участка, где значение меняется. Например, для красного цвета, это отрезок [510, 580], где значение веса меняется от 0 до 1. В этом случае можно получить полином второго порядка, который потом функцией saturate также свести к диапазону значений [0, 1]. По всем трём цветам мы получаем следующий результат с учётом сатурации:
В итоге мы получаем, например, для красного цвета следующий полином:
А на практике с sampleCount=3 :
При этом с перекрученными настройками получается примерно тот же результат, как и при сэмплировании по всему диапазону видимого спектра:
Таким образом, полиномами второй степени мы получили неплохой результат на диапазоне волн от 440 нм до 670 нм.
Оптимизация
Помимо оптимизации расчётов полиномами, можно оптимизировать работу шейдера, опираясь на механизм, который мы заложили в основу нашей боковой хроматической аберрации, а именно, не проводить расчёты в области, где суммарное смещение не выходит за рамки текущего пикселя, иначе мы сэмплируем один и тот же пиксель, и получаем его же.
Выглядит это примерно так:
Оптимизация небольшая, но очень гордая.
Пользователи обсудили эффекты, которые они отключают в играх чаще всего
Пользователи Реддита подняли интересную для многих ПК-игроков тему эффектов, которые приходится отключать по тем или иным причинам в современных играх. И правда: разработчики настолько увлеклись воспроизведением некоторых особенностей человеческого зрения, что выдержать эту атаку на глаза способен не каждый игрок.
Пример использования эффекта кинопленки
Автор треда под ником Kazurda, например, всегда отключает глубину резкости (depth of field) и размытие изображение в движении (motion blur). Многие делают так же, аргументируя это тем, что человеческое зрение «снабжено» этими эффектами по умолчанию. В комментариях эти эффекты встречаются очень часто.
Среди других популярных эффектов, отключаемых многими сразу же после запуска: хроматическая аберрация (chromatic aberration), свечение (bloom), виньетирование (vignette), блики (lens flare) и эффект кинопленки (film grain). Также нашлись пользователи, которым не нравится эффект качающейся головы (view bobbing, яркий пример — серия Black Ops) и которые любят играть с большим углом обзора (FOV).
Пример использования хроматической аберрации
Мы же отметим некоторые технологии сглаживания, которые заметно «мылят картинку». Это и классическое FXAA, и более новое TAA, и даже разрекламированное компанией NVIDIA «умное» сглаживание DLSS.
203848-320760_ZGK7ndsdaF_metro.jpg
А вы отключаете какие-нибудь эффекты в играх?
Размытие и эффект зернистости.
Всегда отключаю размытие в движении. При управлении на геймпаде может быть и не так ужасно ощущается и, наверное, даже может скрыть низкую частоту кадров, но на клавомыши это капец. Глубину резкости иногда оставляю, если прикольно сделано и эффект этот не показывает себя за два метра от персонажа. С эффектом кинопленки тоже не все однозначно. Иногда нормально, иногда нет. Также всегда стараюсь отключать тряску камеры при движении, если есть возможность. У меня от нее после пятого MGS рвотные позывы всегда и голова аж трещит, а она там жесткой была, фу.
размытие изображение в движении и всю фигню что мылит игру
А вы отключаете какие-нибудь эффекты в играх?
Post Processing, Blur, Bloom. Так как меня бесит замыливание.
Хроматическая аберрация – эффект, который вы наверняка отключаете в настройках игр. Зачем он вообще нужен?
Объясняем тренд.
Одна из самых часто встречающихся графических настроек в современных играх – хроматическая аберрация. По умолчанию эффект обычно включен, хотя многие геймеры отключают его при первой же возможности. Причина проста: без хроматической аберрации картинка выглядит «чище».
Так почему разработчики тратят силы, чтобы добавить в игры «лишнюю» постобработку, и кто ее придумал?
Хроматическая аберрация пришла в игры из кино
Происхождение у аберрации общее с другими неоднозначными эффектами постобработки: lens flare, motion blur, глубиной резкости, виньетированием и так далее. Изначально они появились в кинематографе.
Реальная хроматическая аберрация возникает при использовании фотоаппаратов и видеокамер. Из-за того, что лучи света разных цветов отличаются длиной волн, они преломляются в линзе камеры по-разному. Когда объективу не удается собрать все лучи в одну точку, цвета на полученных фото и видео искажаются. Сильнее всего это заметно по краям объектов: они размываются и расслаиваются на красный, зеленый и синий цветовые каналы.
Долгое время операторам и фотографам приходилось мириться с хроматической аберрацией – ее можно было только минимизировать, используя более дорогостоящие и качественные объективы. Со временем от нежелательного побочного эффекта научились избавляться на этапе постобработки: многие современные камеры компенсируют цветовые искажения с помощью встроенного процессора, также аберрацию можно убрать в графических редакторах при работе с RAW-форматами.
В то же время хроматическая аберрация стала настолько распространенным и привычным явлением, что ее начали относить к ретро-эстетике и оставлять (или даже добавлять) намеренно, добиваясь более «винтажного» вида фотографий или фильмов. Произошло то же, что и с lens flare, только в меньших масштабах: признак непрофессионализма превратился в осознанный стилистический прием.
(Здание на одном и том же кадре без хроматической аберрации и с ее сильным проявлением)
Аберрация в играх – попытка сделать их кинематографичнее
Хотя сами геймеры часто определяют крутость игровой графики, сравнивая ее с реальной жизнью, сами разработчики ориентируются в первую очередь на кинематограф. Логика простая: сделать картинку ближе кинематографичнее проще, чем приблизить ее к «чистой» реальности.
Эффекты вроде хроматической аберрации позволяют замаскировать технические недостатки игры и стилизовать ее простым приемом, который к тому же практически не сказывается на производительности. Нет смысла отключать аберрацию, чтобы игра работала лучше – из этого получится выжать примерно один дополнительный кадр в секунду, да и то не всегда.
(В Resident Evil 7 аберрация заметна, только если присмотреться, например, к раме)
Цель у хроматической аберрации в играх простая: «смягчить» контуры объектов, чтобы они подсознательно больше напоминали фильмы (и показанную в них реальность), а не компьютерную графику.
Понятное дело, в играх физической камеры нет, поэтому хроматическая аберрация симулируется: эффект просто добавляет сине-красные края объектам в кадре. Конкретная реализация, конечно, зависит от игры: где-то эффект бросается в глаза, в других случаях он едва заметен – примерно так же отличаются дешевые и дорогостоящие объективы.
Иногда эффект лучше оставлять включенным
Хроматическая аберрация набрала популярность в прошлом поколении консолей, когда игры повсеместно стали выглядеть (или пытаться выглядеть) «как кино». Аберрацию нельзя назвать объективным улучшением или ухудшением: ей нужно уметь пользоваться, а ее восприятие – исключительно субъективно. Часть игроков совершенно не терпит эффект, поскольку из-за него картинка становится менее четкой, другим дополнительная «киношность» по душе.
Правда, в зависимости от визуального стиля самой игры аберрация чаще может просто загрязнять кадр, чем дополнять его. Например, если игра в целом выглядит не очень хорошо или стилизована под мультяшный стиль – значит, на «киношный фотореализм» она претендовать не может. Тем не менее разработчики все равно добавляют постобработку – в таком случае эффект вызовет раздражение с большей вероятностью.
Куда уместнее использовать хроматическую аберрацию в проектах с реалистичным визуальным стилем: в The Last of Us: Part II, Red Dead Redemption 2 или, скажем, в «Сталкере 2». В них частичная нечеткость краев скорее сойдет за кинематографичность, чем за чужеродный визуальный эффект.
(Ползунок хроматической аберрации все чаще встречается в фоторежимах)
Другой вариант – применять хроматическую аберрацию там, где физическая (не игровая) камера используется по сюжету. Вот первая Life is Strange, например, выглядит слишком стилизованно, чтобы быть фильмом, но главная героиня увлекается фотографией, да и винтажные снимки играют ключевую роль в развитии сюжета. Поэтому здесь аберрация имеет хотя бы нарративный смысл.
Также, конечно, аберрацию стоит отключать в случаях, если из-за нее у вас сильнее устают глаза – такой побочный эффект тоже встречается.
У разработчиков нет объективных причин отказываться от хроматической аберрации в будущем: эффект очень просто реализовать, он не сказывается на оптимизации и зачастую делает игру визуально дороже (по крайней мере в глазах казуальных игроков, не вникающих в технологии). Главное, чтобы ее всегда можно было отключить в настройках – это логичное правило игровые студии обычно соблюдают.