Блог: реализация взрывов в VR-игре

Выбор механики на примере проекта High Noon.

Геймдизайнер студии OctoBox Александр Галеев рассказал о проработке взрывов в VR-шутере High Noon. Заметка была опубликована в пользовательском разделе DTF и отредактирована.

High Noon
High Noon

Давно ли вы взрывали себя в самый ответственный момент?

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

Основываясь на своём опыте разработки VR-шутера High Noon, я расскажу о взрывах и попробую ответить за «этих злых разработчиков».

Урон

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

Обычно используется понятие «область урона» (damage area) — ограниченное пространство в игровом мире, в котором враги получают урон.

В играх с незначительным вертикальным разнообразием ландшафта удобно использовать область урона в форме цилиндра. Его проекция на ландшафт всегда одинаковая — круг известного радиуса. Это позволяет гарантировать нанесение урона, если взрыв произошёл в воздухе или враг подпрыгнул.

В играх со сложной топологией уровней для точности используется сфера. В High Noon мы используем сферу из-за многоэтажных строений и обилия разрушаемых объектов.

Формы области урона: цилиндр и сфера
Формы области урона: цилиндр и сфера
Полёты врагов в High Noon
Полёты врагов в High Noon

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

Проверка видимости показывает, что поражён только один враг
Проверка видимости показывает, что поражён только один враг

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

Теперь нужно решить: стоит ли снижать урон с увеличением расстояния от центра взрыва или пусть все страдают одинаково?

Снижение урона от расстояния
Снижение урона от расстояния

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

Настройка динамита в Unreal Engine 4
Настройка динамита в Unreal Engine 4

Многие решения в High Noon давались нам легко. Но бывает так, что геймдизайнеры могут провести десятки часов, разрабатывая оптимальные способы нанесения урона.

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

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

Общая логика расчёта урона взрыва
Общая логика расчёта урона взрыва

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

Доставка боеприпаса

С уроном определились. Теперь решим, как динамит подкинуть врагу.

В некоторых играх есть система предсказания траектории. Например, в The Division отображается траектория полёта и зона поражения. Но такое решение плохо подходит для игр с высокой динамикой.

Траектория полета и зона поражения гранаты в The Division
Траектория полета и зона поражения гранаты в The Division

В большинстве шутеров используется другая система: боеприпас летит по игровой физике и на некотором расстоянии пересекает линию прицеливания игрока. Со временем игрок запоминает это расстояние и может примерно предсказать траекторию.

Полёт боеприпаса «по физике»
Полёт боеприпаса «по физике»

В High Noon наличие VR-контроллеров заставляет использовать новый метод доставки. Мы берём скорость движения контроллера в момент отпускания курка и придаём эту скорость динамиту.

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

Бросок динамита в High Noon:

Враги в High Noon тоже могут бросать динамит в игрока. Чтобы пользователь мог противостоять вражескому динамиту, мы использовали несколько хитростей.

Зона поражения (hitbox) вражеского динамита увеличена и имеет форму шара. А ещё ускорение свободного падения снижено в четыре раза, а время полёта зависит только от расстояния между игроком и бросающим врагом.

Теперь динамит летит долго и предсказуемо. Его можно легко уничтожить из любого оружия и избежать получения урона.

Физика

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

Взрыв в Uncharted 4:

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

Разрушаемые объекты имеют «прочность» — аналог «здоровья» у врагов. Они разрушаются, когда прочность становится равной нулю. Чтобы взрыв влиял на разрушаемые объекты, у него есть специальная настройка «урон прочности».

Взрыв может раскидывать объекты. Во время взрыва создаётся «область силы», внутри которой физические объекты получают импульс, направленный от центра взрыва.

Взрыв в High Noon:

UX

UX (User eXperience, опыт пользователя) — восприятие и взаимодействие игрока с игрой. Тема большая, и сложно раскрыть все аспекты даже применительно к конкретному виду оружия.

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

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

Взрыв мехи D.Va в Overwatch:

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

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

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

Блог: реализация взрывов в VR-игре

Спецэффекты

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

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

В VR частицы с прозрачностью очень сильно влияют на производительность. В High Noon мы много экспериментировали со спецэффектами и решили использовать вместо спрайтов непрозрачные объёмные модели. Для взрыва — шипы, для дыма — сферы. Там, где от прозрачности нельзя отказаться, мы используем dithering — метод создания полутонов с помощью контрастного шума. Получилось стильно и эффективно.

Для создания полутонов используется dithering

Так выглядит взрыв в High Noon:

Эпилог

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

Бывает даже, что разработчики загоняют себя в угол, не желая отказываться от проделанной работы. Чтобы не допустить такой ситуации, мы прислушиваемся к мнению наших игроков. Это одна из причин выхода на Greenlight c VR-шутером High Noon.

1818
13 комментариев

Отличный материал, желаю успехов на "Стиме".

3
Ответить

Спасибо вам за поддержку)

Ответить

Разработка под VR выглядит интересно. Но я смотрю вы практически везде от мидкор механик скатываетесь до совсем казуальных решений. Это связано с короткими VR сессиями?

1
Ответить

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

Если у вас есть возможность - протестируйте Hign Noon, мы вчера выкатили демку, на гринлайте есть ссылка. Будем рады услышать мнение после того, как увидите решения в самой игре.

1
Ответить

да, хорошая статья. надеюсь прочитать продолжение о результатах выхода на стим

Ответить

Спасибо. Мы постараемся подготовить материал, возможно, будем полезными.

Ответить

Ничего не понял, но лицо Сайтмы порадовало.

Ответить