Transcript Wyklad_1
Wykład 1. Silnik gry – podstawowe wiadomości 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 „quake’owa”(Id software): - Doom - pierwszy silnik z prawdziwego zdarzenia - Quake III Arena - umożliwiał modding Technologia Quake’a 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. 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 • 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ę