Sztuczna inteligencja w grach. Jak działa i jakie stoją przed nią wyzwania?
O sztucznej inteligencji w grach, jej rozwoju i największych wyzwaniach opowiada Rafał Tyl, CEO/CTO QED Games.
Zacznijmy od podstaw – jak działa sztuczna inteligencja w grach?
Działanie sztucznej inteligencji w grach uzależnione jest od gatunku gry i od tego, jakie mamy wymagania względem zachowań naszych postaci niezależnych. Dla przykładu, w popularnych strzelankach, twórca gry ma jasną wizję i jasny scenariusz, jak powinno wyglądać całe doświadczenie od początku do końca. Przeważnie postaci niezależne są sterowane czymś bardzo prostym, tzn mają predefiniowane zachowania i w danym momencie zawsze zachowają się w podobny sposób. Co prawda określamy to mianem AI w grach, ale bardziej są to skrypty, aniżeli sztuczna inteligencja. Są natomiast gry, które wymagają bardzo zaawansowanej sztucznej inteligencji, na przykład gry taktyczne, w których postacie sterowane przez komputer mają tysiące możliwych akcji i niezliczoną liczbę możliwych sekwencji akcji do wykonania. Na przykład, w grze taktycznej z siatką prostokątną znajduje się wiele pól na planszy, możemy zatem wykonać ruch na każde z tych pól, a z każdego pola możemy wykonać akcję, a następnie kolejną. Do tego mamy kilka jednostek, którymi możemy poruszać w różnej kolejności – jak widać, złożoność problemów decyzyjnych rośnie bardzo szybko. Dlatego w takich grach potrzebne są techniki bardziej inteligentne, które są w stanie spojrzeć na całą pulę dostępnych zachowań i wybrać najbardziej stosowne w danym kontekście. Stosuje się tutaj najróżniejsze algorytmy, szczególnie pozwalające modelować proces decyzyjny krzywymi matematycznymi. Mamy także planery, czyli techniki automatycznie układające sekwencje w zależności od późniejszych konsekwencji. Gama technik używanych w grach jest bardzo szeroka, od tych super prostych, gdzie dosłownie krok po kroku jest powiedziane, co postać ma zrobić, po bardzo złożone.
Sztuczna inteligencja zrewolucjonizowała świat gier. Jakie były początki AI w grach?
Sztuczna inteligencja w grach to wszystkie algorytmy, które pomagają podejmować decyzje postaci niezależnych. Początki AI w grach sięgają lat 70-tych XX wieku, czyli od czasu pojawienia się pierwszych popularnych gier komputerowych. Początki oczywiście były bardzo skromne, jak chociażby gra Pong, w której jeden gracz miał jedną paletkę, a drugi drugą i było proste odbijanie piłeczek. Ale pomimo prostoty już tutaj był proces decyzyjny. Nasza paletka musiała spojrzeć na stan gry, zobaczyć gdzie jest piłeczka, jak szybko leci i w odpowiedzi na to odpowiednio się przesunąć. To były bardzo proste algorytmy podejmujące proste decyzje, ale już sklasyfikowane jako sztuczna inteligencja w grach, tylko o odpowiednio małej złożoności.
Przełomem sztucznej inteligencji w grach były lata 90-te, kiedy twórcy gier zaczęli używać sformalizowanych technik – np. maszyn stanów, czyli automatów skończonych. Są to diagramy, które mówią postaciom co w danej sekwencji mają robić. Dla przykładu – gdy zobaczysz przeciwnika będąc w stanie oczekiwania przechodzisz do pościgu, po dojściu do niego przechodzisz w stan walki. Kiedy przeciwnik oddali się, to możesz wrócić do stanu oczekiwania. Ponieważ pisanie tych wszystkich zachowań w monolitycznym kodzie jest trudne do zarządzania, deweloperzy zaczęli używać formalnych struktur – maszyn stanów. Z biegiem czasu im bardziej rosła złożoność zachowań postaci w grach pojawiła się potrzeba hierarchizacji.
I tutaj stan oczekiwania może składać się na przykład z rozglądania się i dodatkowo chodzenia po pokoju. Są to dwa niezależne moduły, które zawierają wewnętrzną logikę. Zatem mamy stan nadrzędny – zachowanie nadrzędne – oczekiwanie i w ramach stanu nadrzędnego możemy mieć też sub rutynę. Im bardziej rosła złożoność postaci, tym więcej poziomów zagnieżdżenia hierarchii stanów. Stało się to niezarządzalne i trudne w utrzymaniu, szczególnie wtedy, gdy coś nie działało dobrze. Śledzenie działań AI stało się bardzo trudne dla deweloperów. Zatem potrzeba hierarchizacji spowodowała kolejny przełom, który kompletnie zmienił powszechnie używane dotąd techniki. Tym przełomem było użycie drzew behawioralnych.
Drzewa behawioralne jest to uogólnienie hierarchicznej maszyny stanów poprzez organizowanie zachowań w drzewiasty sposób. To pokazało, że podejście do AI idzie w kierunku hierarchizacji. Zatem mamy zachowanie nadrzędne, które może składać się z iluś zachowań podrzędnych. W drzewach behawioralnych wprowadzone są dwa podstawowe pojęcia – sekwencja zachowań oraz selektor zachowań. Sekwencja wykonuje poszczególne zachowania po kolei i jeśli któreś się nie uda, zgłasza niepowodzenie. Natomiast selektor próbuje wykonywać zachowania do czasu, aż pierwsze z nich zakończy się sukcesem. Dzięki temu z dwóch podstawowych bloków możemy relatywnie skomplikowane hierarchiczne zachowania składać w postać drzewa. Drzewa behawioralne podbiły świat gier na początku lat dwutysięcznych. Od tego czasu pojawiały się rozmaite techniki bardziej zaawansowane umożliwiające sterowanie zachowaniami w bardziej złożonych sytuacjach. W przypadku drzew behawioralnych, jeśli wymyślimy sobie jakieś zachowanie naszej postaci w grze to musimy wszystko specyfikować – w jakiej sytuacji jakie konkretnie zachowanie powinno być wykonane oraz w jakiej kolejności powinny być rozpatrywane poszczególne gałęzie drzewa. Rolą dewelopera jest zatem utrzymywanie wielkiego drzewa zachowań. Jeśli cokolwiek zmieni się w grze, co wpływa na zachowanie AI, to trzeba wrócić do drzewa i pozmieniać parametry. W odpowiedzi na to pojawiły się nowsze techniki, jedną z nich jest sztuczna inteligencja oparta na użyteczności, która pozwala nam – zamiast organizować całe zachowanie postaci w hierarchiczną strukturę – na zdefiniowanie tylko puli zachowań. Na przykład, będąc w pokoju, w którym jest dwóch przeciwników, mam możliwość wykonania iluś zachowań. Mogę zaatakować jednego przeciwnika, mogę zaatakować drugiego przeciwnika, mogę uciec, mogę się schować. Zatem mogę stworzyć pulę zachowań, a następnie każdemu z zachowań przydzielam ocenę. Jest ona wyliczana w sposób zależny od różnych parametrów, na przykład od odległości. Następnie spośród tej puli wybieram zachowanie. Technika ta jest trochę świeższa od drzew behawioralnych, ale nie jest jeszcze szeroko stosowana. Do tego dochodzą jeszcze techniki inteligencji obliczeniowej, które są stosowane także w robotyce, na przykład automatyczne planowanie. Wymagają one zdecydowanie więcej zasobów, zatem stosuje się je tylko do specyficznych rodzajów gier, głównie są to gry taktyczne i strategiczne.
Kolejnym obszarem AI w grach jest poruszanie się i nawigowanie w przestrzeni – jeśli już podejmiemy decyzję, że powinniśmy podejść do przeciwnika, to jeszcze pozostaje kwestia w jaki sposób to zrobić? Czy mamy reprezentację poziomu – czy są schody, wąskie przejścia, również takie przez które postać nie może się przecisnąć, ponieważ ma swój określony rozmiar. Musimy zatem wyszukać ścieżkę do naszego celu, a kiedy już ją wyszukamy musimy nauczyć się jak za nią podążać. Pojawiają się przeszkody, inne postacie, które trzeba omijać, jak sobie radzić z ruchomymi celami – na przykład, gdy prowadzimy pościg za postacią, którą dodatkowo będziemy wyprzedzać. Mamy zatem całą gamę algorytmów związanych z poruszaniem się oraz nawigacją.
Algorytmy decyzyjne jest to jeden świat, a algorytmy nawigacyjne to drugi duży blok, który kryje się pod terminem „AI w grach”.
Jakie były największe wyzwania w produkcji?
Głównym wyzwaniem jest konieczność przewidywania wszystkich możliwych sytuacji, które mogą się zdarzyć i dla każdej tej sytuacji zdefiniowanie jakiejś odpowiedniej reakcji. I właśnie to od samego początku napędza użycie nowych technik. Na początku pisało się to w monolitycznym kodzie. Jeśli prędkość piłeczki jest taka i taka oraz w tym i tym kierunku – to porusz się do góry. Trzeba było specyfikować każde z tych zachowań bardzo jawnie, co stało się niezarządzalne przy bardziej złożonych zachowaniach. I dlatego zostały wprowadzone hierarchiczne techniki. To jest tak naprawdę głównym wyzwaniem, które mamy przy projektowaniu sztucznej inteligencji. Dla bardziej złożonych gier coraz trudniej jest z góry zaprojektować zachowania dla postaci. A gracze natychmiast to wychwytują. W grach, które mają strukturę otwartą, nieliniową, nie da się przewidzieć wszystkich możliwych sytuacji i wówczas sztuczna inteligencja zachowuje się w sposób nielogiczny. Dlatego wyzwaniem jest stworzenie narzędzi i technik obliczeniowych, dzięki którym twórcy gier będą mieli jak najmniej sytuacji nieobsługiwalnych i niepożądanych.
Ile czasu potrzeba na stworzenie gry?
Wszystko zależy od gatunku gry. Mała gra na urządzenia mobilne polegająca na klikaniu w kulki, które trzeba zbić powstaje w przeciągu kilku miesięcy. Natomiast gry na PC, większe, RPG, które mają tysiące stron dialogów i fabuły – powstają latami, trzy, cztery, a nawet pięć lat. Są także gry, które są robione i po kilkanaście lat i nigdy nie są wydane. Podam ciekawy przykład, jest gra, która nazywa się Star Citizen – nie została jeszcze wydana, ale cały czas pozyskuje finansowanie od inwestorów, jak i od konsumentów. Cały czas jest rozbudowywana, a trwa to już z dziesięć lat. Takie sytuacje nie są zbyt częste, ale zdarzają się.
Czy można prognozować, w jaki sposób będzie ewoluował rozwój AI w grach?
Wszystko zależy od gatunku gry. W grach liniowych, dla przykładu w strzelankach AI może pozostać w miejscu, natomiast w gatunkach bardziej otwartych widzę ruch w kierunku bardziej złożonych technik inteligencji obliczeniowej. Takim przykładem jest gra Gears Tactics, w której zostały użyte algorytmy planujące dla działań przeciwników. Spotkało się to z bardzo ciepłym przyjęciem przez konsumentów. Zachowanie nie jest już schematyczne i adaptuje się do zmian sytuacji. Gry strategiczne i taktyczne będą szły w kierunku technik inteligencji obliczeniowej, a jeśli mówimy o otwartych światach i potrzebie symulowania realistycznego i przekonywującego zachowania to sporą przyszłość ma UtilityAI. To jest technika wykorzystywana w serii gier The Sims, w której postaci mają swoje potrzeby i zależnie od osobowości te potrzeby mają różną ważność i determinują zachowanie w zależności od tego, która potrzeba jest bardziej istotna dla danej osoby. Ale pamiętajmy, że rozwój AI w branży gier jest bardzo wolny, jest to branża dość konserwatywna. Jeśli coś sprawdziło się w przeszłości, to co wprowadzać coś nowego? I jest to zrozumiałe. Kiedy studio zaczyna robić grę, to z perspektywą kilku lat produkcji. Sam proces tworzenia gry jest dość niestabilny i ryzykowny, ponieważ co chwilę zmieniane są założenia. Zatem dodawanie jeszcze ryzyka technologicznego, czyli zastosowania technik, które nie są jeszcze sprawdzone multiplikuje ryzyko. Dlatego staramy się dostarczyć narzędzia, które zaawansowane techniki opakowują w coś, co jest gotowe do użycia. Zatem minimalizujemy ryzyko, że zaczniemy eksperymentować z nową techniką i okaże się, że nie działa, albo co gorsze – jest w ogóle nieużywalna. Z czasem deweloperzy gier będą potrzebować więcej standardowych narzędzi, żeby nie budować wszystkiego samodzielnie od podstaw. Czyli z jednej strony branża będzie potrzebowała zaawansowanych technik inteligencji obliczeniowej, a z drugiej strony będzie potrzebowała standardowych narzędzi. To jest analogiczne do tego, co stało się z silnikami gier. Kiedyś praktycznie każde studio miało swój własny silnik, wszystko budowało się od podstaw – renderowanie, rysowanie. Obecnie mamy na rynku dwa popularne silniki Unity i Unreal Engine i są one używane na rynku przez lwią część deweloperów, a własne silniki budują i utrzymują tylko największe studia. Dzięki tym narzędziom deweloperzy mogą skupić się wyłącznie na tworzeniu gry. I to samo chcemy zrobić dla AI. Nie chcemy, aby deweloperzy budowali wszystko od podstaw i każdą technikę implementowali od zera, tylko chcemy im to dostarczać gotową paczkę algorytmów i narzędzi, które umożliwią im wzięcie opakowanego produktu i techniki oraz wypróbowanie u siebie w grze czy spełnia wymagania danego projektu.
Co wyróżnia QED Games spośród konkurencji, jakie macie rozwiązania i jaki dają efekt w grach?
Na rynku brakuje kompleksowych systemów umożliwiających tworzenie systemów sztucznej inteligencji. Są rozmaite narzędzia wspomagające ten proces, ale przeważnie skupiają się na jednej technice obliczeniowej i przeważnie są to drzewa behawioralne, czyli technika sprzed dwudziestu lat. Dla prostszych gier jest to wystarczające, ale nie ma takich systemów, które umożliwiałyby połączenie na przykład trzech różnych technik decyzyjnych do sterowania jedną postacią. Sposób, w jaki podejmujemy decyzje odnośnie tego, gdzie się poruszamy, a sposób, w jaki podejmujemy decyzje na temat wysokopoziomowych zachowań, na przykład czy powinniśmy w danej chwili walczyć, czy się ukrywać, są bardzo różnymi procesami decyzyjnymi i wypadałoby móc stosować różne algorytmy. W naszym produkcie, jako jedyni na rynku, dostarczamy możliwość bardzo łatwego łączenia przeróżnych technik decyzyjnych ze sobą i kombinowania ich w jedno złożone zachowanie. Dodatkowo również jako jedyni na rynku, dostarczamy dojrzałe implementacje trzech technik obliczeniowych, czyli gotowe do użycia zaawansowane algorytmy obliczeniowe. Zdecydowanie wyróżnia nas możliwość łączenia wielu technik oraz standaryzacja. Tworzymy narzędzie, które nie jest specyficzne dla jednej konkretnej gry, czy jednego konkretnego gatunku gier, tylko tworzymy rozwiązanie bardzo ogólne, umożliwiające wielu różnym twórcom – przy wielu różnych grach – prace nad sztuczną inteligencją. Co te technologie dają grom? Przede wszystkim umożliwiają stworzenie sztucznej inteligencji, która będzie przekonująca, która nie będzie razić gracza. Naszym celem w grach jest maksymalizacja rozrywki. Nie chcemy stworzyć bota, który będzie wygrywać z graczami, ponieważ nie da im to satysfakcji z gry. Chcemy stworzyć nie tyle silną sztuczną inteligencję, co sztuczną inteligencję, która będzie przekonywująca dla gracza, a dla twórcy będzie łatwa w modyfikacji. I to są nasze główne cele.
Jakie są współczesne trendy i jakie są największe wyzwania, trudności?
Zadaniem twórców sztucznej inteligencji w grach jest to, aby gracz mógł uwierzyć, że za zachowaniem postaci stoi logiczna myśl, że jest to inteligentna postać, a nie po prostu bot. Co więcej, dotyczy to nie tylko gier komputerowych, ale także środowisk symulacyjnych, które wymagają zaludnienia inteligentnymi postaciami. Są to tak zwane gry na poważnie, w których na przykład symulujemy atak terrorystyczny na lotnisko, działania wojenne, wirtualne spacery po parkach handlowych, które dopiero będą wybudowane. Tych możliwości implementacji jest naprawdę bardzo wiele. To przeniesienie rzeczywistego świata w nierealne ramy.
Branża jest dość konserwatywna, więc wciąż lwia część zdominowana jest przez drzewa behawioralne, czyli starsze techniki. Progres znajdziemy w grach taktycznych i strategicznych. Zależnie od gatunku wyróżniają się dwa trendy. Pierwszy z nich jest bardziej konserwatywny i bazuje na użyciu starych sprawdzonych technik, dających przewidywalne rezultaty. Drugim jest świat gier wymagających złożonych zachowań AI (np. gier strategicznych, turowych, skradanek, strzelanek taktycznych itp.), w którym deweloperzy starają się implementować zaawansowane techniki.
Zdecydowanie głównym wyzwaniem jest wydajność, czyli moc obliczeniowa. Gra to system czasu rzeczywistego, wyświetla się w minimum sześćdziesięciu klatkach na sekundę, daje trzynaście milisekund czasu obliczeniowego na jedną klatkę gry. Mamy bardzo mały budżet obliczeniowy do policzenia wszystkiego. To jest inżynierskie wyzwanie. Z punktu widzenia projektowania głównym wyzwaniem jest tworzenie narzędzi, które są zrozumiałe dla twórców. Kiedy definiujemy sobie zachowanie postaci w grze, to chcemy, aby projektant gry nie musiał myśleć o kodzie, albo o parametrach numerycznych, tylko chcemy, aby miał wygodny interfejs graficzny, w którym może konfigurować zachowania, a również, żeby mógł sobie obejrzeć w razie potrzeby co się dzieje niepożądanego. Drugim wyzwaniem jest wyjaśnianie zachowań. Bardzo duża część pracy programisty AI jest to nie tylko implementacja zachowań, ale i tworzenie narzędzi do implementacji zachowań. A trzecim jest sam proces projektowania i implementacji zachowań specyficznych dla danej gry. To jest bardzo istotne wyzwanie, ponieważ każda gra jest inna. Możemy wydzielić typy zachowań, które są wspólne i dla nich staramy się tworzyć narzędzia, które są ogólne i przenaszalne. W każdej grze znajdzie się element, który jest specyficzny, szczególny dla tej jednej konkretnej gry, coś, czym dana gra chce się wyróżnić. Dlatego nie jesteśmy w stanie stworzyć narzędzi, które w stu procentach byłyby ogólne.
Podsumowując wyzwania. To wydajność, narzędzia dla twórców oraz konieczność za każdym razem adaptacji do poszczególnych gier, ponieważ każda z nich jest inna.
Co trzeba jeszcze zmienić, poprawić?
Każda gra jest inna i tego nie zmienimy. Możemy tworzyć wystandaryzowane rozwiązania poszczególnych klas gier. Dla przykładu, jeśli mamy gry strategiczne to pomiędzy nimi istnieje tyle wspólnego gruntu, że możemy stworzyć narzędzia dedykowane dla poszczególnych gatunków gier. To, co można byłoby poprawić to przygotować gotowe zestawy zachowań. Np. AI do strzelanek i twórca gry mógłby wciągnąć do swojego projektu i potem już samodzielnie dostosowywać do swojej specyfiki gry. Zawsze można coś poprawić jeżeli chodzi o wydajność, przyspieszyć, zoptymalizować obliczenia. Ale jest to nieskończona ilość poprawek. Narzędzia są największym polem do poprawy. Kiedyś każdy pisał swój własny silnik i edytor, obecnie większość studiów robi swoje własne narzędzia do AI, co jest najzwyczajniej marnowaniem czasu. Skoro taka firma jak my, która się specjalizuje AI w grach, może zrobić narzędzia, które są reużywalne i mogą być użyte przez różne firmy, to po co robić to od podstaw?
Wywiad we współpracy z QED Games.