This is an old revision of the document!
Table of Contents
Komponenty herního enginu, herní smyčka. Detekce kolizí a základy herní fyziky. Reprezentace a výpočet animací. Základní optimalizační metody pro herní engine.
B4B39HRY Webové stránky předmětu
- Komponenty herního enginu, herní smyčka – přehled komponent herního enginu a jejich funkce. Herní smyčka a její varianty, fixní a proměnlivý simulační krok (využití a způsob realizace), souvislost reálného a herního času. Vazba komponent herního enginu na herní smyčku. Zpracování dlouhých procedur. Synchronizace fyzikální simulace a zobrazování.
- Detekce kolizí a základy herní fyziky – motivace, princip, využití. Typy kolizních objektů, algoritmy pro detekci kolizí jednoduchých objektů (koule, AABB, OBB), teorém separačních rovin (SAT), princip algoritmu GJK. Fáze detekce kolizí, filtrování kolizí, akcelerace pomocí mřížky a hierarchie obalových těles. Kolizní dotazy a jejich varianty, reprezentace kolize. Smyčka fyzikální simulace. Analytické řešení pohybové rovnice, řešení numerickou integrací, Eulerova metoda, příklady. Typy vazeb mezi objekty a jejich využití. Výpočet reakce na kolize a fyzikální materiály.
- Reprezentace a výpočet animací – typy animací a jejich využití. Podrobný popis skeletální animace, reprezentace kostry. Animační klipy – vytváření, reprezentace, výpočet animované kostry. Míchání animačních klipů – způsob výpočtu a příklady. Skinning – způsob výpočtu pozic vrcholů metodou linear blend skinning. Animační křivky – princip, využití, Hermitova kubika, Catmull-Rom spline.
- Základní optimalizační metody pro herní engine – dopředné a odložené vykreslování, princip, srovnání. Optimalizace scény pomocí LOD, typy LOD a způsob jejich přepínání. Předpočítání osvětlení pomocí osvětlovacích map a sond odrazu – princip, způsob použití, omezení. Redukování podle viditelnosti: redukování pohledovým jehlanem, redukování podle zastínění (online a offline), potenciálně viditelné množiny (PVS) – výpočet a použití.
1. Komponenty herního enginu a herní smyčka
1. Přehled komponent herního enginu a jejich funkce
Herní engine je software, který poskytuje základní framework a struktury pro tvorbu her. Komponenty enginu zahrnují:
- AI – řídí chování NPC, pathfinding, rozhodování (decision-making).
- Fyzika – zpracovává kolize, gravitaci, rychlost objektů a další fyzikální síly.
- Rendering – zajišťuje vizuální stránku hry, vykreslování 3D a 2D scén, osvětlení a speciální efekty.
- Zvuk – spravuje hudbu, zvukové efekty a prostorový zvuk.
- UI/Input – zpracovává uživatelský vstup (myš, klávesnice, ovladače, touchpad).
- Scripting – umožňuje úpravu herní logiky pomocí skriptovacích jazyků (např. Lua, Python).
- Síť – zajišťuje multiplayerové funkce, synchronizaci klient-server, správu serverů a anti-cheat opatření.
2. Herní smyčka
Herní smyčka představuje jádro herní logiky, které kontinuálně běží během celé hry (udává tzv. FPS – snímky za sekundu). Základní části smyčky:
- ProcessInput – zpracování uživatelského vstupu.
- UpdateGame – aktualizace herní logiky, animací, fyziky, AI a dalších komponent.
- Render – vykreslení aktualizované scény.
Varianty herní smyčky
Herní smyčka může fungovat s fixním nebo proměnlivým simulačním krokem:
- Fixní simulační krok – doba každého kroku smyčky je konstantní, což zajišťuje stabilitu simulace, ale může způsobit zpoždění odezvy. V případě zpoždění se provede několik aktualizací před jedním vykreslením.
- Proměnlivý simulační krok – smyčka běží co nejrychleji. Výhodou je rychlá odezva, ale nevýhodou může být tzv. screen tearing a variabilní FPS. Vyžaduje vztahování fyziky k reálnému času pomocí zvláštního kroku (např. FixedUpdate).
3. Souvislost reálného a herního času
Časy používané ve hře:
- Reálný čas (wall-clock time) – odpovídá skutečnému času.
- Herní čas – interní logický čas hry, který může být ovlivněn (zrychlení, zpomalení, zastavení).
- CPU/GPU čas – doba potřebná pro vykonání jedné iterace smyčky.
Synchronizace herního času s reálným časem zajistí konzistentní herní zážitek bez ohledu na výkon zařízení.
4. Vazba komponent herního enginu na herní smyčku
Jednotlivé komponenty enginu jsou propojeny s částmi smyčky:
- ProcessInput komunikuje s komponentou vstupu.
- UpdateGame propojuje fyziku, AI, zvuk, skripty a síť (aktualizace objektů a chování).
- Render komunikuje s renderingovou částí enginu.
- Případný LateUpdate (např. v Unity) využíván pro specifické úlohy jako aktualizace kamery nebo následné úpravy fyziky.
5. Zpracování dlouhých procedur
Dlouhé operace, jako například načítání velkých scén, lze řešit několika způsoby:
- Threading – paralelní vykonávání operací.
- Rozdělení na menší části – postupné vykonání delších úloh.
- Loading screen – vizuální indikátor načítání hry.
- Coroutines (např. Unity) – umožňuje čekání na další snímek nebo definovaný časový interval.
6. Synchronizace fyzikální simulace a zobrazování
Problém nesynchronizace mezi simulací a zobrazením (viditelné trhání pohybujících se objektů) se řeší:
- Interpolací – dopočítávání stavu mezi dvěma posledními známými stavy.
- Extrapolací – předpověď stavu na základě posledního známého stavu a rychlosti objektu.
Alternativně lze použít vyšší frekvenci fyzikální simulace (např. dvojnásobnou proti FPS), aby nedocházelo k viditelným nesouladům.
2. Detekce kolizí a základy herní fyziky
1. Motivace, princip, využití
Fyzikální simulace ve hrách zajišťuje realističtější chování objektů a prostředí. Využití nachází při simulaci kolizí objektů, působení gravitace, animacích typu ragdoll nebo interakcích postav s okolím (např. oblečení). Zároveň umožňuje realizovat nereálné efekty, pokud to herní logika vyžaduje. Fyzikální simulace nemusí být nutně real-time, například při tvorbě animací.
2. Typy kolizních objektů
Kolizní tělesa aproximují reálné objekty jednoduchými geometrickými tvary pro rychlou detekci kolizí.
- Koule (Sphere) – rychlá detekce, jednoduchá aktualizace, rotace invariantní.
- AABB (Axis-Aligned Bounding Box) – osově zarovnaný kvádr, rychlá detekce, ne vždy těsná aproximace.
- OBB (Oriented Bounding Box) – obecně natočený kvádr, lepší aproximace, složitější výpočet.
- k-DOP (Discrete Oriented Polytope) – orientovaný mnohostěn.
- Konvexní obálka (Convex Hull) – nejtěsnější aproximace, výpočetně náročná.
3. Algoritmy pro detekci kolizí
Separating Axis Theorem (SAT)
Princip spočívá v projekci objektů na testované osy. Pokud se intervaly na některé ose neprotínají, objekty nekolidují. Pro testování se vybírají normály hran objektů.
GJK algoritmus
Vhodný pro obecnou detekci kolizí konvexních objektů. Algoritmus pracuje s Minkowského rozdílem objektů. Pokud rozdíl obsahuje počátek, objekty kolidují.
4. Fáze detekce kolizí
Široká fáze (Broad Phase)
Rychle identifikuje páry objektů, které by mohly kolidovat, pomocí jednoduchých testů a akceleračních struktur:
- Mřížka (Grid) – konstantní čas detekce kolize v rámci buněk.
- Hierarchie obalových těles (Bounding Volume Hierarchy) – struktura stromu, umožňující efektivní detekci kolizí v logaritmickém čase.
Filtrování kolizí
Pomocí vrstev a kolizních masek určujeme, které objekty mohou kolidovat.
Úzká fáze (Narrow Phase)
Přesná detekce kolizí vybraných dvojic objektů.
5. Kolizní dotazy a jejich varianty
- Raycast – detekce průsečíku s paprskem (např. střelba).
- Shapecast – detekce průsečíků posunutých objektů (např. pohyb kamery).
6. Smyčka fyzikální simulace
- Aktualizace herních objektů (input, logika).
- Výpočet sil, aplikace impulsů, vazby.
- Simulační krok:
- Numerická integrace.
- Detekce kolizí.
- Řešení kolizí.
- Aktualizace objektů podle výsledků simulace.
- Kolizní dotazy.
- Render.
7. Řešení pohybové rovnice
Analytické řešení
Integrace pohybových rovnic, přesné, ale výpočetně náročnější.
Numerické řešení
Výpočet diskrétních kroků:
- Eulerova metoda:
\[ \text{nová\_pozice} = \text{stará\_pozice} + \text{rychlost} \cdot \Delta t \]
- Verletova metoda – přesnější numerická metoda, bere v úvahu akceleraci.
8. Typy vazeb mezi objekty
- Pevný kontakt – objekty ukotveny pevně k sobě.
- Kloub (Ball joint) – rotace kolem bodu.
- Pant (Hinge) – rotace kolem jedné osy.
- Píst (Slider) – lineární pohyb po jedné ose.
- Tlumená pružina – simulace pružnosti.
9. Výpočet reakce na kolize a fyzikální materiály
Při kolizi se vypočítává impuls podle materiálových vlastností (tření, odrazivost) a dalších parametrů:
- Odrazivost (bounciness) – 0 (žádný odraz), 1 (dokonalý odraz).
- Tření (friction) – statické a dynamické.
- Kombinační metody (průměr, min, max, násobení).
Tato kapitola podrobně shrnuje základy detekce kolizí a fyzikální simulace ve hrách, včetně popisu algoritmů a metod používaných v herních enginech.
3. Reprezentace a výpočet animací
1. Typy animací a jejich využití
Cílem animace je rozpohybovat objekty – pro účely hry, realismu nebo stylizace. Existuje několik typů animací, které se používají podle potřeby:
- Sprite animace (2D) – střídání obrázků (cel/sprite), používané v 2D hrách.
- Rigidní hierarchická animace – změna transformací v hierarchii scény, jednoduché pohyby objektů (např. dveře).
- Per-vertex animace – animace jednotlivých vrcholů:
- Blend shapes (morphing) – výrazy obličeje.
- Procedurální animace – hladiny, vlny (šumové funkce).
- Fyzikální simulace – např. šaty.
- Skeletální animace – klíčová pro postavy, podrobně popsána níže.
2. Skeletální animace a reprezentace kostry
Skeletální animace používá kostru (hierarchický strom kloubů), která ovládá deformaci polygonálního modelu („kůže“).
- Kostra: reprezentována stromem; uzly = klouby, hrany = kosti.
- Model (kůže): polygonální síť (mesh).
- Oba jsou definovány v referenční póze (např. T-pose).
- Transformace kloubů jsou hierarchicky skládány: Scale → Rotace (Quaternion) → Translace (často jen rotace + posun).
Čtyři základní techniky animace kostry:
- Forward kinematika (FK) – přímé ovládání kloubů, často pomocí klíčových snímků.
- Motion capture – záznam pohybu skutečného herce, následné zpracování dat.
- Inverse kinematika (IK) – nepřímé řízení pomocí cílové pozice (např. noha na zemi), řešeno iterativně.
- Forward dynamika (ragdoll) – řízeno fyzikální simulací.
3. Animační klipy
- Krátké sekvence pohybů – např. chůze, běh, útok.
- Definovány jako sada transformací kloubů v čase.
- Reprezentace:
- Motion capture,
- Klíčové snímky (keyframes),
- Interpolace (např. pomocí křivek),
- Blend shapes.
4. Míchání animačních klipů
- LERP/SLERP mezi transformacemi (Scale, Translate, Rotate).
- Možné přechody (např. z běhu do skoku).
- Blending tree – výpočet na základě parametrů (rychlost, směr).
- Animační automat (ASM):
- Množina stavů (Idle, Walking, Jumping, …).
- Přechody s interpolací.
- Více vrstev animace (např. tělo vs. ruce), kombinace pomocí masek nebo aditivního míchání.
5. Skinning (Linear Blend Skinning)
Skinning je technika deformace polygonálního modelu podle animace kostry.
- Rigid skinning – každý vrchol ovládán jedním kloubem (zastaralé).
- Linear Blend Skinning (LBS) – každý vrchol ovlivněn několika klouby (2–4) s váhami \( w_i \).
- Váhy jsou konvexní (součet = 1, každá váha \( \geq 0 \)).
- Výsledná pozice vrcholu:
\[ P_{\text{new}} = \sum_i w_i \cdot T_i(P_0) \]
kde \( T_i \) je transformace daného kloubu a \( P_0 \) je původní pozice. * Výhody: rychlý výpočet, jednoduchá implementace. * Nevýhody: artefakty (např. „gumové“ klouby), řešeno pomocí pokročilého skinningu.
6. Animační křivky
Animační křivky určují, jak se transformace mění mezi klíčovými snímky.
- Hermitova kubika – určená počátečním a koncovým bodem + jejich tečnami. Výhodná pro plynulý přechod.
- Catmull–Rom spline – prochází dvěma hlavními body, další dva ovlivňují zakřivení. Spojitá první derivace.
Používají se pro:
- interpolaci transformací v čase,
- řízení pohybu kamery,
- procedurální animace.
4. Základní optimalizační metody pro herní engine
1. Cíl optimalizace
Cílem optimalizací je udržet stabilní snímkovou frekvenci (FPS) – např. 60 FPS, pro VR až 90 FPS. Největší zátěž obvykle představuje rendering.
2. Dopředné a odložené vykreslování
Dopředné vykreslování (Forward rendering)
- Jednoprůchodové – osvětlení všech světel spočteno jedním shaderem.
- Víceprůchodové – opakované vykreslení objektů s různými světly.
- Výhody:
- Jednoduché shadery,
- přesné pro průhlednost.
- Nevýhody:
- Více průchodů přes geometrii,
- omezený počet světel.
Odložené vykreslování (Deferred rendering)
- První průchod: renderování geometrie do G-bufferu (barva, normály, hloubka…).
- Druhý průchod: výpočet osvětlení jako postprocess.
- Výhody:
- Osvětlení pouze na viditelných pixelech,
- snadná integrace postprocesů (motion blur, FXAA).
- Nevýhody:
- Paměťově náročné,
- problémy s průhledností,
- složité multisampling (antialiasing).
Kombinovaný přístup
- Neprůhledné objekty: odložené vykreslování.
- Průhledné objekty: dopředné vykreslování.
3. Optimalizace pomocí LOD
LOD (Level of Detail) – různé úrovně detailu modelu podle vzdálenosti od kamery.
- Diskrétní LOD – předpočítané verze modelu, přepínání mezi nimi (může být viditelné).
- Spojité LOD – plynulá změna detailu za běhu, výpočetně náročnější (např. Nanite v UE5).
- Optimalizace také pomocí:
- Normal map, bump map – náhrada detailní geometrie texturou,
- Mip-mapy, atlasy – zmenšené verze textur,
- Indexované geometrie – snížení počtu volání.
4. Předpočítané osvětlení a sondy odrazu
Lightmapy
- Statické globální osvětlení vypočítané offline a uložené jako textury.
- Pouze pro statické objekty, nevhodné pro pohyblivé nebo dynamické scény.
Reflection probes
- Simulace odrazu okolí pomocí cubemapy.
- Používá se pro lesklé povrchy, např. sklo, voda.
- Nevýhody:
- Omezené rozlišení,
- zastaralé nebo neaktuální záznamy při změnách scény.
5. Redukování podle viditelnosti (Culling)
Culling = vyloučení neviditelných objektů z renderingu.
View frustum culling
- Testujeme, zda objekt leží v pohledovém jehlanu (frustum kamery).
- Objekty mimo frustum se nevykreslují.
Occlusion culling
- Testování, zda objekt není zakryt jiným.
- Může být:
- Offline – rozdělení scény na buňky (PVS = Potentially Visible Set),
- Online – výpočet za běhu (např. pomocí depth bufferu).
Potenciálně viditelné množiny (PVS)
- Pro každou buňku prostoru se předem určí množina objektů, které mohou být viditelné.
- Při běhu se vykreslí pouze tyto objekty.
- Výpočet:
- Offline – náročný, ale velmi efektivní při běhu.
- Online – rychlejší, ale méně přesný.
Hierarchické zpracování
- Používá se hierarchie prostorových struktur (např. octree, kd-tree).
- Redukce počtu testů pomocí konzistence mezi snímky – tzv. coherent hierarchy.