Silnik gry to zbiór komponentów oprogramowania , które wykonują geometrii i fizyki obliczeń wykorzystywanych w grach komputerowych . Zespół tworzy symulator w miękkich światach fantasy, odtwarzających charakterystykę w czasie rzeczywistym, w których odbywają się zestawy. Celem silnika gry jest umożliwienie zespołowi programistów skupienia się na zawartości i przebiegu gry, a nie na rozwiązywaniu problemów z komputerem.
Silnik 3D tworzy obrazy za pomocą obliczeń projekcyjnych , podczas gdy silnik 2D tworzy obraz gry, układając obrazy rastrowe . Silnik miksuje dźwięki i muzykę w całej grze. Możliwości skryptowe silników gry pozwalają na symulację zachowania postaci, których nie można grać, przy niewielkim lub zerowym programowaniu, a silnik fizyki jest używany do egzekwowania reguł fizyki, takich jak bezwładność lub grawitacja w porządku. aby uzyskać bardziej realistyczne ruchy.
Koncepcja silnika gry (we francuskim silniku gry ) pojawiła się w latach 90. XX wieku, nawiązując do oprogramowania używanego w strzelankach z perspektywy pierwszej osoby, takim jak Doom . Architecture of Doom było wyraźne rozróżnienie między elementami silnika gry oraz własnych zasobów cyfrowych Doom , takich jak grafika, dźwięki, muzyka, sceny i zasad postępowania, które odtwarzają atmosferę gry. Silnik elementy mogą być ponownie wykorzystane, z niewielkimi modyfikacje, w grach z inną bronią, innymi wrogami i innymi zasadami gry, co pozwoliło na szybsze wprowadzanie nowych gier na rynek.
We współczesnych grach wideo istnieją główne zestawy czasami zarządzane przez oddzielne silniki, każdy związany z określoną funkcją rozwoju: system (wejście / wyjście, interfejs użytkownika, pamięć itp.), Grafika, dźwięk, sieć (dla gier wieloosobowych) , fizyka i sztuczna inteligencja . Silnik gry to zestaw wyspecjalizowanych silników niezbędnych do stworzenia gry. Na przykład Valve Software sprzedaje silnik Source, który jest nazwą handlową silnika gry. Silnik Source jest „kluczowym rozwiązaniem programistycznym”. razem różne silniki (grafika, dźwięk itp.) niezbędne do stworzenia gry. Fizyka tego silnika gry jest zarządzana przez silnik Havok , wyspecjalizowany i opracowany przez firmę zewnętrzną, który sam jest używany w innych grach silniki.
Wybór studia tworzącego gry ogranicza się zatem na ogół do zakupu lub opracowania całości lub części silników niezbędnych do rozwoju tej gry, jednak należy zwrócić uwagę, że od kilku lat rola silników gier stale rośnie. rosnąć. Inwestycja związana z rozwojem silników gier stale rośnie i utrudnia lub wręcz uniemożliwia ich amortyzację przy pojedynczej produkcji.
Wśród silników gier najbardziej wykorzystywanych lub zauważonych w ostatnich latach, możemy zacytować (niewyczerpujący wykaz): the RenderWare , różne Unreal Engine , Unity , silnik Quake The engine Źródło The CryEngine The Moment Gra Silnik , RealityEngine , Novodex , Antiryad Gx itp.
Wśród silników gier opartych na wolnym oprogramowaniu możemy wymienić:
Nazwisko | Główny język | Biblioteka graficzna | Biblioteka audio | Uwagi |
---|---|---|---|---|
Silnik gry Blender | Pyton | OpenGL | OpenAL | zbudowany wokół Blendera |
Sześcian | ? | OpenGL | ? | wyspecjalizowany FPS |
Godot | GDScript, wariant Pythona | OpenGL i OpenGL ES ) | ? | Zorientowany na 2D i 3D |
MIŁOŚĆ | Lua | OpenGL | ? | Zorientowany na 2D z rozszerzeniami 3D. |
Luxe lub LuxeEngine | Haxe | WebGL | ? | |
Armoury lub Armoury Engine | Haxe | OpenGL , WebGL i Vulkan | ? | zbudowany wokół Blendera |
Niektóre firmy specjalizują się obecnie w opracowywaniu tak zwanego oprogramowania ramowego , czyli dostarczania funkcji, które można dostosowywać. Stosowanie takich produktów ma na celu uniknięcie „ ponownego wynalezienia kwadratowego koła ” i ponowne wykorzystanie już sprawdzonego pakietu oprogramowania, który zawiera kilka elementów niezbędnych do stworzenia gry. Wiele tego typu programów w dziedzinie gier wideo zapewnia możliwości rozwoju grafiki , dźwięk, fizyka i implementacja sztucznej inteligencji. Dwoma szeroko stosowanymi przedstawicielami są Gamebryo i RenderWare .
Niektóre frameworki zapewniają tylko jedną funkcję, na przykład syntezę drzew i roślin, tak jest w przypadku SpeedTree , ta specjalizacja pozwala generować bardziej przekonujące obrazy niż bardziej ogólne silniki.
Niektóre frameworki są dostarczane z całym kodem źródłowym , inne z dokumentacją interfejsu programistycznego, aby umożliwić ponowne wykorzystanie w innym oprogramowaniu.
Każdy silnik gry jest wyjątkowy. Jednak znaleziono pewne funkcje.
Ta część dotyczy odczytywania urządzeń zewnętrznych:
Odpowiada również za odczytywanie danych gry i zapisywanie stanu gry.
To ona będzie odpowiedzialna za kompresję / dekompresję danych gry (w szczególności za przyspieszenie ładowania). Będzie również odpowiedzialny za ich ewentualne szyfrowanie / deszyfrowanie.
Znajdziesz tam wszelkiego rodzaju funkcje matematyczne niezbędne do stworzenia gry, aw przypadku gry 3D znajdziesz bardziej szczegółowo:
Jako przykład można przytoczyć obliczenia bardzo często wykonywane w silniku gry: mnożenie macierzy, odwracanie macierzy, iloczyn skalarny lub wektorowy .
Moduł fizyki obliczy ruch obiektów, sposób ich interakcji ze sobą, sposób, w jaki ślizgają się po podłodze lub ścianach, sposób, w jaki odbijają się itp. To także on obliczy deformację miękkich przedmiotów, włosów, włosów, ubrań i innych zasłon. Możemy wyróżnić trzy główne kategorie symulacji:
Zarządzanie kolizjami to warstwa oprogramowania, która umożliwia wykrycie spotkania dwóch obiektów, a tym samym zdefiniowanie wynikającej z tego akcji. Obiekt jest wówczas geometryczną reprezentacją elementów gry (postaci, przeszkody, pocisków itp.). Moduł kolizji zazwyczaj składa się z zestawu funkcji matematycznych do obliczania przecięć przez pary prymitywów geometrycznych: kula przeciwko sferze, kula przeciwko pudełku, ramka przeciwko trójkątowi ... Każda z tych funkcji będzie obliczać zgodnie z możliwościami modułu , punkt przecięcia d ', normalna do punktu kontaktu, a także odległość penetracji dwóch obiektów.
Istnieją dwie główne kategorie kolizji:
W zależności od rodzaju gry stosowane jest jedno lub drugie podejście. Dzisiejsze silniki gier 3D zazwyczaj wykorzystują połączenie tych dwóch metod. Aby zoptymalizować obliczenia kolizji na złożonych kształtach, silniki gier mogą używać pojęcia objętości otaczającej i, bardziej ogólnie, hierarchii objętości otaczających. Szybkie, ale przybliżone obliczenia umożliwiają wówczas wyeliminowanie stanów bezkolizyjnych, w przeciwnym razie na obiekcie wykonywane są dokładne obliczenia. Hierarchia obejmujących woluminów dodaje tylko dodatkowe kroki, dzieląc obiekt na podzbiory zawarte w prostej formie. Aby zmniejszyć liczbę obliczeń par obiektów, silniki generalnie uciekają się do strukturyzowania przestrzeni na podzbiory bliskich obiektów.
W grach trójwymiarowych sceny i obiekty w grze (potwory, pojazdy, pociski) są zapisywane jako trójwymiarowe współrzędne wielokątów - często trójkątów. Każda seria wielokątów tworzy kontury różnych obiektów w świecie gry Silnik 3D przeprowadza obliczenia syntezy obrazu w celu uzyskania dwuwymiarowej projekcji świata gry, która zostanie przesłana na ekran.
W tak zwanym procesie renderowania wielokątnego (lub rasteryzacji ) silnik 3D oblicza rzut z danego punktu widzenia, zaczynając od wielokątów najbardziej oddalonych z tego punktu widzenia. Tekstura (kolor, wzory itp.) Powierzchni jest obrazem matrycowym zniekształconym w zależności od odległości i orientacji wielokąta z punktu widzenia przed nałożeniem na projekcję.
W tak zwanym procesie wokselowym ( skurcz objętości i pikseli ) obiekty w grze są rejestrowane w postaci szeregu kostek (wokseli), a do obliczenia rzutu wykorzystuje się proces renderowania wielokątnego .
We wspomnianej metodzie rzutowania promieni (lub ray tracingu ) silnik 3D dokonuje obliczenia koloru każdego piksela projekcji (będącego obrazem rastrowym ) poprzez obliczenie odwrotnej ścieżki światła dla każdego piksela obrazu, zgodnie z zasadami optyki geometrycznej, takimi jak przezroczystość , odbicie czy załamanie . Proces ten daje bardzo realistyczne obrazy, ale wymaga dużej mocy obliczeniowej, aw 2011 r. Nadal jest rzadko używany w grach wideo.
Obliczenia projekcyjne mogą być wykonywane przez procesor graficzny (w skrócie GPU ), podczas gdy procesor centralny jest używany do innych obliczeń, takich jak silnik dźwięku lub skrypty.
Silnik dźwięku łączy oprogramowanie odtwarzacza audio z oprogramowaniem miksującym i generatorem efektów dźwiękowych (echo, kompresja, uprzestrzennienie). Te trzy komponenty są ze sobą połączone.
Silnik dokonuje ciągłych obliczeń dźwięku syntetycznego i cyfrowego przetwarzania sygnału , na podstawie próbek ( sampli ) zdigitalizowanych partytur muzycznych (często w formacie MIDI ) i wavetable . Niektóre silniki dźwiękowe symulują pogłos , przesunięcie fazowe i zmianę barwy dźwięku emitowanego z odległego źródła, tworząc w ten sposób iluzje słuchowe .
Te języki skryptowe są często używane w grach wideo, aby ustawić zachowanie wrogów i maszyn i symulować ich inteligencję . Zastosowanie języka skryptowego pozwala projektantowi lub scenarzystom, którzy mają niewielką lub żadną wiedzę programistyczną, „konfigurować” zachowanie wrogów, a tym samym modyfikować rozgrywkę bez wzywania programisty. Historycznie rzecz biorąc, zapotrzebowanie na system skryptów pojawiło się w przypadku gier przygodowych, które wymagają dużej interakcji. Zaowocowało to narzędziem do tworzenia skryptów dla Maniac Mansion (SCUMM). Pierwotnie stworzony i jak sama nazwa wskazuje na grę Maniac Mansion (1987) i ponownie użyty w każdej nowej grze z minimalnymi modyfikacjami, został użyty ponownie dziesięć lat później w The Curse of Monkey Island (1997). Z kolei inne gatunki gier również stały się złożone, a ich silniki gier często zawierały system skryptów.
Przy tworzeniu Jedi Knight: Dark Forces II (1997) silnik gry został dostosowany do obsługi języka skryptowego. Robert Huebner, który brał udział w tym rozwoju, wyjaśnia, że istniał wcześniej binarny język INF, który był trudny do przyswojenia - do tego celu przeznaczona była kompletna broszura. Zaimplementowany język skryptowy COG jest kompilowany w locie podczas uruchamiania gry, a następnie wykonywany na maszynie wirtualnej ( automacie zasilanym bateryjnie) w celu zapewnienia niezawodności gry. samą grę, ale raczej wzrost kreatywności projektantów. Niektóre firmy opracowały własne języki skryptowe, jak opisano powyżej. Dotyczy to również id Software z językiem QuakeC lub Epic Games z językiem UnrealScript . Jednak integracja języka skryptowego stała się bardzo dostępna, a niektóre biblioteki oprogramowania zostały opracowane niezależnie, specjalnie w tym celu. Tak jest w przypadku biblioteki i języka Lua , który był używany w wielu grach z bardzo różnych gatunków .