Штучний інтелект в іграх: коли краще робити його чесним, а коли дозволяти читерство

Привіт, мене звуть Олександр Піндик і разом із командою ми розробляємо штучний інтелект для World of Tanks, найпопулярнішої відеоігри в Україні (згідно з дослідженням NielsenIQ на замовлення Wargaming, дані за лютий 2021 року). В інтерв’ю я розповідав про нашу роботу загалом, а зараз пропоную поговорити про читерство та ШІ.


Розробка ігрового штучного інтелекту — комплексне завдання. Доводиться постійно балансувати між кількістю розрахунків та вмінням ботів грати. У такій ситуації часто є бажання «зрізати кути» та дати ботам можливість застосовувати чити. Але чи потрібно це робити? І якщо так, то у яких випадках це буде доречно? На прикладі World of Tanks я розповім про використання читів для ботів та про те, як робити чесний ШІ для мережних ігор.

Спочатку визначимо, хто такий читер? Це гравець, який діє не за правилами гри й тим самим отримує певну перевагу. І як наслідок — бан у мережевій грі 😊.

Оскільки в онлайн-іграх на кшталт World of Tanks або Battlefield 2042 боти працюють на сервері, то для останнього вони мало чим відрізняються від гравця. А якщо так, то в теорії ШІ теж може читерити. І чи робитиме він це, залежить тільки від розробників. Звичайно, крім випадків, коли ШІ побудований на нейронних мережах. Нейронна мережа завжди шукатиме оптимальний варіант, який може призвести до використання вразливостей системи, що й буде схожим на використання читів.


Для чого вчити ШІ читерству

Добре, ми бачимо, що читерити це погано, тоді навіщо взагалі давати ШІ таку можливість? Почнемо з того, що це може бути просто баг у коді, або easter egg від розробників 😊. Але іноді чити можуть бути суворою необхідністю.

Річ у тім, що серверний ШІ — це ресурсомістка задача, що вимагає великої кількості обчислень. І чесно реалізувати якесь вміння чи прорахувати найкращу дію може бути дуже складно та дорого. Тому іноді хочеться просто трохи зрізати кути, щоб заощадити час програмістів, дизайнерів та QA, а ще розвантажити сервер від зайвих обчислень. Не варто забувати про дедлайни: не завжди вдається зробити все, що хочеться, вчасно. Тож ми починаємо городити «милиці», будувати свої «суперкруті велосипеди» і, звичайно, юзати чити.

Як робити не варто

Перед тим, як ми розглянемо «припустимі чити», визначимо, які нечесності робити не потрібно. Хорошим прикладом будуть старі ігри чи навіть деякі сучасні, які дуже поспішали з релізом.

Згадайте перегони, коли ви надто відривалися від ботів, вони починали телепортуватися практично відразу «за багажник» гравця і за найменшої помилки обганяли його. Можна ще згадати Counter Strike 1.3 чи навіть «сучаснішу», 1.6. Там були боти, які на максимальній складності вбивали гравця в голову, хоча самі при цьому були засліплені світло-шумовою гранатою та стояли до нього спиною. А гравець вибігав із-за рогу. Буває й так, що у шутерах вороги просто знають, де гравець, що б той не робив для своєї скритності.

Деякі RTS не дуже чесно керували базою та армією. Наприклад, могли просто створювати стільки юнітів, скільки потрібно для нормального опору гравцю. При цьому така дрібниця, як видобуток ресурсів чи якісь правила на те, як швидко і скільки можна будувати юнітів, ШІ не особливо турбувала.

А деякі TBS чомусь починали нападати саме тоді, коли гравець провів важкий бій та йому потрібний був тиждень чи інший ігровий час на відновлення юнітів. І таких прикладів багато.

Тут головне не переборщити з читами, щоб для гравців це не ставало надто очевидним та було просто нецікаво грати проти такого ШІ. Який сенс відставати від супротивників у перегонах на пів кола, якщо вони все одно перед фінішем будуть поруч із тобою і не вибачать тобі навіть дрібної помилки?


Які чити підуть грі на користь

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

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

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


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

Добре, боти, яких потрібно об’їхати, різко вмикають «режим бога», в якому вони ухиляються від шкоди або зовсім її не отримують і стріляють дуже влучно. Хоча до цього не могли навіть поцілити гравця. Тим самим ми плавно «вмовляємо» гравця діяти за нашим сценарієм. Адже якщо він обійде цих ботів під керівництвом ШІ, то вони перетворяться на великих неповоротких сонних слонів, і гравець зможе їх швидко знищити. І тим самим зрозуміє корисну навичку.

При цьому нам навіть не потрібно змінювати «тип і характеристики» ботів, просто замінюємо їм значення ухилення, а при стрільбі вмикаємо автонаведення снаряда. Такий підхід можна застосовувати в онлайн PVE-іграх і сценаріях, але тут потрібно бути дуже обережним, адже гравець все ж розраховує на чесну гру.

Коли шахрайство точно шкодить

Однак є ситуації, коли шахраювати категорично не можна. А саме, коли ШІ використовується як противник та/або союзник у PVP-іграх та режимах. У таких випадках ми розраховуємо, що ШІ дорівнює гравцеві, а отже, нагороди та витрачені ресурси за бій, а також рейтинг, отриманий після бою, будуть чесними. І для гравця не буде різниці, був бій із ботами чи ні.


Будь-який факт застосування читів поставить під сумнів результати будь-яких боїв, де використовувалися боти, а це може зашкодити репутації самої компанії-розробника. Особливо, якщо за результатами рейтингів чи битв можна отримати якісь унікальні нагороди чи трофеї, які інакше можна отримати лише вклавши реальні гроші. Тому для таких ігор найкращим рішенням буде створення чесного штучного інтелекту. Попри те, що це досить складне завдання і такий ШІ буде значно вимогливішим до ресурсів сервера.

Що ж таке чесний штучний інтелект

Розглянемо поняття чесного ШІ на прикладі World of Tanks на PC та розберемося, з якими цікавими особливостями та складнощами ми зіткнулися під час його розробки. Як я говорив раніше, в онлайн-іграх ШІ для сервера насправді є ще одним гравцем. Отже, він і повинен діяти як гравець.

Він так само керує юнітами та/або технікою, так само підкоряється правилам гри й в ідеальному світі для гравця-людини він нічим не відрізняється від іншої людини. Хіба що трохи чемніше спілкується в чаті 😊. На шляху «олюднення» такого ШІ стоїть низка проблем та завдань, які необхідно розв’язати.

Перша проблема — боти не вміють аналізувати карту, вони не знають, де на ній укриття, як правильно їздити по ній та навіть як правильно натискати WASD для руху.

Друга — це отримання актуальної інформації про бойову обстановку. Потрібно точно знати, де вороги та в якому вони стані.

І третя проблема — це вміння користуватися навичками та механіками, наприклад, стріляниною або рухом так само, як це робить людина. Потрібно навчити ботів чесно цілитися, чесно визначати, де ворог, та як краще користуватися своїм обладнанням. Наприклад, коли варто використовувати ремкомплект, а коли можна почекати, поки воно саме полагодиться. Тому всю цю «аналітику», «таємні знання» та вміння потрібно підготувати для них. Для цього потрібно розробити кілька систем.

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

  • Navigation Mesh для руху по карті.
  • Covers system для пошуку укриття у бою.
  • Strategic zones для вибору, яка роль і в якій області зараз найкраще підходить для конкретного агента ШІ з такою технікою та обладнанням.
  • Visibility Grid для кращого розуміння, чи можу я добре прострілювати певну місцевість.

Ці та інші статичні шари даних прораховуються заздалегідь на карті та є «награним досвідом» ШІ. Потім на їхній основі будуються системи управління ботом.


Крім аналітики та статичних шарів даних ШІ потрібно якось отримувати інформацію про бойову обстановку. Для цього в іграх ботам часто додають такий компонент як Sensor. Його ідея проста: він збирає всю інформацію про союзників та ворогів. По суті, на кожного учасника бою він має своє досьє. ШІ знає склад учасників бою спочатку й у разі танків, де приблизно вони розташовані на старті.

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

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

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

І остання частина — це навички. Наприклад, їзда WASD або стрілянина. Бот не 100% потрапляє у ворога. Так, ШІ знає, де кожен тип танка має вразливі місця. Він намагається направити свою зброю на них, а також чекає відомості, щоб точність влучення була вищою. При цьому бот саме стріляє, умовно натискаючи кнопку стрільби, як і людина.

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

Аналогічно ШІ чесно підбирає собі техніку та обладнання для неї. У World of Tanks немає такого, що у бота нескінченна кількість снарядів або миттєвий вогнегасник без перезаряджання. ШІ користується технікою та обладнанням так само, як і людина, умовно натискаючи кнопку «використовувати». Єдиною відмінністю ШІ від людини є те, що боту після бою не потрібно витрачатися на ремонт танка та купувати снаряди. При цьому боти все одно не їздять 100% на дорожчих снарядах. Але, з іншого боку, бот не може похвалитися кількістю награних боїв та медалями.

Як взаємодіють елементи ШІ

Подивимося на прикладі, як взаємодіють всі три області. Візьмемо Covers system. Вона дозволяє боту оцінити, наскільки добре підходить он той камінь як укриття з огляду на те, що він великий та повільний, але дуже хоче на передову.

Коли укриття вибрано і є умовна точка, куди ми хочемо приїхати, щоб зайняти це укриття, включається Movement system. Ця система на основі Navigation Mesh та алгоритмів пошуку шляху дозволяє ШІ побудувати шлях з безлічі точок від своєї позиції в місце, куди б він хотів дістатися. Наприклад, до нашого укриття.

Далі Movement system «натискає» на WASD і сервер отримує цю інформацію від бота так само, як отримує її від клієнта гравця-людини й так само переміщає техніку або юніта по карті. І гравець бачить, що бот на танку Maus їде до каменю центром карти. І за такою логікою працюють решта статичних шарів даних.


Є ще один цікавий момент у World of Tanks та подібних іграх. Існує своєрідна сіра зона. Це командна гра. Річ у тім, що дуже сильною перевагою є командна гра та злагоджена взаємодія ботів у команді, коли вони діють як єдиний організм, який виконує поставлене завдання. Формально гравці-люди можуть грати злагоджено та послідовно навіть краще, ніж ШІ. Але у реальному житті це чомусь не так.

Це одна з причин, з якої ми зробили ботів у World of Tanks більше індивідуалістами, ніж командами гравцями. Вони, як і люди, можуть бачити, що робить команда та допомагати, а можуть і вести свою гру.

Створення чесного штучного інтелекту для гри — досить складне завдання. При цьому можливість налаштовувати складність ботів залишається, тільки замість використання читів потрібно використовувати можливості ботів. Правильно добирати техніку, обладнання та можливості аналітичного апарату ШІ. І це буде схожим на те, як змінюється складність реальних супротивників-гравців.

Підписуйтеся на Telegram-канал @gamedev_dou, щоб не пропустити найважливіші статті і новини.

👍ПодобаєтьсяСподобалось8
До обраногоВ обраному2
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Чому «чити», якщо cheat, а не chit?

Тому що правило дев’ятки забороняє писати літеру -і в запозичених загальних назвах після літери -ч

Прекрасний ші в грі F.E.A.R. :)

Геймплейно він там класний, без питань, але по суті являв собою дещо хитрий конвейер задач для груп ботів, які повинні були робити показуху для гравця

Підписатись на коментарі