Sztuczna inteligencja w grach – o rozwoju i największych wyzwaniach. Wywiad z Rafałem Tylem
Można powiedzieć, ze w ostatnich miesiącach temat AI zawładnął branżą IT. Podobnie wygląda to również w środowsku gamedevu który, choć z AI ma wiele wspólnego już od dawna, również ma do czynienia z niezwykle intensywnym rozwojem sztucznej inteligencji oraz wynikającymi z tego faktu sporymi zmianami. Postanowiliśmy nieco rozjaśnić te kwestie w rozmowie z Rafałem Tylem, CEO/CTO QED Games.
Spis treści
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, a 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 się 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, jakim 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 się zdarzają.
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 przekonują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.