Počítačové hry Herní engine
Obsah přednášky
I
Co je „Engineÿ
I
Hotové enginy
I
Jemný úvod do game designu
Literatura a odkazy
I http://gpwiki.org/index.php/Game Engines I http://en.wikipedia.org/wiki/Game engine I http://www.devmaster.net/engines/
I Dalmau. Core Techniques and Algorithms in Game Programming. 2003 I Zerbst, Duvel. 3D Game Engine Programming. 2004 I Harbour. Game Programming All in One (2nd Edition). 2004
”It is a mistake to think you can solve any major problems just with potatoes.” -Douglas Adams
Co je engine?
I I
Je jádro interaktivní aplikace Má za úkol odstínit programátora-uživatele od systémových záležitostí I
poskytuje základní metody I I I I
I
inicializace nahrání dat ... ukončení
Ulehčuje vývoj hry I
možnost znovuvyužití velkých kusů kódu I
I
v ideálním případě „pouzeÿ změna dat
přechod na jinou platformu
Co všechno engine nabízí?
I
Záleží na kvalitě enginu I I I I I I I I I I I I
grafika 2D, 3D fyzika a kolize zvuk vstupy/výstupy skriptování animace umělá inteligence síťové záležitosti správa paměti reprezentace světa (scene graph) správa souborů GUI
Aplikace v reálném čase
I
Hry jsou časově závislé aplikace
I
modul pro simulaci virtuálního světa prezentační modul vstupní modul
I
pro zjednodušení jen 2 - update světa a prezentace
I I
I
Každý z modulů je časově omezen I
I
co si s tím počít?
Všechny moduly běží současně I
jak to ale zařídit?
Pokus první – jednoduchá smyčka
I
Jednoduchá smyčka I I
I
Problém č.1 I
I
Update
zavedení systémového času
Problém č.2 I
I
závislost na výkonu systému
Řešení č.1 I
I
update, pak prezentace oba moduly mají stejnou váhu
zbytečné výpočty při častém updatu
Řešení č.2 I
něco jiného. . .
Prezentace
Pokus druhý – vícejádro
I
Paralelní smyčka I I
I
Problém č.1 I
I
rozdělení updatu na náročné výpočty a jednoduché interpolace
Prezentace
Update
Problém č.2 I
I
různá doba provádění
Řešení č.1 I
I
zvlášť update zvlášť prezentace
špatná obsluha na 1 vláknu
Řešení č.2 I
něco jiného. . .
Pokus třetí – oddělené moduly
I
Oddělení toku I I
prezentace probíhá vždy update jen pourčité době
while (! end ) { if (( GetTime () - lastTime ) >1000/ freq ) Update { Update () lastTime = GetTime () Prezentace } Presentation () }
Pokus čtvrtý – poslední detaily time0 = GetTime () while (! end ) { time1 = GetTime () frameTime = 0 while (( time1 - time0 ) > 1000/ freq ) { Update () time0 += 1000/ freq frameTime += 1000/ freq } Controls ( frameTime )
Update Vstupy Prezentace
perc en tW it hinF ra me = Min (1 , ( time1 - time0 ) / (1000/ freq )) Presentation ( per centWi thin Frame ) }
Herní logika
I I
Je zodpovědná za update světa Musí se starat o I I I I
statický svět hráče pasivní prvky aktivní prvky
Statický svět
I
Objekty, které jsou součástí světa, ale nemají definováno chování I
I
terén, zdi, . . .
U rozsáhlých světů nelze rozumně udržovat vše I I
výběr aktivní části světa (graf scény, dělení prostoru) dynamické nahrávání světa (správa paměti, souborový systém)
Hráč
I I
Musí uchovávat a updatovat stav hráče Vstup od uživatele I I
klávesnice, myš, joystick, . . . abstraktní kontroler I I
I
Otestování omezení I I
I
hra se nestará o čtení z konkrétních zařízení lze libovolně namapovat
geometrická omezení (detekce kolizí) logická omezení (skriptování)
Update stavu I I I
spuštění animace pro pohyb úprava pozice ...
Pasivní prvky
I
Objekty s nadefinovaným chováním, bez vlastní inteligence I
I
dveře, krabice, poletující ptáci. . .
Nutné udržovat konzistentní stav I I I
seřazení podle relevantnosti (graf scény, dělení prostoru) vyhodnocení modelu chování (dynamika, skriptování) update stavu
Aktivní prvky
I
Objekty s vlastní inteligencí I
I
nepřátelé (nebo spoluhráči)
Nutné udržovat konzistentní stav I I I I I
seřazení podle relevantnosti (graf scény, dělení prostoru) otestování stavu a vytyčení cílů (skriptování) otestování omezení (detekce kolizí) rozhodnutí (umělá inteligence) update stavu
Struktura herní logiky // static world Pre s e le c t Ac t i veZ o ne () // player update ReadControls () Com p u te R e st r i cti o ns () Upda tePlay erStat e () // passive objects S o r t A c c o r d i n g R e l e v an ce () E x e c u t e Co n s t r o l M e ch a n i s m () U p d a t e P a s s i v e O b j e c t s S t a t e () // active objects S o r t A c c o r d i n g R e l e v an ce () S e n s e I n t e r n a l S t a t e A n d G o a l s () Com p u te R e st r i cti o ns () MakeDecision () U p d a t e A ct i v e O b j e c ts S t a t e ()
Prezentace scény
I
Tvoří podstatnou část hry I
I
Musí zajistit prezentaci I I I
I
stará se o to, aby byl hráč vtažen do hry statického světa a jednoduchých pasivních objektů složitých pasivních objektů a aktivních objektů hráče
Prezentace může probíhat pomocí více kanálů I I I I
vizuální audio taktilní ...
Statický svět
I
Stará se o vykreslení statického světa a objektů s jednoduchou animací I
výběr relevantní části světa I I I
I I I
ořezávání odstranění odvrácených částí zakrytí
výběr vhodného rozlišení (LOD) příprava geometrie vykreslení
Aktivní objekty
I
Stará se o vykreslení objektů s komplexní animací I I
I
objekty postavy (NPC)
Musí zajistit I I I I I I
výběr relevantních objektů výběr vhodného rozlišení animování výběr vhodného rozlišení příprava geometrie vykreslení
Hráč
I
Speciální případ NPC I
I
většinou není nutné testovat zda je či není viditelný
Malé zjednodušení I I I I I
výběr vhodného rozlišení animování výběr vhodného rozlišení příprava geometrie vykreslení
Struktura prezentace
// static world Sel e c tV i s ib l e Sub s et () SelectResolution () PackGeometry () RenderWorld () // active objects Sel e c tV i s ib l e Sub s et () Animate () PackGeometry () RenderNPC () // player Animate () PackGeometry () RenderPlayer ()
Záludnosti síťové hry
I
Předchozí model se musí upravit I
I
Při updatu hráče je I
I
pro jiného hráče jste NPC odeslání změn na server
Při updatu aktivních objektů I I
zavedení speciální třídy UI síťové zprávy mapuje na objekty
Hotové enginy
I
Vyrábění vlastního enginu od základu je příliš nákladné I I I
I
inspirace jinými enginy úpravy existujících enginů hotová řešení
Výběr enginu záleží na mnoha aspektech I I I I I I I
licence a cena typ hry požadované moduly stabilita hw nároky požadovaný jazyk podpora
Vlastnosti – Grafika
I
Modely osvětlení
I
Textury
I
Speciální efekty
I
Terény
I
Animace
I
LOD
I
Částicové systémy
Vlastnosti – Zvuk
I
3d zvuk
I
Text to speech
I
VoIP
I
Streamování
Vlastnosti – AI
I
AI behaviour
I
Boti
I
Formace
I
Fuzzy logika
I
Line of Sight
I
Zpracování přirozeného jazyka
I
Hledání cesty
I
Stavový automat
I
Skriptování
Vlastnosti – Fyzika
I
Detekce kolizí
I
Režimy pohybu
I
Fyzikální vlastnosti
I
Simulace dopravních prostředků
I
Simulace tekutin
I
Rag dolls
Vlastnosti – Síťařina
I
Počet hráčů
I
Úroveň implementace
I
Protokol
I
Výkon
I
Architektura
I
Seznam serverů
Vlastnosti – Platforma a HW požadavky
I
Platforma
I
CPU
I
Paměťová náročnost
I
Zvuk
I
Grafika
I
Síťové připojení
Vlastnosti – Náročnost
I
Počet polygonů
I
Počet objektů
I
Velikost textur
I
Počet spuštěných skriptů
I
Počet síťových klientů
Vlastnosti – Dokumentace a podpora
I
Úroveň dokončení
I
Úroveň dokumentace
I
Online help
I
Ukázkové kódy
I
Tutoriály
I
Knihy
I
Fóra
I
Podpora
Vlastnosti – Ladění
I
Debugger
I
Profiler
I
Ladění za běhu
I
Simulátor síťového prostředí
Vlastnosti – Ostatní
I
Nahrávání a přehrávání hry
I
Instant replay
I
Nahrávání a ukládání stavu hry
I
Přehrávání videa
I
Cut scenes
I
...
Přehled enginů I I
http://www.devmaster.net/engines Volné enginy I I I I I
I
Nízkonákladové enginy I I I
I
OGRE Irrlicht Crystal Space Quake 3 ... Torque Game Engine TV3D ...
Profi enginy I I I
Doom3 Havok ...
Fáze vývoje hry
I I
Hra je z pohledu vývoje SW jako většina ostatních Fáze vývoje I I I
I I I I I
Počáteční návrh Výběr/výroba enginu Alfa prototyp Vývoj hry Kontrola kvality Beta verze Post-produkce Release
Co je to game design
I
Game design je komplétní popis hry I I I I I I I I
definice idei popis obrazovek a vztahy mezi nimi popis toho, proč a jak spolu věci interagují vytvoření smysluplného příběhu stanovení cílů hry napsání textů pro hru vyvážení herních principů ...
Proč vytvářet design?
I
Nosit design v hlavě není dobrý nápad I I I
snadnější vývoj v týmu pevně daný směr vývoje jsme jenom lidi
Minidesign
I
Umožňuje rychlý nástřel hry a případné včasné zamítnutí I I I I I I I
celkový přehled hry cíle hry interakce hráče a hry přehled menu a možností příběh přehled postav vizuální témata
Kompletní design
I
Kompletní a jednoznačný popis celé hry I I I I I I I I I I
celkový přehled hry cíle hry příběh hry popis hudby popis zvuků rozkreslené obrazovky menu a nastavení průběh hry a dějové linie charaktery a příběhy postav interakce hráče a hry definice pravidel
Šablona design dokumentu I
Obecný úvod I I
I
Platforma a požadavky I I
I
I I
co se odehrálo před začátkem hry co se odhrává v jejím průběhu případně co se stane po jejím dohrání
Téma: grafika a zvuk I I I
I
kam je hra primárně určena (PC, console, web. . . ) zda potřebuje nějakou specialitku
Příběh I
I
obecný popis hry – téma, žánr cíle hry
popis vizuálního a audio stylu hry popis lokací nákresy
Menu I
popis a rozkreslení neherních částí a jejich návaznosti I
I
Průběh hry I I I
I
menu, nastavení, highscore. . .
stěžejní část dokumentu – popis z pohledu hráče popisuje děj od spuštění hry až do vypnutí a možné scénáře možné nelinearity v ději (level diagram)
Popis postav
popis postav, jejich jména, vlastnosti, interakce Další Isoučásti design dokumentu Mechanika hry I
I I
způsob pohybu součásti hry a jejich vlastnosti I
I
fyzika umělá inteligence síťová komunikace
I I
popisuje aspektyžez stojí technického hlediska proč je tajednotlivé hra tak skvělá, za to ji implementovat
I I
I I I
zbraně, vylepšení, pasti. . .
Technická dokumentace Závěr
Ekonomická dokumentace I I I I
analýza trhu technická analýza právní analýza analýza nákladů
Konec