Sterownik AI w grze wyścigowej

17

Jestem ciekawy, jak mogłem kontrolować samochody w grze wyścigowej.

Czy mój agent AI powinien kontrolować swój samochód za pomocą poleceń typu „przepustnica na 0,35, kierowanie na 0,5 w prawo, hamowanie na 0,0”? A może powinienem raczej wstępnie obliczyć zakręt, do którego przyczepia się samochód, a efekty wizualne, takie jak skręcanie przednich kół, mają tylko na celu zapewnienie spójnego wyglądu? Czy jest jakiś inny sposób?

dargemir
źródło
4
Strategia „trzymaj się idealnej krzywej” działa tylko tak długo, jak długo nie ma zakłóceń. W chwili, gdy agenci AI zaczną wchodzić w interakcje z innymi samochodami (unikając ich lub staranować), będą musieli improwizować.
Philipp
1
Tak, coś w rodzaju węzłów na torze ze sterowaniem typu boids.
MichaelHouse
1
Oto artykuł na temat sztucznej inteligencji w Rajdzie 2 Colina McRae
gre_gor,
@ gre_gor, to jest bardzo pomocny artykuł, dziękuję!
dargemir

Odpowiedzi:

16

Można powiedzieć, że na pewnym poziomie gra idzie wstępnie obliczoną ścieżką. Ponieważ tory gry wyścigowej są (zwykle) wstępnie obliczoną ścieżką.

Nawet jeśli mówimy o generowaniu losowych tras, gra musiała obliczyć bieżącą część ścieżek na moment, w którym samochód się tam dostanie.

To było łatwe. Coś jeszcze na ten temat?

Zarówno podążanie z góry obliczoną ścieżką, jak i systematyczne kontrolowanie samochodu mają zastosowanie w branży gier. Odpowiedź brzmi: użyć obu.

Po pierwsze, chcę wspomnieć, że „obliczanie krzywej” może oznaczać dwie rzeczy:

  • Tworzenie funkcji, które wyprowadzą pozycję na krzywej, mając jako parametr, jak daleko od niej chcesz zapytać.

  • Tworzenie ścieżki, rozumianej jako lista punktów (lub instrukcji i innych informacji kontrolnych) do naśladowania.

Te pierwsze mogą być przydatne do prognozowania lub niektórych symulacji fizycznych. Jednak gdy mówimy o kontrolowaniu obiektu, to drugie podejście jest zalecane.

Uwaga: w przypadku starszych gier (lata 80.) inne samochody, w których bardziej lubią poruszające się przeszkody. Byli tam, abyś ich unikał i przewyższył ich. Nie mówimy o nich.


  • Po wstępnie obliczonej ścieżce: Jest to przydatne w przypadku filmów lub scen powtarzalnych. Na przykład w GTA San Andreas misje pościgowe cel pościgowy i wszystkie samochody podążają z góry określoną ścieżką (zapewnia to, że cel pościgowy może ominąć ruch ※). Jednak gdy tylko je zakłócisz, wracają do kontroli AI, w tym przypadku AI będzie musiała znaleźć drogę, aby dostać się tam, gdzie powinna podążać swoją zwykłą ścieżką.

    ※: W rzeczywistości był wcześniej nagrany. Nagrywanie i odtwarzanie było jedną z nowych funkcji silnika gry GTA SA.

  • Kontrolowane przez AI:

    AI w najprostszej formie jest maszyną stanu. Sprawdza, w jakim jest stanie, i w zależności od tego wykonuje pewne działania. Będę odnosić się do tych kombinacji stanu i działania jako zachowań. Działania nie muszą odpowiadać gamepadowi gracza. Nie zachowuj się też.

    W przypadku prostej gry prawdopodobnie potrzebujesz tylko dwóch znaczących zachowań: 1) jeśli jest na torach, podążaj za nią, omijając inne samochody i przeszkody oraz 2) jeśli nie ma na torach, wróć na tory.

    Na tym etapie nie jest daleko od podążania ścieżką (ścieżkami). Ponieważ jednak tory nie są tak naprawdę linią, nie mówimy o podążaniu ścieżką, ale trzymaniu się jej blisko (unikając innych samochodów i przeszkód). Oznacza to, że AI musi rozwiązać „sterowanie, hamowanie i przyspieszanie”.

    W nowoczesnej grze samochód będzie również podlegał symulacji fizyki (w celu rozwiązania kolizji i zachowania realizmu). Z tego powodu każda iteracja pętli gry samochód będzie aktualizowany na podstawie jego prędkości i przyspieszenia, a także zastosowane zostanie „sterowanie, hamowanie i przyspieszanie” (zmiany prędkości), aby podążać za bieżącym zachowaniem.

    Chcę również wspomnieć, że nowoczesne gry mogą mieć bardziej złożone zachowania, na przykład AI może uderzyć w inny samochód lub zablokować im drogę. W rzeczywistości sztuczna inteligencja może nawet wybrać, które zastosować, w oparciu o jakąś formę uczenia maszynowego, ale dygresuję.

    Wreszcie, należy wziąć pod uwagę, że użyteczne może być także uproszczenie sterowania samochodami AI poza widokiem gracza. Zarówno dla wydajności, jak i dla Rubber Banding (który w tym przypadku utrzymuje samochody AI blisko gracza, aby wyścig był interesujący, można go uznać za oszustwo AI, gdy tak naprawdę nie można zostawić żadnego przeciwnika).


W przypadku animacji zwykle nie jest dobrym pomysłem samodzielna symulacja fizyki kół. Jeśli to zrobisz, może to zwiększyć realizm gry, ale będzie kosztować wydajność. Zwykle gra animuje koła w oparciu o zachowanie, zamiast wyrażać zachowanie w kategoriach ruchu kół i symulować konsekwencje.

Oczywiście może być konieczne dodatkowe rozważenie tego, czy koła są w kontakcie z podłożem. A może animujące zawieszenie.

Theraot
źródło
To po prostu cudowna odpowiedź, bardzo dziękuję.
dargemir
0

Zdecydowanie zalecam oddzielenie modelu fizyki / stanu samochodu od kontrolera samochodu i uczynienie z agenta AI i kontrolera odtwarzacza dwóch rodzajów kontrolerów wymiennych z poleceniami wysokiego poziomu, takimi jak te, które zasugerowałeś w swoim pytaniu.

Ma to wiele fajnych efektów:

  • Możesz wdrożyć i debugować model fizyki / stanu raz zarówno dla gracza, jak i AI
  • Wszelkie nowe funkcje modelu fizyki / stanu natychmiast dotyczą zarówno gracza, jak i sztucznej inteligencji
  • Samochody graczy i AI zachowują się konsekwentnie na torze, co zwiększa postrzeganą i faktyczną uczciwość (jeśli chcesz upośledzić zawodników, możesz to oczywiście zrobić, zmieniając parametry w samochodach)
  • Różne rodzaje wsparcia dla wielu graczy stają się znacznie łatwiejsze do opracowania.

Nawiasem mówiąc, jest to szczególny przypadek separacji MVC .

Russell Borogove
źródło
2
Podoba mi się ta odpowiedź, ale to ostatnie stwierdzenie jest po prostu absurdalne. Usuń go, a otrzymasz ode mnie punkt. Oddzielenie obaw ? - Na pewno. Ale MVC nie ma zastosowania w kontekście pełnej odpowiedzi.
Inżynier
1
Pomijając fakt, że aspekt View nie jest omawiany w pytaniu lub odpowiedzi, dlaczego uważasz, że absurdem jest umieszczenie go jako MVC?
Russell Borogove