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