1.Inżynierowie (informatycy) – projektują i implementują oprogramowanie związane z grą poszczególne moduły silnika (rendering, AI, fizyka, audio, etc.) praca na poziomie makro-systemowym (integeracja poszczególnych składowych silnika, etc.) programowanie gameplaya i skryptowanie W ramach projektu, zespołem inżynierów kieruje senior engineer 2.Projektanci gameplaya (interaktywnej części gry odpowiedzialnej za wrażenia i doświadczenia gracza ) scenariusz gry, sekwencja rozdziałów (poziomów), cele gry, dialogi projekty poziomów (levels) gry - rozmieszczenie geometrii statycznej - rozmieszczenie broni, apteczek, etc. - w którym miejscu i kiedy wyskoczy potwór…
3.Artyści – tworzą zawartość (content) gry szkice i obrazy na poziomie konceptualnym (concept artists) modelarze -foreground modelers tworzą modele pierwszoplanowe (postaci, pojazdy, …) -background modelers tworzą statyczną geometrię świata (tereny, budynki…) projektanci tekstur (texture artists) oświetleniowcy (lighting artists) animatorzy aktorzy motion capture muzycy i projektanci efektów dzwiękowych voice actors Zespołem artystów kieruje art director
4.Testerzy 5.Producenci – zależnie od studia: zarządzanie zasobami ludzkimi łącznik miedzy deweloperami, a działem businessowym studia czasem nie ma producentów, a czasem wszyscy są producentami 6. Inni techniczni administracja dział marketingu …
Podstawowy cel silnika: Wielokrotne wykorzystanie istniejącego kodu do tworzenia różnych gier Jednakże granica między silnikiem a samą grą jest często rozmyta Na ogół przyjmuje się, że pojęcie architektura sterowana danymi (data-driven architecture) wytycza granice między grą a jej silnikiem Recepta na wyodrębnienie silnika z gry: Usuń z gry zasoby (art assets), świat i reguły gry, a to, co zostanie, to będzie silnik
Rodzina quakeowa(Id software): - Doom - pierwszy silnik z prawdziwego zdarzenia - Quake III Arena - umożliwiał modding Technologia Quakea została wykorzystana m.in. w grach: - Sin - F.A.K.K. 2 - Medal of Honor : Allied Assault i Pacific Assault Unreal Engine 1- 3(Epic Games) Half Life Source Engine XNA (środowisko wspomagające programowanie gier) Unity Engine silniki open source: Ogre, Irrlicht, Troque, Crystal Space…
Dzisiejsze, komercyjne silniki gier są dużymi pakietami programowymi, w których można wyodrębnić dwie podstawowe składowe: 1.silnik właściwy (realtime game engine) 2.zbiór rozmaitych narzędzi wspomagających tworzenie gry (edytor świata, edytor cząstek, konwertery formatów danych, etc.)
Algorytmy i struktury danych - STL – używać, czy nie używać? Grafika -libgcm – niskopoziomowe API graficzne Sony dla RSX (PS3) -Edge – wysokopoziomowe, wydajne API graficzne firm Naughty Dog i Sony dla PS3 Fizyka -Open Dynamics Engine Animacja postaci -Granny -Havok Animation -Edge -Endorphin i Euphoria (Natural Motion Ltd.) AI - Kynapse
Obudowuje (wrapping) lub zastępuje wywołania funkcji systemowych, interfejsy różnych API, a nawet niektóre standardowe funkcje języka C.
Warstwa obejmuje m.in.: -zarządzanie pamięcią szybkie przydzielanie i zwalnianie pamięci, zapobieganie fragmentacji… -bibliotekę matematyczną operacje na wektorach i macierzach, kwaterniony, operacje geometryczne (wyznaczanie przecięć pomiędzy obiektami geometrycznymi, wyznaczanie brył ograniczających, etc.), rozwiązywanie układów równań, całkowanie numeryczne… -własne algorytmy i struktury danych (zamiast bibliotek zewnętrznych typu STL)
Podstawowe funkcje: udostępnia jednolity interfejs (lub grupę interfejsów) do ładowania i usuwania różnego rodzaju zasobów gry (assets oraz inne dane) zarządza umieszczaniem zasobów w pamięciach różnych rodzajów w czasie działania gry zapobiega wielokrotnym przydziałom pamięci dla tego samego zasobu
Zastosowanie: Pobieranie obiektów graficznych i jak najszybsze ich renderowanie (zwykle bez brania pod uwagę, które z nich są widoczne) (Graphics Device Interface) -wyliczanie urządzeń graficznych dostępnych w systemie (np. 2 lub więcej kart) i ich inicjalizacja odpowiednim ustawieniem parametrów bufora ramki (z-bufor, bufor koloru, bufor szablonu) -integracja renderera z pętlą komunikatów systemu operacyjnego dostarcza abstrakcję kamery (frustum – pole widzenia, płaszczyzny obcinania, etc.) oraz widoku (viewport) i tworzy między nimi połączenie obsługuje system materiałów i system oświetlenia zarządza stanami renderingu na podstawie materiałów i oświetlenia grupuje obiekty graficzne (np. względem materiałów) celem minimalizowania zmian stanów renderingu
Zastosowanie: Przeszukuje scenę celem wyznaczania obiektów graficznych, które są aktualnie widoczne (PVS), oraz określa wymagany poziom szczegółowości prezentowanych obiektów (LOD) selekcja obiektów względem bryły widzenia (frustum culling) grafy sceny i struktury podziału przestrzennego (BSP tree, quad- i octree, kd-tree, hierarchie brył ograniczających) portale selekcja obiektów względem zasłaniania (occlusion culling) poziom szczegółowości (LOD - level of detail)
systemy cząstek (dym, ogień, rozbryzgi wody,…) – często jako bezpośrednie wejście dla renderera kalkomanie (decals - dziury po pociskach, ślady stóp,…) – j.w. mapowanie oświetlenia i otoczenia efekty postprocesingu (patrz np. Ogre Compositor) -high dynamic range -antyaliasing -bloom -...
Zastosowanie: Umożliwia tworzenie (często 2-wymiarowych, implementowanych jako teksturowane prostokąty) nakładek na wizualizowaną scenę 3D HUD i GUI (wybór broni, konfigurowanie jednostek, wydawanie rozkazów,…) różnego rodzaju menu Dodatkowo: odtwarzanie nagranych wcześniej scenek-przerywników (FMV) in-game cinamatics (IGC) – stałe sekwencje wbudowane w rozgrywkę
konsola i inne narzędzia deweloperskie (dostarczane z grą lub nie) mierzenie czasu wykonania wybranych części kodu wyświetlanie statystyk podczas działania gry wyświetlanie na bieżąco jak dużo pamięci jest używanej przez silnik i jego poszczególne moduły nagrywanie zdarzeń gry w celu ponownego odtworzenia danej sekwencji …
Obecnie przy komercyjnym tworzeniu gier zwykle korzysta się z gotowych silników fizycznych: Havok PhysX
Obecnie w grach 3D najczęściej wykorzystywana jest animacja szkieletowa System animacji szkieletowej powiązany jest z: - rendererem za pośrednictwem modułu realizującego nakładanie skóry na szkielet (skinning) - fizyką za pośrednictwem podsystemu realizującego fizykę szmacianych lalek (rag dolls)
-obsługuje I/O różnych kontrolerów gracza (klawiatura i mysz, joypady, kierownice, maty, WiiMote…) -umożliwia stworzenie przez gracza własnego odwzorowania pomiędzy możliwymi akcjami kontrolera i akcjami gry -wykrywa sekwencje wciskanych klawiszy -…
-XACT – Microsoft (PC i Xbox 360) -SoundR!OT – Electronic Arts -Scream – Naughty Dog (PS3)
single-screen – kilka kontrolerów podłączonych do jednej maszyny, pojedyncza kamera (np. bijatyki) split-screen – j.w. ale z każdym z graczy skojarzona odrębna kamera networked – wiele maszyn połączonych w sieć i każda z nich jest hostem dla jednego gracza MMOG – tysiące graczy za pośrednictwem swoich maszyn, współdzielą jeden olbrzymi świat obsługiwany przez (zwykle) bardzo dużą liczbę serwerów Przekształcenie gry multiplayerowej do single-playerowej jest na ogół prostym zadaniem. Wiele silników traktuje tryb single jako przypadek szczególny trybu multi (np. Quake). Przekształcenie odwrotne (single -> multi) jest zwykle o wiele bardziej trudne, bowiem należy dostosować od multi wiele modułów silnika (renderer, warstwa I/O, system animowania,…). Dlatego, jeśli silnik ma wspierać multi, to należy go projektować pod tym kątem od samego początku.
high-level game flow - definiuje sekwencję, drzewo lub graf celów gracza; dostarcza również definicję sukcesu oraz kary za porażkę elementy statyczne świata na ogół podzielone są na kawałki (chunks, levels): -ze względu ograniczeń pamięciowych -w celu sprawowania kontroli nad przepływem gry w wirtualnym świecie -w celu ułatwienia procesu tworzenia gry Gracz w danej chwili widzi co najwyżej kilka (zwykle jeden) taki kawałek elementy dynamiczne są tym, co w największej mierze określa rozgrywkę Zastosowanie: Pośredniczy między kodem rozgrywki (w natywnym języku, w którym napisany jest silnik, lub w języku skryptowym - często w tym i w tym), a niższymi warstwami silnika