Система повреждений: модули, материалы и красивые скриншоты

Реализация системы повреждений в тактическом шутере Blazing Core на UE4 с точки зрения геймдизайна, интеграции и технического арта.

Привет! Меня зовут Шаповалова Маргарита, я геймдизайнер тактического шутера Blazing Core. Расскажу вам о том, зачем в нашей игре появилась модульная система, как работают повреждения, как они визуально отбиваются для игрока и что там под броней.

Система повреждений: модули, материалы и красивые скриншоты

Во что играем?

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

Модульная система

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

Нарезка лёгкого меха Вентума на корпусные модули
Нарезка лёгкого меха Вентума на корпусные модули
Пример модулей вооружения меха Вентума
Пример модулей вооружения меха Вентума

В модульную систему входят следующие параметры:

  • HP – здоровье меха, своеобразный резервуар с невосполнимой характеристикой.
  • Структура – здоровье модуля, получает урон только когда разбита броня. Разрушается, если параметр ≤ 0.
  • Броня – восстанавливающийся защитный механизм модуля. Если модуль не получает урон в течение некоторого времени, то броня начинает восстанавливаться. Восстановление прекращается, если модуль получает урон. На разрушенных модулях броня не восстанавливается.
Состояния модулей: 1. Получает урон по броне; 2. Восстанавливает броню; 3. Получает урон по структуре; 4. Разрушен

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

Система урона

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

Первый вариант системы урона назывался «Мясная». В ней каждый снаряд имел два типа урона: по броне и по структуре/HP. Урон по структуре и HP наносился в полном объёме сразу же после того, как цифра урона по броне становилась достаточной, чтобы её разрушить. Например, у модуля 50 брони, а у пули 100 урона по броне и 100 по структуре/HP, при попадании в модуль влетит 50 урона по броне, броня будет разбита, и 100 по структуре/HP.

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

Основная суть «Веганской» системы урона заключается в отказе от разделения урона в снаряде на два типа и приход к одному параметру – просто урон.

В новой системе урон приобретает следующие свойства:

  • он применим к броне модуля и его структуре/HP.
  • остаточный урон после пробития брони распределяется в структуру и в HP. При этом урон, наносимый в HP является разницей между «остаточной» броней модуля и параметром модифицированного урона.
  • механика эффективности нанесения урона по HP, структуре и броне меха переносится из урона в систему коэффициентов, что позволяет работать с перками, усилениями и т.д.

Упрощенная формула расчета этой системы выглядит так:

dmg done = dmg*(coeff+perks+buffs)

Пример: у модуля 50 брони, а у пули 100 урона по броне и 100 по структуре/HP, при попадании в модуль влетит 50 урона в броню и 50 в структуру/HP.

Теперь мы пользуемся «Веганской» системой урона и чувствуем себя нормально.

Что там под броней?

Мех – это мешка (Mesh) меха без оружия. Мешка имеет физические ассеты (Physics asset), которые содержат информацию о физическом расположении модулей меха. Получается, что когда мы стреляем в меха, то стреляем не в мешку, а в набор примитивов, который сообщает нам, что это за модуль.

1. Physics assets правой ноги; 2. Physics assets всего меха
1. Physics assets правой ноги; 2. Physics assets всего меха

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

Модуль с сочетанием разных компонентов и настройкой компонента брони (ArmorComponent)
Модуль с сочетанием разных компонентов и настройкой компонента брони (ArmorComponent)

Модуль – это виртуальный объект со своей логикой и набором параметров: компоненты брони, здоровья, оружия. Если у модуля есть определенный компонент, то этот функционал будет работать. Например, если у какого-то модуля нет компонента структуры, то этот модуль не может получать урон и разрушаться. У нас так реализован неуничтожаемый щит меха Грегора.

Модуль без компонента структуры (StructureComponent)
Модуль без компонента структуры (StructureComponent)

Также есть компонент оружия (WeaponComponent). Если модуль содержит этот компонент, то значит, что модуль – оружие, и он может стрелять, а его пули могут наносить урон. Ещё есть компонент самовосстанавливающихся зарядов, применяется в минах, а каст-компонент применяется в модулях способностей, в этом компоненте есть кулдаун, время действия и какой-то эффект.

Модуль способности с настройкой каст-компонента (CastComponent)
Модуль способности с настройкой каст-компонента (CastComponent)

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

Визуалочка

«Материалы нам нужны, чтобы повыделываться перед игроками» – техартист Дима.

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

Отображение разной степени повреждений в материалах. Пулевые отверстия

Для каждого меха и каждой пушки делается второй UV-сет без перекрытий и повторяющихся деталей, а каждый кусочек развернут отдельно. Все модули вооружения и мехи имеют уникальные текстуры, в которых рисуются отверстия от попаданий. Чтобы отрисовывать каждую пулю в уникальном месте, нужно уникально ее размапить. Пуля становится «кисточкой» и может рисовать по всем поверхностям, оставляя следы.

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

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

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

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

Каждый эффект, который реализуется через эту одну текстуру работает, как «Уровни» (levels) в фотошопе: можно выбрать часть тона, верхний или нижний, сделать узенькую полосочку. Например, создаётся контур из горящей обшивки, потом внутри рисуется текстура внутренностей модуля, на нее отрисовывается тень, чтобы казалось, что она где-то внутри. Потом рисуется накаливание металла внутри с градацией: в зависимости от тона попаданий он начинает раскаляться, а потом обугливается. Это значит, что виртуальная кисточка докрасила до белого.

Система повреждений: модули, материалы и красивые скриншоты

Это самый дорогой по производительности эффект, так как в нём много текстур.

Материалы повреждения и восстановление брони

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

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

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

Эти материалы реализованы у нас просто. Эффект поврежденного материала запускается после определенного времени (Time Period). Далее он начинает мигать контуром по синусу (Sin), затем умножается на фейд-эффект к краям (MF_DistFresnelFades). После этого добавляется маска лампочек на мехе (Emissive Mask), и всё это еще умножается на цвет из коллекции параметров (MechMaterialState:NoArmor) и множитель яркости (Main_Bright).

Материал поврежденного модуля

Восстановление брони работает похожим образом. Но есть различие: материал не мигает по синусу, а имеет текстуру, которая растягивается в мировых координатах (Absolute World Position), текстурирование идет по всей сцене, потом растягивается на высоту меха, затем двигаем луч, похожий на заряд. Текстурирование эффекта полоски (Texture Sample) и такого же эффекта свечения комбинируются, затем умножаются на цвет коллекции параметров (MechMaterialState:ArmorRestore), который могут менять геймдизайнеры, и всё везде будет работать.

Пользуйтесь коллекциями параметров ;) Короткое видео.

Материал восстановления брони

И еще немного визуализации (видео здесь)

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

Спасибо за внимание!

4646
23 комментария

Комментарий недоступен

2
Ответить

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

Не надо путать логичность, и реалистичность в играх - это две разные вещи.

2
Ответить

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

1
Ответить

этой системе 200 лет в обед, пример - mechwarrior 3 99 года рождения

3
Ответить

спасибо, было интересно почитать про реализацию механики на UE4

1
Ответить

Комментарий недоступен

Ответить