«Жар-птицы»: размытие движения

Сегодня расскажем о реализации размытия движения (motion blur), «кинематографическом» эффекте графики War Thunder.

Что такое Motion Blur?

image

Каждый кадр видеоигры отрисовывается «с нуля» и не имеет истории изменений. Кинокамеры и наше зрение устроены иначе: нам нужно какое-то время, чтобы снять кадр, а за это время мир не стоит на месте. Если объект движется, он будет виден в каждом моменте времени снимка, и если объект движется, то на кадре он будет отображён одновременно во всех местах, через которые он прошёл за время съёмки кадра. Так и появляется эффект размытия движения (англ. motion blur).

Разберёмся в основах

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

За отправную точку мы приняли проверенную технологию построения размытия в движении, почитать о которой можно по ссылке (англ.).

image

Чёткое разделение переднего плана и фона

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

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

Сложности реализации

Само собой, базовая технология потребовала настройки под наши нужды. Чтобы решить, как размыть пиксель, нам нужно знать его скорость. Но что, если в одной точке видно больше одного объекта? Без доработок алгоритм размытия «не видит» прозрачных объектов.

Вот кадр, где мы видим лес сквозь стеклянный фонарь кабины падающего в «штопоре» истребителя. Тут в одном пикселе экрана объекты с разной скоростью — фонарь кабины неподвижен, а лес на фоне очень быстро движется. Мы решили пойти тем же путём, как и с разделением видимых объектов на передний план и фон: то, что мы видим через стекло, мы относим к одной категории, в то время как непосредственно видимые объекты — к другой. Мы не размываем одну категорию поверх другой, а допускаем смешивание внутри категорий. Таким образом мы получаем изображение, где фон размывается через стекло, но само стекло может сохранять свой чёткий силуэт.

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

image image

Размытый фон через чёткое стекло фонаря

Ограничения

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

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

image

Размытое движение на переднем плане с «заблюренными» колёсами

Это реалистично?

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

Чтобы лучше имитировать человеческое зрение, мы добавили возможность отключить размытие движения, вызванное движением камеры. Размытие быстрых объектов — пролетающих самолётов, летящих обломков — остаётся, но картинка сохранит четкость, когда вы оглядываетесь по сторонам.

image image

Поворот башни в полном размытии движения / Размытие камеры выключено, движется только башня

Размытие движения хорошо для игр?

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

И те и другие правы. Каждый сам решает, что ему важнее: если результаты, статистика — тогда, наверное, размытие не для вас. Отключайте, без проблем. А вот если бой уже закончен и вы любуетесь повтором, или же просто хотите по-настоящему ощутить скорость вашего самолёта — включайте настройки «Кино» и «Размытие» на максимум!

3 лайка

Хоспаде, только не это

24 лайка

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

33 лайка

Киберспорт?
Киберспортим, да, да.

вы до Нового года с обновой тянуть будете ?

1 лайк

Я же 12 лет так сильно ждал эффекта мыла на лицо,а что? Будет в связке с FXAA шикарно,в такой то игре с такой то “Шакал-Некст Генерейшн Графикой то” где кустики и прочие объекты галимо видно просто потому что они графически не улучшаются

Спойлер

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

2 лайка

Они утверждают это, основываясь на личном игровом опыте?

image
вместо того, чтобы выпустить патч с графикой, они рассказывают о графике, а то вдруг ты сам не поймешь, что стало “лучше”.

14 лайков

картинка подходит идеально как никак

Поверь в то что графика стала лучше! Реально,уже превращается в какой то “Культ Самоверы” где что-то внушили как идею и мысли,никак не меньше)

Когда патч?

3 лайка

Когда тест каморников? Или уже всё?

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

13 лайков

Я сам думал что его уже выкатят 14 дней назад,то есть 1 Ноября,но видимо нет,так как он так ещё и не вышел)

1 лайк

Ахаха,это точно)))

1 лайк

image

  • В обновлении улучшена графика.
  • Можно взглянуть?
  • Не волнуйтесь, она улучшена.
17 лайков

Мне становится лучше когда я выключаю гром войны и иду трогать траву в ванной.
Ведь как среднестатистический игрок в гром войны я не мылся 12 лет и ванная заросла.

3 лайка

Также принимали нового Мапера на работу что ли?) Ну тот чел что режет карты будто это не карты,а будто это срубание деревьев и работа по деревянным материалам))) Нещадное Обрезание всего и вся)))

4 лайка

Вот честно.
Лучше бы в очередной раз починили восстающие деревья и кусты.

6 лайков

Мне больше всего нравится, что почти все, что они рассказывают о новой графике - “не для всех”. У кого-то пк не потянет, кому-то не нужно просто такое, а разговоров, как будто на новый движок перешли.
Именно поэтому наверно и расхваливают, так как далеко не все это в игре увидят вообще xdd

5 лайков