Počítačové hry Herní engine
1/1
Obsah přednášky
I
Co je „Engineÿ
I
Hotové enginy
I
Jemný úvod do game designu
2/1
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
3/1
”It is a mistake to think you can solve any major problems just with potatoes.” -Douglas Adams
4/1
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
5/1
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
6/1
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
co si s tím počít?
7/1
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?
7/1
Pokus první – jednoduchá smyčka
I
Jednoduchá smyčka I I
update, pak prezentace oba moduly mají stejnou váhu Update
Prezentace
8/1
Pokus první – jednoduchá smyčka
I
Jednoduchá smyčka I I
I
update, pak prezentace oba moduly mají stejnou váhu
Problém č.1 I
Update
závislost na výkonu systému
Prezentace
8/1
Pokus první – jednoduchá smyčka
I
Jednoduchá smyčka I I
I
Problém č.1 I
I
update, pak prezentace oba moduly mají stejnou váhu Update
závislost na výkonu systému
Řešení č.1 I
zavedení systémového času
Prezentace
8/1
Pokus první – jednoduchá smyčka
I
Jednoduchá smyčka I I
I
Problém č.1 I
I
Update
závislost na výkonu systému
Řešení č.1 I
I
update, pak prezentace oba moduly mají stejnou váhu
zavedení systémového času
Problém č.2 I
Prezentace
zbytečné výpočty při častém updatu
8/1
Pokus první – jednoduchá smyčka
I
Jednoduchá smyčka I I
I
Problém č.1 I
I
zavedení systémového času
Problém č.2 I
I
Update
závislost na výkonu systému
Řešení č.1 I
I
update, pak prezentace oba moduly mají stejnou váhu
Prezentace
zbytečné výpočty při častém updatu
Řešení č.2 I
něco jiného. . .
8/1
Pokus druhý – vícejádro I
Paralelní smyčka I I
zvlášť update zvlášť prezentace
Prezentace
Update
9/1
Pokus druhý – vícejádro I
Paralelní smyčka I I
I
zvlášť update zvlášť prezentace
Problém č.1 I
různá doba provádění Prezentace
Update
9/1
Pokus druhý – vícejádro I
Paralelní smyčka I I
I
Problém č.1 I
I
zvlášť update zvlášť prezentace různá doba provádění
Řešení č.1 I
rozdělení updatu na náročné výpočty a jednoduché interpolace
Prezentace
Update
9/1
Pokus druhý – vícejádro I
Paralelní smyčka I I
I
Problém č.1 I
I
různá doba provádění
Řešení č.1 I
I
zvlášť update zvlášť prezentace
rozdělení updatu na náročné výpočty a jednoduché interpolace
Prezentace
Update
Problém č.2 I
špatná obsluha na 1 vláknu
9/1
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. . .
9/1
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 () 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
p ercentWit hi nF ra me = Min (1 , ( time1 - time0 ) / (1000/ freq )) Presentation ( per ce ntWithinFrame ) }
11 / 1
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
12 / 1
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)
13 / 1
Hráč
I
Musí uchovávat a updatovat stav hráče
14 / 1
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
hra se nestará o čtení z konkrétních zařízení lze libovolně namapovat
14 / 1
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
hra se nestará o čtení z konkrétních zařízení lze libovolně namapovat
Update stavu I I I
spuštění animace pro pohyb úprava pozice ...
14 / 1
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 ...
14 / 1
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
15 / 1
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
seřazení podle relevantnosti (graf scény, dělení prostoru)
15 / 1
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
seřazení podle relevantnosti (graf scény, dělení prostoru) vyhodnocení modelu chování (dynamika, skriptování)
15 / 1
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
15 / 1
Aktivní prvky
I
Objekty s vlastní inteligencí I
I
nepřátelé (nebo spoluhráči)
Nutné udržovat konzistentní stav
16 / 1
Aktivní prvky
I
Objekty s vlastní inteligencí I
I
nepřátelé (nebo spoluhráči)
Nutné udržovat konzistentní stav I
seřazení podle relevantnosti (graf scény, dělení prostoru)
16 / 1
Aktivní prvky
I
Objekty s vlastní inteligencí I
I
nepřátelé (nebo spoluhráči)
Nutné udržovat konzistentní stav I I
seřazení podle relevantnosti (graf scény, dělení prostoru) otestování stavu a vytyčení cílů (skriptování)
16 / 1
Aktivní prvky
I
Objekty s vlastní inteligencí I
I
nepřátelé (nebo spoluhráči)
Nutné udržovat konzistentní stav 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í)
16 / 1
Aktivní prvky
I
Objekty s vlastní inteligencí I
I
nepřátelé (nebo spoluhráči)
Nutné udržovat konzistentní stav 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)
16 / 1
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
16 / 1
Struktura herní logiky // static world P re selectAc t i ve Z o ne () // player update ReadControls () C om puteRest r i ct i o ns () Upd atePlayerStat e () // passive objects S o r t Ac cor d i n g R e l e v a n ce () E x e c u t e Co n s t r o l M e c h a n i sm () 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 Ac cor d i n g R e l e v a n 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 () C om puteRest r i ct i o ns () MakeDecision () U p d a t e A ct i v e O b j e c t s S t a te () 17 / 1
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í ...
18 / 1
Statický svět
I
Stará se o vykreslení statického světa a objektů s jednoduchou animací
19 / 1
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
ořezávání odstranění odvrácených částí zakrytí
19 / 1
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
ořezávání odstranění odvrácených částí zakrytí
výběr vhodného rozlišení (LOD)
19 / 1
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
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
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í
19 / 1
Aktivní objekty
I
Stará se o vykreslení objektů s komplexní animací I I
I
objekty postavy (NPC)
Musí zajistit
20 / 1
Aktivní objekty
I
Stará se o vykreslení objektů s komplexní animací I I
I
objekty postavy (NPC)
Musí zajistit I
výběr relevantních objektů
20 / 1
Aktivní objekty
I
Stará se o vykreslení objektů s komplexní animací I I
I
objekty postavy (NPC)
Musí zajistit I I I
výběr relevantních objektů výběr vhodného rozlišení animování
20 / 1
Aktivní objekty
I
Stará se o vykreslení objektů s komplexní animací I I
I
objekty postavy (NPC)
Musí zajistit 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
20 / 1
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í
20 / 1
Hráč
I
Speciální případ NPC I
I
většinou není nutné testovat zda je či není viditelný
Malé zjednodušení
21 / 1
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
výběr vhodného rozlišení animování
21 / 1
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
výběr vhodného rozlišení animování výběr vhodného rozlišení příprava geometrie
21 / 1
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í
21 / 1
Struktura prezentace // static world S el ectVisib l e Su b s et () SelectResolution () PackGeometry () RenderWorld () // active objects S el ectVisib l e Su b s et () Animate () PackGeometry () RenderNPC () // player Animate () PackGeometry () RenderPlayer ()
22 / 1
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
23 / 1
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
24 / 1
Vlastnosti – Grafika
I
Modely osvětlení
I
Textury
I
Speciální efekty
I
Terény
I
Animace
I
LOD
I
Částicové systémy
25 / 1
Vlastnosti – Zvuk
I
3d zvuk
I
Text to speech
I
VoIP
I
Streamování
26 / 1
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í
27 / 1
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
28 / 1
Vlastnosti – Síťařina
I
Počet hráčů
I
Úroveň implementace
I
Protokol
I
Výkon
I
Architektura
I
Seznam serverů
29 / 1
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í
30 / 1
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ů
31 / 1
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
32 / 1
Vlastnosti – Ladění
I
Debugger
I
Profiler
I
Ladění za běhu
I
Simulátor síťového prostředí
33 / 1
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
...
34 / 1
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 ... 35 / 1
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
36 / 1
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ů ...
37 / 1
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
38 / 1
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
39 / 1
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
40 / 1
Šablona design dokumentu I
Obecný úvod I I
obecný popis hry – téma, žánr cíle hry
41 / 1
Šablona design dokumentu I I
Obecný úvod Platforma a požadavky I I
kam je hra primárně určena (PC, console, web. . . ) zda potřebuje nějakou specialitku
41 / 1
Šablona design dokumentu I
Obecný úvod
I
Platforma a požadavky Příběh
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í
41 / 1
Šablona design dokumentu I
Obecný úvod
I
Platforma a požadavky
I
Příběh Téma: grafika a zvuk
I
I I I
popis vizuálního a audio stylu hry popis lokací nákresy
41 / 1
Šablona design dokumentu I
Obecný úvod
I
Platforma a požadavky
I
Příběh
I
Téma: grafika a zvuk Menu
I
I
popis a rozkreslení neherních částí a jejich návaznosti I
menu, nastavení, highscore. . .
41 / 1
Šablona design dokumentu I
Obecný úvod
I
Platforma a požadavky
I
Příběh
I
Téma: grafika a zvuk
I
Menu Průběh hry
I
I I I
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
I
Obecný úvod
I
Platforma a požadavky
I
Příběh
I
Téma: grafika a zvuk
I
Menu
I
Průběh hry Popis postav
I
I
popis postav, jejich jména, vlastnosti, interakce
41 / 1
Šablona design dokumentu I I I I I I I I
Obecný úvod Platforma a požadavky Příběh Téma: grafika a zvuk Menu Průběh hry Popis postav Mechanika hry I I
způsob pohybu součásti hry a jejich vlastnosti I
I I I
zbraně, vylepšení, pasti. . .
fyzika umělá inteligence síťová komunikace
41 / 1
Šablona design dokumentu
I
Obecný úvod
I
Platforma a požadavky
I
Příběh
I
Téma: grafika a zvuk
I
Menu
I
Průběh hry
I
Popis postav
I
Mechanika hry Závěr
I
I
proč je ta hra tak skvělá, že stojí za to ji implementovat
41 / 1
Další součásti design dokumentu
I
Technická dokumentace I
I
popisuje jednotlivé aspekty z technického hlediska
Ekonomická dokumentace I I I I
analýza trhu technická analýza právní analýza analýza nákladů
42 / 1
Konec
43 / 1