Обработка на движението на куршумите във видеоигрите

Оригиналът е на Tristan Jung

3
2379

FPS (first-person shooter) игрите, които знаем като шутъри от първо лице, станаха неизменна част от гейм индустрията още през 1992 година, когато се появи популярната Wolfenstein 3D. Оттогава този жанр значително еволюира: графиката непрекъснато се подобряваше, увеличаваха се бюджетите за създаването на подобни игри, разви се екосистемата на електронните спортове. Но какво можем да кажем за техния фундамент – механиката на стрелбата? Как са се развили нещата в това отношение? Защо в някои игри оръжието изглежда съвсем реално, а в други прилича на играчка?

Hitscan

В предишната епоха, много игри при рендирането на 3D и 2D сцените използваха техниката raycasting (изхвърляне на лъчи). Raycasting дава възможност на игровия енджин да изчисли и определи първия обект, с който се пресича лъчът. Но след това разработчиците си зададоха следния въпрос:

„А какво ще стане, ако от дулото на оръжието излъчим невидим лъч, с който да имитираме движението на куршума?“.

Благодарение на тази идея се ражда техниката hitscan – сканирането на попадението в мишената.

В повечето реализации на оръжие със hitscan, при изстрел на геймъра, игровият енджин извършва следните операции:

  • Определя направлението към където е насочено оръжието
  • Излъчва от дулото на оръжието невидима линия, която може да достига до точно определено разстояние
  • Използва се raycasting, за да се определи, дали лъчът е попаднал в обекта

Ако енджинът определи, че обектът се намира на огневата линия, то той ще съобщи този факт на този обект. След това целта може да започне да се променя и да регистрира и показва различните повреди.

Пример от Unity. Точката А обозначава оръжието, излъчващо лъч до максималната точка В. Лъчът се сблъсква куба, на който енджинът съобщава, че е уцелен.

 

Hitscan не е сложен и за добавяне на допълнителна логика могат да бъдат направени редица модификации:

  • Ако продължим лъча и след първия обект, който той е уцелил, то можем да пронижем няколко обекта, намиращи се на една линия, което ни е познато от релсовото оръдие railgun в Quake
  • Ако премахнем максималната възможна далечина на лъча, то ще получим лазер, светлината на който ще лети вечно, докато не уцели нещо
  • Можем по софтуерен път на направим някои повърхности отразяващи, за да може куршумите да отскачат от тях и да има рикошети

Overwatch: Пример за отразяваща повърхност

 

Основното преимущество на raycasting е неговата огромна скорост на обработка. Неговата реализация не изисква сложни изчисления и не изисква допълнителна памет или процесорно време за създаването на нов обект, какъвто очевидно е куршумът. А това означава, че мрежовият код, необходим за синхронизацията голям брой мрежови играчи, ще бъде минимален, понеже сървърът трябва да следи само посоката на този лъч. Откатът на оръжието също е лесен за реализиране – за имитирането на този ефект е достатъчно да се добави неголямо отклонение в прицела на оръжието.

Ето защо, не е за учудване, че в много игри се използва технологията hitscan. Класически примери са Wolfenstein 3D и Doom, но тази технология се използва и в съвременните игри. Персонажите от Overwatch използват оръжие с hitscan, а и повечето оръжия в Call of Duty също се базират на hitscan.

По-горе са показани Overwatch, Call of Duty, Wolfenstein 3D

Само че защо този подход не се използва във всички игри?

Първо, навярно сте забелязали, че тези лъчи имат безкрайно висока скорост – тоест, моментално попадат в крайната точка. Между изстрелването на куршума и неговото попадение в целта липсва времето на движение на този куршум. А това означава, че ако лъчът е попаднал в обекта, той няма как да избегне куршума, дори и ако целта се намира на няколко километра от стрелящия.

Halo: изтрелът от цевта и попадението стават едновременно

 

Второ, при повечето реализации на hitscan се използват прави лъчи. А това означава,ч е няма как да бъдат отчетени влиянието на вятъра, гравитацията и редица други външни фактори, които оказват влияние на куршума след неговото излитане от дулото. Програмистите прибягват до най-различни хитрини, за да имитират истински куршуми, но при този подход е ясно, че ако геймърът „изстреля“ този лъч, то няма никаква възможност за промени по време на неговия полет.

В редица по-опростени игри все пак се използва именно hitscan, понеже този тип изстрели в игрите са по-лесни за начинаещите. Но какво да кажем за игрите, които се опитват да пресъздадат реалните усещания от стрелбата? Ясно е, че hitscan има твърде много ограничения в това отношение и няма как да се постигне реализъм. Налага се да се използва нещо друго.

 

Балистиката на летящото тяло

Този термин изглежда сложен, но на абстрактно ниво идеята не е чак толкова сложна. Всеки изстрелян от оръжието куршум или снаряд създава в сцената нов обект. Той има собствена маса, скорост и собствен паралелепипед за осъществяване на контакт (hitbox), които се изчисляват и следят от игровия енджин.

Max Payne 3

Преимуществата на балистиката с пълна сила се проявяват в игрите, в които реализмът е с най-висок приоритет. Тъй като летящият обект съществува сам по себе си, става възможно да се отчете влиянието на вятъра, триенето, гравитацията, температурата – всяка една сила, която въздейства на куршума. А щом в новите гейм енджини можем да променяме физиката, то на играчите могат да бъдат предложени много по-разнообразни оръжия, а не само простички пистолети и лазери. Става възможно да се добавят ракети, гранати и още много други.

Понеже куршумите в подобна система не се движат със скоростта на светлината, става възможно реализирането на следните свойства:

  • Bullet-time, което се използва в Max Payne, Sniper Elite и Superhot
  • Вече има време на полет на куршума и при стрелба на далечни разстояния критично важно става предварението на изстрела. Играчът трябва да съобрази къде ще се намира подвижната цел след известно време, за да може да изстреля куршума малко по-рано
  • Става възможно да се зададе закъснение при взривяването на снаряди, мини и други подобни

Поради необходимостта да се извършват допълнителни изчисления, обработката на обектите изисква по-голяма изчислителна мощ в сравнение с hitscan. За да се осигури правилната синхронизация между сървърите е необходимо да не се допускат конфликти в логиката на играта на клиентския компютър. Необходимо е и за всички играчи в рамките на един сървър да бъдат създадени еднакви условия.

Superhot, Battlefield 1, Overwatch

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

Ако погледнем от по-високо ниво, особено важно е да се реши кога да се използва вътрешното тактуване на играта. Подобно на ядрото на операционните системи, енджините на игрите имат собствена тактова честота за случващите се в играта събития.

Най-често тактуването на играта се извършва отделно от рендирането на кадрите и между тях няма нищо общо. По този начин се получава съвсем точно изобразяване на физиката и движението на обектите, дори и ако непрекъснато бъдат изпускани кадри. Естествено, логиката на този подход е доста сложна и съответно софтуерът изисква по-мощен хардуер.

Ако си представим, че тактуването на играта се изчислява при всеки кадър, то при мощните компютърни системи, които могат да осигурят висока честота на смяна на изображенията, самата физика на играта би се ускорила. И обратното, ако машината е слаба и изпуска кадри, то и физиката на виртуалния свят би се забавила. Разбира се, това не бива да се допуска, но в някои игри е точно така. Това се забелязва, когато между два такта снарядът например, измине огромно разстояние, без да можем да видим неговата балистика.

Всичко това изглежда сложно и много хора си мислят, че това е някакъв нов метод, но всъщност той е възникнал дори и преди hitscan! Още преди да се появи FPS жанрът, имаше редица шутъри с поглед отгоре, като например steroids, Space Invaders и Galaxian. Това са аркадни игри от 70-те години, в които е реализирана балистиката на снарядите, но доста примитивно.

Asteroids

Но дори и с всички тези функции за изобразяване на куршума като обект в играта, пак не пресъздават реалистичен модел на истинския свят. А дали не могат да се използват преимуществата на двата метода?

Хибридните системи

Повечето съвременни игрови енджини могат да обработват и двата начина за симулация полета на куршума – както hitscan, така и балистиката. Това дава възможност да се реализират огромен брой най-различни оръжия. А в игри като Halo, GTA и Half-Life има оръжия, които поддържат и двата типа физика.

Halo: В Assault Rifle се използва hitscan, а в Needler балистика

Разработчиците често смесват и двата подхода, за да скрият слабите места на тези методи и по този начин да получат по-висок реализъм. Така например, за реализиране сблъскването на снаряди и/или куршуми, всеки куршум във всеки такт на енджина излъчва лъч. По този начин енджинът може да види, дали е има пресичане на лъчите, което означава сблъскване на два куршума, и дали ще трябва да се изчисли нова траектория на тяхното движение със своя нова балистика.

Двата метода могат да бъдат обединени и по друг начин. Добър пример е играта Sniper Elite, при която при поглед през оптичния прицел и натискане на спусъка се използва hitscan, за да се определи, дали попадението от изстрела е достатъчно близо до целта, за да може да се включи slow motion. Ако това е така, траекторията на куршума се изчислява с помощта на балистика в режим Bullet-time.

 


Това бяха основните начини за обработка на движението на куршумите в игрите. Интересно е, че подобренията в тази област в основни линии са някои неголеми оптимизации и подобрения, а не мащабно преработване на енджините. След излизането на няколкото първи революционни 3D игри, няма пробиви в това отношение и не са направени някакви по-значителни стъпки за усъвършенстването на тези механизми.

Много хора се питата какво последва по-нататък. Как ще се развива тази област в бъдещето и дали вече не се подготвя някоя съвсем нова революционна игра, която да предложи невиждан досега геймплей.

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

3
ДОБАВИ КОМЕНТАР

avatar
2 Коментари
1 Отговори на коментарите
0 Последователи
 
Коментарът с най-много реакции
Най-горещият коментар
  Абонирай се  
нови стари оценка
Извести ме за
Мартин
Мартин

Най зле са CS:GO и Apex там разработчиците на игрите потвърждават за проблема при неотчитането на попаденията като разминаване на гледната точка на единият играч и позиционирането му според сървърът ( често се разминават )

CrazyTrain
CrazyTrain

Доста общо написано. Писал съм и съм създавал оръжия базирани на почти всички видове ‘трасиране’ както и оръжия ползващи хибридно трасиране – при малки растояния се ползва HitTrace, а при големи се извиква Spawn и се пуска истински проектил с истинска физика балистичен коефициентн т.н. Отделно от страната на клиентите се и пуска визуален трасер който се движи със собствена скорост има си собствен Меш, можеиже да излъчва светлина (чрез Emitter примерно) и си има компресиран вектор на собственото си направление. Трябва човек да почете доста, за видовен Authority, Репликация и т.н. и да понапише няколко мода за да влезе… Виж още »

оффффф
оффффф

осрахте хубавият сайт с рвклами