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ę