Что такое хроматические аберрации в играх
Перейти к содержимому

Что такое хроматические аберрации в играх

  • автор:

Что такое хроматические аберрации в играх?

хроматические аберрации примеры

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

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

Хроматические аберрации – объяснение термина

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

Яркий пример изображён на картинке к статье (скриншот взят из Tom Clancy’s The Division). Странность заключается в том, что игровой персонаж ходит без очков и не использует линзы. Следовательно, подобные опции выглядят крайне странно, но зачастую отключаются в опциях меню.

dying light скачать бесплатно

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

Какие эффекты в играх вас раздражают? Блюр? Солнечные блики и засветы а-ля Майкл Бэй? Напишите об этом в комментариях.

Что такое хроматические аберрации в играх?

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

Хроматическая аберрация, размытость и укачивание

Хроматическая аберрация и многие другие эффекты рендеринга в играх направлены на то, чтобы создать впечатление, будто вы смотрите на сцену через объектив камеры. Это как смотреть игровые изображения в 3D без очков. Игры полагаются на постобработку для визуализации хроматических аберраций. Одни разработчики игр используют хроматическую аберрацию незаметно, другие используют ее довольно агрессивно.

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

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

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

Вы любите хроматические аберрации в видеоиграх? Поделитесь своими мыслями в комментариях ниже.

What Is Chromatic Aberration In Games? (Read THIS First)

So many games have a “Chromatic Aberration” setting that we can turn on and off at will. But what exactly is Chromatic Aberration and should you have it on in games?

What Is Chromatic Aberration In Games?

Chromatic aberration is an effect in games that causes a fading / blurring effect around the edges of objects. The effect is simulating chromatic aberration in the real world, which is a phenomenon in photography when light can’t be focused to a single point, so the natural colors are spread out and visible.

/>Chromatic Aberration Setting

Game developers add chromatic aberration to games because they like to simulate film and photography.

They want their games to feel like a cinematic movie, so they add lens flares, film grain, and chromatic aberration.

Chromatic aberration can be seen in the real world when taking pictures. When light hits a camera lens, depending on the lens, the light will be split apart into its natural spectrum.

This creates a blurry effect, and if you zoom in on the picture to the blurry spot, you’ll see an array of colors. When you zoom out, you’ll just see a semi-blurry background.

In film and photography most photographers and videographers want to eliminate chromatic aberration because they want their pictures to be as clear as possible.

In video games, though, developers want their games to look cinematic so they add these effects artificially.

This is also why we can easily turn chromatic aberration off in our games, because it’s not real chromatic aberration, it’s just an artificial effect.

Should You Turn Chromatic Aberration On Or Off In Games?

You should turn chromatic aberration off in games. Chromatic aberration blurs the image in games and overall makes the game look worse. This blurring is useful in a few niche scenarios, but for most games it is completely unnecessary and only serves to lower the image quality and make things less clear.

Let me go over some of the pros and cons below so that you have a better understanding as to why you should keep this setting turned off.

  • Some may enjoy the visual effects of chromatic aberration
  • Can help add to the atmosphere of certain games
  • Looks good when done properly and subtly
  • Makes graphics look better on lower end PCs and consoles without much of a performance hit

When done right, chromatic aberration doesn’t actually look too bad. It creates a blurring effect on the game image, which can be a good way to tell the player “hey something isn’t right, you’re feeling uneasy.”

  • Most of the time it is overdone and does not look good
  • Blurs the game image so we see less of the textures and models in game
  • Does not fit the atmosphere of many games that implement it

Many games have us looking through the eyes of our character, so why would we want to see lens flares, film grain, and chromatic aberration? We’re more likely to want to see what the world looks like by itself.

The developers spent so much time and energy creating the models and textures in our games that it’s a shame to blur and distort them with effects like chromatic aberration.

With that being said, some games just have a really cool look with the different effects turned on.

Personally, I swap back and forth between using camera effects like chromatic aberration and film grain and turning them off. Sometimes I like it, sometimes I don’t and there’s no shame in either opinion.

Whenever chromatic aberration is the default, though, the world is just blurry for no reason other than to look like a movie.

Some people enjoy this look, some people don’t, so whether you want it on or off comes down to your personal preference; however, I usually choose to turn it off.

On/Off Buttons

Does Chromatic Aberration Affect Performance?

Chromatic aberration does not affect performance at all. Chromatic aberration is just a simple effect added over the top of the rendered image, so there is very little extra calculation going on. If you are playing on a lower end PC or console, then chromatic aberration can actually help mask low framerates.

Whether you want chromatic aberration on or off will pretty much come down to your own personal preference. Your performance will not be affected in any way.

You probably won’t drop more than a single frame due to having chromatic aberration on, so I’d recommend turning it on and checking out how everything looks.

Then turn it off, take another look, and decide which you like better. It adds to the atmosphere of some games, and looks especially good when you have a lower framerate, similar to motion blur.

Is Chromatic Aberration More Realistic?

Chromatic aberration is less realistic because it adds a color distortion that humans do not see with the naked eye. Chromatic aberration is an effect seen in film and photography due to how light passes through a lens. It is only more realistic if the game’s point of view is that of a camera, not a person.

In games like Outlast, where your entire point of view is through a camera, chromatic aberration is more realistic.

However, when you’re supposed to be looking through the eyes of your character, it’s less realistic because humans do not see chromatic aberration naturally.

There are many effects like this in games, though, like lens flare, motion blur, film grain, and screen dirtying.

These effects change the look and feel of games, but they are not realistic unless they are trying to simulate the point of view of a camera or simulating a movie.

For example, in the game Anthem, you are running around in a Javelin and looking through a glass screen. So, it is completely realistic in that game while it would be unrealistic in a game like Call of Duty.

Can Chromatic Aberration Make You Dizzy?

Chromatic aberration can make you dizzy. It can also cause headaches and nausea in some people. The majority of people will not be affected by chromatic aberration, but it is not uncommon for people to experience motion sickness and other symptoms when the setting is turned on in games.

If you’re usually sensitive to motion blur, and blurriness in general, then you’ll likely be sensitive to chromatic aberration.

The way chromatic aberration distorts and spreads out colors can make it hard for our eyes to focus, which can confuse our brains and easily cause headaches and dizziness.

When Dying Light first came out, there were many PSAs from players about chromatic aberration and how it can cause motion sickness.

If you’re experiencing headaches, nausea, or dizziness while playing, you should try turning off chromatic aberration and motion blur before playing again.

I hope I was able to help you understand what exactly Chromatic Aberration is and whether or not it is a good fit for you.

If you have any questions, or just want to hang with me, follow me on Twitch here. Also, for streaming tips and how to’s make sure to subscribe to my YouTube channel here.

Armored Warfare: Проект Армата. Хроматическая аберрация

Armored Warfare: Проект Армата — бесплатный танковый онлайн-экшн, разрабатываемый Allods Team, игровой студией MY.GAMES. Несмотря на то, что игра сделана на CryEngine, достаточно популярном движке с неплохим realtime render’ом, для нашей игры приходится многое дорабатывать и создавать с нуля. В этой статье я хочу рассказать о том, как мы реализовывали хроматическую аберрацию для вида от первого лица, и что это такое.

Что такое хроматическая аберрация?

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

А вот уже линза с дефектом:

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

На картинке выше можно увидеть, что из-за дефекта выделяются фиолетовый и зелёный цвета. Не видно? А на этой картинке?

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

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

Ну, раз с теорией мы закончили, давайте переходить к сути.

Боковая хроматическая аберрация с учётом разложения света

Начну я всё же с того, что отвечу на вопрос, который мог возникнуть в голове у многих из вас: «а разве в CryEngine нет реализованной хроматической аберрации?» Есть. Но применяется она на этапе пост-процессинга в одном шейдере с sharpening, а алгоритм выглядит так (ссылка на код):

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

Так выглядела сама аберрация (внимание на левую сторону):

А так она выглядела, если перекрутить параметры:

Поэтому, своей целью мы поставили:

  1. Реализовать боковую хроматическую аберрацию, чтобы возле прицела всё было в фокусе, а по бокам если не видно характерных цветных дефектов, то хотя бы чтобы было размыто.
  2. Сэмплировать текстуру, умножая RGB-каналы на коэффициенты, соответствующие конкретной длине волны. Об этом я ещё не рассказывал, поэтому сейчас может быть не совсем понятно, о чём этот пункт. Но мы его обязательно рассмотрим во всех подробностях позже.

Итак, сначала строится круговая маска, отвечающая за дистанцию от центра экрана, потом считается направление от центра экрана, а далее это всё перемножается с blur . Blur и falloff – это параметры, которые передаются извне и являются просто множителями для настройки аберрации. Также извне прокидывается параметр sampleCount , который отвечает не только за количество сэмплов, но и, по сути, за шаг между точками сэмплирования, так как

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

Видимый спектр света лежит в диапазоне длин волн от 380 нм (фиолетовый) до 780 нм (красный). И, о чудо, длину волны можно конвертировать в RGB-палитру. На Python код, который занимается этой магией, выглядит так:

В итоге мы получаем следующее распределение цвета:

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

То есть идея в том, что чем больше у нас sampleCount , тем меньше шаг у нас между точками сэмпла, и тем подробнее дисперсируем свет (учитываем больше волн с различными длинами).

Если до сих пор непонятно, то давайте рассмотрим конкретный пример, а именно на нашу первую попытку, и я объясню, что брать за startWaveLength и endWaveLength , и как будут реализованы функции GetRed(Green, Blue)Weight .

Аппроксимация всего диапазона видимого спектра

Итак, из графика выше мы знаем примерное соотношение и примерные значения RGB палитры для каждой длины волны. Например, для длины волны 380 нм (фиолетовый цвет) (см. тот же график) видим, что RGB(0.4, 0, 0.4). Вот именно эти значения мы и берём за веса, о которых я говорил ранее.

Попробуем теперь избавиться от функции получения цвета полиномом четвёртой степени, чтобы вычисления были дешевле (мы не студия Pixar, а игровая студия: чем дешевле вычисления, тем лучше). Этот полином четвёртой степени должен аппроксимировать полученные графики. Для построения полинома я воспользовался библиотекой SciPy:

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

Для того чтобы значения не выходили за предел отрезка [0, 1], используем функцию saturate . Для красного цвета, например, получается функция:

Недостающие параметры 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 нм.

Оптимизация

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

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

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