Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
statnice:bakalar:b4b39hry [2025/05/28 21:59] – [1. Typy animací a jejich využití] zapleka3 | statnice: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:// | [[https:// | ||
Line 555: | Line 555: | ||
==== 4. Míchání animačních klipů ==== | ==== 4. Míchání animačních klipů ==== | ||
- | * **LERP/ | + | * **LERP/ |
- | * Možné přechody (např. z běhu do skoku). | + | * Možné přechody |
- | * **Blending tree** – výpočet na základě parametrů (rychlost, směr). | + | * **Blending tree** – výpočet |
+ | * **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í |
- | * Více vrstev animace (např. tělo vs. ruce), kombinace | + | * Více vrstev animace |
+ | * Komplexní kombinace jako chůze + střelba | ||
+ | |||
+ | * **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é, | ||
==== 5. Skinning (Linear Blend Skinning) ==== | ==== 5. Skinning (Linear Blend Skinning) ==== | ||
- | Skinning je technika | + | **Skinning** je metoda |
- | * **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 | + | \[ |
- | * Váhy jsou **konvexní** (součet = 1, každá váha \( \geq 0 \)). | + | \vec{v}' |
- | * Výsledná pozice | + | \] |
+ | * **Linear Blend Skinning (LBS)** – každý vrchol | ||
+ | * Výhody: plynulé deformace, efektivní výpočet, běžné ve většině herních enginech. | ||
+ | | ||
+ | * Výsledná pozice: | ||
\[ | \[ | ||
- | | + | |
\] | \] | ||
- | * 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 | + | * **Pomocné klouby** – pro přesnější deformaci v problematických místech |
- | ==== 6. Animační křivky ==== | ||
- | Animační křivky určují, jak se transformace mění mezi klíčovými snímky. | ||
- | | + | ==== 6. Animační křivky, princip a využití ==== |
- | * **Catmull–Rom spline** – prochází dvěma | + | |
+ | **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á, | ||
+ | * 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 | ||
+ | * Umožňuje snadné nastavení rychlosti nástupu a odeznění. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===== Catmull–Rom spline | ||
+ | | ||
+ | * Každý segment | ||
+ | * Spojitá první derivace | ||
+ | * Vyžaduje alespoň čtyři body (první a poslední slouží k výpočtu tečen). | ||
+ | |||
+ | {{: | ||
+ | |||
+ | **Použití**: | ||
+ | * interpolace transformací v čase (rotace, pozice), | ||
+ | * řízení kamery, | ||
+ | * fyzikálně věrohodné trajektorie, | ||
+ | * animace parametrů (např. zoom, světlo), | ||
+ | * procedurální pohyby. | ||
+ | |||
+ | 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. | ||
- | 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 626: | 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**: | ||
==== 3. Optimalizace pomocí LOD ==== | ==== 3. Optimalizace pomocí LOD ==== | ||
- | LOD (Level of Detail) | + | **LOD (Level of Detail)** je technika pro snižování zátěže GPU tím, že se místo plně detailního |
- | * **Diskrétní LOD** – předpočítané verze modelu, | + | === Diskrétní LOD === |
- | * **Spojité LOD** – plynulá změna detailu | + | |
- | * Optimalizace také pomocí: | + | * Přepínání může být viditelné |
- | * **Normal map, bump map** – náhrada detailní geometrie texturou, | + | * **Alpha blending** – plynulý přechod pomocí průhlednosti. |
- | * **Mip-mapy, atlasy** – zmenšené | + | * **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 | ||
+ | * 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 (clustery) mají vlastní LOD. | ||
+ | * Dynamicky přepínány podle viditelnosti a detailu. | ||
+ | |||
+ | === Další optimalizační techniky === | ||
+ | | ||
+ | * **Mip-mapy** – předpočítané | ||
+ | * **Texturové atlasy** – sloučení více textur do jedné, snižují | ||
+ | * **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 655: | Line 711: | ||
==== 5. Redukování podle viditelnosti (Culling) ==== | ==== 5. Redukování podle viditelnosti (Culling) ==== | ||
- | Culling | + | **Culling** |
- | === 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. | ||
- | | + | === Occlusion Culling === |
- | * Objekty mimo frustum se **nevykreslují**. | + | |
+ | | ||
+ | | ||
+ | * **Online** – výpočet **za běhu** pomocí: | ||
+ | * **Depth bufferu**, **hierarchického Z-bufferu**, | ||
+ | * **softwarové rasterizace** s jednoduchými tvary (occludery). | ||
- | === Occlusion culling === | + | === Potenciálně |
- | + | * Pro každou | |
- | * Testování, | + | * 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ě | + | |
- | + | ||
- | * Pro každou **buňku | + | |
- | * 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ý |
- | * **Online** – rychlejší, | + | * **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. |