Як моделюються кулі у відеоіграх?


86

Я грав у такі ігри, як MW2, останнім часом, і як програміст, я схильний запитати себе, як вони роблять гру такою захоплюючою. Наприклад, як вони імітують швидкість кулі.

  1. Коли NPC стріляє кулею зі свого пістолета, чи справді куля рухається від свого пістолета до заданої цілі чи вони повністю ігнорують цю частину і просто ставлять отвір кулі в ціль?

  2. Якщо куля дійсно рухається від пістолета до цілі, з якою швидкістю вона насправді подорожує?


25
Кривавий екран, такий справжній!
Атака

6
пагони : BOOOOORRRIIIING
mahen23

1
Я не впевнений, чи можна назвати кулі Мегаманської легенди кулею, але в Мегамані вони використовують для кулі повільні снаряди. На них ви добре бачите кадри, які вигнуті, якщо під час зйомки бігаєте по колах (ефект кориоліса).
Лі Лі Райан

Відповіді:


84

Більшість FPS-ігор використовують ретрансляцію для фактичного гри; кулі миттєво подорожують і потрапляють у ціль при стрільбі.

Але в більшості ігор також використовується використання "підроблених" трекерів. Кожні 3 постріли, або якийсь інший інтервал, трасера ​​буде вистрілена разом із кулею, трасир буде справді швидким, але не миттєвим. Це робиться лише як візуальний ефект, і не впливає на гру безпосередньо, але допомагає давати підказки стрільцеві, стрільцеві та надає сторонній сторонніх спрямованих посилань на вогнепальні постріли.

Більшість ігор, які використовують такі види фізики куль, нереалістичні, оскільки немає рикошетів, фрагментів кулі, а якщо проникнення є, як правило, лінійним.

Деякі ігри, такі як ARMA II, STALKER (ціла серія), використовують більш реалістичну фізику кулі з часом подорожі, рикошетами та проникненням з кутами відхилення. Я вважаю, що ці системи використовують радіомовлення, але з обмеженням, яке визначається швидкістю кулі. За допомогою цих ігор швидкість намордника може бути реалістичною, як у ARMA II, або приблизно так, як у STALKER.

Я дуже віддаю перевагу реалістичній фізиці куль, як гармати вогнем снарядів, а не лазерам.


1
Не граючи жодної із згаданих ігор, як це впливає на геймплей? Я маю на увазі, якщо ви використовуєте фізику кулі в такій грі, як Call of Duty, чи справді ви бачите помітну різницю? Чи змінюються кути проникнення гри? Чи могли б гравці навіть усвідомити, що їх персонаж не вирівнюється з отвором від кулі по відношенню до стрільця? Просто цікаво, які переваги є для виправдання витрат. Заздалегідь спасибі.
Dutchie432

Це додає шару непередбачуваності та глибини механіці стрільби, що мені подобається. Кулі не миттєві !!! chuckhawks.com/rifle_ballistics_table.htm Шлаг, який рухається 2644 футів на секунду за 600 футів, займає понад 2 секунди, щоб потрапити в ціль, не зважаючи на додаткове уповільнення. Текуча ціль буде пропущена, якби ви націлилися прямо на неї. Подальша відстань дозволила б слизі пройти повільніше, ніж швидкість звуку, дозволяючи людям стрибати на землю чи інше, якщо вони почули постріл.
AttackingHobo

У цій відповіді зроблено кілька неточних тверджень і їх слід видалити. Перевірте мою відповідь нижче.
EddieV223

1
Кулі в ArmA 2 є імітованими снарядами; вони можуть бути модифіковані (зміна швидкості, зміна напрямку) посередині польоту і стикатися з предметами під час подорожі. Незалежно від того, чи це робиться методом проливання променів, це не має значення, вони виступають як реальні об'єкти фізики.
deceleratedcaviar

так mw2? радіомовлення чи ні? Тому що вони, безумовно, роблять велику роботу в моделюванні отворів від куль і навколишнього середовища, що їх знищують
mahen23

51

Для куль вони, як правило, не турбуються, імітуючи кулю, яка фактично подорожує повітрям, і просто ставлять отвір кулі в ціль миттєво, коли її вистріляють. Інші речі, як ракети, повільніше *, і гра насправді показує їх подорожі по повітрю.

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

* Тобто повільніше, ніж ракети в реальному житті, для того, щоб гравець бачив, як вони літають по повітрю.


44

Я написав код кулі для PlanetSide. У нас було кілька снарядів "ударів", але в основному імітували снаряди якнайкраще, що ми могли дати обмеження процесора та величезну кількість куль в будь-який час.

У випадку з хіт-сканом вплив визначається в тому ж кадрі, що і вхід, що використовується, часто використовуючи один промінь. Це підходить для зброї, такої як лазери або інші надзвичайно швидкі снаряди. Ми зробили удари, просто прокрутивши початкову швидкість снаряда настільки високою, що він перетне ігрову дошку за один галочку.

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

Як у снарядів, так і у невдалених снарядів, те, що відбувається при зіткненні, залежить від ваших властивостей снаряда та поверхні, на яку ви вплинете. Наприклад, ви можете вдарити по твердій поверхні, і в цьому випадку ви можете перевірити кількість відмов і відрегулювати положення і швидкість за відбиття, або підірвати снаряд, якщо ви потрапили на максимум підрахунку відмов. У цій системі ракета має максимальну кількість відмов у 0. Ви можете потрапити на м’яку поверхню, а потім перевірити свою проникаючу силу, щоб визначити, чи повинен снаряд продовжуватися через матеріал тощо.

Весело було писати код. Крім того, дуже корисно написати гарну візуалізацію налагодження того, що відбувається, щоб ви могли візуально перевірити шляхи польоту, події тощо.


2
Я грав у Planetside, перш ніж потрапив у гарну програмування, і це звучить так, що було б цікаво кодувати.
Ентоні

18

Це залежить від гри та рівня точності / реалістичності.

Синхронізувати моделі стрільби та пошкоджень у мультиплеєрних налаштуваннях досить складно, оскільки вам потрібно точно визначити, куди і коли саме вистрілила куля, потрапила в ціль і чи пройшло ще щось через шлях.

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

Багато ігор можуть імітувати багатоступеневий багатозйомовий шлях повільно рухомого об’єкта (наприклад, артилерії, бомб, маркерних патронів тощо), але це дуже дорого, а проблеми синхронізації частіші, що призводять до смішних відео на YouTube.

Інша стурбованість викликає ігри, які підтримують окремі менші "середовища" (наприклад, кожна кімната моделюється окремо), щоб створити ілюзію більшого простору. У цих випадках речі, що знаходяться в межах "кімнати", можуть бути симульовані правильно, щоб усі в кімнаті були поінформовані про ряд переходів у просторі, які робить куля, але інших, що знаходяться поза цим середовищем, немає.


14

Для снарядів, які рухаються швидше, ніж може побачити око, часто застосовують радіаційне випромінювання - промінь від морди обчислюється у відповідному напрямку та тестується на потенційних цільових об'єктах для визначення того, що потрапило. Це може бути ускладнено декількома променями та додатковими обчисленнями, якщо ви хочете імітувати такі речі, як падіння кулі тощо. Ви також можете надати проектам швидкість і використовувати це, щоб додати деякий додатковий реалізм до обчислення (тому кулі не миттєві).


11

Це залежить від реалізації, але я знаю, що Джерело двигуна взагалі не використовував фізичні кулі (об’єкти снарядів), вони просто робили промінь від гравця для націлювання на випадкове коло "удару" (більший чи менший радіуси залежали від як швидко стріляла зброя і якщо гравець утримував кнопку вогню вниз) який її центр був точкою, на яку гравець прицілився, то після визначення фактичного викиду променів від гравця до випадково визначеної точки і залежно від інших факторів (наприклад куля, "вага" та швидкість дулі (усі внутрішні номери), удари предмета тощо), відкиданий промінь перекидався через декілька об'єктів або поки він не потрапив у місцевість.

З іншого боку, Torque 3D Engine DID використовує фактичні предмети снаряду, і конструктор може впливати на їх індивідуальні модифікатори швидкості, маси та сили тяжіння. Все, що робив двигун, було оновити значення кожні 32 мілісекунди.

EDIT

Окрім використання снарядних предметів, двигун Torque 3D також дозволяв використовувати в якості альтернативи випромінювання. (Я зробив декілька ігор, де «снаряд» - це насправді ефект частинок, який не має жодної підтримки, яка робила об'єкти снарядів для того, щоб проміняти промінь.)


дивовижна історія брато. однак, я впевнений, що двигуну Torque 3D потрібна більша потужність для обчислення для всієї цієї фізики.
mahen23

@ mahen23 Ви були б здивовані. Він мав менші фізичні обчислення, ніж початковий двигун, почасти тому, що він взагалі не обробляв зіткнення Softbody, а лише прості обмежувальні коробки та зіткнення.
Кейсі

10

На вікі Team Fortress 2 є досить крута записка про поведінку їх снаряда та ударів зі зброєю.

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


2
Ця вікі добре прочитана.
mgiuca

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

не забудьте прочитати підпункти "Проекція" та "Хітскан" прямо під назвою цього розділу
lunixbochs

5

Насправді багато ігор використовують алгоритм тестування хіт-рендерінгу на gpu. Ось основний спосіб його роботи:

1) За межами екрана створіть відображення поточного виду, де вся місцевість чорна, а кожен символ - не чорного кольору. 2) Отримайте колір пікселя під поперечним волоссям 3) Якщо це не чорний пошук кольору, > картографування гравців і нанесіть на це ціль.

Цей метод використовується роками в іграх здебільшого тому, що він ідеальний для пікселів. Якщо один піксель шапки гравця стирчить з-за стіни, ви можете вдарити його. Тобто, якщо ви можете бачити його, ви можете вдарити його. Цей тип точності поруч із неможливою за допомогою простих методів лиття променями. По-друге, такий вид тестування надзвичайно швидкий і його можна виконати на GPU.


Кольоровий пошук плеєра звучить болісно? Якби ви проміняли це, чи не буде це ефективність?
deceleratedcaviar

Насправді це надзвичайно швидко. Більшість часу, витраченого на візуалізацію, відбувається від затінення власне багатокутників. У разі надання хіт-тесту використовуються лише полігони суцільного кольору. Крім того, цей хіт-тест можна повністю виконати в GPU, і він ідеально підходить для пікселів. Ніщо не відбиває гравця більше, ніж робити ідеальний удар у ціль, а потім хіт-тест скаже, що це був промах.
Тімоті Болдрідж

Але як перетворити піксельний простір у світовий простір на відповідний об'єкт, який ви потрапили.
deceleratedcaviar

@Daniel: Як йдеться у відповіді, мета, яка потрапила, визначається за кольором. Кожен символ відображається як інший (суцільний) колір, тому ви можете просто перевірити колір і чорний = пропустити, що-небудь інше = шукати, хто був представлений у цьому кольорі, тому що вони потрапили.
Дейв Шерохман

@Dave Sherohman, я, мабуть, спочатку прочитав це неправильно, після прочитання ваших пояснень здавалося таким зрозумілим, що він має на увазі ... ура
deceleratedcaviar

4

Деякі ігри, без сумніву, використовують реалістичну фізику кулі, беручи до уваги час поїздки та падіння кулі, але я здогадуюсь, що більшість ігор, як мінімум, для NPC.

У грі, яка здійснює пряму подорож кулі (без краплі), яка є миттєвою, гра відстежує уявну лінію (вектор) від точки стовбура вперед. Потім він обчислює, з чим перетинається цей рядок, і реєструє кулю, що "потрапила" в цю точку. Це може бути твердий предмет, як стіна, де удар викликає такий ефект, як відбиття кулі від удару кулі та "дихання" диму / сміття. Це може вплинути на порушений предмет, що призведе до його зламу, або може завдати удару по фізичному об'єкту і дати йому "удар". Або, звичайно, це може вдарити гравця чи іншого NPC та спричинити здоров'я. Моделювання жорсткого ядра змоделює кулю, що проникає крізь стіни, і спричинить ударний удар на стороні виходу, ймовірно, зменшивши пошкодження кулі при виході.

Просто так, що NPC не мають ідеальної мети, багато ігор додають вектору якусь рандомізацію для моделювання розповсюдження кулі. Це те, що ви побачили в реальному житті, де кулі потрапляють не лише туди, куди ви прицілюєтесь, а за схемою, зосередженою навколо місця прицілювання.

Щоб візуалізувати поширення кулі, уявіть конус, що виходить із гармати замість прямої (вектора). Фактичний напрямок кулі рандомізований таким чином, щоб він знаходився десь усередині цього конуса. Якщо стрілець дійсно близький до цілі, розкид невеликий, а точність висока. Якщо ціль знаходиться далеко, конус додає більше поширення, тому менша ймовірність того, що стрілець потрапить у ціль.

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


+1 хороша інформація. Але я думаю, що це може бути візуально приємніше, якщо AI насправді погано націлюється на гравця, а не на більшу конус. Або якщо ви хочете зробити конус більшим, зробіть його змінним розміром на основі віддачі та дайте ворогам нижчого рівня швидший темп збільшення розміру, тому вони просто здаються недосвідченими.
AttackingHobo

1

Якщо говорити про вихідний код Nexuiz, коли я дивився, вони насправді не надсилали об’єкт «кулі» з точки А в точку В. Якщо я пам'ятаю правильно, це стосується лише деяких видів зброї - інша зброя не є » t миттєве враження зброї, коли їх стріляють, код дивиться на те, куди вказує ваша зброя. Якщо він спрямований на людину (і це зброя миттєвого пострілу), коли ви клацаєте "вогонь", тоді ви зробили удар.

Також примітно те, як Nexuiz мав на сервері варіант обчислення звернень на клієнті чи на сервері. Якщо ви підозрюєте, що клієнти обманюють, ви можете переключитися на обчислення звернення на сторону сервера, намагаючись полегшити це.


1

Ще одна стратегія - це гібрид рендерінга всього і проміння відстеження всього. Не обов’язково виводити кожну кулю. Наприклад, якщо ваш пістолет стріляє 30 патронів / секунду, страйф може генерувати кілька сотень частинок ... ви можете зменшити візуалізацію, використовуючи "ефект сліду", візуалізуйте кожен 3-й постріл, промінь простежте за двома іншими. Гравець як і раніше бачить 10 раундів / секунду, стріляючи по противнику.

Налаштуйте свою конкретну ситуацію, зробіть більше для меншої швидкості вогнепальної зброї, менше для вищої.


Ви повинні включити деяку інформацію про те, чому кожен третій постріл або близько того матиме слідчі. Це не розробник ігор. Це були військові. Кулі-сліди, які мають фосфор, вбудований у тил кулі. Коли вистріляють раунд, порох запалює фосфор, створюючи яскравий слід за кулею. Кулі-сліди коштують дорожче, ніж звичайні кулі, тому вони використовуються лише колись пострілами X або близько того, щоб заощадити гроші, при цьому все-таки мають намічений ефект: легше прицілитися.
AttackingHobo

Крім того, ви не хочете розділяти його на відображення та оновлення, як ви говорите. Ви хочете, щоб вся фізика кулі була повністю виконана методом оновлення. Ви хочете, щоб кожен X постріл або близько того також породжував ефект відслідковування, який набагато повільніше, ніж куля, щоб показувати рух та напрямок.
AttackingHobo

@AttackingHobo Я спеціально не думав про фосфорні патрони, а про візуальну ознаку того, що кулі летять. Ідея полягала у використанні селективного стиснення ... видалення рівня деталізації, який програвач ніколи не реєструватиме як "відсутній", але це полегшує навантаження на систему. Біт "кожної 3-ї кулі" є довільним ... вам доведеться експериментувати, щоб побачити, що добре працює. У своїй відповіді ви сказали "підроблені сліди", що також має багато сенсу.
Стівен

1

Не забувайте, що частота кадрів у порівнянні зі швидкістю кулі може бути проблемою. У деяких випадках, якщо ви недостатньо добре зашифрували свій фізичний двигун, куля може просто пройти через об'єкт, не зачепивши його. У цьому питанні є рішення, яке я не дуже добре пам’ятаю ...

У будь-якому разі, я думаю, що може бути дуже проблематично компенсувати реалістичні кулі в багатокористувацькому середовищі, якщо не неможливо, якщо затримка починається довше 30 або 50 мс.

Одного разу, однак, провайдер може трохи піклуватися про затримку та надавати різні пропозиції ... але без FTTH це все-таки мрія ...


1

У таких іграх, як погана компанія, battlefeild 3 та сталкер, я вважаю, що куля - це фактична особа, яку вистріляють як "ракета". Я думаю, що трасування променів необхідне лише в тому випадку, якщо куля миттєво потрапить у ціль. Коли суб'єкт власного почуття реалістичними кулями просто почне перевіряти, чи вдарив він когось.


0

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

Якщо ви хочете, щоб ефект рикошету, як Hobo заявив, просто зайдіть в будь-яку з ігор Halo. Якщо ви стріляєте в металеву стіну з ближчого положення, ви можете побачити кулі, які швидко відбиваються від металу. Снайпер в ньому залишає слід до місця, куди потрапляє.

Затримка відповіді закінчена, я можу піти пізніше, щоб виправити.


-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


3
Оманливо перераховувати ігри, які використовували ODE для цілей, що не мають нічого спільного з куль.
поштовх

4
Також оманливим є твердження, що сталкер використовує ODE для куль, коли насправді гра використовує свої власні тести на зіткнення, але використовує лише вирішувач ODE.
Атака
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.