Как я делаю свой fast-paced шутер в духе Season's Beatings

Всем привет! Меня зовут Даниил. Я делаю игры :D

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

трейлер

Введение

SHOTRUN - это небольшой fast-paced шутер, где вы сражаетесь за свою жизнь, проходя этаж за этажом на пути к главному Менеджеру. Игра разрабатывается на Unreal Engine 4 (как и большая часть моих остальных проектов). Сама игра сильно вдохновлена Season's Beatings, в которую я очень много играл в 2019 году (когда еще учился в школе).

В основе моей игры так же лежит механика one-shot и быстрая перезагрузка уровней, что позволяет добиться определенной быстроты геймплея и не выбивает из погружения по время проигрышей.

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

(если кому интересно, ознакомиться с моими проектами можно тут)

Прототип

С самого начала я определил для себя, что основное оружие игрока - дробовик (отсюда и произошло название игры - Shotrun. Смесь Shotgun и Run). Однако, чтобы вся система оружия была масштабируемой, я сделал все оружие в игре универсальным. Таким образом оружие игрока и врагов ведет себя одинаково (и технически, игрок вполне мог бы использовать другие виды оружия). Потенциально, это поможет в будущем при расширении проекта.

стоит. смотрит.
стоит. смотрит.

Для удобного обнаружения игрока я использовал ассет (который предусмотрительно забрал на раздаче несколько лет назад) - Line Of Sight, реализующий простой функционал системы "поля зрения" и позволяющий получить доступ к акторам, которые в это поле зрение попали. Это сильно сэкономило время.

Line Of Sight
Line Of Sight

Так же я реализовал простую систему "уведомлений", т.е. если враг был убит или если выстрел был недалеко от врага, он сообщает всем, кто находится с ним в одной комнате, о том, что игрок где-то неподалеку. Те враги, которые находятся в соседних комнатах, так же получают сигнал и становятся более внимательными. Это очень важно для one-shot шутера, так как игрок может пробегать один и тот же уровень по многу раз, и такое поведение врагов добавляет вариативности к прохождению.

Арт-стайл

Одной из наиболее сложных для меня вещей при разработке этой игры был арт-стайл. С самого начала я хотел сделать что-то похожее по стилю на Season's Beatings, однако в моменте решил попробовать сделать некий "нуарный" стиль. Основа стиля - полностью черно-белая цветокоррекция, при том что кровь должна оставаться красной. Отчасти, вдохновлен видосом с демонстрацией прототипа Bendy And The Silent City

Как я делаю свой fast-paced шутер в духе Season's Beatings

С самой черно-белой цветокоррекцией проблем не было, чего не сказать о крови. По сути в игре два типа крови. Первый тип - Брызги крови при попадании (реализованы с помощью Niagara) и второй тип - Декали крови, остающиеся на стенах после убийства противника. Сложность заключается в том, что обработка и рендер декалей отличается от обработки обычных объектов. Изначально была мысль модифицировать шейдер пост-процессинга и использовать Custom Depth и Stencil, чтобы рендерить декали в нормальном цвете, однако как оказалось, начиная с версии Unreal Engine 4.27 (которую я как раз использую) Эпики убрали такой функционал для декалей.

Как я делаю свой fast-paced шутер в духе Season's Beatings

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

красный куб
красный куб

Однако! Этого было недостаточно. Да, это работает, но работает только на обычных объектах, так как сами декали все равно рендерятся немного по-другому. Декали имеют прозрачность и по-другому реагируют на свет, а потому их цвет анализировать нужно по-другому, а именно - брать на проверку BaseColor, так как это значение до всех обработок и до применения освещения. в таком случае мы получаем изначальный цвет декали.

и вот, все работает.
и вот, все работает.

Сама проверка условий реализована за счет нескольких операторов IF и AND. Сам по себе Material Editor не имеет встроенного оператора AND, но его можно легко реализовать с помощью умножения (1 AND 0 = 1 * 0).

Как я делаю свой fast-paced шутер в духе Season's Beatings

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

Как я делаю свой fast-paced шутер в духе Season's Beatings

Разрушаемость я реализовал за счет встроенной в анрил системы разрушений Apex Destruction (ранее Destructable Mesh).

Что по итогу

За время разработки этой игры я изучил довольно много новых вещей, которые касаются шейдеров (так как в шейдерах я все еще слаб, но многие вещи приходят именно с практикой). Надеюсь мини-девлог получился интересным, буду рад почитать ваши коменты с мнением по игре или возможно даже техническими советами. Всем спасибо за внимание! :D

7
2
1
2 комментария