Počítačové hry Herní engine Obsah přednášky Co je Engine Hotové enginy Jemný úvod do game designu
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 It is a mistake to think you can solve any major problems just with potatoes. -Douglas Adams
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 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
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? 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
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 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
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 ) Herní logika Je zodpovědná za update světa Musí se starat o statický svět hráče pasivní prvky aktivní prvky
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) 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...
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 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
Struktura herní logiky // static world PreselectActiveZone () // player update ReadControls () ComputeRestrictions () UpdatePlayerState () // passive objects SortAccordingRelevance () ExecuteConstrolMechanism () UpdatePassiveObjectsState () // active objects SortAccordingRelevance () SenseInternalStateAndGoals () ComputeRestrictions () MakeDecision () UpdateActiveObjectsState () 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í...
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í 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í
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í Struktura prezentace // static world SelectVisibleSubset () SelectResolution () PackGeometry () RenderWorld () // active objects SelectVisibleSubset () Animate () PackGeometry () RenderNPC () // player Animate () PackGeometry () RenderPlayer ()
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 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
Vlastnosti Grafika Modely osvětlení Textury Speciální efekty Terény Animace LOD Částicové systémy Vlastnosti Zvuk 3d zvuk Text to speech VoIP Streamování
Vlastnosti AI AI behaviour Boti Formace Fuzzy logika Line of Sight Zpracování přirozeného jazyka Hledání cesty Stavový automat Skriptování Vlastnosti Fyzika Detekce kolizí Režimy pohybu Fyzikální vlastnosti Simulace dopravních prostředků Simulace tekutin Rag dolls
Vlastnosti Síťařina Počet hráčů Úroveň implementace Protokol Výkon Architektura Seznam serverů Vlastnosti Platforma a HW požadavky Platforma CPU Paměťová náročnost Zvuk Grafika Síťové připojení
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ů Vlastnosti Dokumentace a podpora Úroveň dokončení Úroveň dokumentace Online help Ukázkové kódy Tutoriály Knihy Fóra Podpora
Vlastnosti Ladění Debugger Profiler Ladění za běhu Simulátor síťového prostředí 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...
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... 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
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ů... 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
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 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
Šablona design dokumentu Obecný úvod obecný popis hry téma, žánr cíle hry Platforma a požadavky kam je hra primárně určena (PC, console, web... ) zda potřebuje nějakou specialitku 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í Téma: grafika a zvuk popis vizuálního a audio stylu hry popis lokací nákresy Menu popis a rozkreslení neherních částí a jejich návaznosti menu, nastavení, highscore... 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) Popis postav popis postav, jejich jména, vlastnosti, interakce Mechanika hry způsob pohybu součásti hry a jejich vlastnosti zbraně, vylepšení, pasti... fyzika umělá inteligence síťová komunikace Technická dokumentace Závěr proč popisuje je ta jednotlivé hra tak skvělá, aspekty že z stojí technického za to ji implementovat hlediska Ekonomická dokumentace Další součásti design dokumentu analýza trhu technická analýza právní analýza analýza nákladů
Konec