Informatyka systemów autonomicznych Spis treści
Transkrypt
Informatyka systemów autonomicznych Spis treści
Sławomir Błyskal, 148354 Wrocław, 20 czerwca 2009 r. Termin zajęć: PT 9:15 Rok akademicki: 2008/2009 Prowadzący: dr inż. Marek Piasecki Informatyka systemów autonomicznych Autonomiczne sterowanie i fotorealistyczna wizualizacja postaci w programach wieloosobowych gier komputerowych Spis treści 1 Współczesne gry komputerowe 2 2 Autonomiczne sterowanie postaci 2.1 Algorytm stadny . . . . . . . . . . . . . . . . . . 2.2 Automaty stanów skończonych . . . . . . . . . . 2.3 Drzewa decyzyjne . . . . . . . . . . . . . . . . . . 2.4 Heurystyczne poszukiwanie drogi – algorytm A* 2.5 Logika rozmyta . . . . . . . . . . . . . . . . . . . 2.6 Sztuczne sieci neuronowe . . . . . . . . . . . . . . . . . . . . 2 2 3 3 4 4 5 3 Fotorealistyczna wizualizacja postaci 3.1 Ray tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Tekstury . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Animacja postaci i technika motion capture . . . . . . . . . . . . . . . . . . . . . 6 6 6 7 4 Podsumowanie 7 5 Literatura 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Współczesne gry komputerowe Rozwój technologii, a co za tym idzie wzrastająca wciąż moc obliczeniowa goszczących w naszych domach komputerów nieustannie przyczynie się do podnoszenia poprzeczki pod względem poziomu gier komputerowych realizowanych przez producentów z całego świata. Z „łezką w oku” wielu z nas wspomina czasy, kiedy gry - choć mieściły się na jednej dyskietce a ich paleta kolorów często nie przekraczała 256 barw - potrafiły „ukraść” człowiekowi niejeden dzień z jego życia. Dziś gry komputerowe wyglądają już zdecydowanie inaczej - liczba wyświetlanych kolorów liczona jest w milionach, rozdzielczość ekranu w tysiącach pikseli a zajmowana objętość - w gigabajtach. Aby wydawana w dzisiejszych czasach gra miała szansę na podbicie rynku, powinna swoich nabywców zachwycić grywalnością oraz oprawą audio-wizualną. Nieodłącznym elementem większości gier komputerowych są występujący w nich przeciwnicy - działający autonomicznie, sprawiający pozory posiadania inteligencji i potrafiący często dopasowywać swoje „umiejętności” do poziomu rozgrywki wybranej przez gracza. Pojawiło się tutaj ważne pojęcie - sztuczna inteligencja (z ang. artificial intelligence, w skrócie AI ). Oczywiście żadnemu programiście nie udało się jeszcze zasymulować w pełni inteligentnej postaci (zresztą stosowanie złożonych obliczeniowo algorytmów w grach jest wysoce niewskazane), dlatego w komputerowej rozrywce stosowany jest odpowiednio uproszczony model takich „inteligentnych” zachowań. Drugim ważnym elementem, który często pełni główną rolę w ocenie końcowej gier komputerowych - jest, co już zostało wspomniane, ich grafika. Istnieje obecnie tendencja dążenia do pełnego fotorealizmu gier, jednak na drodze wciąż stają tutaj ograniczenia sprzętowe, które wymuszają upraszczanie algorytmów generowania komputerowych postaci i scenerii w celu umożliwienia osiągnięcia odpowiedniej płynności animacji na sprzęcie, jaki posiada w swoim domu przeciętny gracz. Właśnie na tych dwóch kluczowych elementach gier komputerowych - autonomicznie (i inteligentnie) sterowanych postaciach oraz odpowiednio wysokim poziomie fotorealizmu ich wizualizacji - skupię się w dalszej części niniejszej pracy. 2 Autonomiczne sterowanie postaci Aby nadać grze komputerowej cechy świata rzeczywistego należy zadbać o odpowiedni algorytm, zgodnie z którym będą poruszały się po świecie gry inne niż gracz, sterowane przez komputer postacie. Z pomocą przychodzi nam tutaj wspomniana już sztuczna inteligencja. Poniżej omówione zostaną wybrane algorytmy, które stosuje się w tym celu w grach komputerowych. 2.1 Algorytm stadny Algorytm ten został po raz pierwszy przedstawiony przez Craiga Reynoldsa w 1987 roku. Reynolds określił trzy zasady, których połączenie miało umożliwić postaciom poruszanie się przypominające zachowanie ławicy ryb, roju pszczół lub stada ptaków. Do wspomnianych trzech zasad zaliczają się: 2 • rozdzielczość - sterowanie zapobiegające tworzeniu się tłumu w jednym miejscu realizowane w ten sposób, że agenci muszą zachować odpowiednią odległość od siebie, • wyrównywanie - sterowanie umożliwiające agentowi zmianę swojego kierunku czy prędkości poruszania, co ma na celu dostosowywanie tych parametrów do innych postaci przebywających w pobliżu, • spójność - sterowanie odpowiedzialne za zbieranie się agentów znajdujących się blisko siebie w lokalne grupy. Z czasem pojawiła się także czwarta zasada nazwana przez Reynoldsa unikaniem, która miała na celu zapobieganie zderzeniom agentów z przeszkodami. Cechą algorytmu stadnego jest fakt, że pomiędzy kolejnymi cyklami, w których uaktualniane są parametry agentów - nie są przechowywane żadne pomocnicze informacje. Tak więc każdy cykl jest jednostką w niezależną od cyklów wcześniejszych. Ma to oczywiście swoje wady i zalety. Do zalet niewątpliwie należy zaliczyć małe wymagania pamięciowe tego algorytmu i możliwość natychmiastowego reagowania na otoczenie. Natomiast do wad - zastosowanie tego algorytmu głównie w sytuacjach, gdy mamy do czynienia z dużą liczbą agentów znajdujących się na niewielkim obszarze. Efektem działania algorytmu jest bowiem stado poruszające się z taką dynamiką ruchu jak pojedyncze ciało, omijające wszelkie napotkane przeszkody i wrogie postacie. 2.2 Automaty stanów skończonych Automat skończony (ang. finite state machine) jest to pewien abstrakcyjny, matematyczny model systemu zawierający szereg zdefiniowanych stanów, w jakich system ten może się znaleźć, oraz określający reguły przejść między tymi stanami. Dana postać występująca w grze znajduje się w stanie wynikającym z reakcji w przeszłości na pojawiające się wydarzenia, lub w stanie początkowym, jeśli postać taka dopiero rozpoczęła swój cykl życia. Zmiana stanu w jakim przebywa automat (a tym samym nasza postać) odbywa się jako reakcja na aktualnie zachodzące wydarzenia. Z reguły z każdego stanu maszyny jest co najmniej kilka możliwych przejść do innych stanów, tak więc w każdej sytuacji agent może podjąć jedno lub kilka różnych działań. Algorytm ten jest często wykorzystywany w grach komputerowych. Obecnie technika ta służy nie tylko do sterowania postaciami gier, ale całym AI gry (przechowują stan gry, przetwarzają polecenia od gracza lub zarządzają stanem obiektu). Problem oczywiście pojawia się w przypadku bardzo złożonych gier, gdzie często wymagane jest zdefiniowane bardzo dużej liczby stanów i reguł przejść między nimi. 2.3 Drzewa decyzyjne Drzewa decyzyjne są popularną techniką sztucznej inteligencji, która znalazła swoje zastosowanie głównie w grach komputerowych typu warcaby, szachy czy go. Nic nie stoi jednak na przeszkodzie, aby elementy tej techniki można było wykorzystać także w grach wieloosobowych, w których występują postacie sterowane przez komputer. Zadaniem tego algorytmu może być rozwiązywanie problemów decyzyjnych jak i tworzenie planu działania. 3 Drzewo decyzyjne przedstawia się jako graf decyzji i ich możliwych konsekwencji. Węzły takiego grafu są stanami gry, a węzły do nich potomne - to położenia uzyskiwane po przeprowadzeniu jednego ruchu (podjęciu decyzji). Węzły decyzyjne i węzły konsekwencji występują na takim grafie naprzemiennie, a każda ze ścieżek kończy się węzłem końcowym. Agent który zamierza wykonać ruch analizuje drzewo decyzyjne tak daleko jak potrafi, lub uzna za konieczne. Możliwe do wykonania posunięcie analizowane są względem sytuacji aktualnej, i wybierane jest najlepsze z nich. Odmianą drzew decyzyjnych są diagramy decyzyjne. Od drzew decyzyjnych odróżnia je to, że do każdego węzła takiego diagramu można dojść więcej niż jedną drogą. Diagramy decyzyjne pozwalają zaoszczędzić pamięć w przypadku bardzo rozbudowanych drzew, w których określone poddrzewa powtarzają się w wielu miejscach. Powoduje to, że są użyteczne w dziedzinach bardziej sformalizowanych (np. w automatycznej analizie poprawności oprogramowania), jednak nie są stosowane w statystyce, gdzie na skutek losowych błędów w danych poddrzewa prawie nigdy nie są identyczne. 2.4 Heurystyczne poszukiwanie drogi – algorytm A* W większości wieloosobowych gier komputerowych występuje problem znajdowania optymalnej drogi dla postaci poruszającej się miedzy dwoma punktami na planszy. Na bazie techniki AI rozwiązującej to zagadnienie tworzone są pokrewne, bardzo złożone zachowania postaci w grach jak na przykład poruszanie się jednostek w formacjach czy też planowanie strategiczne. Najczęstszym rozwiązaniem tego zagadnienia jest użycie heurystycznego algorytmu A*, który działa na zasadzie szacowania najlepszego kierunku eksploracji. Algorytm ten dokonuje minimalizacji obszaru poszukiwań najlepszej trasy poprzez ukierunkowanie poszukiwań na cel. Algorytm oblicza koszt dotarcia postaci do pośredniego punktu na mapie, dodając do niego oszacowany koszt dotarcia od tego punktu pośredniego do punktu końcowego (celu). W rezultacie przemieszanie się gracza z punktu początkowego do punktu docelowego polega na poruszaniu się „małymi kroczkami”, przy czym w każdym z tych kroków pośrednich szacowany jest koszt dotarcia zadaną trasą z tego punktu do punktu docelowego, i oczywiście wybierana jest trasa (a dokładniej: następny krok wzdłuż tej trasy) najbardziej na dany moment optymalna. Algorytm zakańczany jest wraz z chwilą osiągnięcia przez postać punktu końcowego. Powstaje jednak tutaj niebezpieczeństwo osiągnięcia przez agenta tzw. minimum lokalnego, co oznaczałoby „utknięcie” poruszającego się agenta w obrębie pewnego obszaru. W przypadku wykrycia takiej sytuacji podczas działania algorytmu rozwiązaniem może być „cofnięcie się” o kilka kroków wstecz i poszukanie innej ścieżki, obarczonej możliwie niskimi kosztami dotarcia do celu. 2.5 Logika rozmyta Logika rozmyta jest ściśle powiązana z matematyczną teorią zbiorów rozmytych oraz teorią prawdopodobieństwa. Co prawda stosuje ona mniej zastosowań przy samym sterowaniu postaci w grach, jednak jest niezwykle przydatna w określaniu np. emocji postaci (np. miły, obojętny, niemiły, wrogi). Jak więc widać logika rozmyta polega na wprowadzeniu pomiędzy wartościami 0 (fałsz) i 1 (prawda) całego spektrum wartości pośrednich. Oprócz symulowania uczuć, 4 logika pośrednia znajduje swoje zastosowanie przy sterowaniu w grach elementów cechujących się nieograniczonymi zachowaniami, jak np. drżenie liści na wietrze czy poruszanie się po niebie chmur. 2.6 Sztuczne sieci neuronowe Pojęcie sztucznych sieci neuronowych powstało z chwilą podjęcia próby komputerowego zasymulowania czynności wykonywanych przez ludzki mózg. Dziś już wiemy, że sieci neuronowe są modelem bardzo niedokładnym, jednak mimo to wciąż znajdują one zastosowanie przy pisaniu aplikacji komputerowych, w tym także gier. Istnieją różne odmiany sieci neuronowych, wszystkie jednak jako podstawowy element budujący stosują tzw. neuron. Informacje podawane na wejście sieci są przez wspomniane neurony w odpowiedni sposób przetwarzane i zapamiętywane, dzięki czemu uzyskujemy efekt „uczenia się” nowych informacji przez sieć. Odpowiednio nauczona sieć jest następnie w stanie odtwarzać zapamiętane informacje. W grach komputerowych sieci neuronowe zostały po raz pierwszy wykorzystane (w produkcie komercyjnym) w grze Colin McRae Rally 2.0 produkcji firmy Codemasters Software. Sieci neuronowe użyte tam zostały do „uczenia się” kształtów tras (krzywizn łuków drogi, odległości od zakrętów, rodzajów nawierzchni czy też prędkości i rodzajów pojazdów) i na tej podstawie generowała zestaw danych wyjściowych dla samochodów sterowanych przez komputer, aby bez przeszkód samochód taki mógł pokonać całą trasę. Oczywiście sieci neuronowe mogą zostać także wykorzystane do sterowania postaciami przypominającymi człowieka - wtedy postać taka może uczyć się np. zachowań żywego gracza (czyli naszych) i w ten sposób nauczyć się unikania zagrożeń z naszej strony, lub też po prostu spróbować powielać stosowane przez nas schematy w celu zwiększenia własnych umiejętności. Zastosowanie sieci neuronowych poza grami komputerowymi jest bardzo szerokie. Do najpopularniejszych należą: • w programach do rozpoznawania pisma (OCR), • na lotniskach do sprawdzania, czy prześwietlony bagaż zawiera niebezpieczne ładunki, • do syntezy mowy. Jak więc widzimy autonomiczne sterowanie postaciami w wieloosobowych grach komputerowych może być wykonywane z użyciem wielu różnych algorytmów. Algorytmy te wciąż są rozwijane i udoskonalane, przez co nieustannie zbliżają się do generowania zachowań, które można by uznać za typowo ludzkie. 5 3 Fotorealistyczna wizualizacja postaci Przez fotorealistyczną wizualizację postaci będziemy rozumieli tutaj zarówno nadanie im odpowiednio rzeczywistego wyglądu zewnętrznego (tekstura, oświetlenie itp.) jak i odpowiednią ich animację. 3.1 Ray tracing Na początku warto wspomnieć o bardzo popularnej technice generowania fotorealistycznych obrazów jaką jest ray tracing. Metoda ta, choć nie pozbawiona wad (nie uwzględnia światła rozproszonego, uniemożliwia prawidłowe modelowane zjawisk dyfrakcji, interferencji i innych zjawisk falowych) daje bardzo dobre efekty. Niestety jest także bardzo kosztowna obliczeniowo, dlatego bardziej nadaje się do prerenderowania statycznych obrazów czy animacji komputerowych niż do dynamicznych gier komputerowych, w których grafika renderowana jest w czasie rzeczywistym. Ray tracing jest techniką „śledzenia promieni”, które trafiają do obserwatora danej sceny. Ray tracing musi zostać przeprowadzony dla wszystkich pikseli wyświetlanego obrazu, dlatego czas renderowania jednej klatki animacji jest silnie związany z rozdzielczością wyświetlanego obrazu. Ponadto na koszt obliczeń wpływa także stopień skomplikowania sceny (liczba świateł, liczba obiektów oraz ich charakterystyka). Skrótowo algorytm ray tracingu można przedstawić następująco: 1. Z punktu w którym znajduje się obserwator wyprowadzany jest promień pierwotny; promień przecina rzutnię. 2. Wyszukiwany jest najbliższy punkt przecięcia z obiektami znajdującymi się na scenie. 3. Następnie dla każdego źródła światła zdefiniowanego na scenie wyznaczana jest jasność w tym punkcie, zgodnie z określonym modelem oświetlenia (np. Lamberta czy Phonga). Najczęściej także określa się cienie - w tym celu jest testowana widoczność źródła światła z danego punktu, tj. czy światło nie jest przesłaniane przez jakiś obiekt i jeśli nie - dopiero wówczas wyliczana jest jasność punktu dla tego źródła. W grach ray tracing stosowany jest z dużym umiarem, a bardzo często - w ogóle. Sytuacja ta jednak może zmienić się wraz z postępującym rozwojem technologii sprzętu komputerowego (głownie kart graficznych) oraz obsługą tych technologii w nowych wersjach pakietów DirectX i OpenGL. 3.2 Tekstury Elementarnym sposobem upodabniania występujących w grach postaci (i generalnie wszystkich obiektów) do ich odpowiedników w świecie rzeczywistym jest nakładanie na przygotowane wcześniej modele odpowiednio fotorealistycznych tekstur. Tekstury te, najczęściej przechowywane w postaci tradycyjnych plików graficznych, są w trakcie procesu renderowania w ściśle określony sposób nakładane na odpowiadający im model. Tekstury dzielimy na dwie podstawowe grupy: 6 • bitmapowe - czyli najczęściej zdjęcia powierzchni rzeczywistych przedmiotów (ścian, tkanin, kory drzew itp.), • proceduralne - parametryzowane obrazy generowane programowo (szachownica, marmur, drewno, granit, chmury itp.). Proces nakładania tekstur na model nazywa się mapowaniem. W ten sposób można np. płaską teksturę nałożyć na kulisty obiekt. Tekstura może być także ruchoma względem obiektu, na który jest nakładana. Taka technika stosowana jest np. przy próbie symulowania metalicznych obiektów, które odbijają otoczenie. 3.3 Animacja postaci i technika motion capture Grafikom pracującym przy tworzeniu animacji komputerowej ludzkich postaci od zawsze problem nadania tym postaciom naturalnych, ludzkich ruchów spędzał sen z powiek. Z pomocą przyszła im technika zwana motion captute, która polega na przechwytywaniu ruchów aktora i przekładania ich na ruchy postaci komputerowej. Odbywa się to przy zastosowaniu kamer rejestrujących oraz czujników (markerów), które aktor posiada przyczepione na swoim ciele. Technikę motion capture stosuje się nie tylko do tworzenia animacji postaci jako całości, ale również do urzeczywistniania mimiki twarzy komputerowych postaci. Odwiecznym mankamentem w grach komputerowym było bowiem to, że przemawiające ludzkim głosem postacie robiły to bez otwierania ust. W późniejszych produkcjach usta te udało się grafikom i programistom „otworzyć”, ale ich ruchy wciąż nie były zsynchronizowane z głosem dobiegającym z głośników. W obecnych produkcjach komputerowych bohaterowie „brzuchomówcy” należą już do rzadkości, problemem pozostaje jednak dokładne dopasowanie kształtu ust do wymawianych przez postać słów. Problem dodatkowo jest potęgowany przez wydawanie gier w wielu wersjach językowych, przez co gra musiałaby posiadać osobne algorytmy generujące mimikę dla każdej z tych wersji. 4 Podsumowanie Dążenie producentów wieloosobowych gier komputerowych do możliwie wiernego odzwierciedlenia w grach świata rzeczywistego trwa właściwie od zawsze, i trudno spodziewać się, aby w najbliższym czasie został osiągnięty w tej kwestii zadowalający ich oraz graczy poziom. Czynnikami ograniczającymi w tej dziedzinie możliwości twórców gier są wciąż zbyt mało wydajne komputery oraz brak algorytmów, które w pełni wiernie odzwierciedlałyby rzeczywistość. Zarówno w kwestii sztucznej inteligencji postaci komputerowych (m.in. ich autonomicznego sterowania) jak i ich fotorealizmu informatyka wciąż posługuje się licznymi uproszczeniami. Są one niedoskonałe na tyle, że przenosząc się w świat gier komputerowych nie zapominamy, że jest to tylko wirtualna rzeczywistość, ale jednocześnie jesteśmy w nią zaangażowani na tyle, że jesteśmy w stanie choć na chwilę zapomnieć o rzeczywiście otaczającym nas świecie... 7 5 Literatura • Jakub Swacha, Sztuczna inteligencja w grach komputerowych http://klubinformatyka.pl/artykul.php?a=12&s=1 • Krzysztof Wardziński, Przegląd algorytmów sztucznej inteligencji stosowanych w grach http://www.hc.amu.edu.pl/numery/5/wardzinski.pdf • Wikipedia hasła: drzewa decyzyjne, sieci neuronowe, ray tracing, tekstura, motion capture 8