Wpis z mikrobloga

Zamiast odpowiadać w wątku, ośmielę się stworzyć nowy, bo w sumie się napracowałem i chciałbym, że postronny czytelnik tagu miał szanse zapoznać się z moją opinią na temat AI kierowców w grze. Lektura długa, podsumowanie i wnioski na samym końcu, zapraszam.

tl;dr: AI kierowców w grze istnieje, ale jest włączane okazjonalnie i jego zachowanie jest mocno ograniczone przez twarde nakazy projektantów gry

*

@deathcoder: o ile zgodzę się, że samochody w misjach to kartony na szynach to już zwykli kierowcy mają zakodowaną AI, nawet jeśli to bardzo prosta wersja.

Kierowcy samochodów poza poruszaniem się po linii potrafią:

- wykrywać przeszkody przed maską (gracz/inny pojazdy) i decydować czy wykonać manewr czy nie na tej podstawie
- wracać na pas ruchu spoza linii nawigacyjnej
- zawracać w obrębie pasa szacując czy uda im się to wykonać bez większej szkody
- trąbić i oczekiwać chwilę na ustąpienie gracza
- zmieniać płynnie linie nawigacyjne w obrębie danego pasa. to jest najważniejsze, o tym później.

Są to bardzo podstawowe zachowania ale powinny w zupełności wystarczyć w tej grze. 90% czasu auta poruszają się po prostu po danej linii nawigacyjnej w mniej lub bardziej realistyczny sposób. Wypychając samochód AI poza jego pas ruchu ten o tym wie i potrafi wrócić na swoją linię nawigacyjną. Potrafi nawet wykonać tak skomplikowany manewr jak zawracanie w miejscu wymagający szacowania przestrzeni potrzebnej do manewru przed i za pojazdem. To wszystko widać dokładnie na tym filmiku: https://streamable.com/mc5jgo

Najważniejszy detal widać na samym początku filmiku - widzisz ten duży brązowo/bordowy sedan próbujący ominąć mój samochód? Zwróć uwagę jak gwałtowanie skręca kołami i cofa ale zaraz się zatrzymuje, podjeżdża do przodu kawałek (więcej nie może bo blokuje go mój samochód), ale z tyłu ma więcej miejsca mimo to, gwałtownie się zatrzymuje. Wiesz dlaczego?

SAMOCHODOM AI NIE WOLNO POD ŻADNYM POZOROM PRZEKRACZAĆ/ZMIENIAĆ PASÓW RUCHU

To jest źródło większości problemów z kierowcami AI. Gracz stoi na środku drogi i nadjeżdża AI, trąbi ale nie omija, mimo iż sąsiedni pas ruchu jest wolny. Dlaczego? Bo mu nie wolno! Choćby się waliło i paliło, nie wolno mu przekroczyć sąsiedniego pasu. Czemu nałożono takie ograniczenie? Nie mam pojęcia. Potrzebujesz więcej dowodów? Proszę bardzo.

W najnowszym paczu przebudowano navmeshe dla szeroki jezdni - dostały dodatkowe linie nawigacyjne. Wcześniej szeroką jezdnią pojazdy poruszały się zawsze środkiem drogi, bo to była jedyna linia nawigacyjna. Brzmi rozsądnie, bo nie ważne czy pojazd to mały MaiMai czy potężny Kaukaz, takie ograniczenie gwarantuje nam, że pojazd może jechać z wyłączonym lidarem (czujnikiem określającym czy pojazd o coś zawadzi), który jest pewnie mocno zasobożerny - 10 aut wykrywających kolizję co sekundę potrzebuje na pewno znacznej mocy obliczeniowej. 10 aut poruszający się po linii nawigacyjnej jak po sznurku zużywa znacznie mniej zasobów. Oczywiście prowadzi to do sytuacji, że jesli linia nawigacyjna została poprowadzona zbyt blisko jakiś przeszkód to każdy większy samochód będzie zawadzał o tą przeszkodę, jak na słynnych filmikach na jutubie.

Spytasz, że przecież jak gracz wchodzi na ulicę to pojazdy się zatrzymują więc jakiś lidar musi działać i wykrywać przeszkodę w postaci gracza. Ano po trochę będziesz miał rację. Gracz aktywuje lidar nadjeżdżających pojazdów
wchodząc tylko bezpośrednio w środek ścieżki nawigacyjnej - każdy nadjeżdżający pojazd otrzyma stosowną instrukcję i aktywuje lidar, który wykryje obecność gracza i zatrzyma pojazd trąbiąc na gracza. Jeśli gracz zejdzie z drogi całkowicie, lidar się wyłącza, linia nawigacyjna aktywuje się i pojazd rusza. Ale co jeśli gracz odsunie się tylko trochę? Linia nawigacyjna wykryje to jako brak obecności gracza na ulicy, lidar w pojeździe się wyłączy a pojazd ruszy nie mając pojęcia, że jesteśmy nadal w zasięgu 'rażenia' i nas potrąci - wielu graczu na pewno tego doświadczyło.

Wracając do tematu przebudowy navmeshy. Nowy pacz wprowadził sporą zmianę - szerokie ulice otrzymały nowe linie nawigacyjne. Poza środkową, są jeszcze skrajne po bokach. Co ciekawe duże pojazdy mogą się poruszać się tylko po środkowej linii nawigacyjnej (żeby nie wadziły o pobocza korzystając ze zbyt skrajnej linii nawigacyjnej), ale mniejsze mogą korzystać z pozostałych. I korzystają. Co prawda bez ładu i składu w sposób losowy, ale korzystają. Oznacza to, że pojazdy potrafią płynnie zmieniać linie nawigacyjne, ale nadal mają nadrzędny nakaz - tylko w obrębie danego pasa ruchu.

Jakie to niesie konsekwencje dla gracza i świata gry?

Po pierwsze - wygląda to naturalniej. Samochody zajmują różne miejsca w całym spektrum szerokiej drogi zamiast ustawiać się idealnie w sznureczku jeden za drugim.

Po drugie - tworzy to więcej miejsca dla gracza chcącego wyprzedzać pojazdy. Jest to widoczne zwłaszcza na autostradzie, gdzie samochody porozstawiane w losowych odległościach od siebie znacznie ułatwiają dynamiczne wyprzedzanie jak w GTA i innych tego typu grach, wcześniej było to trudne, bo samochody stały równo obok siebie.

Po trzecie, najważniejsze - udowadnia to, że samochody posiadają AI i mogą reagować dynamicznie. To właśnie osiągnąłem wczorajszym filmiku, prawdziwym hicie na reddicie. Jeśli staniemy na jednym pasie nawigacyjnym, blokując go, samochód podejmie próbę ominięcia nas zmieniając pas nawigacyjny na drugi. Jako, że w obrębie pasa jezdni (którego przypominam nie wolno mu zmieniać) ma do dyspozycji maksymalnie trzy (bodajże) linie nawigacyjne może dokonać tego manewru. Warunkiem jest to, że musimy stanąć idealnie na dosyć wąskiej niewidzialnej linii nawigacyjnej, żeby aktywować lidar i samochód AI musi mieć miejsce do manewru. Miejsce do manewru jest liczone z zapasem. Dobrze widać to na tym filmiku:

https://streamable.com/ntfezk

samochód AI nie chcę mnie ominąć póki na przeciwnym pasie nie przejedzie inny samochód - lidar nie pozwala mu dokonać manewru, gdyż istnieje ryzyko zderzenia (w tym konkretnym przypadku nie istniało takie zagrożenie, ale widocznie lidar ma dosyć duży bufor bezpieczeństwa). Czemu samochód wcześniej nie podjął próby manewru? Nie wiem, może rozdzielenie lini nawigacyjnych następowało dopiero później? Ciężko mi stwierdzić. Na samym końcu filmiku widać wyraźnie, że dwa samochody zajmują oddzielne linie nawigacyjne w obrębie tego samego pasa ruchu - w tym wypadku są to dwie do wyboru. I nie, nie jest to powiązane z dalszym kierunkiem ruchu - po zakończeniu filmiku widziałem jak samochód mnie omijający mimo zajęcia skrajnie lewej strony pasa ruchu skręcił w prawo. Tak jak pisałem wcześniej - zmiany linii nawigacyjnych w obrębie pasa są losowe i nie związane z dalszym kierunkiem jazdy.

Jakie mam wnioski? AI kierowców w tej grze istnieje i wydaje się mieć zadowalający potencjał. Więc w czym problem? Ano w tym, że większość czasu jest ono wyłączone (co w sumie jest zrozumiałe, trzeba oszczędzać zasoby a włączanie każdemu pojazdowi lidaru, który ciągle skanuje otoczenia i oblicza zmienne jest marnotrawstwem) ale drugi poważniejszy zarzut - AI kierowców ma nałożone bardzo duże ograniczenia.

Pierwsze ograniczenie to już wcześniej wspomniany zakaz zmiany pasa ruchu. Nie wiem z czego to wynika - za dużo kolizji było, gdy pozwalano samochodom wjeżdżać na sąsiedni pas? Samochody z wyłączonym lidarem poruszające się ślepo po linii nawigacyjnej nie widziały tych wjeżdżających na ich pas ruchu w celu ominięcia przeszkody? Na pewno z jakiś ważnych powodów to wyłączono.

Drugie ograniczenie to zakaz taranowania. Jest to szczególnie widoczne i głupie podczas strzelanin i innych niebezpiecznych sytuacji. Pacz 1.2 wprowadził nowość - ostrzeliwany samochód AI zamiast zatrzymać się i ukucnąć przez kierowcę potrafi teraz uciec - kierowca daje gazu i ucieka od nas. Ale działa to tylko w sytuacji, gdy lidar nie widzi żadnej przeszkody. Jeśli ostrzeliwany samochód stoi w korku to jest po staremu - kierowca wysiada/kuca. Czemu nie zezwolić taranować wozów? Samochody potrafią robić dynamiczne manewry...

Trzecie ograniczenie to światła/przejścia dla pieszych. Temat jest złożony i dopiero badam, ale zauważyłem z jednej strony poprawe działania świateł na AI samochodów, ale z drugiej strony widziałem więcej awarii AI samochodów powiązanych z przejściami dla pieszych. Później to przeanalizuję.

*

Podsumowując ten dosyć długi wywód powtórzę: AI w grze jest obecne, ale na pewno wymaga dopracowania. Biorąc pod uwagę, że dokonano postępu w patchu 1.2 jestem raczej optymistycznie nastawiony. Może do końca roku zespół odpowiedzialny za AI ogarnie wszystkie problemy, level desigerzy dopracują navmeshe dla pojazdów i wszystko w końcu ze sobą zadziała.

W załączniku: inny filmik pokazujący działanie AI - moja obecność na linii nawigacyjnej zmusza nadjeżdżający pojazd do płynnej zmiany lini nawigacyjnej w obrębie pasa ruchu na środkową, jednocześnie zbliżając się włącza się lidar i upewnia się czy na pewno się zmieśći - pojazd zwlania, trąbi ale po chwili przyspiesza i jedzie dalej, lidar obiczył, że się zmieści.
#cyberpunk2077
pablo397 - Zamiast odpowiadać w wątku, ośmielę się stworzyć nowy, bo w sumie się napr...
  • 16
@pablo397: Wszystko co napisałeś dotyczy juz poprawianej gry, a ja rozwodziłem się na temat przyczyn fackupu związanego z jej wydaniem :) to troszkę dwie różne sprawy są. DE FACTO Twój wywód jest potwierdzeniem mojego. DOPIERO TERAZ wdrażają poprawki do wybitnie ubogiego systemu, który nazywasz lidarem (w grze to nie do końca jest to). Fakt teg, iż póki co zmiany są wybitnie subtelne i ostrożne dowodzi tylko że temat jest bardzo skomplikowany.
wdrażają poprawki do wybitnie ubogiego systemu,


@deathcoder:

Sądzę że raczej usuwają powoli robione na szybko łaty, które ograniczają dużo bardziej ambitne AI, którego twórcy nie zdążyli dopracować.

Pytanie jak daleko to docelowe AI jest od ukończenia. Czy jest jedynie mocno zabugowane i przez to te sztuczne ograniczenia, czy jest zupełnie niedokończone?
@tylkostrimi: Bardzo w to wątpię. Poruszanie się po liniach jest dosłownie podstawową funkcjonalnośćią, to jest baza do dalszej rozmowy stanowiąca tak naprawdę ułamek kodu, który jest konieczny do napisania. To co napisałeś sugerowałoby zatem, że napisali 20% kodu (podstawa) potem dopisali kolejne 40% co dałeo razewm 60% i stwierdzili, aaaa nie jednak się cofamy do 20%.

Systemy IT nie działają tak że wystarczy pewną funkcję wyłączyć i od razu wszystko działa.
Systemy IT nie działają tak że wystarczy pewną funkcję wyłączyć i od razu wszystko działa.


@deathcoder:

Rzecz w tym że właśnie nie działa :) dlatego sądzę że być może to właśnie powyłączali moduły na szybko, stąd, między innymi, taką masa błędów.

Oczywiście może być inaczej. Szkoda że ostatni wyciek kodu źródłowego nie był publiczny
@tylkostrimi: działa, dokładnie tak jak powinien. Tzn. jeśli samochód ma poruszać się po linii wyznaczonejk przez programstę niezależnie od przeszkód i to robi tzn. że kod działa poprawnie. Jeśli nie omija przeszkody to nie oznacza, że kod nie działa, oznacza to że nie ma zaimplementowanej / włączonej fucnkji omijania przeszkody.

Musisz umiejętnie rozróżnić sytuacje kiedy coś nie działa, a kiedy nie jest dość skomplikowane.

Ktoś zrobił włącznik światąła, a Ty mówisz,
@deathcoder:

Ja doskonale rozumiem o czym mówisz, ale odnoszę się do tego co pisał OP @pablo397 - w swojej analizie wykazał, że pewne zaimplementowane funkcje są "sztucznie" ograniczane.

Pytanie czy są ograniczane dlatego, że ich właściwa implementacja jest mocno zabugowana, czy przez to, że właściwej implementacji po prostu nie ma.
@tylkostrimi: najbardziej dla mnie miarodajny jest ten filmik właśnie i jego początek, bo najbardziej tam widać jak AI się gubi i szarpie (w przenośni i dosłownie :P) tym bordowym sedanem. Poza próbą wybrnięcie z sytuacji przez kierowcę sedana widać również jak na przeciwnym pasie zatrzymuje się ciężarówka - czeka aż sedan wyplącze się z manewru, dlaczego? Kto mu kazał się zatrzymać? Czy to sedan wysłał instrukcję do linii nawigacyjnej sąsiedniego pasa
pablo397 - @tylkostrimi: najbardziej dla mnie miarodajny jest ten filmik właśnie i je...