Как моделируются пули в видеоиграх?

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

  1. Когда NPC выстреливает из пушки пулю, действительно ли пуля действительно перемещается из своего пистолета в заданную цель или они полностью игнорируют эту часть и просто кладут пулевое отверстие на цель?

  2. Если пуля действительно путешествует от пушки к цели, на какой скорости она действительно путешествует?

87 голосов | спросил mahen23 14 J0000006Europe/Moscow 2011, 21:58:14

15 ответов


84

Большинство игр FPS используют raycasting для реального игрового процесса; пули мгновенно перемещаются и попадают в цель при стрельбе.

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

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

Некоторые игры, такие как ARMA II, STALKER (целая серия), используют более реалистичную физику пули с временем поездки, рикошетами и проникновением с углами отклонения. Я считаю, что эти системы используют raycasting, но с пределом, который определяется скоростью пули. В этих играх начальная скорость может быть реалистичной, как в ARMA II, или выглядит так же, как в STALKER.

Я очень предпочитаю иметь реалистичную физику пули, поскольку пушки стреляют снарядами, а не лазерами.

ответил AttackingHobo 14 J0000006Europe/Moscow 2011, 23:32:53
51

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

На коротких расстояниях пули будут перемещаться вместе с промежутком времени между кадрами, они все равно получат от стрелка до цели между или в пределах 1 кадра.

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

ответил jhocking 14 J0000006Europe/Moscow 2011, 22:06:59
43

Я написал код пули для PlanetSide. У нас было несколько снарядов «hitcan», но в основном имитировали снаряды, насколько это было возможно, мы могли бы дать ограничения на процессор и огромное количество пуль в игре в любое время.

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

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

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

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

ответил Don Neufeld 15 J0000006Europe/Moscow 2011, 04:34:38
18

Это зависит от игры и уровня точности /реализма.

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

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

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

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

ответил 14 J0000006Europe/Moscow 2011, 22:07:41
14

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

ответил Josh Petrie 14 J0000006Europe/Moscow 2011, 22:12:19
11

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

С другой стороны, DID Torque 3D Engine использует реальные объекты снарядов, и разработчик может повлиять на их индивидуальные модификации скорости, массы и силы тяжести. Весь движок делал обновление значений каждые 32 миллисекунды.

ИЗМЕНИТЬ

В дополнение к использованию объектов снарядов, Torque 3D Engine также допускал использование лучей в качестве альтернативы. (Я сделал несколько игр, где «снаряд» на самом деле является эффектом частицы, который не имеет ни одной поддержки, что объекты снарядов делали так, что требуется луч.)

ответил Casey 14 J0000006Europe/Moscow 2011, 22:19:00
10

В викторине Team Fortress 2 есть довольно классная запись о поведении их снарядов и оружия hitcan.

http://wiki.teamfortress.com/wiki/Mechanics#Hit_detection

ответил lunixbochs 15 J0000006Europe/Moscow 2011, 10:15:37
5

На самом деле во многих играх используется алгоритм тестирования результатов рендеринга gpu. Вот основной способ работы:

1) Вне экрана создайте рендеринг текущего представления, где вся местность черная, и каждый символ не черного цвета 2) Получите цвет пикселя под перекрестными волосами 3) Если это нечерный поиск, сопоставление color-> игрока и применение хита к этой цели.

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

ответил Timothy Baldridge 15 J0000006Europe/Moscow 2011, 19:23:40
4

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

Для игры, которая делает прямое движение пули (без капли), это мгновенно, игра прослеживает воображаемую линию (вектор) от точки ствола вперед. Затем он вычисляет, с чем эта линия пересекается, и регистрирует «удар» пули в этой точке. Это может быть твердый объект, подобный стене, где удар вызывает эффект, такой как ударная ударопрочность и «затяжка» дыма /мусора. Это может повлиять на разрушаемый объект, заставляющий его сломаться, или это может повлиять на физический объект и дать ему «удар». Или, конечно, это может поразить игрока или другого NPC и причинить вред здоровью. Моделирование сильного ядра моделирует пулю, проникающую сквозь стены, и вызывает эффект удара на стороне выхода, возможно, уменьшая повреждение пули при выходе.

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

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

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

ответил Tim Holt 14 J0000006Europe/Moscow 2011, 23:29:56
1

Говоря о исходном коде Nexuiz с того момента, когда я посмотрел, они фактически не отправили объект «пули» из точки А в точку Б. Если я правильно помню, и это относится только к некоторому оружию - другое оружие не является оружием мгновенного удара, когда его увольняют, код смотрит на то, где указывает ваш пистолет. Если он нацелен на человека (и является оружием с мгновенным ударом), когда вы нажимаете «огонь», вы делаете удар.

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

ответил Jeff Welling 14 J0000006Europe/Moscow 2011, 22:07:21
1

Другая стратегия - это гибрид рендеринга всего и трассировка лучей. Вам необязательно отображать каждую пулю. Например, если ваш пистолет стреляет в 30 раундов в секунду, стрейф может генерировать несколько сотен частиц ... вы можете уменьшить рендеринг с помощью эффекта «трассировщика», сделать каждый третий снимок, лучевая трассировка двух других. Игрок по-прежнему видит 10 выстрелов в раунд /секунду у противника.

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

ответил Stephen 14 J0000006Europe/Moscow 2011, 22:47:47
1

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

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

В один прекрасный день интернет-провайдер может немного позаботиться о латентности и предоставить разные предложения ... но без FTTH это еще мечта ...

ответил jokoon 16 J0000006Europe/Moscow 2011, 18:18:05
1

В таких играх, как плохая компания, battlefeild 3 и сталкер, я считаю, что пуля - это реальная отдельная сущность, стреляющая как «ракета». Я только думаю, что трассировка лучей необходима, если пуля мгновенно попадает в цель. Когда субъект сам в реалистичных пулях будет просто тикать, чтобы увидеть, удастся ли кому-то попасть.

ответил JAMOY 3 42011vEurope/Moscow11bEurope/MoscowThu, 03 Nov 2011 20:44:29 +0400 2011, 20:44:29
0

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

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

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

ответил Jack be nimble 8 FebruaryEurope/MoscowbWed, 08 Feb 2012 18:23:32 +0400000000pmWed, 08 Feb 2012 18:23:32 +040012 2012, 18:23:32
-5

Пули и вся физика в серии игр сталкеров используют библиотеку с открытым исходным кодом под названием «Open Dynamics Engine».

http://en.wikipedia.org/wiki/Open_Dynamics_Engine

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

Другие игры, которые используют его BloodRayne 2, Call of Juarez, World of Goo, X-Moto и OpenSimulator.

Еще одним хорошим выбором будет физическая библиотека «Пуля». http://en.wikipedia.org/wiki/Bullet_%28software%29

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

ps arma 2 использует встроенный физический движок, их следующая игра arma 3 будет использовать физический движок physX

ответил EddieV223 15 J0000006Europe/Moscow 2011, 01:42:37

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132