Home » AGH 2022/23 » Automatyczne generowanie kodu w pracy programisty gier. Czy stuczna inteligencja będzie nam projektować gry komputerowe?

Tagi

Wyróżnione posty

Zobacz też

Statystyki

  • 100
  • 616
  • 25 026
  • 7 315
  • 25

Automatyczne generowanie kodu w pracy programisty gier. Czy stuczna inteligencja będzie nam projektować gry komputerowe?

Spread the love

Automatyczne generowanie kodu jest jednym z najgorętszych tematów w dziedzinie informatyki i programowania. Zastosowanie sztucznej inteligencji (AI) do automatycznego projektowania gier jest fascynującym obszarem, który może całkowicie zmienić sposób, w jaki tworzymy gry. Jednak czy naprawdę jesteśmy gotowi, by oddać projektowanie gier w ręce maszyn?

Shoon game created by artificial intelligence | business

 

Proces projektowania gier

Produkcja gier nie odbywa się z dnia na dzień, często jest to nawet kilkuletni projekt. A wszystko zaczyna się od pomysłu – tak jak wiele innych rzeczy. Wiadomo można w ciągu kilku tygodni stworzyć nawet w porządku grę, ale jednak warto, aby wszystko było przemyślane. Od pomysłu powstaje jakiś projekt, a następnie praca nad czymś wstępnym. Dopiero po wstępnym zatwierdzeniu zaczyna się konkretna praca, czyli tworzenie muzyki, dźwięków, grafik, animacji itd. A na końcu i tak są nadal potrzebni testerzy, aby przejść całą grę lub rozegrać wiele meczów. Wszystko po to, żeby gra była dopracowana co do pixela – a tak poważnie to ktoś musi najpierw sprawdzić czy nie ma jakichś błędów, czy gra za bardzo nie ścina itd. Potem wjeżdża etap ewentualnych poprawek i gotowe.

AI a generowanie zawartości w grach

Wśród różnych dziedzin potrzebnych do stworzenia gier istnieją dwie, które aktualnie jesteśmy w stanie mocno wspomóc AI. Są nimi grafika i muzyka, które poprzez narzędzia typu polycam (generator tekstur), NVIDIA Canvas (grafiki koncepcyjne, tła menu), soundraw (muzyka, dźwięki), możemy w dużym stopniu zautomatyzować lub co najmniej wspomagać się nimi w procesie tworzenia. Dziedziną wartą uwagi jest natomiast animacja, tutaj mamy od dość dawna do czynienia wykorzystania AI wewnątrz gry – lip-sync (synchronizacja dźwięku z ruchem warg postaci). Nie wspomnianym jeszcze tematem jest tworzenie historii/dialogów/interakcji w grze. Tutaj możemy się posłużyć narzędziami typu Chat-GPT do stworzenia np. szkieletu historii gry ale niestety aby nasza gra posiadała pewną głębie wymaga interwencji człowieka.

I tu przechodzimy do głownego punktu – programowania. Tworzenie gier pod kątem programistycznym jest bardzo skomplikowanym procesem – od wyboru silnika w którym będziemy pracować do implementacji poszczególnych interakcji pomiędzy graczem a światem. Sam wybór silnika jest procesem bardzo skomplikowanym chodź z roku na rok jest on upraszczany poprzez firmy typu EpicGames czy Unity które tworzą swoje silniki na użytek publiczny starając się być na bieżąco ze zmianami w nowych kartach graficznych. Wiele zespołów jednak decyduje się na implementację swojego silnika ze względu na różne ograniczenia które są nakładane przez te ogólnie dostępne. Stąd zespół decydujący się na taką implementację gry musi również posiadać dużą wiedzę na temat tworzenia silników jak i obsługi niskopoziomowych API graficznym jak DirectX, OpenGL czy Vulkan. Jest to proces w którym niestety żadne AI nie jest w stanie sobie poradzić, narzędzia typu GitHub Copilot będą nam w stanie tutaj oczywiście pomóc jednakże z powodu braku danych treningowych (procent kodu obsługującego API graficzne na platformach typu GitHub jest bardzo znikomy) nie będą tego robić w sposób znacząco pomocny.
Załóżmy jednak, że korzystamy z bardzo zaawansowanego silnika do gier, który w dużym stopniu odpowiada naszym potrzebom. Nawet dobrze rozwinięty silnik z różnymi systemami do obsługi fizyki/audio itd. wymaga dalej dużo pracy aby połączyć całą mechanikę i systemy gry z faktycznymi elementami w świecie gry. Tutaj najczęściej praca programisty ogranicza się do tworzenia “szablonów” które potem zespół game designerów może wykorzystywać do “podłączania” elementów świata do kodu. W tym obszarze jesteśmy w dużym stopniu w stanie wykorzystywać asystentów kodowania jako iż ta “część” kodu gry jest bardzo modularna i przypomina strukturą kod pisany w innych branżach programowania.
Jednakże dużą część gier posiada potrzebę tworzenia tzw. efektów wizualnych, które są wykonywane na karcie graficznej, o ile silniki typu Unity czy Unreal posiadają narzędzia które pozwalają stworzyć takie efekty nie pisząc nawet linijki kodu to wciąż są to narzędzia wymagające bardzo dobrej znajomości matematyki. W przypadku braku tych narzędzi programiści są zmuszeni do pisania niskopoziomowo tych narzędzi wymuszając na nich jeszcze lepszą znajomość w dziedzinie matematyki. Tutaj asystenci kodowania kompletnie nie zdają testu – z powodu skomplikowania kodu pisanego do efektów wizualnych.Unity Visual Effect Graph Showcase - YouTube

Największym problemem dla automatycznych generatorów kodu w grach komputerowych jest fakt braku pewnego ustandaryzowania struktury kodu w grach. Wszystkie części gier komputerowych zaczynając od przechowywania danych do systemów UI w grach nie posiadają ogólnie używanych standardów. O ile np. programowanie aplikacji Webowych posiada pewne standardy takie jak bazy danych do przechowywania danych, REST API do komunikacji, HTTP jako protokół przesyłu danych to programowanie gier nie posiada jednego standardy na przechowywanie danych (niektóry gry zapisują stan binarnie, niektóre korzystają z mini baz danych), wykorzystywane protokoły internetowe są zależne o typu gry (czasami TCP czasami UDP) nie mówiąc o fakcie, że sam typ gry może determinować strukturę kodu.

Epidemia gier niskiej jakości

Obecne narzędzia pozwalają na tworzenie gier z minimalnym wkładem artystycznym, stąd jest możliwe, że wraz z poprawą i rozwojem tych narzędzi będziemy widzieć na rynku dużo nowych tytułów wykorzystujących w dużym stopniu pomoc AI. Jest to kierunek, który może spowodować zalew rynku przez średniej lub niskiej jakości gry. Konsekwencją tego może być zwiększenie kosztów marketingowy przy wydawaniu gier, nie wspominając nawet o problemach które będą miały studia produkujące niskobudżetowe gry o wysokiej jakości.
W historii tego rynku były już okresy w których takie sytuacje miały miejsce – eksplozja słabych gier na platformie Steam stworzonych z użyciem silnika Unity, czy też ogromna liczba gier mobilnych wydanych na Androida w momencie wyjścia na rynek tanich i relatywnie wydajnych smartfonów. W obydwu tych przypadkach zadaniem okiełznania tych problemów były obarczone firmy udzielające usług platform do gier czyli w tym przypadku Valve i Google. Działania te można skrócić do zaostrzenia polityki dodawania nowych gier na platformę, co na szczęście nie odbiło się negatywnie na rynku ale należy pamiętać, że w przypadku gier generowanych przez AI może być problemem bardziej skomplikowanym.

Postępujący proces automatyzacji

Na przestrzeni lat rynek gier komputerowych wraz z rozrostem starał się “ekstrahować” pewne elementy aby zmodularyzować proces produkcji gier. Powstawały firmy specjalizujące się w danych dziedzinach, udostępniające usługi pozwalające użytkownikom końcowym – producentom gier – jak najbardziej przyspieszyć ten proces w celu skupienia się na najważniejszym elemencie gry – interakcją gry z graczem. Większość z tych usług było platformami pozwalającymi na zamówienie muzyki, efektów dźwiękowych, repozytoria tekstur, modeli czy też usługi tworzenia modeli i tekstur. Oczywiście nie możemy zapomnieć o firmach, które zajmują się tylko i wyłącznie rozwijaniem silników do gier.
Usługi wspierane AI na pewno mogą być bardzo dobrym dodatkiem do obecnej palety, co więcej mogą pozwolić na rozwinięcie obecnych narzędzi o np. automatycznej korekcji obrazów/tekstur przez klienta bez potrzeby angażowania artysty.

W przypadku kodowania gier takie narzędzia AI mogłyby być dobrym pomocnikiem w procesie nauki oraz pewnego rodzaju asystentem przy problemach związanych z obsługą karty graficznej. Pomoc asystentów kodowania mogłyby pomagać w tworzeniu szkieletów różnych systemów do gier jak np. sterowanie graczem lub samochodem czy generowanie niektórych często wykorzystywane efektów wizualnych w grach.

Podsumowanie
Obecne narzędzia AI na moment obecny nie są na tyle rozwinięte aby były w stanie w pełni zautomatyzować proces produkcji gier komputerowych w tym w dużym stopniu automatyzacji pisania kodu gier. O ile jesteśmy w stanie wykorzystać obecnie dostępne narzędzia jako źródło inspiracji podczas procesu tworzenia gry to mówienie o pełnej automatyzacji czy asyście w dużym stopniu na razie nie ma mowy.
Aktualnie nawet duża cześć silników graficznych używanych w grach nie jest “w pełni” rozwinięta i nie pozwala na pełne wykorzystanie możliwości GPU nie mówiąc nawet o fakcie ogromnej dynamiki z jaką idzie ich rozwój (w ostatnich latach do kart graficznych doszło mniej więcej tyle funkcjonalności i możliwości co przez cały czas ich rozwoju przed). Możemy stąd wywnioskować, że wiedza/poziom AI potencjalnie pozwalającego nam przyspieszyć pracę nad kodem jest co najmniej opóźniona o parę lat względem poziomu game deweloperów.
Z pewnością można natomiast powiedzieć, że pomoc asystentów kodowania wraz z czasem będzie coraz lepsza co będzie pozwalało na szybszy proces produkcji gier.

Literatura


Leave a comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Najnowsze komentarze

  1. Ciekawe jest porównanie tradycyjnej terapii z nowymi rozwiązaniami opartymi na modelach językowych. Warto zauważyć, że mimo obiecujących wyników, istnieją ważne…