Как работают пули и снаряды в играх: лучи, баллистика, гравитация

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

Вместе с геймплей-программистом Tom Clancy’s Rainbow Six Siege разбираемся, как устроена стрельба в играх и почему для реалистичного геймплея не всегда нужно симулировать всю настоящую физику.

Embedded Image

Rising Storm 2: Vietnam

При создании снарядов в играх обычно используют один из двух подходов. Первый, — хитскан, — более простой и менее реалистичный, появился ещё в Wolfenstein 3D, а корнями вообще уходит в рендеринг трёхмерной графики с помощью лучей.

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

PlayerUnknown’s Battlegrounds

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

Это ещё и самый быстрый метод расчёта стрельбы, который требует очень мало вычислительных ресурсов. Чтобы обработать выстрел с хитсканом, движку нужно выполнить всего три действия:

Определить, куда направлено оружие игрока.

Провести луч в нужном направлении на заданную или бесконечную дальность

Проверить, прошёл ли луч через цель.

Fortnite

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

Стрельба с хитсканом может показаться очень простой, но на самом деле предлагает массу интересных опций. Например, разработчики могут позволить рейкасту при промахе отражаться от поверхностей — так в новой дилогии Wolfenstein реализован рикошет.

Длина луча может быть бесконечной, а отклонение от траектории — нулевым. Тогда получится ультимативное лазерное оружие для очень метких игроков вроде рэйлгана из Quake или шоковой винтовки из Unreal Tournament.

А можно сделать и наоборот — каждому лучу задать небольшой разброс и угол, на который прицел игрока будет отклоняться при постоянной стрельбе. Так в Rainbow Six Siege реализована отдача у разного оружия — одно стреляет метко, второе уводит вверх, а третье бросает из стороны в сторону. Ещё рейкаст может проходить сквозь персонажей и поверхности, чтобы игрок убивал противников через хлипкие стены, как в Call of Duty, или сквозь других противников — как в Counter-Stike.

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

Counter-Strike: Global Offensive

Если игровую стрельбу нужно сделать реалистичной, разработчики используют Projectile Ballistics — баллистику снарядов. Она обрабатывает каждую пулю как отдельный физический объект, который существует в игровом пространстве, обладает весом, ускорением и любыми другими параметрами, которые подразумевает движок игры.

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

Embedded Image

Геймплей-программист

Red Orchestra 2: Heroes of Stalingrad

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

Реже попадается влияние ветра на траекторию пули, как в серии снайперских боевиков Sniper Elite. А некоторые игры ещё и имитируют сопротивление воздуха — например, в Escape from Tarkov из-за него пуля на дальней дистанции теряет скорость и при попадании наносит меньший урон.

Escape from Tarkov

Баллистика также открывает новые геймплейные возможности. Например, без неё очень сложно реализовать замедление времени из Max Payne и других игр. Ведь чтобы пули вместе с персонажами замедлились, они должны лететь с конечной скоростью, а не моментально регистрировать попадание.

В некоторых играх встречаются направляемые проджектайлы, траекторией которых управляет игрок. Например, в Dark Messiah of Might and Magic большинство заклинаний — это именно снаряды с наведением: персонаж выпускает огненный шар и ещё долго может гонять его по уровню. Да и всем известная ракетница из Half-Life 2 работает по тому же принципу.

Ещё один тип снарядов — наводящиеся проджектайлы. Игрок не может напрямую контролировать их траекторию, но может задать цель, которую снаряд будет преследовать — как ракета из Longbow Avril в Unreal Tournament 3. Хотя неправильная реализация этой механики может привести к курьёзам вроде самонаводящегося чемодана из Hitman.

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

World of Warcraft

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

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

Arma 3

Также при создании баллистики нужно учитывать производительность и разную частоту кадров. Если реализовать физику снарядов неаккуратно, то на низких значениях fps пули полетят рывками, а на высоких гранаты начнут падать со слишком большой скоростью. Например, в ПК-версии боевика Vanquish снаряды противников долетали гораздо быстрее до игроков, которые включали режим 60 fps.

Vanquish

На практике хитскан и баллистика обычно используются вместе, так как часто нужны для совершенно разных задач. Самый простой пример — бросаемые снаряды. В шутерах с хитсканом в духе Counter-Strike гранаты, коктейли Молотова и прочие дымовые шашки используют именно баллистику проджектайлов. Сюда же можно отнести мины-колючки, гранатомёты и арбалетные болты из Rainbow Six Siege.

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

В играх с множеством персонажей такое совмещение работает ещё и на баланс: разработчики Overwatch и Team Fortress 2 регулярно правили скорость ракеты Фарры или, например, бомб Подрывника.

Хитскан иногда служит вспомогательным инструментом для баллистики, который упрощает жизнь игроку или уменьшает нагрузку на систему. Например, в Sniper Elite движок с помощью луча сначала проверяет, может ли пуля теоретически поразить цель, а уже потом при необходимости включает красивое slo-mo, где и просчитывает баллистику.

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

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

Embedded Image

Геймплей-программист

Некоторые разработчики заморачиваются настолько, что даже просчитывают столкновение снарядов между собой — и для этого тоже используются рейкасты или шейпкасты. Например, без них две летящие гранаты в Rainbow Six Siege могли бы просто пролететь сквозь друг друга. Но в игре проджектайлы выпускают лучи в направлении полёта и проверяют, не пересекаются ли они. Правда, даже при пересечении снаряды просто падают на землю — обрабатывать реалистичный отскок было бы слишком затратно.

Комментарии: 0