The wiki page is under active construction, expect bugs.

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
statnice:bakalar:b4b39hry [2025/05/28 17:52] zapleka3statnice:bakalar:b4b39hry [2025/06/06 21:23] (current) zapleka3
Line 1: Line 1:
-==== 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. ====+====== 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. ======
  
 [[https://fel.cvut.cz/cz/education/bk/predmety/46/99/p4699006.html|B4B39HRY]] [[https://cw.fel.cvut.cz/wiki/courses/b4b39hry/lectures/start|Webové stránky předmětu]] [[https://fel.cvut.cz/cz/education/bk/predmety/46/99/p4699006.html|B4B39HRY]] [[https://cw.fel.cvut.cz/wiki/courses/b4b39hry/lectures/start|Webové stránky předmětu]]
Line 203: Line 203:
 \] \]
 Geometricky tento rozdíl zahrnuje **všechny možné vektory z bodu B do bodu A**. Pokud výsledný rozdíl **obsahuje počátek souřadnic**, znamená to, že se objekty A a B překrývají. Geometricky tento rozdíl zahrnuje **všechny možné vektory z bodu B do bodu A**. Pokud výsledný rozdíl **obsahuje počátek souřadnic**, znamená to, že se objekty A a B překrývají.
 +
 +{{:statnice:bakalar:pasted:20250528-195402.png?300}}
  
 Princip GJK: Princip GJK:
Line 212: Line 214:
 GJK se výborně hodí i pro velmi komplikované kolizní objekty (např. konvexní obálky). Výhoda oproti SAT: **nemusíme předem znát osy** – ty se určují dynamicky během běhu algoritmu. Nevýhoda: složitější implementace, závislá na správném zpracování podporujících bodů. GJK se výborně hodí i pro velmi komplikované kolizní objekty (např. konvexní obálky). Výhoda oproti SAT: **nemusíme předem znát osy** – ty se určují dynamicky během běhu algoritmu. Nevýhoda: složitější implementace, závislá na správném zpracování podporujících bodů.
  
-Shrnutí:+**Shrnutí:**
   * **SAT**: jednodušší a efektivní pro AABB/OBB, více os testovaných najednou.   * **SAT**: jednodušší a efektivní pro AABB/OBB, více os testovaných najednou.
   * **GJK**: výkonný a obecný pro libovolné konvexní tvary, zvládá složitější případy.   * **GJK**: výkonný a obecný pro libovolné konvexní tvary, zvládá složitější případy.
  
 ==== 4. Fáze detekce kolizí ==== ==== 4. Fáze detekce kolizí ====
 +
 +Detekce kolizí probíhá ve více fázích, které postupně zužují množinu objektů, jež je třeba detailně testovat. To umožňuje udržet výpočty efektivní i ve složitých scénách.
  
 === Široká fáze (Broad Phase) === === Široká fáze (Broad Phase) ===
-Rychle identifikuje páry objektů, které by mohly kolidovatpomocí jednoduchých testů a akceleračních struktur:+Široká fáze se snaží rychle vyřadit objekty, které se zjevně nemohou dotýkat. Provádí hrubé testy mezi obalovými tělesyčasto s využitím akceleračních struktur.
  
-  * **Mřížka (Grid)** – konstantní čas detekce kolize v rámci buněk+  * **Mřížka (Grid)** – prostor je rozdělen na buňky; kolize se testují jen mezi objekty ve stejné nebo sousední buňce. Funguje dobře pro rovnoměrně rozložené objekty
-  * **Hierarchie obalových těles (Bounding Volume Hierarchy)** – struktura stromuumožňující efektivní detekci kolizí v logaritmickém čase.+  * **Hierarchie obalových těles (Bounding Volume Hierarchy, BVH)** – stromová struktura, kde vnitřní uzly představují obálky více objektů. Umožňuje logaritmické vyhledávání potenciálních kolizí.
  
 === Filtrování kolizí === === Filtrování kolizí ===
 Pomocí vrstev a kolizních masek určujeme, které objekty mohou kolidovat. Pomocí vrstev a kolizních masek určujeme, které objekty mohou kolidovat.
 +
 +  * **Kolizní vrstvy a masky** – určují, které objekty spolu mohou kolidovat (např. hráč vs. projektil, ale ne projektil vs. projektil).
 +  * **Kolizní materiály** – přenášejí informace o tření, odrazu apod., a mohou se využít pro modifikaci reakce na kolizi.
 +  * **Callbacks** – herní logika může zasáhnout a kolizi v určité situaci zrušit (např. nezranitelnost, duchové).
  
 === Úzká fáze (Narrow Phase) === === Úzká fáze (Narrow Phase) ===
 Přesná detekce kolizí vybraných dvojic objektů. Přesná detekce kolizí vybraných dvojic objektů.
 +
 +  * Používají se konkrétní algoritmy jako SAT nebo GJK.
 +  * Zjišťuje se: zda objekty kolidují, kde je kontaktní bod, jaká je normála kolize, případně hloubka průniku.
 +  * Výpočetně nejnáročnější fáze – používá se pouze u opravdu nutných dvojic.
  
 ==== 5. Kolizní dotazy a jejich varianty ==== ==== 5. Kolizní dotazy a jejich varianty ====
  
-  * **Raycast** – detekce průsečíku s paprskem (např. střelba). +Kolizní dotazy slouží k aktivnímu zjišťování, zda a kde objekt koliduje s prostředím nebo jinými objekty. Na rozdíl od klasické detekce kolizí se provádějí explicitně – často jako součást herní logiky, pohybu postav, AI nebo fyzikálních interakcí. 
-  * **Shapecast** – detekce průsečíků posunutých objektů (např. pohyb kamery).+ 
 +  * **Raycast** – „paprsková kolize“ 
 +    * Simulujeme paprsek (často nekonečně tenký) vycházející z určitého bodu směrem do scény. 
 +    * Slouží k detekci nejbližšího objektu na trase – ideální pro střelbu, výběr objektů, zjištění, co je „před hráčem“. 
 +    * Výstupem je průsečík (pozice), vzdálenost, normála, typ kolidovaného objektu apod. 
 + 
 +  * **Shapecast** – „kolize posunutého objemu“ 
 +    * Místo paprsku testujeme pohyb nějakého objemu (např. koule, kapsule, kvádru) po určité dráze. 
 +    * Typicky se používá pro predikci kolize pohybujících se objektů – např. kamera při zoomu, postava při pohybu do prostoru, AI při plánování cesty. 
 +    * Umožňuje detekci budoucích kolizí a přípravu reakce (např. zastavení před překážkou). 
 + 
 +  * **Overlap testy (např. OverlapSphere)** – detekce, zda určitý objem právě teď koliduje s něčím jiným. 
 +    * Např. detekce, zda se hráč nachází v oblasti výbuchu, nebo jestli jsou dva objekty příliš blízko. 
 +    * Často používané u trigger oblastí nebo pasivní kolize bez fyzikální reakce. 
 + 
 +Tyto dotazy se často spouštějí v každém snímku nebo na vyžádání a bývají napojeny přímo na fyzikální engine. Výsledkem dotazu může být: 
 + 
 +  * true/false (existuje kolize)
 +  * informace o nejbližším zásahu, 
 +  * seznam všech objektů v dotčeném prostoru.
  
 ==== 6. Smyčka fyzikální simulace ==== ==== 6. Smyčka fyzikální simulace ====
  
-  - Aktualizace herních objektů (input, logika). +Fyzikální simulace probíhá v pravidelných krocích v rámci hlavní herní smyčky nebo samostatně (např. s vyšší frekvencí). Každý krok zahrnuje sadu operací, které zajistí realistické chování objektů ve scéně. Níže je uvedena typická struktura smyčky: 
-  - Výpočet silaplikace impulsů, vazby. + 
-  - Simulační krok: +  **Aktualizace herních objektů** 
-    * Numerická integrace. +    * Zpracují se vstupy od uživatele (např. GUIstisk klávesy, skripty). 
-    * Detekce kolizí. +    * Herní logika ovlivní objekty (např. aktivuje animaci nebo spustí sílu)
-    * Řešení kolizí. +    * Připraví se nové požadavky na pohyb, otáčení, přechod mezi stavy atd
-  - Aktualizace objektů podle výsledků simulace. +  - **Výpočet sil aplikace impulsů** 
-  - Kolizní dotazy. +    * Na objekty se aplikují síly (např. gravitacetření, pružnost) a momenty. 
-  - Render.+    * Mohou se upravit vazby (např. klouby mezi objekty, řetězce, tuhé spojení). 
 +    * Herní skripty mohou aplikovat dodatečné síly nebo reakce (např. výbuch, zásah)
 +  - **Simulační krok** 
 +    - **Numerická integrace** – pomocí metod jako Eulerova nebo Runge-Kutta se spočítá nová pozice a rychlost objektů podle působících sil
 +    - **Detekce kolizí** – zjistí se, které objekty spolu kolidují, pomocí technik jako SAT, GJK, AABB testy
 +    - **Řešení kolizí** – pokud se kolize vyskytují: 
 +      * Vypočítají se kontaktní síly nebo penalizační impulzy. 
 +      * Aplikují se korekce pozice (např. posunutí objektu, aby „nevlezl“ do jiného). 
 +      * Mohou být vytvořeny dočasné vazby (např. postava stojící na pohybující se plošině). 
 +    - **Iterace** – v případě potřeby se celý krok může několikrát opakovat pro lepší přesnost nebo stabilitu (např. v enginu PhysX nebo Bullet)
 +  - **Aktualizace herních objektů podle simulace** 
 +    * Nové pozice, rotace a stavy se promítnou do herních objektů. 
 +    * Např. postava se přesune, předmět se kutálí, dveře se pohnou atd. 
 +    * Možné je odeslání notifikací o změnách (např. „hráč spadl na zem“)
 +  - **Kolizní dotazy** 
 +    * Provádějí se **raycasty** nebo **shapecasty** na základě aktuálního stavu světa. 
 +    * Používají je AI, kamera, ovládání nebo herní logika (např. jestli je hráč ve výhledu, co má postava pod nohama apod.)
 +  - **Render** 
 +    * Na závěr se podle aktualizovaných dat vykreslí scéna. 
 +    * To zahrnuje pozice objektů, rotace, animace, efekty apod. 
 + 
 +Tato smyčka je klíčová pro realistický pohyb a interakce objektů. V moderních enginech může být implementována samostatně od hlavní herní smyčky a může běžet s vyšší frekvencí (např. 120× za sekundu), což zvyšuje stabilitu a přesnost simulace.
  
 ==== 7. Řešení pohybové rovnice ==== ==== 7. Řešení pohybové rovnice ====
 +
 +Pohyb objektu ve fyzikální simulaci se řídí druhým Newtonovým zákonem:
 +
 +\[
 +F(t) = m \cdot a(t) = m \cdot \frac{dv(t)}{dt} = m \cdot \frac{d^2r(t)}{dt^2}
 +\]
 +
 +kde:
 +  * \( F(t) \) je síla působící na těleso v čase \( t \),
 +  * \( m \) je hmotnost objektu,
 +  * \( a(t) \) je zrychlení,
 +  * \( v(t) \) je rychlost a \( r(t) \) je poloha.
 +
 +Výsledkem jsou diferenciální rovnice, které lze řešit dvěma základními způsoby:
  
 === Analytické řešení === === Analytické řešení ===
-Integrace pohybových rovnicpřesné, ale výpočetně náročnější.+ 
 +Analytické řešení využívá klasickou integraci rovnic pohybu. Je přesné, ale omezené na jednodušší případy (např. konstantní síla, střela pod vlivem gravitace): 
 + 
 +\[ 
 +F(t) = m \cdot g = m \cdot v'(t) 
 +\] 
 +\[ 
 +v(t) = \int g \, dt = g \cdot t + v(0) 
 +\] 
 +\[ 
 +r(t) = \int v(t) \, dt = \frac{1}{2} g t^2 + v(0) t + r(0) 
 +\] 
 + 
 +{{:statnice:bakalar:pasted:20250528-211718.png?300}} 
 + 
 +Tento přístup se používá pro přesně definované trajektorie (např. let střely bez odporu vzduchu).
  
 === Numerické řešení === === Numerické řešení ===
-Výpočet diskrétních kroků: 
  
-  * **Eulerova metoda:*+Numerická integrace je použita v simulacích, kde není možné nebo výhodné použít analytický přístup. Využívá se diskrétních kroků v čase \( \Delta t \). Základními metodami jsou: 
-  \[ + 
-  \text{nová\_pozice} = \text{stará\_pozice} + \text{rychlost} \cdot \Delta t +{{:statnice:bakalar:pasted:20250528-211743.png?300}} 
-  \]+ 
 +== Eulerova metoda == 
 + 
 +  Jednoduchá, ale méně přesná a náchylná k chybám při vyšších krocích. 
 +  * Předpokládá konstantní rychlost během intervalu. 
 + 
 +\[ 
 +v(t + \Delta t) = v(t) + \frac{F(t)}{m} \cdot \Delta t 
 +\] 
 +\[ 
 +r(t + \Delta t) = r(t) + v(t) \cdot \Delta t 
 +\] 
 + 
 +== Verletova metoda == 
 + 
 +  * Vyšší přesnost než Euler, vhodná pro simulace s malými odchylkami. 
 +  * Využívá polohu v předchozím i aktuálním kroku. 
 + 
 +\
 +r(t + \Delta t) = 2r(t) - r(t - \Delta t) + \frac{F(t)}{m} \cdot \Delta t^2 
 +\] 
 +\[ 
 +v(t + \Delta t) = \frac{r(t + \Delta t) - r(t)}{\Delta t} 
 +\] 
 + 
 +== Rychlostní Verletova metoda (Velocity Verlet) == 
 + 
 +Výpočetně náročnější, ale přesnější: 
 +\
 +r(t + \Delta t) = r(t) + v(t) \cdot \Delta t + \frac{1}{2} a(t) \cdot \Delta t^2 
 +\] 
 +\[ 
 +v\left(t + \frac{1}{2} \Delta t\right) = v(t) + \frac{1}{2} a(t) \cdot \Delta t 
 +\] 
 +\[ 
 +a(t + \Delta t) = \frac{1}{m} F\left(t + \Delta t,\, r(t + \Delta t)\right) 
 +\] 
 +\[ 
 +v(t + \Delta t) = v\left(t + \frac{1}{2} \Delta t\right) + \frac{1}{2} a(t + \Delta t) \cdot \Delta t 
 +\] 
 + 
 +== Odpor vzduchu == 
 + 
 +V reálné simulaci střely musíme zohlednit odpor vzduchu, který je závislý na rychlosti: 
 + 
 +{{:statnice:bakalar:pasted:20250528-211938.png?300}} 
 + 
 +  * Síla odporu: \( F_d = -k \cdot v(t) \), kde \( k \) je koeficient odporu. 
 +  * Těleso zpomaluje a trajektorie je zkrácená (viz graf). 
 + 
 +== Praktické poznámky ==
  
-  * **Verletova metoda** – přesnější numerická metodabere v úvahu akceleraci.+  * Fyzikální objekty jsou často svázány s kolizními objekty (např. ve PhysX). 
 +  Lineární a rotační pohyb se často řeší odděleně – pro rotaci je třeba používat moment síly a kvaterniony. 
 +  * Pro rychlé simulace se používají jednoduché metody (Euler)pro stabilitu Verlet.
  
 ==== 8. Typy vazeb mezi objekty ==== ==== 8. Typy vazeb mezi objekty ====
  
-  * **Pevný kontakt** – objekty ukotveny pevně k sobě. +Ve fyzikální simulaci často dochází k situacím, kdy mezi objekty existují určité **omezení pohybu** – tzv. **vazby**. Tyto vazby slouží k simulaci realistického chování složených těles nebo strojních mechanismů. Zavedením vazeb vzniká soustava diferenciálních rovnic s omezeními, které se často řeší **iterativně** během každého simulačního kroku. 
-  * **Kloub (Ball joint)** – rotace kolem bodu. + 
-  * **Pant (Hinge)** – rotace kolem jedné osy. +Typické vazby mezi objekty: 
-  * **Píst (Slider)** – lineární pohyb po jedné ose+ 
-  * **Tlumená pružina** – simulace pružnosti.+  * **Pevný kontakt (Fixed joint)**   
 +    * Objekty jsou pevně ukotveny k sobě nebo k prostoru  
 +    * Vhodné např. pro připevnění objektu ke scéně nebo propojení částí modelu.   
 +    * Lze nastavit hraniční sílu – pokud ji interakce překročí, spoj se „rozpadne“.   
 +    * Používá se, pokud není žádoucí fyzicky slučovat těla do jednoho. 
 + 
 +  * **Kloub (Ball joint / Spherical joint)**   
 +    * Těleso je připojeno k bodu v prostoru, může se volně rotovat kolem všech os  
 +    * Simuluje například ramenní kloub nebo závěs postavy.   
 +    * Často používán ve spojení s ragdoll fyzikou. 
 + 
 +  * **Pant (Hinge joint)**   
 +    * Těleso je spojeno s jiným objektem nebo bodem a může se rotovat pouze kolem jedné osy.   
 +    * Lze nastavit limity rotace a síly motoru.   
 +    * Typický příklad: dveře, kolo. 
 + 
 +  * **Píst (Slider joint)**   
 +    * Umožňuje pouze **lineární posuv** podél jedné osy, bez rotace  
 +    * Příkladem může být mechanický píst, tlačítko nebo výsuvná součást.   
 +    * Lze definovat minimální a maximální vzdálenost. 
 + 
 + 
 +  * **Tlumená pružina (Damped spring)**   
 +    * Udržuje tělesa ve vzdálenosti s pružnou silou.   
 +    * Parametry: 
 +      * **Tuhost** (spring stiffness) – síla, jakou pružina působí při změně délky. 
 +      * **Tlumení** (damping) – snižuje oscilace. 
 +      * **Min / Max délka** – omezující rozsah deformace.   
 +    * Použití: lanové systémy, šaty, fyzikální efekty pro zbraně nebo vozidla. 
 + 
 +  * **Poháněné vazby (Motors)**   
 +    * Umožňují aplikaci síly nebo momentu přímo ve vazbě.   
 +    *  Používají se pro: 
 +      * aktivní řízení pohybu (např. otáčení kol), 
 +      * nepřímou animaci – ovládání fyzických objektů pomocí animovaných cílů, 
 +      * řízení ragdoll postavy tak, aby přebírala přibližnou pózu. 
 + 
 +Vazby jsou důležité i pro herní logiku a interakci hráče s objekty – např. držení předmětů ve VR, otevírání dveří nebo simulace vozidel.
  
 ==== 9. Výpočet reakce na kolize a fyzikální materiály ==== ==== 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). +Při detekci kolize mezi dvěma objekty nestačí pouze zjistit, že ke kolizi došlo – je nutné také určit **reakci** těchto tělestjjak se budou pohybovat dál. Tento proces se označuje jako **ření kolize** (collision responsea typicky se provádí výpočtem **impulzu**, který objektům dodá správný směr a velikost změny pohybu.
-  * **Tření (friction)** – statické a dynamické. +
-  Kombinační metody (průměr, min, max, násobení).+
  
-Tato kapitola podrobně shrnuje základy detekce kolizí fyzikální simulace ve hrách, včetně popisu algoritmů a metod používaných v herních enginech.+=== Výpočet impulzu při kolizi === 
 + 
 +Kolize dvou těles je popsána jako **změna hybnosti**. Uvažujeme zákon zachování celkové hybnosti izolované soustavy: 
 + 
 +\[ 
 +\vec{p}_1 + \vec{p}_2 = \vec{p}'_1 + \vec{p}'_2 
 +\] 
 + 
 +kde: 
 +  * \(\vec{p}_1 = m_1 \vec{v}_1\), \(\vec{p}_2 = m_2 \vec{v}_2\) jsou původní hybnosti, 
 +  * \(\vec{p}'_1 = \vec{p}_1 + \Delta \vec{p}\), \(\vec{p}'_2 = \vec{p}_2 - \Delta \vec{p}\) jsou nové hybnosti po kolizi, 
 +  * \(\Delta \vec{p}\) je impuls působící mezi tělesy (opačný pro každé těleso, podle zákona akce reakce), 
 +  * \(\vec{n}\) je normála kolizního kontaktu. 
 + 
 +Impuls se vypočítá podle: 
 + 
 +\[ 
 +\Delta \vec{p} = \frac{(1 + \epsilon)(\vec{v}_2 \cdot \vec{n} - \vec{v}_1 \cdot \vec{n})} 
 +{\frac{1}{m_1} + \frac{1}{m_2}} \cdot \vec{n} 
 +\] 
 + 
 +kde: 
 +  * \(\epsilon \in [0,1]\) je **koeficient pružnosti** (restituce), 
 +  * \(\epsilon = 0\) – **plastický kontakt** (žádný odraz), 
 +  * \(\epsilon = 1\) – **elastický kontakt** (dokonalý odraz). 
 + 
 +Rychlosti po kolizi: 
 + 
 +\[ 
 +\vec{v}'_1 = \vec{v}_1 - \frac{\Delta \vec{p}}{m_1}, \quad 
 +\vec{v}'_2 = \vec{v}_2 + \frac{\Delta \vec{p}}{m_2} 
 +\] 
 + 
 +Síla vzniklá z impulzu: 
 + 
 +\[ 
 +\vec{F} = \frac{\Delta \vec{p}}{\Delta t} 
 +\] 
 + 
 +Tento výpočet probíhá pro každý kolizní kontakt v simulaci. Složitější simulace navíc používají **iterativní řešení**, kdy se opakovaně upravují pozice a rychlosti těles, dokud se neodstraní nebo nezminimalizují průniky. 
 + 
 +=== Penalizační síly === 
 + 
 +Pokud tělesa mírně penetrují (pronikají do sebe), lze jejich oddělení řešit **penalizační silou** – síla je úměrná hloubce průniku působí opačným směrem. Výhodou je jednoduchost, nevýhodou méně přesná simulace. 
 + 
 +=== Fyzikální materiály === 
 + 
 +Fyzikální vlastnosti kolize jsou řízeny tzv. **materiály**, které jsou přiřazeny objektům. Ty definují: 
 + 
 +  * **Koeficient pružnosti (ε)** – určuje odrazivost při kolizi: 
 +    * 0 – plastický kontakt (bez odrazu), 
 +    * 1 – elastický kontakt (plný odraz). 
 +  * **Tření (friction)**: 
 +    * **Statické tření** – odpor před uvedením objektu do pohybu. 
 +    * **Dynamické tření** – odpor během pohybu (kinetické tření). 
 +  * **Kombinační metody**: 
 +    * Pokud mají dvě tělesa různé hodnoty materiálů, výsledná hodnota (např. tření nebo pružnost) se určuje metodou: **průměr (avg)**, **minimum (min)**, **maximum (max)**, **násobení (multiply)**. 
 + 
 +=== Kontakty === 
 + 
 +Kolizní systém často detekuje i tzv. **kontakty** těsně před skutečným průnikem – tyto se využívají např. pro detekci stání na zemi, lehkého dotyku či "trigger" zón. 
 + 
 +Každý kontakt obsahuje: **pozici kontaktu**, **kolizní normálu** (směr síly), **hloubku průniku**, **lokální souřadnice**. 
 + 
 +Tyto informace se pak předávají do **kolizních callbacků** (např. `OnCollisionEnter`) nebo herní logiky.
  
 ===== 3. Reprezentace a výpočet animací ===== ===== 3. Reprezentace a výpočet animací =====
Line 285: Line 515:
 Cílem animace je rozpohybovat objekty – pro účely hry, realismu nebo stylizace. Existuje několik typů animací, které se používají podle potřeby: 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. +  * **Sprite animace (2D)** – střídání jednotlivých předkreslených snímků (cel/sprite), používané v 2D hrách pro postavy, efekty nebo UI prvky
-  * **Rigidní hierarchická animace** – změna transformací v hierarchii scény, jednoduché pohyby objektů (např. dveře). +  * **Rigidní hierarchická animace** – změna transformací v hierarchii scény, používaná pro objekty, které se skládají z pevných částí (např. otvírání dveří, animace robota). 
-  * **Per-vertex animace** – animace jednotlivých vrcholů: +  * **Per-vertex animace** – animace jednotlivých vrcholů modelu pro detailní deformační efekty
-    * **Blend shapes (morphing)** – výrazy obličeje+    * **Blend shapes (morphing)** – přechod mezi různými tvary sítě, často využívané pro mimiku nebo mluvení
-    * **Procedurální animace** – hladiny, vlny umové funkce). +    * **Procedurální animace** – automaticky generované deformace podle funkcí (např. Perlinův šum), simulují vlny nebo vítr
-    * **Fyzikální simulace** – např. šaty. +    * **Fyzikální simulace** – využívá dynamiku pro deformace měkkých objektů, např. látky, vlasy nebo šaty. 
-  * **Skeletální animace** – klíčová pro postavy, podrobně popsána že.+  * **Skeletální animace** – klíčová pro postavy; model je řízen vnitřní kostrou, kde se pohyby kostí přenášejí na povrchový mesh. 
 + 
 + 
 + 
 + 
  
 ==== 2. Skeletální animace a reprezentace kostry ==== ==== 2. Skeletální animace a reprezentace kostry ====
Line 320: Line 555:
 ==== 4. Míchání animačních klipů ==== ==== 4. Míchání animačních klipů ====
  
-  * **LERP/SLERP** mezi transformacemi (Scale, Translate, Rotate). +  * **LERP/SLERP** mezi transformacemi (Scale, Translate, Rotate) – lineární interpolace pozice a měřítka (LERP), sférická interpolace rotací (SLERP) pomocí kvaternionů
-  * Možné přechody (např. z běhu do skoku). +  * Možné přechody mezi klipy (např. z běhu do skoku) se realizují jako plynulé interpolace v čase (tzv. cross-fade). 
-  * **Blending tree** – výpočet na základě parametrů (rychlost, směr).+  * **Blending tree** – výpočet výsledné animace na základě vstupních parametrů (rychlost, směr, stav), umožňuje plynulé kombinace více animačních klipů podle situace. 
 +  * **Interpolační míchání** – probíhá přímo na transformačních datech kloubů (SQT: scale, quaternion, translation). Pokročilejší přístupy používají parametrizované prostory (např. rozsah -1..1 pro náklon hlavy) pro intuitivnější ovládání a omezení neplatných póz. 
 +  * **Aditivní míchání** – místo interpolace se používá složení transformací. Využívá se u detailních animací (např. dýchání, švihnutí mečem), které se přičítají k základnímu pohybu.
   * **Animační automat (ASM)**:   * **Animační automat (ASM)**:
-    * Množina stavů (Idle, Walking, Jumping, …). +    * Množina stavů (Idle, Walking, Jumping, Attacking, …), každý stav má vlastní strom klipů
-    * Přechody s interpolací. +    * Přechody s interpolací mezi stavy (cross-fade) umožňují plynulé změny
-    * Více vrstev animace (např. tělo vs. ruce), kombinace pomocí masek nebo aditivního míchání.+    * Více vrstev animace – každá vrstva je samostatný ASM (např. dolní tělo běží, horní tělo střílí), vrstvy se kombinují pomocí vah a masek (např. AvatarMask v Unity). 
 +    * Komplexní kombinace jako chůze + střelba nebo běh + zásah se vytvářejí skládáním vrstev. 
 + 
 +  * **Inverzní kinematika (IK)** – používá se jako post-process po smíchání animací. Umožňuje doladit pozici koncových efektorů (např. poloha ruky na klice, noha na zemi). Algoritmus určí rotace všech relevantních kloubů tak, aby efektor dosáhl cíle. IK řešení může být víceznačné, nemusí existovat nebo může být nestabilní v čase, a proto je třeba zajistit plynulost a konzistenci.
  
 ==== 5. Skinning (Linear Blend Skinning) ==== ==== 5. Skinning (Linear Blend Skinning) ====
  
-Skinning je technika deformace polygonálního modelu podle animace kostry.+**Skinning** je metoda deformace polygonálního modelu (kůže) podle animace kostry (skeletonu). Každý vrchol modelu je ovlivněn jedním nebo více klouby v závislosti na typu skinningu.
  
-  * **Rigid skinning** – každý vrchol ovládán jedním kloubem (zastaralé). +  * **Rigid skinning** – každý vrchol ovládán jedním kloubem. Rychlý, ale vytváří nepřirozené zlomy v oblasti kloubů. 
-  * **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 \)). +    \vec{v}' = F(j\cdot A^{-1}(j) \cdot \vec{v} 
-    * Výsledná pozice vrcholu:+    \] 
 +  * **Linear Blend Skinning (LBS)** – každý vrchol je ovlivněn **několika klouby** (typicky 2–4), každý určitou vahou \( w_i \). 
 +    * Výhody: plynulé deformace, efektivní výpočet, běžné ve většině herních enginech. 
 +    Nevýhody: **artefakty** při rotacích – např. zmenšení objemu (gumový efekt), **nezachování ortonormality**
 +    * Výsledná pozice:
       \[       \[
-      P_{\text{new}} = \sum_i w_i \cdot T_i(P_0)+      \vec{v}_{\text{new}} = \sum_{i=1}^{m} w_i \cdot F(j_i\cdot A^{-1}(j_i) \cdot \vec{v}
       \]       \]
-    * kde \( T_i \) je transformace daného kloubu a \( P_0 \) je původní pozice. 
  
-  * Výhody: rychlý výpočet, jednoduchá implementace+  * **Duální kvaterniony** – lepší zachování objemu a rotací. 
-  * Nevýhody: artefakty (např. „gumové“ klouby), řešeno pomocí pokročilého skinningu.+  * **Pomocné klouby** – pro přesnější deformaci v problematických místech (např. ramena). 
 + 
 + 
 + 
 +==== 6. Animační křivky, princip a využití ====  
 + 
 +**Animační křivky** určují průběh hodnot (např. pozice, rotace, barvy) mezi klíčovými snímky. Používají se pro plynulou interpolaci v čase, řízení pohybu kamery či procedurální animace. 
 + 
 +===== Požadavky ===== 
 +  * Plynulost (spojitá derivace). 
 +  * Intuitivní ovládání a editace. 
 +  * Rychlý výpočet
 + 
 +===== Lineární interpolace ===== 
 +  * Jednoducháale nespojitá v derivaci
 +  * Nevhodná pro přirozený pohyb. 
 + 
 +===== Hermitova kubika ===== 
 +  * Definována dvěma body \( P_0, P_1 \a jejich tečnými vektory \( P_0'P_1' \). 
 +  * Výhodná pro řízený a plynulý přechod mezi body. 
 +  * Umožňuje snadné nastavení rychlosti nástupu a odeznění. 
 + 
 +{{:statnice:bakalar:pasted:20250528-222052.png?300}} 
 + 
 +===== Catmull–Rom spline ===== 
 +  * Speciální případ Hermitovy kubiky – tečné vektory se určují automaticky. 
 +  * Každý segment prochází dvěma body, tvar ovlivněn sousedními. 
 +  * Spojitá první derivace → přirozený pohyb. 
 +  * Vyžaduje alespoň čtyři body (první a poslední slouží k výpočtu tečen).
  
-==== 6Animační křivky ====+{{:statnice:bakalar:pasted:20250528-222236.png?300}}
  
-Animační křivky určujíjak se transformace mění mezi klíčovými snímky.+**Použití**: 
 +  * interpolace transformací v čase (rotace, pozice), 
 +  * řízení kamery, 
 +  * fyzikálně věrohodné trajektorie, 
 +  * animace parametrů (např. zoom, světlo), 
 +  * procedurální pohyby.
  
-  * **Hermitova kubika** – určená počátečním a koncovým bodem + jejich tečnami. Výhodná pro plynulý přechod. +Křivky jsou zásadní pro dosažení realistického nebo stylizovaného pohybu bez nutnosti ručního nastavování každého snímku.
-  * **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 ===== ===== 4. Základní optimalizační metody pro herní engine =====
Line 391: Line 662:
   * **Neprůhledné objekty**: odložené vykreslování.   * **Neprůhledné objekty**: odložené vykreslování.
   * **Průhledné objekty**: dopředné vykreslování.   * **Průhledné objekty**: dopředné vykreslování.
 +  * **Post-process**: Tone mapping (HDR, korekce barev), Screen space motion blur / depth of field, FXAA (antialising jako postprocess s detekcí hran), Exposure, glow, gamma, etc.
  
 ==== 3. Optimalizace pomocí LOD ==== ==== 3. Optimalizace pomocí LOD ====
  
-LOD (Level of Detail) – různé úrovně detailu modelu podle vzdálenosti od kamery.+**LOD (Level of Detail)** je technika pro snižování zátěže GPU tím, že se místo plně detailního modelu používá zjednodušená verze podle vzdálenosti od kamery.
  
-  * **Diskrétní LOD** – předpočítané verze modelu, přepínání mezi nimi (může být viditelné). +=== Diskrétní LOD === 
-  * **Spojité LOD** – plynulá změna detailu za běhu, výpočetně náročnější (napřNanite v UE5). +  Několik předpočítaných verzí modelu (např. LOD0 – detailníLOD1 – střední, LOD2 – hrubý). 
-  * Optimalizace také pomocí: +  * Přepínání může být viditelné (tzv. popping), řeší se pomocí: 
-    * **Normal map, bump map** – náhrada detailní geometrie texturou+    * **Alpha blending** – plynulý přechod pomocí průhlednosti
-    * **Mip-mapy, atlasy** – zmenšené verze textur, +    * **Bitové masky** – postupné skrývání detailů. 
-    * **Indexované geometrie** – snížení počtu volání.+  * LOD modely lze generovat automaticky (např. Blender, MeshLab). 
 + 
 +=== Spojité LOD === 
 +  * Geometrie je dynamicky zjednodušována za běhu (např. přepočtem). 
 +  * Plynulé přechody bez skoků v detailech. 
 +  * Výpočetně náročné, ale vizuálně kvalitní. 
 +  * Příklady: **UE5 Nanite** – hierarchická rasterizace a culling mikropolygony. 
 + 
 +=== Pseudo-spojité LOD === 
 +  * Kombinace hierarchických LOD a clusterů. 
 +  * Různé části modelu (clusterymají vlastní LOD
 +  * Dynamicky přepínány podle viditelnosti a detailu. 
 + 
 +=== Další optimalizační techniky === 
 +  * **Normal map, bump map** – imitují detaily pomocí textursnižují potřebu polygonů. 
 +  * **Mip-mapy** – předpočítané verze textur různých velikostízlepšují výkon i kvalitu. 
 +  * **Texturové atlasy** – sloučení více textur do jedné, snižují počet přepínání textur. 
 +  * **Indexovaná geometrie** – opětovné použití vrcholů pomocí indexů, snižuje paměťové nároky a volání
 + 
 +LOD je klíčovým prvkem pro škálování grafické náročnosti a udržení plynulého výkonu při zobrazování rozsáhlých scén.
  
 ==== 4. Předpočítané osvětlení a sondy odrazu ==== ==== 4. Předpočítané osvětlení a sondy odrazu ====
Line 420: Line 711:
 ==== 5. Redukování podle viditelnosti (Culling) ==== ==== 5. Redukování podle viditelnosti (Culling) ====
  
-Culling **vyloučení neviditelných objektů** z renderingu.+**Culling** je technika pro zvýšení výkonu tím, že **neviditelné objekty nejsou vůbec posílány na vykreslení**. Typicky se jedná o objekty mimo zorné pole nebo zakryté jinými objekty.
  
-=== View frustum culling ===+=== View Frustum Culling === 
 +  * Kontroluje, zda je objekt uvnitř **zorného jehlanu (frustum)** kamery. 
 +  * Objekty zcela mimo frustum jsou **vynechány z renderingu**. 
 +  * Používá se obvykle jako **první filtr** při vykreslování scény.
  
-  Testujemezda objekt leží v **pohledovém jehlanu** (frustum kamery). +=== Occlusion Culling === 
-  Objekty mimo frustum se **nevykreslují**.+  Odstraňuje objektykteré jsou **zakryty jinými** a tudíž nejsou viditelné. 
 +  Může probíhat: 
 +    **Offline** – rozdělení scény na **pohledové buňky** a výpočet **PVS** (Potentially Visible Set). 
 +    * **Online** – výpočet **za běhu** pomocí: 
 +      * **Depth bufferu**, **hierarchického Z-bufferu**, nebo 
 +      * **softwarové rasterizace** s jednoduchými tvary (occludery).
  
-=== Occlusion culling === +=== Potenciálně Viditelné Množiny (PVS) === 
- +  * Pro každou prostorovou **buňku** se předem určí množina potenciálně viditelných objektů. 
-  * Testování, zda objekt **není zakryt jiným**. +  * Při běhu se pak **vykreslují jen tyto objekty**.
-  * 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:   * Výpočet:
-    * **Offline** – náročný, ale velmi efektivní při běhu. +    * **Offline** – náročný výpočetně, ale efektivní při běhu. 
-    * **Online** – rychlejší, ale méně přesný+    * **Online** – rychlejší, vhodný pro dynamické scény, 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**.+
  
 +=== Hierarchické Zpracování a Konzistence ===
 +  * Scéna je strukturována pomocí prostorových hierarchií (např. **Octree**, **kd-tree**).
 +  * Efektivní redukce díky **coherent hierarchy** – využití podobnosti mezi snímky.
 +  * Pomáhá omezit opakované testy pro podobné oblasti.
Navigation

Playground

QR Code
QR Code statnice:bakalar:b4b39hry (generated for current page)