Эффект flares в играх

Эффект flares в играх

Авторский блог об играх для ПК и консолей от Sony, Microsoft, Nintendo. Обзоры, новости, гайды, аналитика.

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

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

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

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

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

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

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

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

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

Motion blur

Это один из самых зло употребляемых и ненужных эффектов в играх на сегодняшний день. Раньше он использовался только в гоночных играх при очень резком ускорении. Сейчас, вы так же можете увидеть Motion blur в гонках, вот только теперь, он есть абсолютно при любой скорости. Ну и конечно, стоит вам повернуть голову в любом шутере вы опять увидите ЕГО. Этот вид размытия превращает мир в кашу, меня начинает тошнить, а непосредственно игру я ощущаю только хуже.

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

Читайте также:  Видеокамеры со сквозным каналом

Eyeball grime

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

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

Chromatic aberration

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

Film grain

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

Представьте себе, что в аудио файлы всей игры добавили шипение — это сравнимо с эффектом Film grain, другими словами визуальный шум. Даже там где это тематически оправдано, как например в Left 4 Dead, в котором это применяется для отсылки к трешовым фильмам про зомби, если взять и выключить это, станет только лучше и легче глазам. К счастью во многих играх есть возможность отключить это полностью.

Depth of field

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

Lens flare

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

Привет, Хабр! Представляю вашему вниманию перевод статьи «Pseudo Lens Flare» автора John Chapman.

Lens flare (блики на линзах) ― это фотографический артефакт, возникающий при рассеивании и преломлении света в системе линз. Хотя он является артефактом, существует множество поводов использовать lens flare в компьютерной графике:

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

Традиционно lens flare в realtime реализовывался с помощью технологий, основанных на спрайтах. Хотя спрайты дают легко контролируемые и очень реалистичные результаты, они должны быть размещены явно и требуют данные окклюзии для корректного отображения. Здесь я опишу простой и относительно дешевый screen space эффект, который создает псевдо lens flare из входного color buffer. Он не основан на физике, поэтому результат немного отличается от фотореалистичного, но его можно использовать в комбинации с (или как замену) традиционными sprite-based эффектами.

Алгоритм

Состоит из 4 этапов:

  1. Downsample / threshold.
  2. Генерация элементов lens flare.
  3. Размытие.
  4. Upscale / смешивание с оригинальным изображением.

1. Downsample / Threshold

Downsampling (уменьшение разрешения) ― оптимизация, чтобы уменьшить стоимость последующих этапов. Кроме того, мы хотим выбрать подмножество самых ярких пикселей исходного изображения. Использование scale/bias (масштаб/смещение) обеспечивает гибкий способ достичь этого:

Регулировка scale/bias является основным способом настройки эффекта; самые лучшие настройки будут зависеть от динамического диапазона color buffer, а также от того, насколько тонким вы хотите видеть результат. Из-за того, что техника является аппроксимацией, тонкость вероятней будет выглядеть лучше.

2. Генерация элементов lens flare

Элементы lens flare имеют тенденцию вращаться относительно центра изображения. Имитируя этот эффект, мы можем развернуть результат предыдущего этапа горизонтально/вертикально. Это легко сделать на этапе генерации элементов, разворачивая текстурные координаты:

Делать это не обязательно; генерация элементов работает отлично как с этим, так и без этого. Однако результат изменения текстурных координат помогает визуально отделить эффект lens flare от исходного изображения.

GHOSTS

Ghosts” (призраки) ― это повторяющиеся блики, которые отражают яркие области в color buffer, разворачиваясь относительно центра изображения. Подход, который я выбрал для генерации, заключается в получении вектора от текущего пикселя к центру экрана, а затем совершении нескольких выборок вдоль этого вектора.

Обратите внимание, что я использую fract(), чтобы гарантировать, что текстурные координаты обернуться вокруг; эквивалентно вы можете использовать для текстуры wrap mode GL_REPEAT.

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

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

Окончательное улучшение ― радиальное изменение цвета призрака, в соответствии с 1D текстурой:

Оно применяется после цикла, чтобы повлиять на финальный цвет призрака:

HALOS (ореолы)

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


Мы можем это использовать для того, чтобы создать “ореол”, умножая вес на сэмпл, тем самым ограничивая вклад деформированного изображения кольцом, радиус которого контролируется uHaloWidth:

Читайте также:  Levz dac s 014

CHROMATIC DISTORTION (цветовое искажение)

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

Ее можно использовать как прямую замену для вызова texture() в предыдущем листинге. Я рассчитываю direction и distortion следующим образом:

Хотя функция выборки простая, она стоит x3 выборок из текстуры, хотя все они должны быть cache-friendly, если вы не зададите uDistortion какое-нибудь гигантское значение.

С генерацией элементов все. Вот результат:

3. Размытие

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

Я не буду рассказывать, как сделать размытие; об этом можно почитать на различных интернет ресурсах (Gaussian blur).

4. Upscale / смешивание с оригинальным изображением

Итак, у нас есть наши элементы lens flare, хорошо размытые. Как мы можем объединить их с оригинальным исходным изображением? Есть несколько важных соображений относительно всего render pipeline:

  • Любой последующий motion blur или depth of field должен быть применен до объединения с lens flare, таким образом элементы lens flare не будут участвовать в этих эффектах.
  • Lens flare должен быть применен до любого tonemapping. Это имеет физический смысл, поскольку tonemapping имитирует реакцию пленки / CMOS на входящий свет, составной частью которой является lens flare.

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

LENS DIRT

Во-первых, нужно модифицировать элементы lens flare с помощью “грязной” текстуры в полном разрешении (которая широко используется в Battlefield 3):

Ключ к этому ― сама текстура грязи на линзах. Если контрастность низкая, формы элементов lens flare, как правило, доминируют в результате. По мере увеличения контрастности, элементы lens flare приглушаются, что дает другой эстетический вид, а также скрывает некоторые дефекты.

DIFFRACTION STARBURST

В качестве дополнительного улучшения мы можем использовать starburst текстуру добавляя ее к lens dirt:


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

Матрица преобразования uLensStarMatrix основана на значении, полученном из ориентации камеры следующим образом:

Есть и другие способы получения значения camrot; главное оно должно меняться непрерывно при повороте камеры. Сама матрица строится следующим образом:

Scale и bias матрицы нужны смещения начала координат текстуры, чтобы мы могли поворачивать starburst относительно центра изображения.

Заключение

Итак, теперь все! Этот метод демонстрирует как относительно упрощенный пост процесс дает прилично выглядящий lens flare. Он не совсем фотореалистичный, но при правильном применении может дать прекрасный результат.

Ссылка на основную публикацию
Adblock detector