Include dashes in bottom footnotes

This commit is contained in:
Vojtěch Struhár 2025-06-07 10:32:00 +02:00
parent f0e56f090f
commit 1f1e4a8e77
27 changed files with 471 additions and 495 deletions

View File

@ -13,7 +13,7 @@ description: "TODO"
![width=600](./img/pgv03_block_diagram.png)
Blokový diagram je abstraktní, high-level popis fungování OpenGL [pv112](#pv112).
Blokový diagram je abstraktní, high-level popis fungování OpenGL [^pv112].
- **_Evaluators_** - aproximace křivek a povrchů
- **_Per-vertex operations_** - operace prováděné nad každým vrcholem - transformace, projekce z [model space do camera space](../szp08_modelovani_a_projekce), osvětlení jednotlivých vrcholů
@ -266,7 +266,7 @@ Z Primitive assembly dostáváme bod, čáru, nebo trojúhelník, který potřeb
![width=300](./img/pgv03_rast_point.png)
- **Úsečka**\
Při rasterizaci úsečky použijeme Bresenhamův algoritmus [pb009](#pb009). Poslední bod úsečky zůstane nevykreslený (half-open) kvůli návaznosti na další úsečky.
Při rasterizaci úsečky použijeme Bresenhamův algoritmus [^pb009]. Poslední bod úsečky zůstane nevykreslený (half-open) kvůli návaznosti na další úsečky.
```cpp
// From the solution of PB009
@ -320,7 +320,7 @@ void Application::bresenham(glm::vec2 start, glm::vec2 end, Raster& raster, Colo
- **Trojúhelník**
Při rasterizaci trojúhelníku můžeme použít Pinedaův algoritmus [pb009](#pb009). Pro každý trojúhelník zjistíme jeho bounding box a pro každý pixel v bounding boxu pomocí edge function zjistíme, zda leží uvnitř trojúhelníku.
Při rasterizaci trojúhelníku můžeme použít Pinedaův algoritmus [^pb009]. Pro každý trojúhelník zjistíme jeho bounding box a pro každý pixel v bounding boxu pomocí edge function zjistíme, zda leží uvnitř trojúhelníku.
Edge function využívá vlastností dot-productu: $E_{ABP} = (A - B).x * (P - B).y - (A - B).y * (P - B).x$. Výsledek funkce může být kladný, záporný, nebo nulový. Pokud je výsledek kladný, bod leží vlevo od úsečky AB, pokud je záporný, bod leží vpravo od úsečky AB, pokud je nulový, bod leží na úsečce AB. Edge funkci můžeme zkontrolovat pro všechny hrany trojúhelníka a pokud se znaménka rovnají (akceptujeme 0 pro kladná i záporná), bod leží uvnitř trojúhelníka a vykreslíme ho.
@ -369,13 +369,12 @@ Výhodami syntetizovaných textur je:
- parametrizovatelnost
> [!NOTE]
> Není na první pohled jasné, co je zamýšleno pod pojmem "syntéza textur". Pravděpodobně jsou myšleny popsané techniky generování textur pomocí shaderů. Jak ale podotknul Honza Byška, syntéza textur z definice popisuje proces vytváření velké textury z malých fragmentů jiných textur (listnatou louku z jednotlivých listů, kamenou dlažbu z kamenů, ...). Pro více informací koukněte na [synthesis1](#synthesis1) a [synthesis2](#synthesis2).
> Není na první pohled jasné, co je zamýšleno pod pojmem "syntéza textur". Pravděpodobně jsou myšleny popsané techniky generování textur pomocí shaderů. Jak ale podotknul Honza Byška, syntéza textur z definice popisuje proces vytváření velké textury z malých fragmentů jiných textur (listnatou louku z jednotlivých listů, kamenou dlažbu z kamenů, ...). Pro více informací koukněte na [^synthesis1] a [^synthesis2].
## Zdroje
- [[[pv112,1]]] Byška: PV112 Computer Graphics API
- [[[pb009,2]]] Byška: PB009 Principles of Computer Graphics
- [[[glsl_tutorial,3]]] https://cgvr.cs.uni-bremen.de/teaching/cg2_07/literatur/glsl_tutorial/index.html
- [[[synthesis1,4]]] https://en.wikipedia.org/wiki/Texture_synthesis
- [[[synthesis2,5]]] https://diglib.eg.org:8443/server/api/core/bitstreams/90ad4c13-45b1-4ec0-8ef2-76075b2c73ae/content
[^pv112]: Byška: PV112 Computer Graphics API
[^pb009]: Byška: PB009 Principles of Computer Graphics
[^glsl_tutorial]: https://cgvr.cs.uni-bremen.de/teaching/cg2_07/literatur/glsl_tutorial/index.html
[^synthesis1]: https://en.wikipedia.org/wiki/Texture_synthesis
[^synthesis2]: https://diglib.eg.org:8443/server/api/core/bitstreams/90ad4c13-45b1-4ec0-8ef2-76075b2c73ae/content

View File

@ -58,7 +58,7 @@ Tento algoritmus má složitost $O(n h)$, kde n je počet bodů a h je počet bo
### Konvexní obal v 3D
Problém konvexního obalu ve 3D je výrazně komplikovanější (a popravdě se na FI ani v jednom předmětu neučí...). Pro jeho konstrukci můžeme použít například algoritmus _QuickHull_ [so_hull_3d](#so_hull_3d).
Problém konvexního obalu ve 3D je výrazně komplikovanější (a popravdě se na FI ani v jednom předmětu neučí...). Pro jeho konstrukci můžeme použít například algoritmus _QuickHull_ [^so_hull_3d].
1. Zvolíme trojúhelník 3 bodů
- Bod s minimálními souřadnicemi $(x, y, z)$
@ -273,6 +273,5 @@ Range trees jsou paměťově náročnější, zato jsou rychlejší.
- Konstrukce: $O(n \log^{d-1} n)$
- Vyhledávání: $O(\log^{d} n + k)$
## Zdroje
- [[[so_hull_3d,1]]] https://stackoverflow.com/a/74968910/22953817
[^so_hull_3d]: https://stackoverflow.com/a/74968910/22953817

View File

@ -44,7 +44,7 @@ Složitost vytvoření Octree/Quadtree je $O(n \log n)$. Složitost vyhledáván
### k-D stromy
(Převzato z PGV04 [pgv04](#pgv04)) k-D strom střídavě dělí prostor (2D nebo 3D) na dvě poloviny podle střídajících se os. Ve uzlech jsou uloženy (typicky) dělící čáry a v listech samotné body.
(Převzato z PGV04 [^pgv04]) k-D strom střídavě dělí prostor (2D nebo 3D) na dvě poloviny podle střídajících se os. Ve uzlech jsou uloženy (typicky) dělící čáry a v listech samotné body.
![width=600](./img/pgv04_kd_build.png)
@ -153,6 +153,5 @@ Detekce kolizí je proces, kdy testujeme, zda se dva objekty v prostoru dotýkaj
Pro určení pořadí vykreslovaných objektů můžeme také využít hierarchické reprezentace scény. Typicky se pro tento problém využívá BSP stromů.
## Zdroje
- [[[pgv04,1]]] ../geometricke_algoritmy/
[^pgv04]: ../geometricke_algoritmy/

View File

@ -38,7 +38,7 @@ Před samotnou rekonstrukcí je často potřeba provézt ještě předzpracován
- **Billboarding**\
Vykreslujeme pouze body, nebo obdélníky na místech, kde se body nacházejí. Body mohou být billboardované (otočené ke kameře), nebo využít normálnových dat v bodech (= Splatting).
- **Surface Splatting**\
Normála povrchu odpovídá normále tečné plochy v každém bodě. Pro každý bod najdeme k bodů v okolí, které minimalizuje vzdálenost těchto bodů od naší roviny $n = \arg \min*{|n| = 1} \sum*{i=1}^k ((p_i - p) \cdot n)^2 $. [pa213](#pa213)
Normála povrchu odpovídá normále tečné plochy v každém bodě. Pro každý bod najdeme k bodů v okolí, které minimalizuje vzdálenost těchto bodů od naší roviny $n = \arg \min*{|n| = 1} \sum*{i=1}^k ((p_i - p) \cdot n)^2 $. [^pa213]
Pro nalezení normál využijeme PCA (Principal Component Analysis), normála poté odpovídá vlastnímu vektoru s nejmenší vlastní hodnotou. PCA však vrátí nekonzistentně otočené normály, které můžeme opravit buď otočením všech normál ke kameře, nebo iterativně opravováním sousedství.
@ -51,7 +51,7 @@ Před samotnou rekonstrukcí je často potřeba provézt ještě předzpracován
### Rekonstrukce povrchu
- **Delaunay triangulation**\
Vytváří trojúhelníkovou síť, tak že žádný bod se nenáchází ve vepsané kružnici žádného trojúhelníku. Maximalizuje nejmenší úhel trojúhelníků. [delaunay-triangulation](#delaunay-triangulation)
Vytváří trojúhelníkovou síť, tak že žádný bod se nenáchází ve vepsané kružnici žádného trojúhelníku. Maximalizuje nejmenší úhel trojúhelníků. [^delaunay-triangulation]
![width=300](./img/vph01_delaunay.svg)
@ -60,9 +60,9 @@ Před samotnou rekonstrukcí je často potřeba provézt ještě předzpracován
- **Alpha shapes**\
Obecnější metoda než delaunay triangulation, která umožňuje vytvářet i díry ve výsledném meshi. Alpha shapes jsou definovány pomocí parametru alpha, který určuje, jak moc se mohou body "vytahovat" z objemu.
[pa213](#pa213) má hezkou metaforu se zmrzlinou s čokoládovými kousky a sférickou naběračkou. Hodnota parametru alpha určuje, jak velká je naběračka, kterou se snažíme vybírat zmrzlinu tak, abychom se nedotkli čokoládových kousků.
[^pa213] má hezkou metaforu se zmrzlinou s čokoládovými kousky a sférickou naběračkou. Hodnota parametru alpha určuje, jak velká je naběračka, kterou se snažíme vybírat zmrzlinu tak, abychom se nedotkli čokoládových kousků.
V podstatě zobecnění delaunay triangulation, kde akceptujeme pouze takové trojúhelníky, které mají opsanou kružnici s poloměrem menším než alpha. [pa213](#pa213)
V podstatě zobecnění delaunay triangulation, kde akceptujeme pouze takové trojúhelníky, které mají opsanou kružnici s poloměrem menším než alpha. [^pa213]
**Příklady meshe pro různé hodnoty Alpha**
@ -103,14 +103,14 @@ Před samotnou rekonstrukcí je často potřeba provézt ještě předzpracován
![width=500rem](./img/vph01_marching_cubes.svg)
Díky tomu jsme schopní tyto kombinace předpočítat a pro každý voxel vykreslit odpovídající trojúhelníky. Výsledkem je mesh, který reprezentuje povrch objemu. [marching-cubes](#marching-cubes)
Díky tomu jsme schopní tyto kombinace předpočítat a pro každý voxel vykreslit odpovídající trojúhelníky. Výsledkem je mesh, který reprezentuje povrch objemu. [^marching-cubes]
Je možné tyto předpočítané body interpolovat podél hran, na kterých leží a tím zlepšit výsledný mesh.
Nevýhodou je tzv. Schodišťový efekt, kdy je výsledný mesh velmi hranatý. Zároveň výsledná mesh obsahuje obrovské množství trojúhelníků, což může být neefektivní.
- **Marching tetrahedra**\
Analogický k marching cubes, ale používá místo krychlí čtyřstěny. Řeší problém s některými nejednoznačnými konfiguracemi v marching cubes, a taky nikdy nebyl patentován (kdežto marching cubes ano). [marching-tetrahedra](#marching-tetrahedra)
Analogický k marching cubes, ale používá místo krychlí čtyřstěny. Řeší problém s některými nejednoznačnými konfiguracemi v marching cubes, a taky nikdy nebyl patentován (kdežto marching cubes ano). [^marching-tetrahedra]
- **Flying edges**\
Optimalizovaný algoritmus pro marching cubes, který prochází každou hranu pouze jednou.
- **Surface nets**\
@ -119,22 +119,22 @@ Před samotnou rekonstrukcí je často potřeba provézt ještě předzpracován
![width=500](./img/pgv06_surface_nets.png)
- **Dual contouring**\
Z voxelů se stanou vrcholy (tedy využíváme dualního grafu). Tyto vrcholy jsou ale posunuty tak, že povrch může obsahovat jak ostré hrany tak zaoblené plochy. [dual-contouring](#dual-contouring)
Z voxelů se stanou vrcholy (tedy využíváme dualního grafu). Tyto vrcholy jsou ale posunuty tak, že povrch může obsahovat jak ostré hrany tak zaoblené plochy. [^dual-contouring]
![width=500](./img/pgv06_dual_contouring.png)
### Direct volume rendering (přímé renderování objemu)
Nerekonstruujeme povrch, ale mapujeme data na _optické_ vlastnosti jako je barva a průhlednost. Během renderování se pak využívá path tracing, a tyto vlastnosti se akumulují podél jednotlivých paprsků. [gpugems](#gpugems)
Nerekonstruujeme povrch, ale mapujeme data na _optické_ vlastnosti jako je barva a průhlednost. Během renderování se pak využívá path tracing, a tyto vlastnosti se akumulují podél jednotlivých paprsků. [^gpugems]
V realitě tohle chování paprsku popisujeme integrály. V počítačové grafice se ale využívá aproximace pomocí sumy.
**The Process of Volume Rendering [gpugems](#gpugems)**
**The Process of Volume Rendering [^gpugems]**
![width=500rem](./img/vph01_direct_volume_rendering.jpg)
- **Emmission-absorption model**\
Paprsek vstupuje do objemu, kde je absorbován a emitován. Výsledná barva je pak výsledkem akumulace těchto vlastností. V notaci používáme: [pa213](#pa213)
Paprsek vstupuje do objemu, kde je absorbován a emitován. Výsledná barva je pak výsledkem akumulace těchto vlastností. V notaci používáme: [^pa213]
- $\kappa$ je funkce absorpce,
- $q$ je emise.
@ -158,7 +158,7 @@ V realitě tohle chování paprsku popisujeme integrály. V počítačové grafi
```
- **Volume rendering integral**\
Intenzitu světla $I$ v místě paprsku $s$ počítáme pomocí: [pa213](#pa213)
Intenzitu světla $I$ v místě paprsku $s$ počítáme pomocí: [^pa213]
```math
\begin{aligned}
@ -189,14 +189,13 @@ V realitě tohle chování paprsku popisujeme integrály. V počítačové grafi
Dá se utnout dřív, když víme jistě, že už je výsledek neprůhledný a tedy už se nic nezmění.
- **Transfer function**\
Funkce $T$, která mapuje hodnoty voxelů na barvu a průhlednost. Klasifikuje voxely. [pa213](#pa213)
Funkce $T$, která mapuje hodnoty voxelů na barvu a průhlednost. Klasifikuje voxely. [^pa213]
## Zdroje
- [[[pa010-2020,1]]] Sochor: PA010 Intermediate Computer Graphics (podzim 2020)
- [[[pa213, 2]]] PA213 Advanced Computer Graphics
- [[[marching-cubes,3]]] [Marching cubes: A high resolution 3D surface construction algorithm](https://dl.acm.org/doi/10.1145/37402.37422)
- [[[marching-tetrahedra,4]]] [Wikipedia: Marching tetrahedra](https://en.wikipedia.org/wiki/Marching_tetrahedra)
- [[[dual-contouring,5]]] [Dual Contouring Tutorial](https://www.boristhebrave.com/2018/04/15/dual-contouring-tutorial/)
- [[[delaunay-triangulation,6]]] [Wikipedia: Delaunay triangulation](https://en.wikipedia.org/wiki/Delaunay_triangulation)
- [[[gpugems,7]]] [GPU Gems: Volume Rendering Techniques](https://developer.nvidia.com/gpugems/gpugems/part-vi-beyond-triangles/chapter-39-volume-rendering-techniques)
[^pa010-2020]: Sochor: PA010 Intermediate Computer Graphics (podzim 2020)
[^pa213]: PA213 Advanced Computer Graphics
[^marching-cubes]: [Marching cubes: A high resolution 3D surface construction algorithm](https://dl.acm.org/doi/10.1145/37402.37422)
[^marching-tetrahedra]: [Wikipedia: Marching tetrahedra](https://en.wikipedia.org/wiki/Marching_tetrahedra)
[^dual-contouring]: [Dual Contouring Tutorial](https://www.boristhebrave.com/2018/04/15/dual-contouring-tutorial/)
[^delaunay-triangulation]: [Wikipedia: Delaunay triangulation](https://en.wikipedia.org/wiki/Delaunay_triangulation)
[^gpugems]: [GPU Gems: Volume Rendering Techniques](https://developer.nvidia.com/gpugems/gpugems/part-vi-beyond-triangles/chapter-39-volume-rendering-techniques)

View File

@ -21,7 +21,7 @@ description: "TODO"
## Blinn-Phongův osvětlovací model
Blinn-Phongův osvětlovací model je velice jednoduchý model osvětlení, který se skládá ze tří složek: ambientní, difuzní a spekulární. [pb009-io](#pb009-io)
Blinn-Phongův osvětlovací model je velice jednoduchý model osvětlení, který se skládá ze tří složek: ambientní, difuzní a spekulární. [^pb009-io]
![width=600](./img/pgv07_phong_overview.png)
@ -127,7 +127,7 @@ Participující média jsou média, která nejsou zcela průhledná, ale nejsou
## Physically based rendering (PBR)
Physically based rendering (PBR) je způsob renderování, který se snaží co nejvíce aproximovat realitu pomocí fyzikálních modelů světla, stínů, materiálů, očí, atd. [pv227-2022](#pv227-2022) Aproximuje efekty jako absorpci světla nebo jeho rozptyl pod povrchem objektů.
Physically based rendering (PBR) je způsob renderování, který se snaží co nejvíce aproximovat realitu pomocí fyzikálních modelů světla, stínů, materiálů, očí, atd. [^pv227-2022] Aproximuje efekty jako absorpci světla nebo jeho rozptyl pod povrchem objektů.
- **Absorption and scattering / absorpce a rozptyl**\
Materiály mohou světlo buď absorbovat (v takovém případě jsou alespoň částěčně průhledné) nebo odrážet a rozptylovat (objekty jsou matné). Většina materiálů kombinuje oba efekty. Světlo se může rozpylovat i pod povrchem (subsurface scattering).
@ -242,7 +242,6 @@ Pro výpočet spekulárního osvětlení se používá zrcadlový vektor a Fresn
![width=600](./img/pgv07_ibr.png)
## Zdroje
- [[[pv227-2022, 1]]] [PV227 GPU Rendering (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/PV227/)
- [[[pb009-io, 2]]] [Interaktivní osnova PB009 by xrosecky](https://is.muni.cz/auth/el/fi/jaro2023/PB009/index.qwarp)
[^pv227-2022]: [PV227 GPU Rendering (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/PV227/)
[^pb009-io]: [Interaktivní osnova PB009 by xrosecky](https://is.muni.cz/auth/el/fi/jaro2023/PB009/index.qwarp)

View File

@ -242,6 +242,5 @@ Stíny jsou důležité, jelikož:
- **Soft shadows**\
Existuje množství algoritmů. Například shadow mapy s Percentage Closer Filtering (PCF). Jsou ale výpočetně náročnější než hard shadows.
## Zdroje
- [[[pa010-2021,1]]] Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)
[^pa010-2021]: Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)

View File

@ -153,7 +153,7 @@ Greedy algoritmy nachází řešení globálního problému tak, že volí loká
_Inteligentní brute-force nad prostorem řešení._
Technika hledání řešení problému postupným sestavováním _kandidátního_ řešení. [backtracking](#backtracking)
Technika hledání řešení problému postupným sestavováním _kandidátního_ řešení. [^backtracking]
- Částečný kandidát může být zavrhnut, pokud nemůže být dokončen.
- Můžeme dokonce zavrhnout kompletní řešení, pokud je chceme najít všechna.
@ -432,7 +432,7 @@ _String matching_ označuje rodinu problémů obsahující třeba:
Většinou je řetězec polem znaků z konečné abecedy $\Sigma$. String matching algoritmy se ale dají použít na ledacos.
Vzorek $P$ se vyskytuje v textu $T$ s posunem $s$, pokud $0 \le s \le n - m$ a zároveň $T\lbrack (s+1) .. (s + m) \rbrack = P$. Pro nalezení platných posunů lze použít řadu algoritmů, které se liší složitostí předzpracování i samotného vyhledávání: [iv003-strings](#iv003-strings)
Vzorek $P$ se vyskytuje v textu $T$ s posunem $s$, pokud $0 \le s \le n - m$ a zároveň $T\lbrack (s+1) .. (s + m) \rbrack = P$. Pro nalezení platných posunů lze použít řadu algoritmů, které se liší složitostí předzpracování i samotného vyhledávání: [^iv003-strings]
| Algoritmus |
| ----------------------------------- |
@ -518,7 +518,7 @@ int KarpRabin(string text, string pattern)
- **Hashování**\
Trik spočívá v použití _rolling_ hashovacího algoritmu. Ten je schopný při výpočtu hashe pro $T\lbrack s .. (s + m) \rbrack$ použít hash $T\lbrack s .. (s + m - 1) \rbrack$ s využitím pouze jednoho dalšího znaku $T\lbrack s + m \rbrack$. Přepočet hashe je tedy $\mathcal{O}(1)$.
Jeden takový algoritmus lze získat použitím Hornerova schématu pro evaluaci polynomu. [horner](#horner) Předpokládejme, že $\Sigma = \{0, 1, ..., 9\}$ (velikost může být libovolná), pak pro hash $h$ platí
Jeden takový algoritmus lze získat použitím Hornerova schématu pro evaluaci polynomu. [^horner] Předpokládejme, že $\Sigma = \{0, 1, ..., 9\}$ (velikost může být libovolná), pak pro hash $h$ platí
```math
\begin{align*}
@ -601,7 +601,7 @@ Jinými slovy na indexu druhého `D` je `abcD` nejdelší prefix $P$, který je
- **Složitost**\
Vytvoření automatu vyžaduje $\Theta(m^3 \cdot |\Sigma|)$ času, dá se však provést efektivněji než v `CreateAutomaton` a to v čase $\Theta(m \cdot |\Sigma|)$.
Složitost hledání je pak v $\Theta(n)$. [iv003-strings](#iv003-strings)
Složitost hledání je pak v $\Theta(n)$. [^iv003-strings]
### Knuth-Morris-Pratt (KMP)
@ -672,15 +672,14 @@ int KnuthMorrisPratt(string text, string pattern)
> Nejsem si jistý, že ty indexy v kódu výše mám dobře.
> [!NOTE]
> "In other words we can amortize character mismatches against earlier character matches." [iv003-strings](#iv003-strings)
> "In other words we can amortize character mismatches against earlier character matches." [^iv003-strings]
- **Složitost**\
Amortizací neúspěšných porovnání vůči úspěšným získáme $\mathcal{O}(m)$ pro `ComputeFailure` a $\mathcal{O}(n)$ pro `KnuthMorrisPratt`.
## Zdroje
- [[[iv003, 1]]] [IV003 Algoritmy a datové struktury II (jaro 2021)](https://is.muni.cz/auth/el/fi/jaro2021/IV003/)
- [[[iv003-strings,2]]] https://is.muni.cz/auth/el/fi/jaro2021/IV003/um/slides/stringmatching.pdf
- [[[rabin-karp-wiki,3]]] https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm
- [[[horner,4]]] https://en.wikipedia.org/wiki/Horner%27s_method
- [[[backtracking,5]]] https://betterprogramming.pub/the-technical-interview-guide-to-backtracking-e1a03ca4abad
[^iv003]: [IV003 Algoritmy a datové struktury II (jaro 2021)](https://is.muni.cz/auth/el/fi/jaro2021/IV003/)
[^iv003-strings]: https://is.muni.cz/auth/el/fi/jaro2021/IV003/um/slides/stringmatching.pdf
[^rabin-karp-wiki]: https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm
[^horner]: https://en.wikipedia.org/wiki/Horner%27s_method
[^backtracking]: https://betterprogramming.pub/the-technical-interview-guide-to-backtracking-e1a03ca4abad

View File

@ -10,7 +10,7 @@ description: "TODO"
- **Numerická analýza / numerical analysis**\
Oblast matematiky / informatiky zabývající se tvorbou numerických metod a algoritmů, které řeší problémy matematické analýzy (např. derivace, integrály a podobný symbolický balast) pomocí numerické aproximace. [numerical-analysis](#numerical-analysis)
Oblast matematiky / informatiky zabývající se tvorbou numerických metod a algoritmů, které řeší problémy matematické analýzy (např. derivace, integrály a podobný symbolický balast) pomocí numerické aproximace. [^numerical-analysis]
Je výhodná v situacích, kdy problém nelze řešit analyticky nebo je to příliš složité a není to (výpočetní) čas.
@ -26,12 +26,12 @@ description: "TODO"
- **Numerická stabilita**\
Schopnost numerické metody zpracovat chyby vstupních dat a výpočetních operací.
Desetinná čísla jsou v počítačích nevyhnutelně reprezentována nepřesně. Numericky stabilní metody jsou takové, které tyto nepřesnosti **nezhoršují**. [numerical-stability](#numerical-stability)
Desetinná čísla jsou v počítačích nevyhnutelně reprezentována nepřesně. Numericky stabilní metody jsou takové, které tyto nepřesnosti **nezhoršují**. [^numerical-stability]
- **Řád metody / order of accuracy / order of approximation**\
Hodnota reprezentující, jak rychle metoda konverguje k výsledku, resp. jak přesný je její odhad.
Numerická metoda obvykle konverguje snižováním nějakého _kroku_ $h$. Pokud ho lze zvolit libovolně malý, a lze-li prohlásit, že pro chybu aproximace $E$ platí: [rate](#rate) [numericka-metoda](#numericka-metoda) [order-question](#order-question)
Numerická metoda obvykle konverguje snižováním nějakého _kroku_ $h$. Pokud ho lze zvolit libovolně malý, a lze-li prohlásit, že pro chybu aproximace $E$ platí: [^rate] [^numericka-metoda] [^order-question]
```math
\begin{aligned}
@ -47,16 +47,16 @@ description: "TODO"
## Iterativní metody pro řešení nelineárních rovnic
- **Root-finding problem**\
Problém nalezení _kořenů_ (root) funkce $f$. T.j. takových parametrů $x, ...$, kde funkce vrací 0: [root-finding](#root-finding)
Problém nalezení _kořenů_ (root) funkce $f$. T.j. takových parametrů $x, ...$, kde funkce vrací 0: [^root-finding]
```math
f(x, ...) = 0
```
- **Iterative methods for root-finding problem**\
Metody pro řešení root-finding problemu, které využívají iterativního přístupu. Tedy opakují nějaký výpočet a zpřesňují svůj odhad, dokud nedosáhnou požadované přesnosti. [ma018](#ma018) [root-finding](#root-finding)
Metody pro řešení root-finding problemu, které využívají iterativního přístupu. Tedy opakují nějaký výpočet a zpřesňují svůj odhad, dokud nedosáhnou požadované přesnosti. [^ma018] [^root-finding]
- **Řád metody / rate of convergence**\
Hodnota reprezentující, jak rychle metoda konverguje k výsledku. [rate](#rate)
Hodnota reprezentující, jak rychle metoda konverguje k výsledku. [^rate]
- **Prostá iterační metoda / metoda pevného bodu / fixed-point iteration**\
Používá se pro rovnice typu $x = g(x)$.
@ -88,7 +88,7 @@ description: "TODO"
![width=400](./img/szp02_secant_method.png)
- **Metoda regula falsi**\
Je _bracketing_ metoda, tedy metoda, která využívá intervalu, ve kterém se nachází kořen. Nemusí se použít iterativně, ale v iterativní podobě tento interval postupně zmenšuje. [regula-falsi](#regula-falsi)
Je _bracketing_ metoda, tedy metoda, která využívá intervalu, ve kterém se nachází kořen. Nemusí se použít iterativně, ale v iterativní podobě tento interval postupně zmenšuje. [^regula-falsi]
```math
x_{k+1} = x_k - \frac{x_k - x_s}{f(x_k) - f(x_s)} f(x_k)
@ -100,7 +100,7 @@ description: "TODO"
### Gaussova eliminace
Systém rovnice je přepsán do matice. Gaussova eliminace je posloupnost operací, jejichž cílem je převést matici do horní trojúhelníkové matice (_row echelon form_). [gauss-elimination](#gauss-elimination) Povoleny jsou následující operace:
Systém rovnice je přepsán do matice. Gaussova eliminace je posloupnost operací, jejichž cílem je převést matici do horní trojúhelníkové matice (_row echelon form_). [^gauss-elimination] Povoleny jsou následující operace:
- výměna dvou řádků,
- vynásobení řádku nenulovou konstantou,
@ -108,7 +108,7 @@ Systém rovnice je přepsán do matice. Gaussova eliminace je posloupnost operac
### Jacobiho iterační metoda
Iterativní algoritmus pro řešení soustavy lineárních rovnic. Rozděluje vstupní matici lineárních rovnic na matici diagonál $D$, dolní trojúhelníkovou matici $L$ a horní trojúhelníkovou matici $U$. [jacobi-method](#jacobi-method)
Iterativní algoritmus pro řešení soustavy lineárních rovnic. Rozděluje vstupní matici lineárních rovnic na matici diagonál $D$, dolní trojúhelníkovou matici $L$ a horní trojúhelníkovou matici $U$. [^jacobi-method]
Nechť $A\mathbf{x} = \mathbf{b}$ je systém $n$ lineárních rovnic. Tedy:
@ -178,7 +178,7 @@ Jelikož $L + U = A - D$, dá to zapsat i jako:
### Gaussova-Seidelova iterační metoda
Iterativní metoda pro řešení soustavy lineárních rovnic. Dělí vstupní matici na spodní trojúhelníkovou matici $L_*$ (včetně diagonály, tedy $L_* = D + L$) a striktně horní trojúhelníkovou matici $U$ (diagonála je nulová). Algoritmus vypadá takto: [gauss-seidel](#gauss-seidel)
Iterativní metoda pro řešení soustavy lineárních rovnic. Dělí vstupní matici na spodní trojúhelníkovou matici $L_*$ (včetně diagonály, tedy $L_* = D + L$) a striktně horní trojúhelníkovou matici $U$ (diagonála je nulová). Algoritmus vypadá takto: [^gauss-seidel]
1. Zvolíme počáteční odhad $\mathbf{x}^{(0)}$.
2. Nový odhad získáme ze vztahu:
@ -203,7 +203,7 @@ T_{gs} &= (D + L)^{-1} U = L_*^{-1} U \\
### Relaxační iterativní metody
Modifikace Gauss-Seidelovy metody. Využívá parametr $\omega$, který určuje, jak moc se má nový odhad lišit od předchozího. Vztah pro další iteraci se mění na: [relaxation-method](#relaxation-method)
Modifikace Gauss-Seidelovy metody. Využívá parametr $\omega$, který určuje, jak moc se má nový odhad lišit od předchozího. Vztah pro další iteraci se mění na: [^relaxation-method]
```math
\begin{align*}
@ -274,7 +274,7 @@ Metody podobné Gaussově eliminaci, ale s vlastnostmi, které mohou být vyhodn
## Numerická diferenciace
Algoritmy numerické diferenciace (derivace) počítají odhady derivace reálných funkcí -- aproximují $f'(x)$. Využívají při tom známé hodnoty této funkce a jiné znalosti a předpoklady. [differentiation](#differentiation)
Algoritmy numerické diferenciace (derivace) počítají odhady derivace reálných funkcí -- aproximují $f'(x)$. Využívají při tom známé hodnoty této funkce a jiné znalosti a předpoklady. [^differentiation]
Numerická diferenciace se využívá pro aproximaci differenciálních rovnic (převodem na _diferenční rovnice_).
@ -285,7 +285,7 @@ Numerická diferenciace se využívá pro aproximaci differenciálních rovnic (
> Lagrangeovu interpolaci řeší část otázky [Křivky a povrchy](../szp05_krivky_a_povrchy/).
- **Finite difference method**\
Rodina metod numerické diferenciace, které využívají _konečné diference_. Tedy approximují limitu v definici derivace malými posuny ve vstupních hodnotách diferenciovaných funkcí. [finite-difference-method](#finite-difference-method)
Rodina metod numerické diferenciace, které využívají _konečné diference_. Tedy approximují limitu v definici derivace malými posuny ve vstupních hodnotách diferenciovaných funkcí. [^finite-difference-method]
Jednotlivým "odstínům" -- konkrétním výpočetním vzorcům -- téhle metody se říká _diferenciační schémata_.
@ -293,7 +293,7 @@ Numerická diferenciace se využívá pro aproximaci differenciálních rovnic (
> Abych pravdu řekl, nepodařilo se mi najít zdroj pro konkrétní definici pojmu "diferenciační schéma".
- **(Konečné) diference prvního řádu / first-order (finite) differences**\
Nejjednodušší schéma numerické diferenciace. Vychází z definice derivace. [finite-difference](#finite-difference)
Nejjednodušší schéma numerické diferenciace. Vychází z definice derivace. [^finite-difference]
- _Dopředná diference / forward (finite) difference_
@ -319,24 +319,23 @@ Numerická diferenciace se využívá pro aproximaci differenciálních rovnic (
> Tečna je tak napodobena sečnou.
- **Richardson extrapolation**\
Způsob zlepšení rate of convergence iterativních metod. [richardson](#richardson)
Způsob zlepšení rate of convergence iterativních metod. [^richardson]
## Zdroje
- [[[ma018,1]]] [MA018 Numerical Methods (podzim 2019)](https://is.muni.cz/auth/el/fi/podzim2019/MA018/)
- [[[numerical-analysis,2]]] [Wikipedia: Numerical analysis](https://en.wikipedia.org/wiki/Numerical_analysis)
- [[[root-finding,3]]] [Wikipedia: Root-finding algorithms](https://en.wikipedia.org/wiki/Root-finding_algorithms)
- [[[rate, 4]]] [Wikipedia: Rate of convergence](https://en.wikipedia.org/wiki/Rate_of_convergence)
- [[[regula-falsi,5]]] [Wikipedia: Regula falsi](https://en.wikipedia.org/wiki/Regula_falsi)
- [[[gauss-elimination,6]]] [Wikipedia: Gaussian elimination](https://en.wikipedia.org/wiki/Gaussian_elimination)
- [[[jacobi-method,7]]] [Wikipedia: Jacobi method](https://en.wikipedia.org/wiki/Jacobi_method)
- [[[gauss-seidel,8]]] [Wikipedia: Gauss-Seidel method](https://en.wikipedia.org/wiki/Gauss%E2%80%93Seidel_method)
- [[[relaxation-method, 9]]] [Wikipedia: Relaxation (iterative method)](<https://en.wikipedia.org/wiki/Relaxation_(iterative_method)>)
- [[[differentiation, 10]]] [Wikipedia: Numerical differentiation](https://en.wikipedia.org/wiki/Numerical_differentiation)
- [[[finite-difference, 11]]] [Wikipedia: Finite difference](https://en.wikipedia.org/wiki/Finite_difference)
- [[[finite-difference-method, 12]]] [Wikipedia: Finite difference method](https://en.wikipedia.org/wiki/Finite_difference_method)
- [[[richardson,13]]] [Wikipedia: Richardson extrapolation](https://en.wikipedia.org/wiki/Richardson_extrapolation)
- [[[linear-eq, 14]]] [Wikipedia: System of linear equations](https://en.wikipedia.org/wiki/System_of_linear_equations)
- [[[numerical-stability, 15]]] [Wikipedia: Numerical stability](https://en.wikipedia.org/wiki/Numerical_stability)
- [[[numericka-metoda,16]]] [Wikipedia: Numerická metoda](https://cs.wikipedia.org/wiki/Numerick%C3%A1_metoda)
- [[[order-question,17]]] [What is the intuitive meaning of order of accuracy and order of approximation?](https://math.stackexchange.com/questions/2873291/what-is-the-intuitive-meaning-of-order-of-accuracy-and-order-of-approximation)
[^ma018]: [MA018 Numerical Methods (podzim 2019)](https://is.muni.cz/auth/el/fi/podzim2019/MA018/)
[^numerical-analysis]: [Wikipedia: Numerical analysis](https://en.wikipedia.org/wiki/Numerical_analysis)
[^root-finding]: [Wikipedia: Root-finding algorithms](https://en.wikipedia.org/wiki/Root-finding_algorithms)
[^rate]: [Wikipedia: Rate of convergence](https://en.wikipedia.org/wiki/Rate_of_convergence)
[^regula-falsi]: [Wikipedia: Regula falsi](https://en.wikipedia.org/wiki/Regula_falsi)
[^gauss-elimination]: [Wikipedia: Gaussian elimination](https://en.wikipedia.org/wiki/Gaussian_elimination)
[^jacobi-method]: [Wikipedia: Jacobi method](https://en.wikipedia.org/wiki/Jacobi_method)
[^gauss-seidel]: [Wikipedia: Gauss-Seidel method](https://en.wikipedia.org/wiki/Gauss%E2%80%93Seidel_method)
[^relaxation-method]: [Wikipedia: Relaxation (iterative method)](<https://en.wikipedia.org/wiki/Relaxation_(iterative_method)>)
[^differentiation]: [Wikipedia: Numerical differentiation](https://en.wikipedia.org/wiki/Numerical_differentiation)
[^finite-difference]: [Wikipedia: Finite difference](https://en.wikipedia.org/wiki/Finite_difference)
[^finite-difference-method]: [Wikipedia: Finite difference method](https://en.wikipedia.org/wiki/Finite_difference_method)
[^richardson]: [Wikipedia: Richardson extrapolation](https://en.wikipedia.org/wiki/Richardson_extrapolation)
[^linear-eq]: [Wikipedia: System of linear equations](https://en.wikipedia.org/wiki/System_of_linear_equations)
[^numerical-stability]: [Wikipedia: Numerical stability](https://en.wikipedia.org/wiki/Numerical_stability)
[^numericka-metoda]: [Wikipedia: Numerická metoda](https://cs.wikipedia.org/wiki/Numerick%C3%A1_metoda)
[^order-question]: [What is the intuitive meaning of order of accuracy and order of approximation?](https://math.stackexchange.com/questions/2873291/what-is-the-intuitive-meaning-of-order-of-accuracy-and-order-of-approximation)

View File

@ -15,7 +15,7 @@ description: "TODO"
> Viz bakalářské otázky [Kombinatorika a pravděpodobnost](../../szb/kombinatorika-a-pravdepodobnost/) a [Statistika](../../szb/statistika/).
- **Statistika**\
Zabývá se sbíráním, organizací, analýzou, interpretací a prezentací dat. [statistics](#statistics)
Zabývá se sbíráním, organizací, analýzou, interpretací a prezentací dat. [^statistics]
- _Popisná / decriptive_: shrnuje data, která máme,
- _Inferenční / inferential_: předpokládá, že data která máme jsou jen součástí celku; pracuje s modely celé populace a hypotézami o ní.
@ -142,7 +142,7 @@ Stejně jako náhodné veličiny popisují jevy, číselné charakteristiky popi
Průměr hodnot veličiny vážený jejich pravděpodobností. Značí se $\overline{X}$ nebo $E(X)$.
> [!NOTE]
> Taky někdy označovaný jako _obecný moment prvního řádu / první obecný moment_. [moment](#moment)
> Taky někdy označovaný jako _obecný moment prvního řádu / první obecný moment_. [^moment]
- **$\alpha$-kvantil $Q_\alpha$**\
Dělí statický soubor na stejně velké části.
@ -173,7 +173,7 @@ Jak moc se od sebe prvky liší (nezávisle na konstantním posunutí)?
```
> [!NOTE]
> Taky někdy označovaný jako _centrální moment druhého řádu / druhý centrální moment_. [moment](#moment)
> Taky někdy označovaný jako _centrální moment druhého řádu / druhý centrální moment_. [^moment]
- **Směrodatná odchylka / standard deviation**\
Míra variability NV. Značí se $\sigma$ nebo $\text{SD}(X)$. Je definovaná jako $\sqrt{\sigma^2}$.
@ -283,7 +283,7 @@ Popisuje chování _výběrového průměru_ pro velké soubory vzorků a umož
- **Nejlepší nestranný odhad / best unbiased estimator**\
Nestranný odhad, který má nejmenší rozptyl ze všech nestranných odhadů.
- **Konzistentní odhad / consistent estimator**\
Metoda odhadu parametru $\theta$ taková, že s počtem vzorků $n$ konverguje k $\theta$ pro $n \to \infty$. [consistent-estimator](#consistent-estimator)
Metoda odhadu parametru $\theta$ taková, že s počtem vzorků $n$ konverguje k $\theta$ pro $n \to \infty$. [^consistent-estimator]
- **(Výběrová) statistika / (sample) statistic**\
Náhodná veličina dána funkcí, která bere výběrový soubor a vrací číslo. Máme například:
@ -299,7 +299,7 @@ Popisuje chování _výběrového průměru_ pro velké soubory vzorků a umož
> ```
> [!TIP]
> _Estimator_ je funkce počítající statistiku použitá k odhadu parametru. [statistic](#statistic)
> _Estimator_ je funkce počítající statistiku použitá k odhadu parametru. [^statistic]
- **Bodový odhad / point estimate / pointwise estimate**\
Odhad parametru daný **jednou hodnotou**, která hodnotu parametru aproximuje.
@ -363,9 +363,9 @@ Máme vzorek velikosti $n$ s výběrovým průměrem $\overline{X}$ a výběrov
> Likelihood nemusí nutně vracet čísla z intervalu $\lbrack 0, 1 \rbrack$.
- **Maximum likelihood estimation (MLE)**\
Metoda odhadu parametru založená na maximalizaci likelihoodu, že model sedí na naměřená data. [mle](#mle)
Metoda odhadu parametru založená na maximalizaci likelihoodu, že model sedí na naměřená data. [^mle]
- **Method of moments (MOM)**\
Metoda odhadu parametru založená na rovnosti teoretického a výběrového momentu. [mom](#mom)
Metoda odhadu parametru založená na rovnosti teoretického a výběrového momentu. [^mom]
## Testování statistických hypotéz
@ -377,7 +377,7 @@ Máme vzorek velikosti $n$ s výběrovým průměrem $\overline{X}$ a výběrov
- _Null hypothesis $H_0$_: "výchozí nastavení"; často tvrdí, že nějaká vlastnost neexistuje.
- _Alternative hypothesis $H_1$_: "to co, chceme dokázat"; opak $H_0$.
Alternativní hypotézu _potvrzujeme_ tak, že _vyvracíme_ nulovou hypotézu. Pokud se nám nepodaří vyvrátit $H_0$, pak o $H_1$ nevíme nic. [null](#null)
Alternativní hypotézu _potvrzujeme_ tak, že _vyvracíme_ nulovou hypotézu. Pokud se nám nepodaří vyvrátit $H_0$, pak o $H_1$ nevíme nic. [^null]
> Na testování použijeme statistiku $T_n = T(\mathbf{X})$, kterou nazýváme **testovací statistikou**. Množinu hodnot, které může testovací statistika nabýt, rozdělíme na dvě disjunktní oblasti. Jednu označíme $W_\alpha$, a nazveme ji **kritickou oblastí** (nebo také _oblastí zamítnutí hypotézy_ (**region of rejection**, **critical region**)) a druhá je doplňkovou oblastí (oblast _nezamítnutí testované hypotézy_).
>
@ -407,7 +407,7 @@ Platí presumpce nevinny. Předpokládáme, že člověk zločin nespáchal, dok
- **$p$-hodnota (hladina významnosti)**\
Nejmenší hladina významnosti $\alpha$, při které ještě zamítáme $H_0$. [p-value](#p-value)
Nejmenší hladina významnosti $\alpha$, při které ještě zamítáme $H_0$. [^p-value]
Pravděpodobnost, že došlo k chybě typu I -- zavrhnuli jsme $H_0$, ačkoli platí.
@ -423,9 +423,9 @@ Platí presumpce nevinny. Předpokládáme, že člověk zločin nespáchal, dok
Parametrické testy jsou založené na parametrech pravděpodobnostních rozdělení.
- **Studentův T-test**\
Umožňuje ověřit zda normální rozdělení má danou střední hodnotu. Taky umožňuje ověřit zda dvě normální rozdělení mají stejnou střední hodnotu, za předpokladu, že mají stejný (byť neznámý) rozptyl. [t-test](#t-test)
Umožňuje ověřit zda normální rozdělení má danou střední hodnotu. Taky umožňuje ověřit zda dvě normální rozdělení mají stejnou střední hodnotu, za předpokladu, že mají stejný (byť neznámý) rozptyl. [^t-test]
- **Analysis of variance (ANOVA)**\
Testuje rozdíly mezi středními hodnotami dvou a více skupin. Používá se k ověření, zda rozptyly dvou nebo více množin dat jsou stejné až na konstantní posun a škálování. [anova](#anova)
Testuje rozdíly mezi středními hodnotami dvou a více skupin. Používá se k ověření, zda rozptyly dvou nebo více množin dat jsou stejné až na konstantní posun a škálování. [^anova]
### Neparametrické testy
@ -436,7 +436,7 @@ Neparametrické testy nejsou založené (jen) na parametrech pravděpodobnostní
- **One-sample Wilcoxon signed-rank test**\
Testuje, zda vzorky patří do symetrického rozdělení s daným mediánem.
- **Pearsonův chi-squared ($\chi^2$) test**\
Umožňuje ověřit, že dvě kategorické NV jsou nezávislé. [chi-squared](#chi-squared)
Umožňuje ověřit, že dvě kategorické NV jsou nezávislé. [^chi-squared]
### Testy (ne)závislosti náhodných veličin
@ -448,7 +448,7 @@ Neparametrické testy nejsou založené (jen) na parametrech pravděpodobnostní
**Výskyt $A$ nemá vliv na výskyt $B$.**
- "Při při prvním hodu padne 6" a "při druhém hodu padne 6" jsou **nezávislé** jevy.
- Naproti tomu jev, že padne 6 při prvním hodu kostkou a jev, že součet čísel zaznamenaných v prvním a druhém pokusu je 8, jsou **závislé** jevy. [nezavislost](#nezavislost)
- Naproti tomu jev, že padne 6 při prvním hodu kostkou a jev, že součet čísel zaznamenaných v prvním a druhém pokusu je 8, jsou **závislé** jevy. [^nezavislost]
- **Nezávislost diskrétních NV**
@ -520,22 +520,21 @@ Neparametrické testy nejsou založené (jen) na parametrech pravděpodobnostní
Testová statistika má Studentovo t-rozdělení.
## Zdroje
- [[[statistics,1]]] [Wikipedia: Statistics](https://en.wikipedia.org/wiki/Statistics)
- [[[nv,2]]] [Wikipedia: Náhodná veličina](https://cs.wikipedia.org/wiki/N%C3%A1hodn%C3%A1_veli%C4%8Dina)
- [[[cdf,3]]] [Wikipedia: Cumulative distribution function](https://en.wikipedia.org/wiki/Cumulative_distribution_function)
- [[[mean,4]]] [Wikipedia: Mean](https://en.wikipedia.org/wiki/Mean)
- [[[clv,5]]] [Wikipedia: Centrální limitní věta](https://cs.wikipedia.org/wiki/Centr%C3%A1ln%C3%AD_limitn%C3%AD_v%C4%9Bta)
- [[[consistent-estimator,6]]] [Wikipedia: Consistent estimator](https://en.wikipedia.org/wiki/Consistent_estimator)
- [[[statistic, 7]]] [Wikipedia: Statistic](https://en.wikipedia.org/wiki/Statistic)
- [[[mle, 8]]] [Wikipedia: Maximum likelihood estimation](https://en.wikipedia.org/wiki/Maximum_likelihood_estimation)
- [[[mom, 9]]] [Wikipedia: Method of moments](<https://en.wikipedia.org/wiki/Method_of_moments_(statistics)>)
- [[[null, 10]]] [Wikipedia: Null hypothesis](https://en.wikipedia.org/wiki/Null_hypothesis)
- [[[p-value, 11]]] [Wikipedia: P-hodnota](https://cs.wikipedia.org/wiki/P-hodnota)
- [[[mv013,12]]] [MV013 Statistics for Computer Science (jaro 2021)](https://is.muni.cz/auth/el/fi/jaro2021/MV013/)
- [[[anova, 13]]] [Wikipedia: Analysis of variance](https://en.wikipedia.org/wiki/Analysis_of_variance)
- [[[nezavislost,14]]] [Wikipedia: Statistická nezávislost](https://cs.wikipedia.org/wiki/Statistick%C3%A1_nez%C3%A1vislost)
- [[[t-test, 15]]] [Wikipedia: T-test](https://cs.wikipedia.org/wiki/T-test)
- [[[chi-squared,16]]] [Chi-square tests](https://www.scribbr.com/statistics/chi-square-tests/)
- [[[moment, 17]]] [Momenty rozdělení](http://kfe.fjfi.cvut.cz/~limpouch/sigdat/pravdh/node10.html)
[^statistics]: [Wikipedia: Statistics](https://en.wikipedia.org/wiki/Statistics)
[^nv]: [Wikipedia: Náhodná veličina](https://cs.wikipedia.org/wiki/N%C3%A1hodn%C3%A1_veli%C4%8Dina)
[^cdf]: [Wikipedia: Cumulative distribution function](https://en.wikipedia.org/wiki/Cumulative_distribution_function)
[^mean]: [Wikipedia: Mean](https://en.wikipedia.org/wiki/Mean)
[^clv]: [Wikipedia: Centrální limitní věta](https://cs.wikipedia.org/wiki/Centr%C3%A1ln%C3%AD_limitn%C3%AD_v%C4%9Bta)
[^consistent-estimator]: [Wikipedia: Consistent estimator](https://en.wikipedia.org/wiki/Consistent_estimator)
[^statistic]: [Wikipedia: Statistic](https://en.wikipedia.org/wiki/Statistic)
[^mle]: [Wikipedia: Maximum likelihood estimation](https://en.wikipedia.org/wiki/Maximum_likelihood_estimation)
[^mom]: [Wikipedia: Method of moments](<https://en.wikipedia.org/wiki/Method_of_moments_(statistics)>)
[^null]: [Wikipedia: Null hypothesis](https://en.wikipedia.org/wiki/Null_hypothesis)
[^p-value]: [Wikipedia: P-hodnota](https://cs.wikipedia.org/wiki/P-hodnota)
[^mv013]: [MV013 Statistics for Computer Science (jaro 2021)](https://is.muni.cz/auth/el/fi/jaro2021/MV013/)
[^anova]: [Wikipedia: Analysis of variance](https://en.wikipedia.org/wiki/Analysis_of_variance)
[^nezavislost]: [Wikipedia: Statistická nezávislost](https://cs.wikipedia.org/wiki/Statistick%C3%A1_nez%C3%A1vislost)
[^t-test]: [Wikipedia: T-test](https://cs.wikipedia.org/wiki/T-test)
[^chi-squared]: [Chi-square tests](https://www.scribbr.com/statistics/chi-square-tests/)
[^moment]: [Momenty rozdělení](http://kfe.fjfi.cvut.cz/~limpouch/sigdat/pravdh/node10.html)

View File

@ -16,21 +16,21 @@ description: "TODO"
- **Geometrie**
- Mění jí deformace.
- Např. to, kde jsou body.
- Zahrnuje zakřivení (curvature), plochu (area), vzdálenosti mezi body, atd. [pa010-2021](#pa010-2021)
- Zahrnuje zakřivení (curvature), plochu (area), vzdálenosti mezi body, atd. [^pa010-2021]
- **Topologie**
- Nemění ji deformace.
- Např. to jak jsou body propojené.
- Sousednost (neighborhood), souvislost (connectedness), adjacency. atd. [pa010-2021](#pa010-2021)
- Sousednost (neighborhood), souvislost (connectedness), adjacency. atd. [^pa010-2021]
**Topology [topology](#topology)**
**Topology [^topology]**
![Topology](./img/szp04_topology.png)
- **Topological manifold**\
Prostor/útvar, který lokálně _připomíná_ (je homeomorfní) $n$-dimenzionální Euklidovský prostor. [pa010-2021](#pa010-2021) [manifold-wiki](#manifold-wiki)
Prostor/útvar, který lokálně _připomíná_ (je homeomorfní) $n$-dimenzionální Euklidovský prostor. [^pa010-2021] [^manifold-wiki]
$n$-manifold je takový topologický manifold, kde okolí každého bodu je homeomorfní s $n$-dimenzionálním Euklidovským prostorem. [manifold-wiki](#manifold-wiki)
$n$-manifold je takový topologický manifold, kde okolí každého bodu je homeomorfní s $n$-dimenzionálním Euklidovským prostorem. [^manifold-wiki]
Manifoldy jsou typicky fyzikálně validní a efektivní (např. pomocí half-edge).
@ -38,7 +38,7 @@ description: "TODO"
- Libovolný diskrétní prostor je 0-manifold.
- Kruh je 1-manifold.
- Torus (donut) a Kleinova láhev je 2-manifold (povrch).
- Každý povrch je 2-manifold až na neuzavřené hrany. [pa010-2021](#pa010-2021)
- Každý povrch je 2-manifold až na neuzavřené hrany. [^pa010-2021]
- $n$-dimenzionální koule je $n$-manifold.
![width=100%](./img/szp04_manifold.png)
@ -85,7 +85,7 @@ description: "TODO"
> [!TIP]
> Je to **maximální** počet těch řezů.
> <br>
> Následující povrch[genus](#genus) jde rozdělit podél červené křivky na dva, ale neuvažujeme ji, protože chceme **nejvyší možný** počet řezů, které povrch **nerozdělí**.
> Následující povrch[^genus] jde rozdělit podél červené křivky na dva, ale neuvažujeme ji, protože chceme **nejvyší možný** počet řezů, které povrch **nerozdělí**.
> <br>
> ![width=500rem](./img/szp04_genus.png)
@ -207,12 +207,12 @@ description: "TODO"
- Sousedící faces mají stejnou orientaci.
- Žádné faces "nevisí" ven z modelu.
- **Geometrická validita**\
Numerické chyby v geometrii (např. v pozicích vertexů) mohou způsobit konflikty mezi topologickou a geometrickou informací. [pa010-2021](#pa010-2021)
Numerické chyby v geometrii (např. v pozicích vertexů) mohou způsobit konflikty mezi topologickou a geometrickou informací. [^pa010-2021]
_Např.: Rovnice rovin tvrdí, že hrana je uvnitř objektu, ale topologie říká, že je mimo něj._
- **Eulerovy operátory**\
Operátory zachovávající Euler-Poincaré formuli. Jsou dostatečné pro konstrukci užitečných meshů. Pracují s 6 parametry: $V$ -- vertices, $E$ -- edges, $F$ -- faces, $H$ -- components, $S$ -- shells, $G$ -- genus. [pa010-2021](#pa010-2021) [boundaries](#boundaries)
Operátory zachovávající Euler-Poincaré formuli. Jsou dostatečné pro konstrukci užitečných meshů. Pracují s 6 parametry: $V$ -- vertices, $E$ -- edges, $F$ -- faces, $H$ -- components, $S$ -- shells, $G$ -- genus. [^pa010-2021] [^boundaries]
> [!NOTE]
> Zdá se, že $H$ -- components je ekvivalentní $R$ -- rings.
@ -263,7 +263,7 @@ description: "TODO"
- `OR` - sjednocení $\cup^*$
- `SUB` - rozdíl $\setminus^*$
Regularizace vypadá tak, že nejprve je provedena booleovská operace, poté je vypočítán _interior_ a následně _closure_. [rbo](#rbo)
Regularizace vypadá tak, že nejprve je provedena booleovská operace, poté je vypočítán _interior_ a následně _closure_. [^rbo]
- _Interior point_ $p$ tělesa $S$ je takový bod, že existuje $r$ takové, že otevřená koule s poloměrem $r$ a středem v $p$ obsahuje jen body z $S$.
- _Exterior point_ $p$ tělesa $S$ je takový bod, že existuje $r$ takové, že otevřená koule s poloměrem $r$ a střem v $p$ **nemá žádný průnik** s $S$.
@ -274,11 +274,11 @@ description: "TODO"
_Otevřená koule_ je koule bez povrchu. Tedy právě ty body, které jsou jejím "vnitřkem".
**Schéma interior and a boundary tělesa $A \cap B$ [pa010-2021](#pa010-2021)**
**Schéma interior and a boundary tělesa $A \cap B$ [^pa010-2021]**
![width=200](./img/szp04_interior_boundary.png)
**Příklad regularizovaného průniku [pa010-2021](#pa010-2021)**
**Příklad regularizovaného průniku [^pa010-2021]**
![width=100%](./img/szp04_rbo.png)
@ -325,29 +325,29 @@ description: "TODO"
> Modifikace meshů mají značný přesah do otázky [Křivky a povrchy](../krivky-a-povrchy/) a taky [Pokročilá počítačová grafika](../vph01_pokrocila_grafika/)
- **Překlápění hrany / edge flip**\
Lokální změna, která nahradí hranu $(b,c)$ hranou $(a,d)$. Trojúhelníky $(a,b,c)$ a $(b,d,c)$ se stanou $(a,d,c)$ a $(a,b,d)$. [pa010-2021](#pa010-2021)
Lokální změna, která nahradí hranu $(b,c)$ hranou $(a,d)$. Trojúhelníky $(a,b,c)$ a $(b,d,c)$ se stanou $(a,d,c)$ a $(a,b,d)$. [^pa010-2021]
![width=400](./img/szp04_edge_flip.png)
- **Rozdělení hrany / edge split**\
Lokální změna přidávající další vertex a hrany mezi dva trojúhelníky, které tak rozdělí na čtyři. [pa010-2021](#pa010-2021)
Lokální změna přidávající další vertex a hrany mezi dva trojúhelníky, které tak rozdělí na čtyři. [^pa010-2021]
![width=400](./img/szp04_edge_split.png)
- **Zhroucení grany / edge collapse**\
Lokální změna, která nahrazuje hranu vrcholem. [pa010-2021](#pa010-2021)
Lokální změna, která nahrazuje hranu vrcholem. [^pa010-2021]
![width=400](./img/szp04_edge_collapse.png)
- **Upsampling / subdivision**\
Globální změna, která rozdělí jedno primitivum (trojúhelník / quad) na více. Vyhlazuje mesh dělením na menší kousky. [pa010-2021](#pa010-2021)
Globální změna, která rozdělí jedno primitivum (trojúhelník / quad) na více. Vyhlazuje mesh dělením na menší kousky. [^pa010-2021]
![width=400](./img/szp04_subdivision.png)
- **Downsampling / decimation / simplification**\
Globální redukce množství primitiv. Často využívá edge collapse.
- **Regularization / mesh resampling**\
Globální upráva s cílem zlepšit kvalitu meshe, např.: tvar trojúhelníků a četnost vertexů. [pa010-2021](#pa010-2021)
Globální upráva s cílem zlepšit kvalitu meshe, např.: tvar trojúhelníků a četnost vertexů. [^pa010-2021]
![width=400](./img/szp04_mesh_regularization.png)
@ -359,7 +359,7 @@ description: "TODO"
3. Překlop hrany, pokud to zlepší stupeň vrcholu (ideální je 6).
4. Vycentruj vrcholy.
Zlepšuje rychlost některých algoritmů, eliminuje podlouhlé trojúhelníky, které se blbě renderují, zlepšuje subdivision, ale nejde použít vždy a může vést ke ztrátě detailů (řeší _Adaptive remeshing_). [pa010-2021](#pa010-2021)
Zlepšuje rychlost některých algoritmů, eliminuje podlouhlé trojúhelníky, které se blbě renderují, zlepšuje subdivision, ale nejde použít vždy a může vést ke ztrátě detailů (řeší _Adaptive remeshing_). [^pa010-2021]
![width=400](./img/szp04_isotropic_remeshing.png)
@ -417,10 +417,10 @@ _Když máme objekt definovaný polévkou matematických symbolů místo hromád
- _Generalized cylinder_: $d(x, \text{curve}) = r$,
- _Offset surface_: $d(x, \text{surface}) = r$.
kde $d(x, A)$ je nejmenší vzdálenost bodu $x$ od entity $A$. [pa010-2020](#pa010-2020)
kde $d(x, A)$ je nejmenší vzdálenost bodu $x$ od entity $A$. [^pa010-2020]
- **Constructive solid geometry (CSG)**\
Umožňuje kombinovat implicitní objekty pomocí logických operací. Předpokládáme, že pokud $f(x, y, z) < 0$ pak je bod uvnitř objektu daném $f$. Tato metoda nezachovává $C^1$ spojitost. Pro dva objekty $f$ a $g$: [pa010-2020](#pa010-2020)
Umožňuje kombinovat implicitní objekty pomocí logických operací. Předpokládáme, že pokud $f(x, y, z) < 0$ pak je bod uvnitř objektu daném $f$. Tato metoda nezachovává $C^1$ spojitost. Pro dva objekty $f$ a $g$: [^pa010-2020]
- _Sjednocení_: $\min(f, g)$,
- _Průnik_: $\max(f, g)$,
@ -428,7 +428,7 @@ _Když máme objekt definovaný polévkou matematických symbolů místo hromád
- _Komplement_: $-f$.
- **Bloby (kapky)**\
Součet několika Gaussových křivek. [pa010-2020](#pa010-2020)
Součet několika Gaussových křivek. [^pa010-2020]
```math
\begin{align*}
@ -450,7 +450,7 @@ _Když máme objekt definovaný polévkou matematických symbolů místo hromád
![width=300](./img/szp04_blobs.png)
- **Metaballs**\
Podobné blobům, ale nepoužívá exponenciální funkci. Organicky se "slévající" koule. [pa010-2020](#pa010-2020)
Podobné blobům, ale nepoužívá exponenciální funkci. Organicky se "slévající" koule. [^pa010-2020]
```math
\begin{align*}
@ -475,16 +475,15 @@ _Když máme objekt definovaný polévkou matematických symbolů místo hromád
![width=100%](./img/szp04_metaballs.png)
## Zdroje
- [[[pa010-2021,1]]] Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)
- [[[pa010-2020,2]]] Sochor: PA010 Intermediate Computer Graphics (podzim 2020)
- [[[notes-pa010,3]]] [Moje poznámky z PA010 (podzim 2020)](/fi/pa010/)
- [[[manifold-wiki,4]]] [Wikipedia: Topological manifold](https://en.wikipedia.org/wiki/Topological_manifold)
- [[[klein-bottle,5]]] [Konrad Polthier: Imaging maths - Inside the Klein bottle ](https://plus.maths.org/content/imaging-maths-inside-klein-bottle)
- [[[genus,6]]] [Saul Schleimer: Notes on the complex of curves](https://www.researchgate.net/publication/228393582_Notes_on_the_complex_of_curves)
- [[[topology, 7]]] [Topology vs. Geometry](https://www.austincc.edu/herbling/shape-of-space.pdf)
- [[[boundaries, 8]]] [Ian Stroud: Boundary Representation Modelling Techniques](https://link.springer.com/book/10.1007/978-1-84628-616-2)
- [[[rbo, 9]]] [Interior, Exterior and Closure](https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/model/closure.html)
- [[[validity,10]]] [Representational validity of boundary representation models](https://www.sciencedirect.com/science/article/pii/S0010448500000476)
- [[[denoising,11]]] [Bilateral Normal Filtering for Mesh Denoising](https://ieeexplore.ieee.org/document/5674028)
[^pa010-2021]: Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)
[^pa010-2020]: Sochor: PA010 Intermediate Computer Graphics (podzim 2020)
[^notes-pa010]: [Moje poznámky z PA010 (podzim 2020)](/fi/pa010/)
[^manifold-wiki]: [Wikipedia: Topological manifold](https://en.wikipedia.org/wiki/Topological_manifold)
[^klein-bottle]: [Konrad Polthier: Imaging maths - Inside the Klein bottle ](https://plus.maths.org/content/imaging-maths-inside-klein-bottle)
[^genus]: [Saul Schleimer: Notes on the complex of curves](https://www.researchgate.net/publication/228393582_Notes_on_the_complex_of_curves)
[^topology]: [Topology vs. Geometry](https://www.austincc.edu/herbling/shape-of-space.pdf)
[^boundaries]: [Ian Stroud: Boundary Representation Modelling Techniques](https://link.springer.com/book/10.1007/978-1-84628-616-2)
[^rbo]: [Interior, Exterior and Closure](https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/model/closure.html)
[^validity]: [Representational validity of boundary representation models](https://www.sciencedirect.com/science/article/pii/S0010448500000476)
[^denoising]: [Bilateral Normal Filtering for Mesh Denoising](https://ieeexplore.ieee.org/document/5674028)

View File

@ -218,22 +218,22 @@ Křivka $Q$ patří do třídy $C^n$, pokud má ve všech bodech $t$ spojitou de
### Geometrická spojitost stupně stem:[n] (stem:[G^n])
Je podobná parametrické spojitosti, ale vyžaduje jen "geometrickou" spojitost. Vyžaduje, aby si derivace byly **sobě úměrné**. [mallinus](#mallinus) [geometric-continuity](#geometric-continuity)
Je podobná parametrické spojitosti, ale vyžaduje jen "geometrickou" spojitost. Vyžaduje, aby si derivace byly **sobě úměrné**. [^mallinus] [^geometric-continuity]
- $G^0$ -- koncový bod prvního segmentu je totožný s počátečním bodem druhého segmentu ($C^0 = G^0$).
- $G^1$ -- platí $G^0$ a navíc je **směr** tečny na konci prvního segmentu shodný s **směrem** tečny na začátku druhého segmentu. **Velikost tečného vektoru (rychlost) se však může prudce změnit.**
- $G^2$ -- platí $G^1$ a navíc mají stejný **střed křivosti** (center of curvature). [smoothness](#smoothness)
- $G^2$ -- platí $G^1$ a navíc mají stejný **střed křivosti** (center of curvature). [^smoothness]
Platí, že $C^n \Rightarrow G^n$, ale obráceně $G^n \not\Rightarrow C^n$.
> [!NOTE]
> Podle slidů z PB009 musí faktor úměrnosti být různý od 0. [pb009-2019](#pb009-2019) Podle Barskyho a DeRoseho musí v první derivaci být $> 0$ a v dalších už je to šumák. [geometric-continuity](#geometric-continuity) Co je správně? Kdo ví. Nemám dost častu to zjistit, takže to ponechávám jako cvičení čtenáři.
> Podle slidů z PB009 musí faktor úměrnosti být různý od 0. [^pb009-2019] Podle Barskyho a DeRoseho musí v první derivaci být $> 0$ a v dalších už je to šumák. [^geometric-continuity] Co je správně? Kdo ví. Nemám dost častu to zjistit, takže to ponechávám jako cvičení čtenáři.
## Křivky
### Lagrangeův interpolační polynom
Základní metoda interpolace funkce, jejíž hodnotu známe jen v $n + 1$ diskrétních bodech $P_0, P_1, ... P_n$. Sestává se z pomocných polynomů $\ell_i$: [lagrange](#lagrange)
Základní metoda interpolace funkce, jejíž hodnotu známe jen v $n + 1$ diskrétních bodech $P_0, P_1, ... P_n$. Sestává se z pomocných polynomů $\ell_i$: [^lagrange]
```math
\ell_i(x) = \prod_{0 \le k \le n, k \neq i}^n \frac{x - x_k}{x_i - x_k}
@ -259,7 +259,7 @@ P(x) = \sum_{i=0}^n P_i \ell_i(x)
Blbé je, že musíme všechny pomocné polynomy přepočítat, když přidáme nový bod.
- **Hornerovo schéma / Horners method**\
Metoda evaluace polynomů. Vychází z myšlenky, že násobení se dá nestovat: [horner](#horner)
Metoda evaluace polynomů. Vychází z myšlenky, že násobení se dá nestovat: [^horner]
```math
\begin{aligned}
@ -279,7 +279,7 @@ Asi nejznámnější interpolační křivky v počítačové grafice. Jsou urče
Je jednoduché je na sebe navázat v $C^1$, neboť tečné vektory jsou přímo součástí definice.
- **Cubic Hermite spline / Ferguson curve**\
Pro Hermitovskou kubiku platí: [hermite-spline](#hermite-spline) [ferguson](#ferguson)
Pro Hermitovskou kubiku platí: [^hermite-spline] [^ferguson]
```math
\begin{aligned}
@ -365,12 +365,12 @@ Mezi jejich vlastnosti patří:
### B-spline
- **Splajn / spline**\
Splajn stupně $n$ po částech definovaná polynomiální funkce stupně $n-1$ proměnné $x$. [bspline](#bspline)
Splajn stupně $n$ po částech definovaná polynomiální funkce stupně $n-1$ proměnné $x$. [^bspline]
_Po částech definovaná / piecewise_ znamená, že má několik intervalů a pro každý z nich jiný polynom.
- Místa, kde se části polynomu dotýkají jsou _uzly_ a jsou značeny pomocí $t_0, t_1, ..., t_n$ a řazeny v neklesajícím pořadí.
- Pokud jsou uzly unikátní, pak je splajn v uzlech $C^{n-2}$ spojitý. [bspline](#bspline)
- Pokud jsou uzly unikátní, pak je splajn v uzlech $C^{n-2}$ spojitý. [^bspline]
- Pokud je $r$ uzlů shodných, je v tomto místě pouze $C^{n-r-1}$ spojitý.
---
@ -428,7 +428,7 @@ S(x) = \sum_{i=0} c_i B_{i,n}(x)
```
- **Coonsova kubika**\
Kubika $P$ daná 4 řídícími body $P_0, P_1, P_2, P_3$. Neprochází ani jedním z kontrolních bodů. [coons](#coons)
Kubika $P$ daná 4 řídícími body $P_0, P_1, P_2, P_3$. Neprochází ani jedním z kontrolních bodů. [^coons]
```math
\begin{aligned}
@ -606,7 +606,7 @@ Aproximační plochy analogické B-spline křivkám, ale se dvěma parametry.
- **NURBS plochy**
Standard v průmyslovém modelování. Umožňují definovat velké množstí ploch: free-form surfaces, plochy založené na přímkách a kuželosečkách, atd. [nurbs](#nurbs) Jsou invariantní k lineárním transformacím i k perspektivní projekci.
Standard v průmyslovém modelování. Umožňují definovat velké množstí ploch: free-form surfaces, plochy založené na přímkách a kuželosečkách, atd. [^nurbs] Jsou invariantní k lineárním transformacím i k perspektivní projekci.
```math
S(u,v) = \sum_{i=1}^k \sum_{j=1}^l R_{i,j}(u,v) \mathbf{P}_{i,j}
@ -621,7 +621,7 @@ Aproximační plochy analogické B-spline křivkám, ale se dvěma parametry.
$N_{i,n}(u)$ a $N_{j,m}(v)$ jsou B-spline bázové funkce stupně $n$ a $m$. $w_{i,j}$ jsou váhy.
> [!TIP]
> NURBS plochy se využívají v modelovací technice _sweeping_ (šablonování), kdy se množina bodů pohybuje (posunuje, rotuje, ...) prostorem za vniku tělesa. [sweeping](#sweeping)
> NURBS plochy se využívají v modelovací technice _sweeping_ (šablonování), kdy se množina bodů pohybuje (posunuje, rotuje, ...) prostorem za vniku tělesa. [^sweeping]
## Surface subdivision / rekurzivní dělení polygonů
@ -659,23 +659,22 @@ Polygonové povrchy dělíme v případě, kdy chceme je zjemnit, vyhladit.
**Interpoluje** původní mesh. Funguje jen na trojúhelníkové síti.
## Zdroje
- [[[pa010-2021,1]]] Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)
- [[[pa010-2020,2]]] Sochor: PA010 Intermediate Computer Graphics (podzim 2020)
- [[[pb009-2019,3]]] Sochor: PB009 Principles of Computer Graphics (jaro 2019)
- [[[smoothness,4]]] [Wikipedia: Smoothness](https://en.wikipedia.org/wiki/Smoothness)
- [[[mallinus,5]]] [Jaakko Kurhila and Matti Mäkelä: Parametric Curves](https://www.cs.helsinki.fi/group/goa/mallinnus/curves/curves.html)
- [[[geometric-continuity,6]]] [Geometric Continuity of Parametric Curves: Three Equivalent Characterizations](https://ieeexplore.ieee.org/document/41470)
- [[[lagrange, 7]]] [Wikipedia: Lagrange polynomial](https://en.wikipedia.org/wiki/Lagrange_polynomial)
- [[[bspline, 8]]] [Wikipedia: B-spline](https://en.wikipedia.org/wiki/B-spline)
- [[[hermite-spline, 9]]] [Wikipedia: Cubic Hermite spline](https://en.wikipedia.org/wiki/Cubic_Hermite_spline)
- [[[ferguson, 10]]] [ČVUT: Ferguson curve](https://marian.fsik.cvut.cz/~kongo/download/pcgr/lectures/01%20crv_ferg.pdf)
- [[[coons, 11]]] [ČVUT: Coons curve](https://marian.fsik.cvut.cz/~kongo/download/pcgr/lectures/03%20crv_coons.pdf)
- [[[coons-path, 12]]] [Wikipedia: Coons patch](https://en.wikipedia.org/wiki/Coons_patch)
- [[[nurbs, 13]]] [Wikipedia: Non-uniform rational B-spline](https://en.wikipedia.org/wiki/Non-uniform_rational_B-spline)
- [[[sweeping,14]]] [Wikipedia: Solid modeling](https://en.wikipedia.org/wiki/Solid_modeling#Sweeping)
- [[[horner,15]]] [Wikipedia: Horners method](https://en.wikipedia.org/wiki/Horner%27s_method)
[^pa010-2021]: Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)
[^pa010-2020]: Sochor: PA010 Intermediate Computer Graphics (podzim 2020)
[^pb009-2019]: Sochor: PB009 Principles of Computer Graphics (jaro 2019)
[^smoothness]: [Wikipedia: Smoothness](https://en.wikipedia.org/wiki/Smoothness)
[^mallinus]: [Jaakko Kurhila and Matti Mäkelä: Parametric Curves](https://www.cs.helsinki.fi/group/goa/mallinnus/curves/curves.html)
[^geometric-continuity]: [Geometric Continuity of Parametric Curves: Three Equivalent Characterizations](https://ieeexplore.ieee.org/document/41470)
[^lagrange]: [Wikipedia: Lagrange polynomial](https://en.wikipedia.org/wiki/Lagrange_polynomial)
[^bspline]: [Wikipedia: B-spline](https://en.wikipedia.org/wiki/B-spline)
[^hermite-spline]: [Wikipedia: Cubic Hermite spline](https://en.wikipedia.org/wiki/Cubic_Hermite_spline)
[^ferguson]: [ČVUT: Ferguson curve](https://marian.fsik.cvut.cz/~kongo/download/pcgr/lectures/01%20crv_ferg.pdf)
[^coons]: [ČVUT: Coons curve](https://marian.fsik.cvut.cz/~kongo/download/pcgr/lectures/03%20crv_coons.pdf)
[^coons-path]: [Wikipedia: Coons patch](https://en.wikipedia.org/wiki/Coons_patch)
[^nurbs]: [Wikipedia: Non-uniform rational B-spline](https://en.wikipedia.org/wiki/Non-uniform_rational_B-spline)
[^sweeping]: [Wikipedia: Solid modeling](https://en.wikipedia.org/wiki/Solid_modeling#Sweeping)
[^horner]: [Wikipedia: Horners method](https://en.wikipedia.org/wiki/Horner%27s_method)
## Další zdroje

View File

@ -16,7 +16,7 @@ description: "TODO"
- **Machine learning / strojové učení**
Oblast informatiky zabývající se konstrukcí systémů, které nemají svoji funkcionalitu explicitně naprogramovanou, ale naučí se ji až na základě vstupních dat. [ml](#ml) [pv021](#pv021)
Oblast informatiky zabývající se konstrukcí systémů, které nemají svoji funkcionalitu explicitně naprogramovanou, ale naučí se ji až na základě vstupních dat. [^ml] [^pv021]
Používá se např. pro:
@ -28,23 +28,23 @@ description: "TODO"
- autonomní řízení vozidel.
- **Rozpoznávání vzorů / pattern recognition**\
Problém automatizovaného rozpoznávání vzorů v datech (např. číslic v obrázku). Příklady jsou _klasifikace_, _regrese_ a _shluková analýza_. [pattern-recognition](#pattern-recognition)
Problém automatizovaného rozpoznávání vzorů v datech (např. číslic v obrázku). Příklady jsou _klasifikace_, _regrese_ a _shluková analýza_. [^pattern-recognition]
- **Klasifikace**\
Problém identifikace kategorie, do které patří vstupní data. Výstupem klasifikace je buď jedna konkrétní kategorie nebo vektor popisující s jakou pravděpodobností vstup do každé kategorie patří. [classification](#classification)
Problém identifikace kategorie, do které patří vstupní data. Výstupem klasifikace je buď jedna konkrétní kategorie nebo vektor popisující s jakou pravděpodobností vstup do každé kategorie patří. [^classification]
- **Regrese**\
Problém odhadu hodnoty nějaké proměnné na základě znalosti jiných proměnných. Výstupem regrese je obvykle reálné číslo. [regression](#regression)
Problém odhadu hodnoty nějaké proměnné na základě znalosti jiných proměnných. Výstupem regrese je obvykle reálné číslo. [^regression]
Například při _lineární regresi_ se snažíme data napasovat na přímku -- najít její offset a směrnici. Při _logistické regresi_ chceme to samé ale místo přímky máme logistic sigmoid. A tak dále. [pv021](#pv021)
Například při _lineární regresi_ se snažíme data napasovat na přímku -- najít její offset a směrnici. Při _logistické regresi_ chceme to samé ale místo přímky máme logistic sigmoid. A tak dále. [^pv021]
- **Shluková analýza / cluster analysis**\
Vicedimenzionální problém rozdělení vstupních dat do skupin (shluků) tak, aby data v jednom shluku byla _podobnější_ sobě než datům v jiných shlucích. [clustering](#clustering)
Vicedimenzionální problém rozdělení vstupních dat do skupin (shluků) tak, aby data v jednom shluku byla _podobnější_ sobě než datům v jiných shlucích. [^clustering]
Souvisejícím problémem je vyjádření toho, že jsou si data v nějakém smyslu _podobná_.
- **Supervised learning / učení s učitelem**\
Síť se učí na základě množiny trénovacích vstupů ve formátu (vstup, výstup). Supervised learning algoritmy se snaží síť modifikovat tak, aby vracela výstupy co možná nejpodobnější těm trénovacím. [pv021](#pv021)
Síť se učí na základě množiny trénovacích vstupů ve formátu (vstup, výstup). Supervised learning algoritmy se snaží síť modifikovat tak, aby vracela výstupy co možná nejpodobnější těm trénovacím. [^pv021]
- **Unsupervised learning / učení bez učitele**\
Síť dostává jen vstupy. Cílem je získat o vstupní množině dat nějakou užitečnou informaci, třeba kde jsou shluky. [pv021](#pv021)
Síť dostává jen vstupy. Cílem je získat o vstupní množině dat nějakou užitečnou informaci, třeba kde jsou shluky. [^pv021]
## Neuronové sítě
@ -92,7 +92,7 @@ description: "TODO"
- **Perceptron -- jeden neuron**
- Hrubá matematická aproximace biologického neuronu.
- Binární klasifikátor -- rozlišuje jestli vstup patří nebo nepatří do nějaké jedné kategorie.[pv021](#pv021)
- Binární klasifikátor -- rozlišuje jestli vstup patří nebo nepatří do nějaké jedné kategorie.[^pv021]
- Linerání klasifikátor -- jeho funkce kombinuje vstupy lineárně.
![width=400](./img/szp06_perceptron.png)
@ -274,7 +274,7 @@ Za předpokladu, že $E$ je squared error, pak:
## Konvoluční sítě
Neuronové sítě uzpůsobené ke zpracování obrazu. Místo násobení matic používají alespoň v jedné vrstvě konvoluci. Konvoluční sítě mají dva nové typy vrstev: _konvoluční_ a _pooling_, ale jinak se od klasických MLP moc neliší. Aktivace a trénink zůstavají v podstatě stejné. [cnn](#cnn)
Neuronové sítě uzpůsobené ke zpracování obrazu. Místo násobení matic používají alespoň v jedné vrstvě konvoluci. Konvoluční sítě mají dva nové typy vrstev: _konvoluční_ a _pooling_, ale jinak se od klasických MLP moc neliší. Aktivace a trénink zůstavají v podstatě stejné. [^cnn]
> [!IMPORTANT]
> Pro konvoluci viz otázka [Zpracování rastrového obrazu](../szp09_zpracovani_obrazu/).
@ -319,7 +319,7 @@ Neuronové sítě uzpůsobené ke zpracování obrazu. Místo násobení matic p
## Rekurentní sítě
Neuronové sítě, jejichž architektura obsahuje cykly. Tedy výstup v jednom bodě v čase sítě přispívá k výstup v budoucnosti. Jinými slovy, je to neuronka s pamětí. _Recurrent neural networks_ (RNN) konkrétně jsou MLP _minimálně_ rozšířené tak, aby měly paměť. [rnn](#rnn)
Neuronové sítě, jejichž architektura obsahuje cykly. Tedy výstup v jednom bodě v čase sítě přispívá k výstup v budoucnosti. Jinými slovy, je to neuronka s pamětí. _Recurrent neural networks_ (RNN) konkrétně jsou MLP _minimálně_ rozšířené tak, aby měly paměť. [^rnn]
- **Výhody**
@ -430,18 +430,17 @@ Neuronové sítě, jejichž architektura obsahuje cykly. Tedy výstup v jednom b
![width=100%](./img/szp06_lstm.png)
## Zdroje
- [[[pv021, 1]]] T. Brázdil: PV021 Neural Networks
- [[[ml, 2]]] [Wikipedia: Machine learning](https://en.wikipedia.org/wiki/Machine_learning)
- [[[classification, 3]]] [Wikipedia: Statistical classification](https://en.wikipedia.org/wiki/Statistical_classification)
- [[[regression, 4]]] [Wikipedia: Regression analysis](https://en.wikipedia.org/wiki/Regression_analysis)
- [[[clustering, 5]]] [Wikipedia: Cluster analysis](https://en.wikipedia.org/wiki/Cluster_analysis)
- [[[pattern-recognition, 6]]] [Wikipedia: Pattern recognition](https://en.wikipedia.org/wiki/Pattern_recognition)
- [[[hopfield, 7]]] [Wikipedia: Hopfield network](https://en.wikipedia.org/wiki/Hopfield_network)
- [[[hebb, 8]]] [Wikipedia: Hebbian theory](https://en.wikipedia.org/wiki/Hebbian_theory)
- [[[cnn, 9]]] [Wikipedia: Convolutional neural network](https://en.wikipedia.org/wiki/Convolutional_neural_network)
- [[[rnn, 10]]] [Wikipedia: Recurrent neural network](https://en.wikipedia.org/wiki/Recurrent_neural_network)
- [[[som, 11]]] [Wikipedia: Self-organizing map](https://en.wikipedia.org/wiki/Self-organizing_map)
- [[[som-tutorial, 12]]] [Self-Organizing Maps: Tutorial](https://sites.pitt.edu/~is2470pb/Spring05/FinalProjects/Group1a/tutorial/som.html)
- [[[som-sdl, 13]]] [SDL Component Suite: Kohonen Network](http://www.lohninger.com/helpcsuite/kohonen_network_-_background_information.htm)
[^pv021]: T. Brázdil: PV021 Neural Networks
[^ml]: [Wikipedia: Machine learning](https://en.wikipedia.org/wiki/Machine_learning)
[^classification]: [Wikipedia: Statistical classification](https://en.wikipedia.org/wiki/Statistical_classification)
[^regression]: [Wikipedia: Regression analysis](https://en.wikipedia.org/wiki/Regression_analysis)
[^clustering]: [Wikipedia: Cluster analysis](https://en.wikipedia.org/wiki/Cluster_analysis)
[^pattern-recognition]: [Wikipedia: Pattern recognition](https://en.wikipedia.org/wiki/Pattern_recognition)
[^hopfield]: [Wikipedia: Hopfield network](https://en.wikipedia.org/wiki/Hopfield_network)
[^hebb]: [Wikipedia: Hebbian theory](https://en.wikipedia.org/wiki/Hebbian_theory)
[^cnn]: [Wikipedia: Convolutional neural network](https://en.wikipedia.org/wiki/Convolutional_neural_network)
[^rnn]: [Wikipedia: Recurrent neural network](https://en.wikipedia.org/wiki/Recurrent_neural_network)
[^som]: [Wikipedia: Self-organizing map](https://en.wikipedia.org/wiki/Self-organizing_map)
[^som-tutorial]: [Self-Organizing Maps: Tutorial](https://sites.pitt.edu/~is2470pb/Spring05/FinalProjects/Group1a/tutorial/som.html)
[^som-sdl]: [SDL Component Suite: Kohonen Network](http://www.lohninger.com/helpcsuite/kohonen_network_-_background_information.htm)

View File

@ -528,7 +528,7 @@ Dijkstrův algoritmus lze optimalizovat, pokud nás zajímá jen nejkratší ces
## Maximální párování v bipartitních grafech
- **Párování / matching**\
Množina $M \sube E$ taková, že žádné dvě hrany v $M$ nemají společný vrchol. [matching](#matching)
Množina $M \sube E$ taková, že žádné dvě hrany v $M$ nemají společný vrchol. [^matching]
Prázdná množina je párováním na každém grafu. Graf bez hran má pouze prázdné párování.
@ -541,7 +541,7 @@ Dijkstrův algoritmus lze optimalizovat, pokud nás zajímá jen nejkratší ces
- **Perfektní párování**\
Takové párování, které páruje všechny vrcholy grafu. Každé perfektní párování je zároveň maximální.
- **Maximum cardinality matching (MCM) v bipartitním grafu**\
Problém nalezení maximálního párování v grafu. Ve speciálním případě, kdy graf je bipartitní, se tento problém dá převést na problém nalezení maximálního toku v síti: [mcm](#mcm)
Problém nalezení maximálního párování v grafu. Ve speciálním případě, kdy graf je bipartitní, se tento problém dá převést na problém nalezení maximálního toku v síti: [^mcm]
1. Mejmě bipartitní graf $G=(X+Y,E)$.
@ -557,13 +557,12 @@ Dijkstrův algoritmus lze optimalizovat, pokud nás zajímá jen nejkratší ces
![width=300](./img/szp07_mcm_03.png)
## Zdroje
- [[[ib000,1]]] [IB000 Matematické základy informatiky (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/IB000/um/)
- [[[ib002,2]]] [IB002 Algoritmy a datové struktury (jaro 2020)](https://is.muni.cz/auth/el/fi/jaro2020/IB002/um/)
- [[[ib003,3]]] [IV003 Algoritmy a datové struktury II (jaro 2021)](https://is.muni.cz/auth/el/fi/jaro2021/IV003/um/)
- [[[matching,4]]] [Wikipedia: Párování grafu](https://cs.wikipedia.org/wiki/P%C3%A1rov%C3%A1n%C3%AD_grafu)
- [[[mcm, 5]]] [Wikipedia: Maximum cardinality matching](https://en.wikipedia.org/wiki/Maximum_cardinality_matching)
[^ib000]: [IB000 Matematické základy informatiky (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/IB000/um/)
[^ib002]: [IB002 Algoritmy a datové struktury (jaro 2020)](https://is.muni.cz/auth/el/fi/jaro2020/IB002/um/)
[^ib003]: [IV003 Algoritmy a datové struktury II (jaro 2021)](https://is.muni.cz/auth/el/fi/jaro2021/IV003/um/)
[^matching]: [Wikipedia: Párování grafu](https://cs.wikipedia.org/wiki/P%C3%A1rov%C3%A1n%C3%AD_grafu)
[^mcm]: [Wikipedia: Maximum cardinality matching](https://en.wikipedia.org/wiki/Maximum_cardinality_matching)
## Další zdroje

View File

@ -91,7 +91,7 @@ description: A guide in my new Starlight docs site.
### Ortografická projekce
Používáme především k vykreslení 2D scén. Osu Z můžeme využít, abychom jeden sprite schovali za jiný. Nicméně objekty dál od kamery jsou stejně velké jako ty blízko kamery. [camera](#camera)
Používáme především k vykreslení 2D scén. Osu Z můžeme využít, abychom jeden sprite schovali za jiný. Nicméně objekty dál od kamery jsou stejně velké jako ty blízko kamery. [^camera]
![width=500](./img/szp08_orthographic_projection.png)

View File

@ -10,12 +10,12 @@ description: "TODO"
- **Rastr / bitmapa**\
Obraz reprezentovaný pomocí 2D pole _pixelů_. Každý pixel obsahuje jednu (pokud je obraz černobílý) nebo více (typicky RGB nebo CMYK) intenzit. Intenzity jsou zakódovány na _bity_. [raster](#raster)
Obraz reprezentovaný pomocí 2D pole _pixelů_. Každý pixel obsahuje jednu (pokud je obraz černobílý) nebo více (typicky RGB nebo CMYK) intenzit. Intenzity jsou zakódovány na _bity_. [^raster]
> Je to 2D mapa bitů... bitmapa. Get it?
- **Zpracování obrazu / digital image processing**\
Oblast informatiky zabývající se manipulací s obrazy pomocí počítače. Obsahuje třeba: [dip](#dip)
Oblast informatiky zabývající se manipulací s obrazy pomocí počítače. Obsahuje třeba: [^dip]
- zpracování raw dat ze senzorů ve foťácích,
- odstranění šumu,
@ -133,7 +133,7 @@ Histogram kvantifikuje množství a frekvenci barev obsažených v obraze. Ve st
```
- **Vyrovnání histogramu / histogram equalization**\
Změna obrazu tak, aby jeho kumulativní histogram měl konkrétní tvar, obvykle aby byl lineární. [histogram-eq](#histogram-eq)
Změna obrazu tak, aby jeho kumulativní histogram měl konkrétní tvar, obvykle aby byl lineární. [^histogram-eq]
Typicky k tomu využíváme funkci $f(x) = \mathbb{H}[x] \cdot \frac{a_{\text{max}}}{w \cdot h}$, kde $\text{cumhist}$ je kumulativní histogram pro barvu v bodě x, $a_{\text{max}}$ je maximální intenzita a $w \cdot h$ je velikost obrazu.
@ -151,7 +151,7 @@ Histogram kvantifikuje množství a frekvenci barev obsažených v obraze. Ve st
> Původní fotku vyfotil [Phillip](https://commons.wikimedia.org/w/index.php?curid=855363) [Capper](https://commons.wikimedia.org/w/index.php?curid=855383).
- **Analýza histogramu**\
Z histogramu lze vysledovat řadu věcí jak manuálně tak automaticky. Často se proto používá jako mezikrok v jiných algoritmech. Lze z něj například zjistit: [histogram](#histogram) [histogram-bbc](#histogram-bbc)
Z histogramu lze vysledovat řadu věcí jak manuálně tak automaticky. Často se proto používá jako mezikrok v jiných algoritmech. Lze z něj například zjistit: [^histogram] [^histogram-bbc]
- průměrný jas,
- kontrast,
@ -162,7 +162,7 @@ Histogram kvantifikuje množství a frekvenci barev obsažených v obraze. Ve st
## Konvoluční filtry
- **Filtr**\
Filtr je termín ze zpracování signálů (kterýmžto obraz z jisté perspektivy je). Je to zařízení, postup, či transformace, která ze signálu odstraňuje nechtěnné informace. [filter](#filter)
Filtr je termín ze zpracování signálů (kterýmžto obraz z jisté perspektivy je). Je to zařízení, postup, či transformace, která ze signálu odstraňuje nechtěnné informace. [^filter]
- **Šum / noise**\
Šum je informace, která v obrazu vznikla kvůli nedokonalosti snímače, přenosu, uložení dat, atd. Ač někdy může vypadat docela cool, obvykle je to nechtěná informace. Podle frekvenční charakteristiky se dělí na:
@ -172,7 +172,7 @@ Histogram kvantifikuje množství a frekvenci barev obsažených v obraze. Ve st
- _Impulzní_: nahrazuje některé hodnoty signálu jinými hodnotami; patří sem například _sůl a pepř / salt and pepper noise_.
- **Konvoluce**\
Matematická operace, která vezme dvě funkce $f$ a $g$ a produkuje třetí funkci $h = f * g$ popisující, jak jedna funkce mění tvar té druhé. Je komutativní, takže je jedno, která je _první_ a která je _druhá_. Ve spojité doméně je definována jako: [convolution](#convolution)
Matematická operace, která vezme dvě funkce $f$ a $g$ a produkuje třetí funkci $h = f * g$ popisující, jak jedna funkce mění tvar té druhé. Je komutativní, takže je jedno, která je _první_ a která je _druhá_. Ve spojité doméně je definována jako: [^convolution]
```math
(f * g)(t) = \int_{-\infty}^{\infty} \cdot f(\tau) g(t - \tau) d\tau
@ -340,7 +340,7 @@ Proces, kdy hledání _hran_ v obraze. Hrana je křivka, podél níž pixely vý
- **Robinsonův operátor / Robinson compass mark**\
Detekuje hrany pomocí centrální diferencí. Používá osm různých jader, jedno prokaždý směr na kompasu. To mu umožňuje snadno aproximovat nejen velikost ale i směr gradientu.
- **Canny edge detector**\
Algoritmus pro detekci hran. [canny](#canny) [canny-tds](#canny-tds)
Algoritmus pro detekci hran. [^canny] [^canny-tds]
- Má nízké procento chyb.
- Přesně lokalizuje hrany.
@ -360,7 +360,7 @@ Proces, kdy hledání _hran_ v obraze. Hrana je křivka, podél níž pixely vý
Hrany lze detekovat pomocí druhé derivace obrazu. Nacházejí se v _nulových bodech / zero crossings_ (tedy v maximech a minimech první derivace).
- **Divergence**\
Divergence je operátor, který vrací skalární hodnotu. Popisuje zda gradient roste či klesá. Je definován jako: [divergence](#divergence)
Divergence je operátor, který vrací skalární hodnotu. Popisuje zda gradient roste či klesá. Je definován jako: [^divergence]
```math
\text{div} \vec{F} = \nabla \cdot \vec{F} = \frac{\partial F_x}{\partial x} + \frac{\partial F_y}{\partial y} + \frac{\partial F_z}{\partial z}
@ -411,7 +411,7 @@ Hrany lze detekovat pomocí druhé derivace obrazu. Nacházejí se v _nulových
## Integrální transformace
Transformace, která mapuje funkci $f: A \to B$ z jejího původního funkčního prostoru $A \to B$ do nějakého jiného funkčního prostoru $A' \to B'$. Používá se, protože s některými vlastnostmi funkcí je snazší pracovat v jiném prostoru. [integral-transform](#integral-transform)
Transformace, která mapuje funkci $f: A \to B$ z jejího původního funkčního prostoru $A \to B$ do nějakého jiného funkčního prostoru $A' \to B'$. Používá se, protože s některými vlastnostmi funkcí je snazší pracovat v jiném prostoru. [^integral-transform]
Patří sem transformace jako:
@ -430,7 +430,7 @@ Patří sem transformace jako:
> 3Blue1Brown má skvělý [video o Fourierově transformaci](https://www.youtube.com/watch?v=spUNpyF58BY), ze kterého to pochopíš! _(a evidentně je tak dobrý, že mi Copilot sám nabídl správný link...)_
Je operace (integrální transformace) při níž je obraz převeden z _prostorové_ do _frekvenční_ domény. A při _inverzní Fourierově transformaci_ obráceně. [fourier](#fourier)
Je operace (integrální transformace) při níž je obraz převeden z _prostorové_ do _frekvenční_ domény. A při _inverzní Fourierově transformaci_ obráceně. [^fourier]
- Frekvenční doména je složena ze sinusoid s různými frekvencemi a fázemi (indikovaných pomocí polárních souřadnic).
- Intenzita pixelu v obrazu frekvenční domény pak udává amplitudu dané sinusoidy.
@ -464,7 +464,7 @@ Je operace (integrální transformace) při níž je obraz převeden z _prostoro
}_{\text{pro všechna } x \text{ v celém definičním oboru funkce} f}
```
**Forward** (z prostorové do frekvenční domény): [fourier](#fourier)
**Forward** (z prostorové do frekvenční domény): [^fourier]
```math
\begin{align*}
@ -487,7 +487,7 @@ Je operace (integrální transformace) při níž je obraz převeden z _prostoro
```
- **2D Fourierova transformace**\
**Forward** (z prostorové do frekvenční domény): [fourier](#fourier)
**Forward** (z prostorové do frekvenční domény): [^fourier]
```math
\begin{align*}
@ -510,9 +510,9 @@ Je operace (integrální transformace) při níž je obraz převeden z _prostoro
```
- **Fast Fourier Transform (FFT)**\
Algoritmus pro rychlé výpočty diskrétní Fourierovy transformace (DFT). [fft](#fft)
Algoritmus pro rychlé výpočty diskrétní Fourierovy transformace (DFT). [^fft]
- **Konvoluční teorém**\
Říká, že běžné násobení ve frekvenční doméně odpovídá konvoluci v prostorové doméně a obráceně. To je cool, protože konvoluce je pomalá, ale násobení je rychlé. [convolution](#convolution)
Říká, že běžné násobení ve frekvenční doméně odpovídá konvoluci v prostorové doméně a obráceně. To je cool, protože konvoluce je pomalá, ale násobení je rychlé. [^convolution]
```math
\mathcal{F} \{ f * g \} = \mathcal{F} \{ f \} \cdot \mathcal{F} \{ g \}
@ -522,15 +522,15 @@ Je operace (integrální transformace) při níž je obraz převeden z _prostoro
## Sampling / vzorkování
Samplování je převod spojitého signálu na diskrétní. [sampling](#sampling)
Samplování je převod spojitého signálu na diskrétní. [^sampling]
- **Převzorkování**\
Je proces, kdy na vstupu je **diskrétní** signál s nějakou vzorkovací frekvencí a na výstupu je **diskrétní** signál s **jinou** vzorkovací frekvencí.
V případě 2D obrazů to může ale nemusí znamenat změnu velikosti obrazu. [image-scaling](#image-scaling)
V případě 2D obrazů to může ale nemusí znamenat změnu velikosti obrazu. [^image-scaling]
- **Vzorkovací teorém / Nyquist-Shannon sampling theorem**\
Říká, že chceme-li spojitý signál převést na diskrétní a pak z tohoto diskrétního signálu zrekonstruovat původní spojitý signál, můsíme samplovat s alespoň dvojnásobnou frekvencí než je nejvyšší frekvence v původním signálu. [n-s](#n-s)
Říká, že chceme-li spojitý signál převést na diskrétní a pak z tohoto diskrétního signálu zrekonstruovat původní spojitý signál, můsíme samplovat s alespoň dvojnásobnou frekvencí než je nejvyšší frekvence v původním signálu. [^n-s]
- Původní spojitý signál musí být frekvenčně omezený (band-limited), aby bylo možné v něm určit nejvyšší frekvenci.
- Při nesplnění těchto podmínek vzniká aliasing.
@ -542,7 +542,7 @@ Samplování je převod spojitého signálu na diskrétní. [sampling](#sampling
> Intuitivně je signál hromádka kopečků. Abychom poznali i ty nejužší kopečky -- s nejvyšší frekvencí -- musíme mít dostatečně jemné síto -- koukat na kopečky s dvakrát takovou frekvencí, abychom si všimli, že někde začíná a končí.
- **Rekonstrukce**\
Proces, kdy z diskrétního signálu zpět získáme spojitý signál. [reconstruction](#reconstruction)
Proces, kdy z diskrétního signálu zpět získáme spojitý signál. [^reconstruction]
- **Rekonstrukční filtr**\
Filtr pro rekonstrukci signálu.
@ -554,7 +554,7 @@ Samplování je převod spojitého signálu na diskrétní. [sampling](#sampling
## Geometrické transformace
Geometrická transformace $T$ je bijekce mezi body dvou obrazů $I$ a $J$. Díky tomu, že je to bijekce, k ní musí vždy existovat inverze. [geometric-transform](#geometric-transform)
Geometrická transformace $T$ je bijekce mezi body dvou obrazů $I$ a $J$. Díky tomu, že je to bijekce, k ní musí vždy existovat inverze. [^geometric-transform]
```math
J \lbrack u, v \rbrack = T(u, v) = I \lbrack x(u, v), y(u, v) \rbrack
@ -581,7 +581,7 @@ Patří sem operace jako:
- **Vlnka / wavelet**\
Funkce $\psi$, která je omezená v čase. Je to "brief oscillation". [wavelet](#wavelet)
Funkce $\psi$, která je omezená v čase. Je to "brief oscillation". [^wavelet]
![width=300](./img/szp09_wavelet.svg)
@ -607,7 +607,7 @@ Patří sem operace jako:
---
Vlnková transformace je integrální transformace, která popisuje funkci v **čase** a **frekvenci** zároveň. Popis v čase je dán tím, že vlnky (narozdíl od sinusoid u Fourierky) jsou časově omezené. [wavelet](#wavelet)
Vlnková transformace je integrální transformace, která popisuje funkci v **čase** a **frekvenci** zároveň. Popis v čase je dán tím, že vlnky (narozdíl od sinusoid u Fourierky) jsou časově omezené. [^wavelet]
Používá se k:
@ -675,7 +675,7 @@ Dále platí:
Představme si například vlnku, která má frekvenci tónu střední C a krátké trvání odpovídající osminové notě. Provedeme-li v pravidelných intervalech konvoluci takovéto vlnky se signálem - nahrávkou písně - pak nám výsledky této konvoluce napoví, kdy byla nota „osminové střední C“ v nahrávce použita.
Matematicky vzato, k vysoké korelaci vlnky se signálem (vysokému korelačnímu koeficientu) dojde v těch místech (intervalech), kde signál obsahuje informaci o podobné frekvenci, tedy tam, kde je námi zvolené vlnce nejpodobnější. Tento koncept je jádrem mnoha aplikací vlnkové transformace. [others](#others)
Matematicky vzato, k vysoké korelaci vlnky se signálem (vysokému korelačnímu koeficientu) dojde v těch místech (intervalech), kde signál obsahuje informaci o podobné frekvenci, tedy tam, kde je námi zvolené vlnce nejpodobnější. Tento koncept je jádrem mnoha aplikací vlnkové transformace. [^others]
## Houghova transformace
@ -683,7 +683,7 @@ Matematicky vzato, k vysoké korelaci vlnky se signálem (vysokému korelačním
> Super [minutu a půl dlouhé video, co ti řekne úplně všechno](https://www.youtube.com/watch?v=X1DxCPS1iwA).
Integrální transformace, která identifikuje přímky v obraze. V rozšířené podobě hledá libovolné tvary zadané parametricky. [hough](#hough)
Integrální transformace, která identifikuje přímky v obraze. V rozšířené podobě hledá libovolné tvary zadané parametricky. [^hough]
- Dlouho byla používána pro detekci čar na silnici pro autonomní řízení aut. (Už ne. Dnes se používají neuronové sítě.)
- Pracuje nad binárním obrazem.
@ -708,7 +708,7 @@ Integrální transformace, která identifikuje přímky v obraze. V rozšířen
Integrální transformace, která integruje funkci přes přímky. Tedy rozkládá funkci na hromádku parametrů, které definují přímky.
Užitečná je především inverzní Radonova transformace, která se používá v tomografii ("CTčko"). [radon](#radon)
Užitečná je především inverzní Radonova transformace, která se používá v tomografii ("CTčko"). [^radon]
![width=100%](./img/szp09_radon.png)
@ -771,33 +771,32 @@ Inverzní funkce je velice užitečná, ale poměrně složitá, takže doufám,
| Hlavním cílem je rekonstrukce obrazu -- inverzní transformace |
| Hlavním cílem je detekce tvarů |
## Zdroje
- [[[pb130,1]]] [PB130 Úvod do digitálního zpracování obrazu (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/PB130/)
- [[[pv131,2]]] [PV131 Digitální zpracování obrazu (jaro 2023)](https://is.muni.cz/auth/el/fi/jaro2023/PV131/)
- [[[raster,3]]] [Wikipedia: Raster graphics](https://en.wikipedia.org/wiki/Raster_graphics)
- [[[dip,4]]] [Wikipedia: Digital image processing](https://en.wikipedia.org/wiki/Digital_image_processing)
- [[[filter,5]]] [Wikipedia: Filter (signal processing)](<https://en.wikipedia.org/wiki/Filter_(signal_processing)>)
- [[[convolution,6]]] [Wikipedia: Convolution](https://en.wikipedia.org/wiki/Convolution)
- [[[edge-detection,7]]] [Wikipedia: Edge detection](https://en.wikipedia.org/wiki/Edge_detection)
- [[[fourier, 8]]] [Wikipedia: Fourier transform](https://en.wikipedia.org/wiki/Fourier_transform)
- [[[fft, 9]]] [Wikipedia: Fast Fourier transform](https://en.wikipedia.org/wiki/Fast_Fourier_transform)
- [[[samping, 10]]] [Wikipedia: Sampling (signal processing)](<https://en.wikipedia.org/wiki/Sampling_(signal_processing)>)
- [[[scaling, 11]]] [Wikipedia: Image scaling](https://en.wikipedia.org/wiki/Image_scaling)
- [[[n-s, 12]]] [Wikipedia: NyquistShannon sampling theorem](https://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem)
- [[[geometric-transform,13]]] [Wikipedia: Geometric transformation](https://en.wikipedia.org/wiki/Geometric_transformation)
- [[[reconstruction, 14]]] [Wikipedia: Signal reconstruction](https://en.wikipedia.org/wiki/Signal_reconstruction)
- [[[wavelet,15]]] [Wikipedia: Wavelet transform](https://en.wikipedia.org/wiki/Wavelet_transform)
- [[[hough, 16]]] [Wikipedia: Hough transform](https://en.wikipedia.org/wiki/Hough_transform)
- [[[radon, 17]]] [Wikipedia: Radon transform](https://en.wikipedia.org/wiki/Radon_transform)
- [[[integral-transform, 18]]] [Wikipedia: Integral transform](https://en.wikipedia.org/wiki/Integral_transform)
- [[[histogram, 19]]] [Wikipedia: Histogram](https://en.wikipedia.org/wiki/Histogram)
- [[[histogram-eq, 20]]] [Wikipedia: Histogram equalization](https://en.wikipedia.org/wiki/Histogram_equalization)
- [[[histogram-bbc, 21]]] [Bitesize: Histograms - Higher only](https://www.bbc.co.uk/bitesize/guides/zspfcwx/revision/3)
- [[[sobel, 22]]] [Wikipedia: Sobel operator](https://en.wikipedia.org/wiki/Sobel_operator)
- [[[canny, 23]]] [Wikipedia: Canny edge detector](https://en.wikipedia.org/wiki/Canny_edge_detector)
- [[[canny-tds, 24]]] [Canny Edge Detection Step by Step in Python — Computer Vision](https://towardsdatascience.com/canny-edge-detection-step-by-step-in-python-computer-vision-b49c3a2d8123)
- [[[divergence, 25]]] [Wikipedia: Divergence (operátor)](<https://cs.wikipedia.org/wiki/Divergence_(oper%C3%A1tor)>)
- [[[dog, 26]]] [Wikipedia: Difference of Gaussians](https://en.wikipedia.org/wiki/Difference_of_Gaussians)
- [[[others, 27]]] https://hackmd.io/@fi-muni-viz-2022/SywCznl2t
- [[[waveleet, 28]]] [Wikipedia: Vlnka](https://cs.wikipedia.org/wiki/Vlnka)
[^pb130]: [PB130 Úvod do digitálního zpracování obrazu (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/PB130/)
[^pv131]: [PV131 Digitální zpracování obrazu (jaro 2023)](https://is.muni.cz/auth/el/fi/jaro2023/PV131/)
[^raster]: [Wikipedia: Raster graphics](https://en.wikipedia.org/wiki/Raster_graphics)
[^dip]: [Wikipedia: Digital image processing](https://en.wikipedia.org/wiki/Digital_image_processing)
[^filter]: [Wikipedia: Filter (signal processing)](<https://en.wikipedia.org/wiki/Filter_(signal_processing)>)
[^convolution]: [Wikipedia: Convolution](https://en.wikipedia.org/wiki/Convolution)
[^edge-detection]: [Wikipedia: Edge detection](https://en.wikipedia.org/wiki/Edge_detection)
[^fourier]: [Wikipedia: Fourier transform](https://en.wikipedia.org/wiki/Fourier_transform)
[^fft]: [Wikipedia: Fast Fourier transform](https://en.wikipedia.org/wiki/Fast_Fourier_transform)
[^samping]: [Wikipedia: Sampling (signal processing)](<https://en.wikipedia.org/wiki/Sampling_(signal_processing)>)
[^scaling]: [Wikipedia: Image scaling](https://en.wikipedia.org/wiki/Image_scaling)
[^n-s]: [Wikipedia: NyquistShannon sampling theorem](https://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem)
[^geometric-transform]: [Wikipedia: Geometric transformation](https://en.wikipedia.org/wiki/Geometric_transformation)
[^reconstruction]: [Wikipedia: Signal reconstruction](https://en.wikipedia.org/wiki/Signal_reconstruction)
[^wavelet]: [Wikipedia: Wavelet transform](https://en.wikipedia.org/wiki/Wavelet_transform)
[^hough]: [Wikipedia: Hough transform](https://en.wikipedia.org/wiki/Hough_transform)
[^radon]: [Wikipedia: Radon transform](https://en.wikipedia.org/wiki/Radon_transform)
[^integral-transform]: [Wikipedia: Integral transform](https://en.wikipedia.org/wiki/Integral_transform)
[^histogram]: [Wikipedia: Histogram](https://en.wikipedia.org/wiki/Histogram)
[^histogram-eq]: [Wikipedia: Histogram equalization](https://en.wikipedia.org/wiki/Histogram_equalization)
[^histogram-bbc]: [Bitesize: Histograms - Higher only](https://www.bbc.co.uk/bitesize/guides/zspfcwx/revision/3)
[^sobel]: [Wikipedia: Sobel operator](https://en.wikipedia.org/wiki/Sobel_operator)
[^canny]: [Wikipedia: Canny edge detector](https://en.wikipedia.org/wiki/Canny_edge_detector)
[^canny-tds]: [Canny Edge Detection Step by Step in Python — Computer Vision](https://towardsdatascience.com/canny-edge-detection-step-by-step-in-python-computer-vision-b49c3a2d8123)
[^divergence]: [Wikipedia: Divergence (operátor)](<https://cs.wikipedia.org/wiki/Divergence_(oper%C3%A1tor)>)
[^dog]: [Wikipedia: Difference of Gaussians](https://en.wikipedia.org/wiki/Difference_of_Gaussians)
[^others]: https://hackmd.io/@fi-muni-viz-2022/SywCznl2t
[^waveleet]: [Wikipedia: Vlnka](https://cs.wikipedia.org/wiki/Vlnka)

View File

@ -205,14 +205,14 @@ Popis objektů je proces, při kterém se počítají vlastnosti segmentovaných
- _Druhý moment_: rozptyl / moment setrvačnosti.
- **Moment setrvačnosti / moment of inertia**\
Míra setrvačnosti při otáčení kolem těžiště. Popisuje rozložení hmoty okolo těžiště (_odchylku_ od něj v jistém smyslu). Umožňuje určit směr nejdůležitější osy objektu. [image-moment](#image-moment)
Míra setrvačnosti při otáčení kolem těžiště. Popisuje rozložení hmoty okolo těžiště (_odchylku_ od něj v jistém smyslu). Umožňuje určit směr nejdůležitější osy objektu. [^image-moment]
Provazochodci využívají moment setrvačnosti při chůzi po laně.
![szp10_provazochodec](./img/szp10_provazochodec.jpg)
> [!TIP]
> "Moment" nereferuje na čas, ale spíš na svůj starý význam "důležitost". Ve fyzice navíc obvykle souvisí s otáčivým pohybem. [moment](#moment)
> "Moment" nereferuje na čas, ale spíš na svůj starý význam "důležitost". Ve fyzice navíc obvykle souvisí s otáčivým pohybem. [^moment]
- **Prostorová orientace / spatial orientation**\
Směr a velikost delší strany nejmenšího bounding boxu. Lze ji také spočítat pomocí momentů setrvačnosti.
@ -351,7 +351,7 @@ Mapování, které každému pixelu popředí přiřazuje vzdálenost k nejbliž
## Matematická morfologie
Teorie a techniky pro analýzu geometrických struktur. Jsou založené na teorii množin, topologii, atd. Nejčastěji se aplikuje na digitální binární obrazy, ale dá se použít na grafy, meshe, apod. [morphology](#morphology)
Teorie a techniky pro analýzu geometrických struktur. Jsou založené na teorii množin, topologii, atd. Nejčastěji se aplikuje na digitální binární obrazy, ale dá se použít na grafy, meshe, apod. [^morphology]
- **Binární obraz**\
Dá se vnímat jako funkce $I: \Omega \rightarrow \{0, 1\}$, kde $\Omega \sub \mathbb{Z}^2$.
@ -363,7 +363,7 @@ Teorie a techniky pro analýzu geometrických struktur. Jsou založené na teori
Pracují na každém pixelu a jeho okolí -- strukturním elementu.
- **Strukturní element / structuring element (SE)**\
Množina souřadnic, pomocí které je obraz zpracováván. [pb130](#pb130)
Množina souřadnic, pomocí které je obraz zpracováván. [^pb130]
- Má definovaný _počátek_ -- $(0, 0)$. Schematicky se značí křížkem.
- Aktuálně uvažovaná souřadnice do něj nemusí patřit.
@ -504,7 +504,7 @@ Pracují na každém pixelu a jeho okolí -- strukturním elementu.
![width=500](./img/szp10_top_hat.png)
- **Watershed**\
Algoritmický přístup k segmentaci skrze matematickou morfologii. Kombinuje segmentaci _narůstáním oblastí_ a _detekcí hran_. [pb130](#pb130)
Algoritmický přístup k segmentaci skrze matematickou morfologii. Kombinuje segmentaci _narůstáním oblastí_ a _detekcí hran_. [^pb130]
- Simulace zvyšování hladiny vody krok za krokem.
- Obraz vnímán jako topografický povrch. Ve všech lokálních minimech je "udělána díra" odkud stoupá hladina vody.
@ -525,13 +525,12 @@ Pracují na každém pixelu a jeho okolí -- strukturním elementu.
![width=600](./img/szp10_watershed.png)
## Zdroje
- [[[pb130,1]]] [PB130 Úvod do digitálního zpracování obrazu (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/PB130/)
- [[[pv131,2]]] [PV131 Digitální zpracování obrazu (jaro 2023)](https://is.muni.cz/auth/el/fi/jaro2023/PV131/)
- [[[image-moment,3]]] [Wikipedia: Image moment](https://en.wikipedia.org/wiki/Image_moment)
- [[[moment, 4]]] [Wikipedia: Moment (mathematics)](<https://en.wikipedia.org/wiki/Moment_(mathematics)>)
- [[[morphology, 5]]] [Wikipedia: Mathematical morphology](https://en.wikipedia.org/wiki/Mathematical_morphology)
[^pb130]: [PB130 Úvod do digitálního zpracování obrazu (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/PB130/)
[^pv131]: [PV131 Digitální zpracování obrazu (jaro 2023)](https://is.muni.cz/auth/el/fi/jaro2023/PV131/)
[^image-moment]: [Wikipedia: Image moment](https://en.wikipedia.org/wiki/Image_moment)
[^moment]: [Wikipedia: Moment (mathematics)](<https://en.wikipedia.org/wiki/Moment_(mathematics)>)
[^morphology]: [Wikipedia: Mathematical morphology](https://en.wikipedia.org/wiki/Mathematical_morphology)
## Další zdroje

View File

@ -12,7 +12,7 @@ description: "TODO"
## Příprava a vývoj scény
> [!NOTE]
> Poznámky o grayboxingu, iterování, modulárním workflow, atd. jsou z přednášky Lukáše Medka v rámci PV255. [medek](#medek)
> Poznámky o grayboxingu, iterování, modulárním workflow, atd. jsou z přednášky Lukáše Medka v rámci PV255. [^medek]
- **Iterace**\
Práce v iteracích pomáhá:
@ -35,7 +35,7 @@ description: "TODO"
- Umožňuje implementovat mechaniky bez nutnosti čekat na assety.
- Limituje odpad -- nevyužité assety -- při změnách nebo škrtech.
- **Modulární workflow**\
Využití malého množství assetů pro vytvoření rozsáhlého prostředí. Nutná promyšlená preprodukce. [modular](#modular)
Využití malého množství assetů pro vytvoření rozsáhlého prostředí. Nutná promyšlená preprodukce. [^modular]
- **Modulární textury**\
Textury aplikovatelné na více modelů. Je potřeba na všechna využití myslet při vytváření textury.
- **Placeholders**\
@ -59,7 +59,7 @@ description: "TODO"
## Physically based rendering (PBR)
Physically based rendering (PBR) je způsob renderování, který se snaží co nejvíce aproximovat realitu pomocí fyzikálních modelů světla, stínů, materiálů, očí, atd. [pv227-2022](#pv227-2022) Aproximuje efekty jako absorpci světla nebo jeho rozptyl pod povrchem objektů.
Physically based rendering (PBR) je způsob renderování, který se snaží co nejvíce aproximovat realitu pomocí fyzikálních modelů světla, stínů, materiálů, očí, atd. [^pv227-2022] Aproximuje efekty jako absorpci světla nebo jeho rozptyl pod povrchem objektů.
- **Absorption and scattering / absorpce a rozptyl**\
Materiály mohou světlo buď absorbovat (v takovém případě jsou alespoň částěčně průhledné) nebo odrážet a rozptylovat (objekty jsou matné). Většina materiálů kombinuje oba efekty. Světlo se může rozpylovat i pod povrchem (subsurface scattering).
@ -177,7 +177,7 @@ BRDF je řešena pomocí ray tracingu, radiosity, nebo nějakým hybridním ře
## Optimizalizace výkonu vykreslování
- **Level-of-detail (LOD) / úrovně detailů**\
Čím větší vzdálenost, tím méně detailů. [pv255-2022](#pv255-2022)
Čím větší vzdálenost, tím méně detailů. [^pv255-2022]
Pro každý model máme hierarchii modelů s různým počtem polygonů. V závislosti na vzdálenosti od pozorovatele vybíráme vhodný LOD.
@ -199,7 +199,7 @@ BRDF je řešena pomocí ray tracingu, radiosity, nebo nějakým hybridním ře
- **Hierarchical LOD**\
Seskupuje objekty ve scéně do hierarchie a zjednodušuje celé skupiny objektů najednou. Vede k lepšímu výkonu.
- **Texture filtering**\
Popisuje, jakým způsobem se pixely textury (texely) mapují na pixely obrazovky / daného polygonu. [texture-mapping](#texture-mapping)
Popisuje, jakým způsobem se pixely textury (texely) mapují na pixely obrazovky / daného polygonu. [^texture-mapping]
Součástí problému je potřeba odhadnout, jak velkou plochu polygon zabere na obrazovce.
@ -227,7 +227,7 @@ BRDF je řešena pomocí ray tracingu, radiosity, nebo nějakým hybridním ře
- _RenderDoc:_ debuggování OpenGL, DirectX a Vulkan
- **Object culling / ostřelování objektů**\
Nalézání podmnožiny objektů ve scéně, která může být vynechána, aniž by viditelně ovlivnila výsledný obraz. Počítání přesné viditelnosti je příliš náročné, proto se používají aproximace známé jako _potentially visible set_ (PVS). [pa010-2021](#pa010-2021)
Nalézání podmnožiny objektů ve scéně, která může být vynechána, aniž by viditelně ovlivnila výsledný obraz. Počítání přesné viditelnosti je příliš náročné, proto se používají aproximace známé jako _potentially visible set_ (PVS). [^pa010-2021]
- **Back-face culling**\
Vykreslování pouze předních stran polygonů.
- **View frustum culling**\
@ -251,11 +251,10 @@ BRDF je řešena pomocí ray tracingu, radiosity, nebo nějakým hybridním ře
- Minimalizovat počet materiálů (např. spojováním textur).
- Vypéct všechni nedynamické (statická světla, stíny, atd.)
## Zdroje
- [[[medek,1]]]: [Lukáš Medek (CBE), Základní postupy při tvorbě assetů a herního vizuálu](++http://decibel.fi.muni.cz/pv255/2018/slides/PV255_-_06_-_Zakladni_postupy_pri_tvorbe_assetu_a_herniho_vizualu.pdf++)
- [[[modular,2]]]: http://wiki.polycount.com/wiki/Modular_environments
- [[[pv227-2022, 3]]] [PV227 GPU Rendering (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/PV227/)
- [[[pv255-2022,4]]] [Chmelík, PV255 Game Development I](https://is.muni.cz/auth/el/fi/podzim2022/PV255/um/)
- [[[texture-mapping, 5]]] [Wikipedia: Texture mapping](https://en.wikipedia.org/wiki/Texture_mapping)
- [[[pa010-2021,6]]] [Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)](https://is.muni.cz/auth/el/fi/podzim2021/PA010/um/)
[^medek]:: [Lukáš Medek (CBE), Základní postupy při tvorbě assetů a herního vizuálu](++http://decibel.fi.muni.cz/pv255/2018/slides/PV255_-_06_-_Zakladni_postupy_pri_tvorbe_assetu_a_herniho_vizualu.pdf++)
[^modular]:: http://wiki.polycount.com/wiki/Modular_environments
[^pv227-2022]: [PV227 GPU Rendering (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/PV227/)
[^pv255-2022]: [Chmelík, PV255 Game Development I](https://is.muni.cz/auth/el/fi/podzim2022/PV255/um/)
[^texture-mapping]: [Wikipedia: Texture mapping](https://en.wikipedia.org/wiki/Texture_mapping)
[^pa010-2021]: [Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)](https://is.muni.cz/auth/el/fi/podzim2021/PA010/um/)

View File

@ -21,7 +21,7 @@ description: "TODO"
### Redukce počtu polygonů
Slučování polygonů (merging) či odstranění polygonů (culling), které nejsou vidět. [pa010-2021](#pa010-2021)
Slučování polygonů (merging) či odstranění polygonů (culling), které nejsou vidět. [^pa010-2021]
- **Variational Shape Approximation**
@ -88,35 +88,35 @@ Množina bodů v prostoru, které nemají žádnou strukturu. Nejjednodušší p
Ze získaných dat se snažíme vytvořit mesh. Ten lze vyrenderovat tradičním způsobem.
- **Marching cubes**\
Rozděluje prostor na mřížku voxelů. V každém voxelu se pak vyhodnocuje, zda je povrch objektu překročen. Pokud ano, je třeba přidat triangle mesh pro daný voxel. [pa010-2020](#pa010-2020) [marching-cubes](#marching-cubes)
Rozděluje prostor na mřížku voxelů. V každém voxelu se pak vyhodnocuje, zda je povrch objektu překročen. Pokud ano, je třeba přidat triangle mesh pro daný voxel. [^pa010-2020] [^marching-cubes]
**Marching cubes by [Ryoshoru](https://commons.wikimedia.org/wiki/File:MarchingCubesEdit.svg)**
![width=500rem](./img/vph01_marching_cubes.svg)
- **Marching tetrahedra**\
Analogický k marching cubes, ale používá místo krychlí čtyřstěny. Řeší problém s některými nejednoznačnými konfiguracemi v marching cubes, a taky nikdy nebyl patentován (kdežto marching cubes ano). [marching-tetrahedra](#marching-tetrahedra)
Analogický k marching cubes, ale používá místo krychlí čtyřstěny. Řeší problém s některými nejednoznačnými konfiguracemi v marching cubes, a taky nikdy nebyl patentován (kdežto marching cubes ano). [^marching-tetrahedra]
- **Vertex clustering**\
Metoda podobná _iterative decimation_ (viz výše), nejprve vytvoříme clustery bodů, poté pro každý vybereme vhodného reprezentanta (např. průměrem, mediánem, quadric error minimization, atd.), pak už jen zbývá mesh "sešít" např. pomocí triangulace. [pa010-2020](#pa010-2020)
Metoda podobná _iterative decimation_ (viz výše), nejprve vytvoříme clustery bodů, poté pro každý vybereme vhodného reprezentanta (např. průměrem, mediánem, quadric error minimization, atd.), pak už jen zbývá mesh "sešít" např. pomocí triangulace. [^pa010-2020]
- **Dual contouring**\
Z voxelů se stanou vrcholy (tedy využíváme dualního grafu). Tyto vrcholy jsou ale posunuty tak, že povrch může obsahovat jak ostré hrany tak zaoblené plochy. [dual-contouring](#dual-contouring)
Z voxelů se stanou vrcholy (tedy využíváme dualního grafu). Tyto vrcholy jsou ale posunuty tak, že povrch může obsahovat jak ostré hrany tak zaoblené plochy. [^dual-contouring]
- **Delaunay triangulation**\
Vytváří trojúhelníkovou síť, tak že žádný bod se nenáchází ve vepsané kružnici žádného trojúhelníku. Maximalizuje nejmenší úhel trojúhelníků. [delaunay-triangulation](#delaunay-triangulation)
Vytváří trojúhelníkovou síť, tak že žádný bod se nenáchází ve vepsané kružnici žádného trojúhelníku. Maximalizuje nejmenší úhel trojúhelníků. [^delaunay-triangulation]
![width=300](./img/vph01_delaunay.svg)
### Direct volume rendering (přímé renderování objemu)
Nerekonstruujeme povrch, ale mapujeme data na _optické_ vlastnosti jako je barva a průhlednost. Během renderování se pak využívá path tracing, a tyto vlastnosti se akumulují podél jednotlivých paprsků. [gpugems](#gpugems)
Nerekonstruujeme povrch, ale mapujeme data na _optické_ vlastnosti jako je barva a průhlednost. Během renderování se pak využívá path tracing, a tyto vlastnosti se akumulují podél jednotlivých paprsků. [^gpugems]
V realitě tohle chování paprsku popisujeme integrály. V počítačové grafice se ale využívá aproximace pomocí sumy.
**The Process of Volume Rendering [gpugems](#gpugems)**
**The Process of Volume Rendering [^gpugems]**
![width=500rem](./img/vph01_direct_volume_rendering.jpg)
- **Emmission-absorption model**\
Paprsek vstupuje do objemu, kde je absorbován a emitován. Výsledná barva je pak výsledkem akumulace těchto vlastností. V notaci používáme: [pa213](#pa213)
Paprsek vstupuje do objemu, kde je absorbován a emitován. Výsledná barva je pak výsledkem akumulace těchto vlastností. V notaci používáme: [^pa213]
- $\kappa$ je funkce absorpce,
- $q$ je emise.
@ -140,7 +140,7 @@ V realitě tohle chování paprsku popisujeme integrály. V počítačové grafi
```
- **Volume rendering integral**\
Intenzitu světla $I$ v místě paprsku $s$ počítáme pomocí: [pa213](#pa213)
Intenzitu světla $I$ v místě paprsku $s$ počítáme pomocí: [^pa213]
```math
\begin{aligned}
@ -171,7 +171,7 @@ V realitě tohle chování paprsku popisujeme integrály. V počítačové grafi
Dá se utnout dřív, když víme jistě, že už je výsledek neprůhledný a tedy už se nic nezmění.
- **Transfer function**\
Funkce $T$, která mapuje hodnoty voxelů na barvu a průhlednost. Klasifikuje voxely. [pa213](#pa213)
Funkce $T$, která mapuje hodnoty voxelů na barvu a průhlednost. Klasifikuje voxely. [^pa213]
## Modely nasvícení (illumination models)
@ -191,7 +191,7 @@ V realitě tohle chování paprsku popisujeme integrály. V počítačové grafi
## Physically based rendering (PBR)
Physically based rendering (PBR) je způsob renderování, který se snaží co nejvíce aproximovat realitu pomocí fyzikálních modelů světla, stínů, materiálů, očí, atd. [pv227-2022](#pv227-2022) Aproximuje efekty jako absorpci světla nebo jeho rozptyl pod povrchem objektů.
Physically based rendering (PBR) je způsob renderování, který se snaží co nejvíce aproximovat realitu pomocí fyzikálních modelů světla, stínů, materiálů, očí, atd. [^pv227-2022] Aproximuje efekty jako absorpci světla nebo jeho rozptyl pod povrchem objektů.
- **Absorption and scattering / absorpce a rozptyl**\
Materiály mohou světlo buď absorbovat (v takovém případě jsou alespoň částěčně průhledné) nebo odrážet a rozptylovat (objekty jsou matné). Většina materiálů kombinuje oba efekty. Světlo se může rozpylovat i pod povrchem (subsurface scattering).
@ -362,21 +362,20 @@ Stíny jsou důležité, jelikož:
- **Soft shadows**\
Existuje množství algoritmů. Například shadow mapy s Percentage Closer Filtering (PCF). Jsou ale výpočetně náročnější než hard shadows.
## Zdroje
- [[[pa010-2021,1]]] Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)
- [[[pa010-2020,2]]] Sochor: PA010 Intermediate Computer Graphics (podzim 2020)
- [[[pa213, 3]]] PA213 Advanced Computer Graphics
- [[[notes-pa010,4]]] [Moje poznámky z PA010 (podzim 2020)](/fi/pa010/)
- [[[manifold-wiki,5]]] [Wikipedia: Topological manifold](https://en.wikipedia.org/wiki/Topological_manifold)
- [[[klein-bottle,6]]] [Konrad Polthier: Imaging maths - Inside the Klein bottle ](https://plus.maths.org/content/imaging-maths-inside-klein-bottle)
- [[[genus,7]]] [Saul Schleimer: Notes on the complex of curves](https://www.researchgate.net/publication/228393582_Notes_on_the_complex_of_curves)
- [[[gpugems,8]]] [GPU Gems: Volume Rendering Techniques](https://developer.nvidia.com/gpugems/gpugems/part-vi-beyond-triangles/chapter-39-volume-rendering-techniques)
- [[[marching-cubes,9]]] [Marching cubes: A high resolution 3D surface construction algorithm](https://dl.acm.org/doi/10.1145/37402.37422)
- [[[marching-tetrahedra,10]]] [Wikipedia: Marching tetrahedra](https://en.wikipedia.org/wiki/Marching_tetrahedra)
- [[[dual-contouring,11]]] [Dual Contouring Tutorial](https://www.boristhebrave.com/2018/04/15/dual-contouring-tutorial/)
- [[[delaunay-triangulation,12]]] [Wikipedia: Delaunay triangulation](https://en.wikipedia.org/wiki/Delaunay_triangulation)
- [[[pv227-2022, 13]]] [PV227 GPU Rendering (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/PV227/)
[^pa010-2021]: Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)
[^pa010-2020]: Sochor: PA010 Intermediate Computer Graphics (podzim 2020)
[^pa213]: PA213 Advanced Computer Graphics
[^notes-pa010]: [Moje poznámky z PA010 (podzim 2020)](/fi/pa010/)
[^manifold-wiki]: [Wikipedia: Topological manifold](https://en.wikipedia.org/wiki/Topological_manifold)
[^klein-bottle]: [Konrad Polthier: Imaging maths - Inside the Klein bottle ](https://plus.maths.org/content/imaging-maths-inside-klein-bottle)
[^genus]: [Saul Schleimer: Notes on the complex of curves](https://www.researchgate.net/publication/228393582_Notes_on_the_complex_of_curves)
[^gpugems]: [GPU Gems: Volume Rendering Techniques](https://developer.nvidia.com/gpugems/gpugems/part-vi-beyond-triangles/chapter-39-volume-rendering-techniques)
[^marching-cubes]: [Marching cubes: A high resolution 3D surface construction algorithm](https://dl.acm.org/doi/10.1145/37402.37422)
[^marching-tetrahedra]: [Wikipedia: Marching tetrahedra](https://en.wikipedia.org/wiki/Marching_tetrahedra)
[^dual-contouring]: [Dual Contouring Tutorial](https://www.boristhebrave.com/2018/04/15/dual-contouring-tutorial/)
[^delaunay-triangulation]: [Wikipedia: Delaunay triangulation](https://en.wikipedia.org/wiki/Delaunay_triangulation)
[^pv227-2022]: [PV227 GPU Rendering (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/PV227/)
## Další zdroje

View File

@ -33,7 +33,7 @@ description: "TODO"
## Objekty pro detekci kolizí
V principu funguje detekce kolizí tak, že v každém kroku fyzikální simulace: [pa199-2022](#pa199-2022)
V principu funguje detekce kolizí tak, že v každém kroku fyzikální simulace: [^pa199-2022]
1. dojde ke kontrole, zda se dva objekty dotýkají -- či mají společný průnik,
2. pokud ano a kolize jsou pro dané objekty povoleny, dojde k výpočtu kolizních dat (normála, hloubka průniku, atd.),
@ -75,6 +75,5 @@ V principu funguje detekce kolizí tak, že v každém kroku fyzikální simulac
- **Continous collision detection (CCD)**\
Kolize se detekují v "průběhu pohybu" objektů -- pomocí supersamplingu, raycastingu, swept spheres, atd. Výpočetně náročné.
## Zdroje
- [[[pa199-2022,9]]] [Chmelík, Trtík, PA199 Advanced Game Development](https://is.muni.cz/auth/el/fi/podzim2022/PA199/um/)
[^pa199-2022]: [Chmelík, Trtík, PA199 Advanced Game Development](https://is.muni.cz/auth/el/fi/podzim2022/PA199/um/)

View File

@ -15,7 +15,7 @@ description: "TODO"
## Příprava a vývoj scény
> [!NOTE]
> Poznámky o grayboxingu, iterování, modulárním workflow, atd. jsou z přednášky Lukáše Medka v rámci PV255. [medek](#medek)
> Poznámky o grayboxingu, iterování, modulárním workflow, atd. jsou z přednášky Lukáše Medka v rámci PV255. [^medek]
- **Iterace**\
Práce v iteracích pomáhá:
@ -38,7 +38,7 @@ description: "TODO"
- Umožňuje implementovat mechaniky bez nutnosti čekat na assety.
- Limituje odpad -- nevyužité assety -- při změnách nebo škrtech.
- **Modulární workflow**\
Využití malého množství assetů pro vytvoření rozsáhlého prostředí. Nutná promyšlená preprodukce. [modular](#modular)
Využití malého množství assetů pro vytvoření rozsáhlého prostředí. Nutná promyšlená preprodukce. [^modular]
- **Modulární textury**\
Textury aplikovatelné na více modelů. Je potřeba na všechna využití myslet při vytváření textury.
- **Placeholders**\
@ -47,7 +47,7 @@ description: "TODO"
## Optimizalizace výkonu vykreslování
- **Level-of-detail (LOD) / úrovně detailů**\
Čím větší vzdálenost, tím méně detailů. [pv255-2022](#pv255-2022)
Čím větší vzdálenost, tím méně detailů. [^pv255-2022]
Pro každý model máme hierarchii modelů s různým počtem polygonů. V závislosti na vzdálenosti od pozorovatele vybíráme vhodný LOD.
@ -69,7 +69,7 @@ description: "TODO"
- **Hierarchical LOD**\
Seskupuje objekty ve scéně do hierarchie a zjednodušuje celé skupiny objektů najednou. Vede k lepšímu výkonu.
- **Texture filtering**\
Popisuje, jakým způsobem se pixely textury (texely) mapují na pixely obrazovky / daného polygonu. [texture-mapping](#texture-mapping)
Popisuje, jakým způsobem se pixely textury (texely) mapují na pixely obrazovky / daného polygonu. [^texture-mapping]
Součástí problému je potřeba odhadnout, jak velkou plochu polygon zabere na obrazovce.
@ -97,7 +97,7 @@ description: "TODO"
- _RenderDoc:_ debuggování OpenGL, DirectX a Vulkan
- **Object culling / ostřelování objektů**\
Nalézání podmnožiny objektů ve scéně, která může být vynechána, aniž by viditelně ovlivnila výsledný obraz. Počítání přesné viditelnosti je příliš náročné, proto se používají aproximace známé jako _potentially visible set_ (PVS). [pa010-2021](#pa010-2021)
Nalézání podmnožiny objektů ve scéně, která může být vynechána, aniž by viditelně ovlivnila výsledný obraz. Počítání přesné viditelnosti je příliš náročné, proto se používají aproximace známé jako _potentially visible set_ (PVS). [^pa010-2021]
- **Back-face culling**\
Vykreslování pouze předních stran polygonů.
- **View frustum culling**\
@ -124,23 +124,23 @@ description: "TODO"
## Využití shaderů pro efekty ve hrách
- **Toon / cel shading**\
Toon shading používá jen několik ruzných "kroků" intezity barev. Cel shading prý přidává kontury, ale zdá se, že ty termíny jsou spíš synonyma. [pa010-2020](#pa010-2020) [cel](#cel)
Toon shading používá jen několik ruzných "kroků" intezity barev. Cel shading prý přidává kontury, ale zdá se, že ty termíny jsou spíš synonyma. [^pa010-2020] [^cel]
**Cel-shaded Utah Teapot by [NicolasSourd](https://commons.wikimedia.org/w/index.php?curid=1788125)**
![width=500rem](./img/vph02_cel.png)
- **Color grading**\
Využívá se look-up table (LUT) pro jednotnou barevnou korekci. [zeleny](#zeleny) [color-grading](#color-grading)
Využívá se look-up table (LUT) pro jednotnou barevnou korekci. [^zeleny] [^color-grading]
- **Marschner Hair**\
Shader, co používá Pixar pro vlasy a chlupy postavený na výzkumu Steva Marschnera. Má tři složky: odraz \(R), průchod skrz (TT), vnitřní odraz (TRT). [zeleny](#zeleny) [hair](#hair)
Shader, co používá Pixar pro vlasy a chlupy postavený na výzkumu Steva Marschnera. Má tři složky: odraz \(R), průchod skrz (TT), vnitřní odraz (TRT). [^zeleny] [^hair]
- **Hloubka obrazu / depth of field**\
Fyzikálně korektní bokeh. Simuluje fotoaparát včetně clony (F-stop), velikosti snímače (full-frame, APS-C, atd.), ohniskové vzdálenosti, počtu lamel, atd. [zeleny](#zeleny)
Fyzikálně korektní bokeh. Simuluje fotoaparát včetně clony (F-stop), velikosti snímače (full-frame, APS-C, atd.), ohniskové vzdálenosti, počtu lamel, atd. [^zeleny]
![width=500rem](./img/vph02_dof.png)
> [!TIP]
> Circle of Confusion (CoC) je kruh způsobený imperfektním zaostřením. Měřením CoC foťáky určují depth of field. [coc](#coc)
> Circle of Confusion (CoC) je kruh způsobený imperfektním zaostřením. Měřením CoC foťáky určují depth of field. [^coc]
## Ray tracing / sledování paprsků
@ -165,12 +165,12 @@ Ray tracing jsou techniky, které trasují paprsky světla napříč scénou.
- Architektonické vizualizace
- Hry
- **Spatial data structure**\
Datové struktury popisujicí objekty v prostoru. Volba vhodné struktury je klíčová pro efektivitu ray tracingu, ale je fajn i pro všední průchod scénou. [bvh-rt](#bvh-rt)
Datové struktury popisujicí objekty v prostoru. Volba vhodné struktury je klíčová pro efektivitu ray tracingu, ale je fajn i pro všední průchod scénou. [^bvh-rt]
![width=500rem](./img/vph02_spatial_data_structure.png)
- **Bounding volume hierarchy (BVH)**\
Hierarchická reprezentace scény, díky které průchod scénou zredukován z $\mathcal{O}(n)$ na $\mathcal{O}(\log n)$ ($n$ je počet objektů ve scéně). Dá se stavět top-down nebo bottom-up. [bvh-rt](#bvh-rt)
Hierarchická reprezentace scény, díky které průchod scénou zredukován z $\mathcal{O}(n)$ na $\mathcal{O}(\log n)$ ($n$ je počet objektů ve scéně). Dá se stavět top-down nebo bottom-up. [^bvh-rt]
Chceme od ní dvě věci:
@ -246,7 +246,7 @@ Ray tracing jsou techniky, které trasují paprsky světla napříč scénou.
## Objekty pro detekci kolizí
V principu funguje detekce kolizí tak, že v každém kroku fyzikální simulace: [pa199-2022](#pa199-2022)
V principu funguje detekce kolizí tak, že v každém kroku fyzikální simulace: [^pa199-2022]
1. dojde ke kontrole, zda se dva objekty dotýkají -- či mají společný průnik,
2. pokud ano a kolize jsou pro dané objekty povoleny, dojde k výpočtu kolizních dat (normála, hloubka průniku, atd.),
@ -297,29 +297,28 @@ Specifický pohyb postav bezvědomí. Kombinuje animace a fyziku. Je založená
- rozdělení postavy na skupiny rigid bodies,
- springs and dampers -- pružiny a tlumiče.
**The first "ragdoll falling downstairs" (1997) [ragdolls](#ragdolls)**
**The first "ragdoll falling downstairs" (1997) [^ragdolls]**
![width=500rem](./img/vph02_ragdoll.jpg)
- **Featherstones algorithm**\
Algoritmus pro výpočet dynamiky stromovité struktury propojených článků.
## Zdroje
- [[[medek,1]]]: [Lukáš Medek (CBE), Základní postupy při tvorbě assetů a herního vizuálu](++http://decibel.fi.muni.cz/pv255/2018/slides/PV255_-_06_-_Zakladni_postupy_pri_tvorbe_assetu_a_herniho_vizualu.pdf++)
- [[[modular,2]]]: http://wiki.polycount.com/wiki/Modular_environments
- [[[pa010-2020,3]]] Sochor: PA010 Intermediate Computer Graphics (podzim 2020)
- [[[cel,4]]] https://en.wikipedia.org/wiki/Cel_shading
- [[[zeleny,5]]] [Jan Zelený, Grafické efekty](++http://decibel.fi.muni.cz/pv255/2018/slides/PV255_-_09_-_Graficke_efekty.pdf++)
- [[[hair,6]]] https://www.fxguide.com/fxfeatured/pixars-renderman-marschner-hair/
- [[[color-grading,7]]] [Using Look-up Tables for Color Grading](https://docs.unrealengine.com/5.2/en-US/using-look-up-tables-for-color-grading-in-unreal-engine/)
- [[[coc,8]]] https://en.wikipedia.org/wiki/Circle_of_confusion
- [[[pa199-2022,9]]] [Chmelík, Trtík, PA199 Advanced Game Development](https://is.muni.cz/auth/el/fi/podzim2022/PA199/um/)
- [[[quickhull,10]]] [Barber, Dopkin, Huhdanpaa: The Quickhull Algorithm for Convex Hulls](https://dl.acm.org/doi/pdf/10.1145/235815.235821)
- [[[ragdolls,11]]] http://www.animats.com/
- [[[bvh-rt,12]]] [Bittner: Bounding Volume Hierarchies for Ray Tracing](https://is.muni.cz/auth/el/fi/jaro2022/PA213/um/slides/BoundingVolumeHierarchiesforRayTracing.pdf)
- [[[path-tracing,13]]] [Path Tracing vs. Ray Tracing, Explained](https://www.techspot.com/article/2485-path-tracing-vs-ray-tracing/)
- [[[bvh,14]]] [Pharr, Jakob, Humphreys; Physically Based Rendering: From Theory To Implementation; Chapter 4: Bounding Volume Hierarchies](https://www.pbr-book.org/3ed-2018/Primitives_and_Intersection_Acceleration/Bounding_Volume_Hierarchies)
- [[[pv255-2022,15]]] [Chmelík, PV255 Game Development I](https://is.muni.cz/auth/el/fi/podzim2022/PV255/um/)
- [[[pa010-2021,16]]] [Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)](https://is.muni.cz/auth/el/fi/podzim2021/PA010/um/)
- [[[texture-mapping, 17]]] [Wikipedia: Texture mapping](https://en.wikipedia.org/wiki/Texture_mapping)
[^medek]:: [Lukáš Medek (CBE), Základní postupy při tvorbě assetů a herního vizuálu](++http://decibel.fi.muni.cz/pv255/2018/slides/PV255_-_06_-_Zakladni_postupy_pri_tvorbe_assetu_a_herniho_vizualu.pdf++)
[^modular]:: http://wiki.polycount.com/wiki/Modular_environments
[^pa010-2020]: Sochor: PA010 Intermediate Computer Graphics (podzim 2020)
[^cel]: https://en.wikipedia.org/wiki/Cel_shading
[^zeleny]: [Jan Zelený, Grafické efekty](++http://decibel.fi.muni.cz/pv255/2018/slides/PV255_-_09_-_Graficke_efekty.pdf++)
[^hair]: https://www.fxguide.com/fxfeatured/pixars-renderman-marschner-hair/
[^color-grading]: [Using Look-up Tables for Color Grading](https://docs.unrealengine.com/5.2/en-US/using-look-up-tables-for-color-grading-in-unreal-engine/)
[^coc]: https://en.wikipedia.org/wiki/Circle_of_confusion
[^pa199-2022]: [Chmelík, Trtík, PA199 Advanced Game Development](https://is.muni.cz/auth/el/fi/podzim2022/PA199/um/)
[^quickhull]: [Barber, Dopkin, Huhdanpaa: The Quickhull Algorithm for Convex Hulls](https://dl.acm.org/doi/pdf/10.1145/235815.235821)
[^ragdolls]: http://www.animats.com/
[^bvh-rt]: [Bittner: Bounding Volume Hierarchies for Ray Tracing](https://is.muni.cz/auth/el/fi/jaro2022/PA213/um/slides/BoundingVolumeHierarchiesforRayTracing.pdf)
[^path-tracing]: [Path Tracing vs. Ray Tracing, Explained](https://www.techspot.com/article/2485-path-tracing-vs-ray-tracing/)
[^bvh]: [Pharr, Jakob, Humphreys; Physically Based Rendering: From Theory To Implementation; Chapter 4: Bounding Volume Hierarchies](https://www.pbr-book.org/3ed-2018/Primitives_and_Intersection_Acceleration/Bounding_Volume_Hierarchies)
[^pv255-2022]: [Chmelík, PV255 Game Development I](https://is.muni.cz/auth/el/fi/podzim2022/PV255/um/)
[^pa010-2021]: [Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)](https://is.muni.cz/auth/el/fi/podzim2021/PA010/um/)
[^texture-mapping]: [Wikipedia: Texture mapping](https://en.wikipedia.org/wiki/Texture_mapping)

View File

@ -8,7 +8,7 @@ Hra, videohra, desková hra, digitální hra, počítačová hra, hračka, háda
_PA215, PA216_
> Game design is an idea. An idea is worthless. An idea is not playable.[pa215-2022](#pa215-2022) [pa215-2019](#pa215-2019)
> Game design is an idea. An idea is worthless. An idea is not playable.[^pa215-2022] [^pa215-2019]
>
> — ZZ
@ -40,7 +40,7 @@ Definice hry je stále aktivní proces, ale zjednodušeně je to něco, co se d
>
> — ZZ? Asi.
**Vlastnosti her [schell](#schell)**
**Vlastnosti her [^schell]**
1. Games are **entered willfully**.
2. Games have **goals**.
@ -77,7 +77,7 @@ Useless fun fact: _Xbox_ je zkratka pro _DirectX Box_. DirectX zastřešuje něk
Takže _Xbox X_ je vlastně _DirectX Box X_. Microsoft fakt neumí pojmenovávat věci.
- **Hádanka**\
Hádanka je drobný slovesný projev v podobě hříčky, která v náznaku předkládá určitý problém, k jehož řešení lze dospět důvtipem nebo logickou úvahou [hadanka](#hadanka).
Hádanka je drobný slovesný projev v podobě hříčky, která v náznaku předkládá určitý problém, k jehož řešení lze dospět důvtipem nebo logickou úvahou [^hadanka].
- **Puzzle**\
V češtině se slovo _puzzle_ používá pro označení skládaček, ale v herním průmyslu se pod tímto slovem rozumí hlavolam - problém, který musí hráč vyřešit.
- **Divadelní hra**\
@ -109,7 +109,7 @@ Lidi jsou různí a různí lidi hrají různé hry různě.
> I havent tried that one, whats it do?
**Bartles Taxonomy of Players [pa215-2022](#pa215-2022)**
**Bartles Taxonomy of Players [^pa215-2022]**
![width=500rem](./img/vph03_bartle.png)
@ -118,7 +118,7 @@ Neexistuje hra, která by se líbila všem. Cílová skupina je skupina lidí, k
== Komponenty hry
Na hru se dá dívat z mnoha různých perspektiv: [pa215-2019](#pa215-2019)
Na hru se dá dívat z mnoha různých perspektiv: [^pa215-2019]
| Component |
| --------------------------- | ------------------- | --------------------- |
@ -144,9 +144,9 @@ Hry dovedou navodit řadu různých herních zážitků, které můžeme různý
==== LeBlancs Eight Kinds of Fun
> [!TIP]
> Taky označované jako _Taxonomy of Game Pleasures_ a _herní "pošušňáníčka"_. [pa215-2019](#pa215-2019)
> Taky označované jako _Taxonomy of Game Pleasures_ a _herní "pošušňáníčka"_. [^pa215-2019]
Game designer Marc LeBlanc rozdělil herní zážitky do osmi kategorií: [leblanc](#leblanc)[mda](#mda)
Game designer Marc LeBlanc rozdělil herní zážitky do osmi kategorií: [^leblanc][^mda]
- **Sensation**\
Game as sense-pleasure: beautiful visuals, good audio, tactile pleasure.
@ -218,7 +218,7 @@ Designér iterativně vytváří hrubé verze hry, které testuje a upravuje. Pr
- ~~Cílem game designera je vytvořit hru.~~
- ~~Cílem game designera je vytvořit nějaký zážitek.~~
- Cílem game designera je vytvořit artefakt (hru), která vytváří nějaký zážitek.
- Game designer není zodpovědný za celou hru. Je jen jednou z mnoha rolí, které se na tvorbě hry podílejí. [badges](#badges)
- Game designer není zodpovědný za celou hru. Je jen jednou z mnoha rolí, které se na tvorbě hry podílejí. [^badges]
- **Role**
- Analyzuje hru jako systém objektů, relací, příčin a následků.
- Designuje změny, modeluje následky, rozhoduje, posuzuje produkční rizika.
@ -259,7 +259,7 @@ Ale bacha na mylné závěry. Game designeři mají často zvláštní chutě.
=== Systematická činnost -- game balancing
Při balancování hry designer úmyslně ničí svoji hru, aby odhalil její hranice. [pa215-2022](#pa215-2022)
Při balancování hry designer úmyslně ničí svoji hru, aby odhalil její hranice. [^pa215-2022]
**Doporučení**
@ -276,9 +276,9 @@ Zjednodušit a předat informace o tom co fungeje a co ne ostatním. Musí umět
> [!NOTE]
> Ontologie -- disciplína zabývající se bytím a základními pojmy jako je realita, existence, atp.
Lehký slovník pro popis her. [cgo](#cgo) Hodí se při komunikaci s klienty, nevyvojáři a nehráči. [pa216-2020](#pa216-2020)
Lehký slovník pro popis her. [^cgo] Hodí se při komunikaci s klienty, nevyvojáři a nehráči. [^pa216-2020]
**The Core Game Ontology [cgo](#cgo)**
**The Core Game Ontology [^cgo]**
![width=100%](./img/vph03_cgo.svg)
@ -297,7 +297,7 @@ Lehký slovník pro popis her. [cgo](#cgo) Hodí se při komunikaci s klienty, n
== Žánry
Herní žánry jsou jednoduchou, byť ne zcela přesnou, klasifikací her podle jejich herních mechanik a herních smyček. [genre](#genre) Hrá může zapadat do jednoho nebo více žánrů. Jsou jimi například:
Herní žánry jsou jednoduchou, byť ne zcela přesnou, klasifikací her podle jejich herních mechanik a herních smyček. [^genre] Hrá může zapadat do jednoho nebo více žánrů. Jsou jimi například:
- **Platformer**\
Hra, ve které se hráč pohybuje po platformách a překonává překážky.
@ -320,16 +320,16 @@ Herní žánry jsou jednoduchou, byť ne zcela přesnou, klasifikací her podle
== Zdroje
- [[[pa215-2022,1]]] https://is.muni.cz/auth/el/fi/podzim2022/PA215/index.qwarp
- [[[pa215-2019,2]]] https://is.muni.cz/auth/el/fi/podzim2019/PA215/um/
- [[[schell,3]]] Jesse Schell, _The Art of Game Design: A Book of Lenses_
- [[[hadanka,4]]] https://cs.wikipedia.org/wiki/H%C3%A1danka
- [[[leblanc,5]]] http://algorithmancy.8kindsoffun.com/
- [[[mda,6]]] https://users.cs.northwestern.edu/~hunicke/pubs/MDA.pdf
- [[[badges,7]]] https://kumu.io/gamebadges/gamebadges
- [[[cgo,8]]] https://autosemanticgame.institutedigitalgames.com/ontologies/core-game-ontology/
- [[[pa216-2020,9]]] https://is.muni.cz/auth/el/fi/jaro2020/PA216/index.qwarp
- [[[genre,10]]] https://en.wikipedia.org/wiki/Video_game_genre
[^pa215-2022]: https://is.muni.cz/auth/el/fi/podzim2022/PA215/index.qwarp
[^pa215-2019]: https://is.muni.cz/auth/el/fi/podzim2019/PA215/um/
[^schell]: Jesse Schell, _The Art of Game Design: A Book of Lenses_
[^hadanka]: https://cs.wikipedia.org/wiki/H%C3%A1danka
[^leblanc]: http://algorithmancy.8kindsoffun.com/
[^mda]: https://users.cs.northwestern.edu/~hunicke/pubs/MDA.pdf
[^badges]: https://kumu.io/gamebadges/gamebadges
[^cgo]: https://autosemanticgame.institutedigitalgames.com/ontologies/core-game-ontology/
[^pa216-2020]: https://is.muni.cz/auth/el/fi/jaro2020/PA216/index.qwarp
[^genre]: https://en.wikipedia.org/wiki/Video_game_genre
== Další zdroje

View File

@ -42,13 +42,13 @@ Obsahuje základní informace o hře v čitelné formě pro negamedesignery (tř
>
> — Salen & Zimmerman
Magický kruh je "prostor", ve kterém neplatí obyčejná pravidla reality a místo toho platí sada pravidel "herního světa". Ač magický kruh funguje na jednu stranu jako štít před realitou, je vlastně poměrně průchozí a nechává vnější realitu prosakovat do té herní. [magic-circle-wiki](#magic-circle-wiki) [rules-of-play](#rules-of-play)
Magický kruh je "prostor", ve kterém neplatí obyčejná pravidla reality a místo toho platí sada pravidel "herního světa". Ač magický kruh funguje na jednu stranu jako štít před realitou, je vlastně poměrně průchozí a nechává vnější realitu prosakovat do té herní. [^magic-circle-wiki] [^rules-of-play]
Byť ten termín zmínil jako první Huizinga, zadefinovali a zpopularizovali ho až Salen a Zimmerman. [zimmerman-essay](#zimmerman-essay)
Byť ten termín zmínil jako první Huizinga, zadefinovali a zpopularizovali ho až Salen a Zimmerman. [^zimmerman-essay]
### Kybertext
Kybertext byl popsán Espenem Aarsethem v jeho knize _Cybertext: Perspectives on Ergodic Literature_ (1997). Ergodická literatura je taková, která vyžaduje od čtenáře aktivní účast, aby mohl text vůbec přečíst. Kybertext je podkategorie ergodické literatury, kde čtenář musí dělat rozhodnutí, která ovlivňují, jak se text vyvíjí [ergodic-literature-wiki](#ergodic-literature-wiki).
Kybertext byl popsán Espenem Aarsethem v jeho knize _Cybertext: Perspectives on Ergodic Literature_ (1997). Ergodická literatura je taková, která vyžaduje od čtenáře aktivní účast, aby mohl text vůbec přečíst. Kybertext je podkategorie ergodické literatury, kde čtenář musí dělat rozhodnutí, která ovlivňují, jak se text vyvíjí [^ergodic-literature-wiki].
In ergodic literature, nontrivial effort is required to allow the reader to traverse the text. If ergodic literature is to make sense as a concept, there must also be nonergodic literature, where the effort to traverse the text is trivial, with no extranoematic responsibilities placed on the reader except (for example) eye movement and the periodic or arbitrary turning of pages.
@ -88,7 +88,7 @@ Balanc mezi nudou a přílišnou obtížností.
> [!WARNING]
> Game design != Game theory
Teorie her se na _hry_ dívá jako na matematické modely, které popisují chování nějakých racionálních agentů.[wiki](#wiki)
Teorie her se na _hry_ dívá jako na matematické modely, které popisují chování nějakých racionálních agentů.[^wiki]
### Typy her
@ -135,7 +135,7 @@ V dobře vybalancované _Player-vs-Player_ (PvP) hře:
## Narrative design
Game desiner může využít libovolné herní elementy k tomu, aby komunikoval nějaký příběh. Vytváří ho mixováním game designových a narativních nástrojů. Jsou jimy například: [pa215-2022](#pa215-2022)
Game desiner může využít libovolné herní elementy k tomu, aby komunikoval nějaký příběh. Vytváří ho mixováním game designových a narativních nástrojů. Jsou jimy například: [^pa215-2022]
- text,
- video,
@ -147,7 +147,7 @@ Game desiner může využít libovolné herní elementy k tomu, aby komunikoval
- system itself (procedural rhetoric),
- players themselves (fandom, other texts, ...).
**Interactivity with the narrative game [zagalo](#zagalo)**
**Interactivity with the narrative game [^zagalo]**
![width=500rem](./img/vph04_narrative.png)
@ -198,7 +198,7 @@ Game desiner může využít libovolné herní elementy k tomu, aby komunikoval
### Emergentní vyprávění
Příběhy, které nenavrhl vývojář, ale vznikají z interakce mezi hráčem (či hráči) a hrou. Liší se tak od _embedded_ vyprávění, kde jsou momenty předem skriptované, i když se větví. [rules-of-play](#rules-of-play)
Příběhy, které nenavrhl vývojář, ale vznikají z interakce mezi hráčem (či hráči) a hrou. Liší se tak od _embedded_ vyprávění, kde jsou momenty předem skriptované, i když se větví. [^rules-of-play]
V emergentním vyprávění je příběh důsledkem toho, že hra je dostatečně komplexní systém. V takovém systému jsou akce _coupled_ -- vzájemně propojené, rekurzivně se ovlinující. A jsou také závislé na kontextu: hráč se zachová jinak, když narazí na specifický druh nepřítele v závislosti na tom, co se mu stalo posledně.
@ -219,7 +219,7 @@ Jak tutoriál tak onboarding učí hráče, jak hru hrát. Onboarding je širš
- **Onboarding**
- A process of teaching the player how to play a game.
- A design of goals and obstacles to teach the player how to play a game.
- A design of an early gameplay to motivate the player to play a game. [pa215-2019](#pa215-2019)
- A design of an early gameplay to motivate the player to play a game. [^pa215-2019]
- A design of gameplay to motivate the player to achieve mastery.
> [...] its incredibly powerful to teach a player how to play the game, in-game, because that way they quickly take ownership over what happens.
@ -303,14 +303,13 @@ Proces, kdy je game design testován na hráčích po celou dobu vývoje. A to
>
> — Pozzi & Zimmerman
## Zdroje
- [[[magic-circle-wiki,1]]] https://en.wikipedia.org/wiki/Magic_circle_(virtual_worlds)
- [[[rules-of-play,2]]] Salen, Katie & Zimmerman, Eric. Rules of Play: Game Design Fundamentals. 2003.
- [[[zimmerman-essay,3]]] [Eric Zimmerman: Jerked Around by the Magic Circle - Clearing the Air Ten Years Later](https://www.gamedeveloper.com/design/jerked-around-by-the-magic-circle---clearing-the-air-ten-years-later)
- [[[ergodic-literature-wiki,4]]] https://en.wikipedia.org/wiki/Ergodic_literature
- [[[wiki,5]]] https://en.wikipedia.org/wiki/Game_theory
- [[[pa215-2022,6]]] https://is.muni.cz/auth/el/fi/podzim2022/PA215/index.qwarp
- [[[zagalo,7]]] https://www.slideshare.net/nzagalo/videogame-narrative
- [[[pa215-2019,8]]] https://is.muni.cz/auth/el/fi/podzim2019/PA215/um/
- [[[fuck-rules,9]]] [Dont follow these rules!: A Primer for Playtesting, Nathalie Pozzi and Eric Zimmerman](https://static1.squarespace.com/static/579b8aa26b8f5b8f49605c96/t/5962a494bebafbc89ca001b6/1499636884792/A+Primer+for+Playtesting.pdf)
[^magic-circle-wiki]: https://en.wikipedia.org/wiki/Magic_circle_(virtual_worlds)
[^rules-of-play]: Salen, Katie & Zimmerman, Eric. Rules of Play: Game Design Fundamentals. 2003.
[^zimmerman-essay]: [Eric Zimmerman: Jerked Around by the Magic Circle - Clearing the Air Ten Years Later](https://www.gamedeveloper.com/design/jerked-around-by-the-magic-circle---clearing-the-air-ten-years-later)
[^ergodic-literature-wiki]: https://en.wikipedia.org/wiki/Ergodic_literature
[^wiki]: https://en.wikipedia.org/wiki/Game_theory
[^pa215-2022]: https://is.muni.cz/auth/el/fi/podzim2022/PA215/index.qwarp
[^zagalo]: https://www.slideshare.net/nzagalo/videogame-narrative
[^pa215-2019]: https://is.muni.cz/auth/el/fi/podzim2019/PA215/um/
[^fuck-rules]: [Dont follow these rules!: A Primer for Playtesting, Nathalie Pozzi and Eric Zimmerman](https://static1.squarespace.com/static/579b8aa26b8f5b8f49605c96/t/5962a494bebafbc89ca001b6/1499636884792/A+Primer+for+Playtesting.pdf)

View File

@ -46,7 +46,7 @@ I přes to, že je game engine obecný, neznamená to, že v něm dokážeme (ro
## Herní rozhraní
Herní rozhraní je to, co přijímá od hráče nějaký vstup (input device) nebo mu vrací nějaký výstup (output device). Někdy zvládá zařízení obě funkce zaráz - např. volant je jistě vstupní zařízení, ale může zároveň podporovat force feedback, tedy výstup. [pv255](#pv255)
Herní rozhraní je to, co přijímá od hráče nějaký vstup (input device) nebo mu vrací nějaký výstup (output device). Někdy zvládá zařízení obě funkce zaráz - např. volant je jistě vstupní zařízení, ale může zároveň podporovat force feedback, tedy výstup. [^pv255]
### Fyzická rozhraní
@ -69,7 +69,7 @@ Na _virtuální rozhraní_ si hráč nesáhne. Jsou to všemožná menu, invent
- **HUD -- head-up display**\
Virtuální rozhraní, která má hráč neustále na očích, ale nejsou (často) součástí herních objektů. Např. životy, zásoby munice, minimapa, atd.
- **Diegetická (dynamická) rozhraní**\
UI prvky, které jsou součástí herního světa. Např. interaktivní terminál, který ovládá hráč, nebo hologramy, které se zobrazují v prostoru. Dopomáhají k imerzi, ale mohou hráče frustrovat jelikož bývají pomalejší (protože animace) a mohou být obtížně čitelné. [ui](#ui)
UI prvky, které jsou součástí herního světa. Např. interaktivní terminál, který ovládá hráč, nebo hologramy, které se zobrazují v prostoru. Dopomáhají k imerzi, ale mohou hráče frustrovat jelikož bývají pomalejší (protože animace) a mohou být obtížně čitelné. [^ui]
**Fallout 3**
@ -112,7 +112,7 @@ BCI je technologie, která umožňuje ovládat počítač přímo pomocí myšle
Zjednodušeně, UI řeší vizuální stránku rozhraní, kdežto UX tu funkční. Realita je ale složitější, neboť vizuál a funkčnost se mnohdy vzájemně ovlivňují.
- **UI -- user interface**\
UI řeší vizuální prvky, které se zobrazují na obrazovce. Konkrétně se zaobírá jejich vzhledem, umístěním, "feelem". Zahrnuje například: [figma](#figma)
UI řeší vizuální prvky, které se zobrazují na obrazovce. Konkrétně se zaobírá jejich vzhledem, umístěním, "feelem". Zahrnuje například: [^figma]
- Layout
- Typografii
@ -120,7 +120,7 @@ Zjednodušeně, UI řeší vizuální stránku rozhraní, kdežto UX tu funkčn
- Interaktivní prvky: tlačítka, checkboxy, radio buttony, comboboxy, selecty, dropdowny, nebo nedejbože datetimepickery.
- **UX -- user experience**\
UX řeší prvky, které se zobrazují na obrazovce, ale zabývá se tím, _jak_ je uživatelé používají, a jestli splňují svůj účel. Zahrnuje třeba: [figma](#figma)
UX řeší prvky, které se zobrazují na obrazovce, ale zabývá se tím, _jak_ je uživatelé používají, a jestli splňují svůj účel. Zahrnuje třeba: [^figma]
- Průzkum uživatelských očekávání a konkurence
- Wireframy a prototypování
@ -221,7 +221,7 @@ Síťová hra nemusí být multiplayer, a multiplayer hra nemusí být síťová
Stav hry u jednotlivých hráčů a na serveru jsou desynchronizovány kvůli latenci. Jako "správný" stav hry se bere typicky stav na serveru.
**State inconsistency due to latency [netwok-delay](#netwok-delay).**
**State inconsistency due to latency [^netwok-delay].**
![width=400](./img/vph05_network_delay.jpg)
@ -268,7 +268,7 @@ TCP má spoustu skvělých vlastností které ho ale zpomalují. Hry proto čast
### 1. Pre-produkce
Během _pre-produkce_, která obvykle trvá týdny až měsíce (nebo roky v nejmenovaných případech) jde o to příjít na: [cg](#cg)
Během _pre-produkce_, která obvykle trvá týdny až měsíce (nebo roky v nejmenovaných případech) jde o to příjít na: [^cg]
- O čem hra má být.
- Kdo je její cílovka.
@ -292,7 +292,7 @@ Během pre-produkce typicky vzniká řada věcí:
### 2. Produkce
_Produkce_ je nejdelší fáze vývoje, kdy je potřeba všechno vyrobit a složit dohromady. Může trvat až několik (desítek) let. Jelikož ne všechno se v pre-produkci dá předvídat, hra je během produkce stále testována a upravována. [cg](#cg)
_Produkce_ je nejdelší fáze vývoje, kdy je potřeba všechno vyrobit a složit dohromady. Může trvat až několik (desítek) let. Jelikož ne všechno se v pre-produkci dá předvídat, hra je během produkce stále testována a upravována. [^cg]
Produkce prochází mnoha milníky:
@ -319,7 +319,7 @@ Jakmile hra vyjde, malý tým vývojářů se stará o opravování chyb, vydáv
## Principy monetizace
Monetizace je proces extrakce finančních prostředků z videoherního, interaktivního produktu či služby. Zkrátka, když už má někdo hru, chce ji nějakým způsobem prodat. [monetization](#monetization)
Monetizace je proces extrakce finančních prostředků z videoherního, interaktivního produktu či služby. Zkrátka, když už má někdo hru, chce ji nějakým způsobem prodat. [^monetization]
- **Premium**\
Tradiční jednorázová platba buď v kamenném obchodě (retail) nebo online (digital download). Hra je poté hráči k dispozici "navždy". Vývojáři mohou vydávat DLCčka, která se prodávají zvlášť. Speciální případ je crowdfunding, kdy hráči platí za hru ještě předtím, než je hotová, a mnohdy dostanou nějaké bonusy.
@ -349,9 +349,9 @@ Procedurální generování je technika, která umožňuje generovat herní asse
- **Noise**\
Množina funkcí generujících pseudo-náhodné hodnoty, které jsou spojité. Používá se při generování terénu, obláčků, všemožných textur, zkrátka všude.
- **Perlin noise**\
Noise, který vymyslel Ken Perlin, když pracoval na filmu Tron (1982) v Disney. Má tu krásnou vlastnost, že není patentovaný. [perlin](#perlin)
Noise, který vymyslel Ken Perlin, když pracoval na filmu Tron (1982) v Disney. Má tu krásnou vlastnost, že není patentovaný. [^perlin]
- **Simplex noise**\
Vylepšený Perlin noise, který taky vymyslel Ken Pelin. Tenhle už si patentovat nechal. [perlin](#perlin)
Vylepšený Perlin noise, který taky vymyslel Ken Pelin. Tenhle už si patentovat nechal. [^perlin]
- **L-systém**\
Něco, co náramně připomíná formální gramatiku, ale aplikuje to pravidla v jedné iteraci "paralelně" na všechny aplikovatelné symboly. Používá se při generování stromů, rostlin, a obecně věcí, co mají větvě.
@ -385,19 +385,18 @@ Serious games se dají dělit podle jejich cíle:
_Gamifikace_ je o použití designových principů a mechanik, které se osvědčily v "obyčejných" hrách cílících na zábavu, v jiných oblastech. Úmyslem je zpříjemnit činnosti, které by jinak byly nudné, a tak zvýšit produktivitu práce.
Gamifikace ale mnohdy zůstává u jednoduchých herních prvků, jako jsou achievementy, leaderboardy, nebo jiné formy odměňování. Naopak, serious games se snaží využít herních principů do hloubky, aby hráč musel k získání odměny vynaložit nějakou snahu. [serious-terminology](#serious-terminology) Gamifikace je proto často brána jako manipulativní a opovrženihodná.
Gamifikace ale mnohdy zůstává u jednoduchých herních prvků, jako jsou achievementy, leaderboardy, nebo jiné formy odměňování. Naopak, serious games se snaží využít herních principů do hloubky, aby hráč musel k získání odměny vynaložit nějakou snahu. [^serious-terminology] Gamifikace je proto často brána jako manipulativní a opovrženihodná.
## Zdroje
- Nové části otázky je vypracována dle prezentací z předmětu [PV255](https://is.muni.cz/auth/el/fi/podzim2022/PV255/um/lec/).
- [[[netwok-delay,1]]] https://is.muni.cz/auth/el/fi/podzim2022/PV255/um/lec/Networking_in_computer_games.ppsx
- [[[cg,2]]] https://www.cgspectrum.com/blog/game-development-process
- [[[g2,3]]] https://www.g2.com/articles/stages-of-game-development
- [[[monetization,4]]] https://en.wikipedia.org/wiki/Video_game_monetization
- [[[pv255, 5]]] https://www.fi.muni.cz/~xchmeli1/PV255/materials.cgi
- [[[ui,6]]] https://www.gamedeveloper.com/design/user-interface-design-in-video-games
- [[[figma, 7]]] https://www.figma.com/resource-library/difference-between-ui-and-ux/
- [[[perlin, 8]]] https://en.wikipedia.org/wiki/Perlin_noise
- [[[serious, 9]]] https://grendelgames.com/what-are-serious-games/
- [[[serious-terminology, 10]]] https://grendelgames.com/serious-games-terminology/
- [[[serious-types, 11]]] https://grendelgames.com/what-are-the-five-types-of-serious-games/
[^netwok-delay]: https://is.muni.cz/auth/el/fi/podzim2022/PV255/um/lec/Networking_in_computer_games.ppsx
[^cg]: https://www.cgspectrum.com/blog/game-development-process
[^g2]: https://www.g2.com/articles/stages-of-game-development
[^monetization]: https://en.wikipedia.org/wiki/Video_game_monetization
[^pv255]: https://www.fi.muni.cz/~xchmeli1/PV255/materials.cgi
[^ui]: https://www.gamedeveloper.com/design/user-interface-design-in-video-games
[^figma]: https://www.figma.com/resource-library/difference-between-ui-and-ux/
[^perlin]: https://en.wikipedia.org/wiki/Perlin_noise
[^serious]: https://grendelgames.com/what-are-serious-games/
[^serious-terminology]: https://grendelgames.com/serious-games-terminology/
[^serious-types]: https://grendelgames.com/what-are-the-five-types-of-serious-games/

View File

@ -73,7 +73,7 @@ Jednoduché algoritmy pro pohyb. Jsou škálovatelné a předvídatelné, ale ma
- **Seek**\
Přímočárý... doslova. Najde vektor mířící k cíli a aplikuje je jej jako steering.
**Seek schematic [steering](#steering)**
**Seek schematic [^steering]**
![Seek schematic](./img/vph06_seek.jpg)
@ -89,7 +89,7 @@ Pomocí těchto základních algoritmů lze vytvořit složitější chování:
- **Arrival**\
Jako seek, ale začne zpomalovat, když je blízko cíle, takže jej "nepřestřelí".
**Arrival schematic [steering](#steering)**
**Arrival schematic [^steering]**
![Arrival schematic](./img/vph06_arrival.jpg)
@ -160,9 +160,9 @@ Pathfinding vnímá scénu jako graf, ve kterém hledá (obvykle nejkratší) ce
### A\* algoritmus
Podobný Dijkstrovu algoritmu, ale navíc se snaží odhadnout, který směr je nejlepší. Používá heuristiku $h$ pro výběr dalšího uzlu k prozkoumání. Kombinuje Dijsktrův algoritmus s greedy best-first hledáním. [astar](#astar)
Podobný Dijkstrovu algoritmu, ale navíc se snaží odhadnout, který směr je nejlepší. Používá heuristiku $h$ pro výběr dalšího uzlu k prozkoumání. Kombinuje Dijsktrův algoritmus s greedy best-first hledáním. [^astar]
**A\* algoritmus [astar](#astar)**
**A\* algoritmus [^astar]**
![width=100%](./img/vph06_astar.png)
@ -239,7 +239,7 @@ List<Node> ReconstructPath(Node goal) {
- Heuristika je _admissible_ pokud nepřeceňuje.
- **Heuristika -- Euklidovská vzdálenost**\
Poskytuje poměrně přesný nebo podceněný odhad vzdálenosti k cíli. Funguje dobře v exteriérech, ale v interiérech dává kvůli stěnám a dalším překážkám silně podhodnocené odhady. [pa217](#pa217)
Poskytuje poměrně přesný nebo podceněný odhad vzdálenosti k cíli. Funguje dobře v exteriérech, ale v interiérech dává kvůli stěnám a dalším překážkám silně podhodnocené odhady. [^pa217]
![width=400](./img/vph06_euclidean_distance.png)
@ -256,7 +256,7 @@ List<Node> ReconstructPath(Node goal) {
- **D** algoritmus*\
Varianta A*, která se umí vyrovnat s dynamickými změnami v grafu.
- **Iterative Deepening A** (IDA*)*\
Depth-first search s heuristikou. Iterative deepening znamená, že se postupně zvyšuje maximální hloubka prohledávání. [ida-star](#ida-star)
Depth-first search s heuristikou. Iterative deepening znamená, že se postupně zvyšuje maximální hloubka prohledávání. [^ida-star]
- **Simplified Memory Bounded A** (SMA*)*\
A\* co má nižší paměťové nároky.
@ -275,7 +275,7 @@ Agenti nevidí herní svět stejně jako hráči, vidí ho spíš jako graf s uz
- **Tile-based / dlaždicové**\
Některé hry, např real-time strategie (RTS), mají svět rozdělen do čtvercových / hexagonálních dlaždic. Díky tomu je jednoduché je převést na graf, neboť co dlaždice to uzel.
**Sid Meiers Civilization V [civ5](#civ5)**
**Sid Meiers Civilization V [^civ5]**
![width=400](./img/vph06_civilization.jpg)
@ -291,18 +291,18 @@ Agenti nevidí herní svět stejně jako hráči, vidí ho spíš jako graf s uz
V praxi může generovat příliš mnoho bodů, ale může sloužit jako užitečný základ pro manuální úpravy.
**Points of visibility [ai-for-games](#ai-for-games)**
**Points of visibility [^ai-for-games]**
![width=400](./img/vph06_points_of_visibility.png)
- **Navmesh / navigation mesh / navigační sítě**\
Populární technika, kdy level designer popíše podlahové polygony. Agenti mohou chodit kamkoliv v rámci těchto polygonů a přecházet mezi těmi, které jsou spojené. Využívá geometrii už přítomnou v levelu nebo svoji vlastní.
**Navigation System in Unity [navmesh](#navmesh)**
**Navigation System in Unity [^navmesh]**
![Navigation System in Unity](./img/vph06_navmesh.png)
**Polygonal mesh graph [ai-for-games](#ai-for-games)**
**Polygonal mesh graph [^ai-for-games]**
![width=400](./img/vph06_polygonal_mesh_graph.png)
@ -329,7 +329,7 @@ Agenti obvykle musí činit rozhodnutí ohledně toho, co budou dělat dál: za
Rozhodnutí jsou reprezentována jako strom. Vniřní uzly jsou podmínky, listy jsou akce, hrany reprezentují možnosti. Rozhodovací proces začíná u kořene a postupuje dolů stromem, dokud nenarazí na list -- ta akce se následně provede.
**Průchod rozhodovacím stromem [ai-for-games](#ai-for-games)**
**Průchod rozhodovacím stromem [^ai-for-games]**
![width=500](./img/vph06_decision_trees.png)
@ -337,21 +337,21 @@ Rozhodnutí jsou reprezentována jako strom. Vniřní uzly jsou podmínky, listy
Reprezentuje aktuální chování agenta pomocí stavů ve stavovém automatu. Každý stav zahrnuje nějaké akce. Přechody mezi stavy jsou spojeny s podmínkami a akcemi.
**State machine [ai-for-games](#ai-for-games)**
**State machine [^ai-for-games]**
![width=500](./img/vph06_state_machine.png)
- **Hierarchické stavové automaty**\
Stavy mohou obsahovat celé další stavové automaty. To umožňuje rozdělit chování agenta na části.
**Hierarchical state machine [ai-for-games](#ai-for-games)**
**Hierarchical state machine [^ai-for-games]**
![width=500](./img/vph06_hierarchical_state_machine.png)
- **Stavový automat s rozhodovacími stromy v přechodech**\
V přechodech mezi stavy jsou decision trees. Listy jsou další stavy.
**State machine with decision tree transitions [ai-for-games](#ai-for-games)**
**State machine with decision tree transitions [^ai-for-games]**
![width=500](./img/vph06_decision_tree_state_machine.png)
@ -363,11 +363,11 @@ Reprezentuje aktuální chování agenta pomocí stavů ve stavovém automatu. K
- Dá se vyrobit modulárně a znovupoužitelně.
- Často pro něj existují i custom editory s GUI.
**Behavior tree [ai-for-games](#ai-for-games)**
**Behavior tree [^ai-for-games]**
![width=500](./img/vph06_behavior_tree.png)
**Parallel behavior tree [pa217](#pa217)**
**Parallel behavior tree [^pa217]**
![width=500](./img/vph06_parallel_behavior_tree.png)
@ -412,7 +412,7 @@ Waypoint je pozice v levelu, která je něčím zajímavá.
- **Tactical locations / rally points**\
Místa kde se skrýt před útokem, místa ke snipení, místa pro ambush, atd. Do scény je může přidat přímo level designer nebo se mohou generovat automaticky.
**Tactical locations [ai-for-games](#ai-for-games)**
**Tactical locations [^ai-for-games]**
![width=500](./img/vph06_tactical_locations.png)
@ -511,10 +511,10 @@ Minmax i alpha-beta pruning se chápe nejlíp s vizualizací. Můžete kouknout
- **Monte Carlo**\
Město známé pro svá casina.
- **Monte Carlo metoda**\
Algoritmy a techniky spoléhající na náhodou, mega velké množiny vzorků a statistickou analýzu. [monte-carlo](#monte-carlo)
Algoritmy a techniky spoléhající na náhodou, mega velké množiny vzorků a statistickou analýzu. [^monte-carlo]
- **Monte Carlo tree search (MCTS)**\
Heuristický algoritmus pro prohledávání stromových grafů. V kontextu deskových her se používá pro hledání nejlepšího tahu.[mcts](#mcts)
Heuristický algoritmus pro prohledávání stromových grafů. V kontextu deskových her se používá pro hledání nejlepšího tahu.[^mcts]
1. _Selection_: vyber uzel reprezentující stav hry, ze kterého ještě hra neskončila.
2. _Expansion_: vytvoř možné volby ze zvoleného tahu.
@ -541,14 +541,13 @@ Minmax i alpha-beta pruning se chápe nejlíp s vizualizací. Můžete kouknout
- $n$ je počet her, ve kterých byl zvolen rodičovský uzel.
- $n_j$ je počet her, ve kterých byl zvolen uzel $j$.
## Zdroje
- [[[pa217, 1]]] PA217 AI for Games
- [[[ai-for-games, 2]]] Ian Millington, John Funge: Artificial Intelligence for Games
- [[[steering, 3]]] [Steering Behaviors](https://slsdo.github.io/steering-behaviors/)
- [[[navmesh, 4]]] [Navigation System in Unity](https://docs.unity3d.com/Manual/nav-NavigationSystem.html)
- [[[astar, 5]]] [Introduction to the A\* Algorithm](https://www.redblobgames.com/pathfinding/a-star/introduction.html)
- [[[civ5, 6]]] [Sid Meiers Civilization V](https://store.steampowered.com/app/8930/Sid_Meiers_Civilization_V/)
- [[[monte-carlo, 7]]] [Wikipedia: Monte Carlo method](https://en.wikipedia.org/wiki/Monte_Carlo_method)
- [[[mcts, 8]]] [Wikipedia: Monte Carlo tree search](https://en.wikipedia.org/wiki/Monte_Carlo_tree_search)
- [[[ida-star, 9]]] [Wikipedia: Iterative deepening A\*](https://en.wikipedia.org/wiki/Iterative_deepening_A*)
[^pa217]: PA217 AI for Games
[^ai-for-games]: Ian Millington, John Funge: Artificial Intelligence for Games
[^steering]: [Steering Behaviors](https://slsdo.github.io/steering-behaviors/)
[^navmesh]: [Navigation System in Unity](https://docs.unity3d.com/Manual/nav-NavigationSystem.html)
[^astar]: [Introduction to the A\* Algorithm](https://www.redblobgames.com/pathfinding/a-star/introduction.html)
[^civ5]: [Sid Meiers Civilization V](https://store.steampowered.com/app/8930/Sid_Meiers_Civilization_V/)
[^monte-carlo]: [Wikipedia: Monte Carlo method](https://en.wikipedia.org/wiki/Monte_Carlo_method)
[^mcts]: [Wikipedia: Monte Carlo tree search](https://en.wikipedia.org/wiki/Monte_Carlo_tree_search)
[^ida-star]: [Wikipedia: Iterative deepening A\*](https://en.wikipedia.org/wiki/Iterative_deepening_A*)

View File

@ -40,12 +40,12 @@ description: "TODO"
> [!IMPORTANT]
> Tahle část otázky má značný překryv s otázkou [Modelování a projekce](../szp08_modelovani_a_projekce/).
**Coordinate Systems [coordinate-systems](#coordinate-systems)**
**Coordinate Systems [^coordinate-systems]**
![width=100%](./img/vph07_coordinate_systems.png)
- **Model space / local space / prostor objektu**\
Každý vykreslený objekt má svůj lokální souřadnicový prostor daný editorem, ve kterém byl vytvořen, nastavením exportu a formátem, ve kterém byl vyexportován: [sw-coordinates](#sw-coordinates)
Každý vykreslený objekt má svůj lokální souřadnicový prostor daný editorem, ve kterém byl vytvořen, nastavením exportu a formátem, ve kterém byl vyexportován: [^sw-coordinates]
| Editor | Handedness | $X$ | $Y$ | $Z$ |
| --------- | ------------ | ------- | ---------- | ---------- |
@ -66,7 +66,7 @@ description: "TODO"
- **Clip space**\
OpenGL očekává, že všechno, co bude vykresleno se nachází v jistém objemu -- clip space. Všechny souřadnice musíme do tohoto objemu převést a zároveň (pokud je to žádané) na ně aplikovat nějakou projekci (perspektivní, ortogonální, atd).
Pro převod do clip space slouží _projection_ matice ($P$). Ta nám umožňuje objekt nejen posunout ale i otočit a změnit jeho měřítko. [coordinate-systems](#coordinate-systems)
Pro převod do clip space slouží _projection_ matice ($P$). Ta nám umožňuje objekt nejen posunout ale i otočit a změnit jeho měřítko. [^coordinate-systems]
Tento prostor stále používá 4-dimenzionální homogenní souřadnice.
@ -81,10 +81,10 @@ description: "TODO"
OpenGL převádí NDC do window space pomocí _viewport_ transformace.
> [!WARNING]
> Počátek (origin) viewport space je **vlevo dole** a má ve výchozím nastavení má souřadnice $(0, 0)$. [viewport](#viewport)
> Počátek (origin) viewport space je **vlevo dole** a má ve výchozím nastavení má souřadnice $(0, 0)$. [^viewport]
- **OpenGL handedness**\
NDC v OpenGL je **left-handed**. Nicméně v OpenGL panuje konvence, že world space a camera space jsou **right-handed** (např. s `glm`). K přechodu dochází překlopením směru osy $Z$ použitím projekční matice ($P$). [coordinate-systems](#coordinate-systems) V OpenGL tedy platí:
NDC v OpenGL je **left-handed**. Nicméně v OpenGL panuje konvence, že world space a camera space jsou **right-handed** (např. s `glm`). K přechodu dochází překlopením směru osy $Z$ použitím projekční matice ($P$). [^coordinate-systems] V OpenGL tedy platí:
| Space | Handedness | $X$ | $Y$ | $Z$ |
| -------- | ---------------------- | ------- | ------ | -------------------------- |
@ -96,13 +96,13 @@ description: "TODO"
| _Window_ | _left-handed_ | doprava | nahoru | **dopředu** |
> [!TIP]
> Fun-fact: ve Vulkanu je NDC $x \in (-1.0, 1.0), y \in (-1.0, 1.0), z \in (\textcolor{red}{0.0}, 1.0)$. A navíc je **right-handed**, takže souřadnice $(-1.0, -1.0, 0.0)$ je vlevo **nahoře**, kdežto v OpenGL je vlevo **dole**. [vulkan-coords](#vulkan-coords)
> Fun-fact: ve Vulkanu je NDC $x \in (-1.0, 1.0), y \in (-1.0, 1.0), z \in (\textcolor{red}{0.0}, 1.0)$. A navíc je **right-handed**, takže souřadnice $(-1.0, -1.0, 0.0)$ je vlevo **nahoře**, kdežto v OpenGL je vlevo **dole**. [^vulkan-coords]
## Pipeline (typy shaderů)
Při zvolání `glDraw*` se používá OpenGL pipeline, která se skládá z několika fází: [pipeline](#pipeline)
Při zvolání `glDraw*` se používá OpenGL pipeline, která se skládá z několika fází: [^pipeline]
**Diagram of the Rendering Pipeline [pipeline](#pipeline)**
**Diagram of the Rendering Pipeline [^pipeline]**
![vph07_pipeline](./img/vph07_pipeline.png)
@ -119,7 +119,7 @@ Při zvolání `glDraw*` se používá OpenGL pipeline, která se skládá z ně
- **Geometry shader (GS)**\
Volitně umožňuje upravit / dogenerovat (teselovat) data per primitive. Je spušten jednou per primitive. Je mocnější než tesselation, ale tím pádem i méně efektivní.
- **Vertex post-processing**\
OpenGL následně: [post-process](#post-process)
OpenGL následně: [^post-process]
1. sestaví primitives,
2. ořeže je podle **user** clip space (nastavené programátorem v VS nebo GS pomocí `gl_ClipDistance`),
@ -186,7 +186,7 @@ Při zvolání `glDraw*` se používá OpenGL pipeline, která se skládá z ně
2. Porovnej aktuální hloubku s hloubkou v shadow mapě.
3. Změň osvětlení na základě porovnání.
**The Shadow Mapping Depth Comparison [shadow-maps](#shadow-maps)**
**The Shadow Mapping Depth Comparison [^shadow-maps]**
![width=500rem](./img/vph07_shadow_maps.jpg)
@ -218,12 +218,12 @@ Při zvolání `glDraw*` se používá OpenGL pipeline, která se skládá z ně
![width=500rem](./img/vph07_cascaded_shadow_maps.png)
- **Soft shadow maps -- Percentage-Closer Filtering (PCF)**\
Rozmazává stíny uniformě fixním kernelem. [pa010-2021](#pa010-2021)
Rozmazává stíny uniformě fixním kernelem. [^pa010-2021]
![width=500rem](./img/vph07_soft_shadows_pcf.png)
- **Soft shadow maps -- Percentage-Closer Soft Shadows (PCSS)**\
Počítá šíři penumbry pomocí velikosti světla, odhadu vzdálenosti blockeru (světlo-blokujícího objektu) od světla, a vzdálenosti mezi recieverem (objektem na který světlo dopadá) a blockerem. [pa010-2021](#pa010-2021)
Počítá šíři penumbry pomocí velikosti světla, odhadu vzdálenosti blockeru (světlo-blokujícího objektu) od světla, a vzdálenosti mezi recieverem (objektem na který světlo dopadá) a blockerem. [^pa010-2021]
```math
w_\text{penumbra} = \frac{p_z^s - z_\text{avg}}{z_\text{avg}} w_\text{light}
@ -233,7 +233,7 @@ Při zvolání `glDraw*` se používá OpenGL pipeline, která se skládá z ně
## Deferred shading / odložené stínování
Místo renderování přímo na obrazovku, vykreslíme scénu nejprve do textur (_geometry pass_), které označujeme jako **G-buffer** -- pozice, normály, barvy atd. Osvětlení je počítáno v odděleném průchodu (_lighting pass_) a vykresleno na obrazovku. [pv227](#pv227)
Místo renderování přímo na obrazovku, vykreslíme scénu nejprve do textur (_geometry pass_), které označujeme jako **G-buffer** -- pozice, normály, barvy atd. Osvětlení je počítáno v odděleném průchodu (_lighting pass_) a vykresleno na obrazovku. [^pv227]
Tuto techniku použijeme např. když máme ve scéně fakt hodně světel.
@ -264,7 +264,7 @@ Tuto techniku použijeme např. když máme ve scéně fakt hodně světel.
- **Aliasing**\
Aliasing vzniká, když je sample rate nižší než Nyquist frequency. Projevuje se jako nová nízko-frekvenční informace, která v obrazu neexistuje. Při renderování se projevuje jako "schody" na hranách objektů.
**Aliasing [anti-aliasing](#anti-aliasing)**
**Aliasing [^anti-aliasing]**
![width=500rem](./img/vph07_aliasing.png)
@ -275,7 +275,7 @@ Tuto techniku použijeme např. když máme ve scéně fakt hodně světel.
- **Multisample anti-aliasing (MSAA)**\
Pro každý pixel máme 2/4/8/... subsamply. Každý fragment počítáme jen jednou, ale podle toho, kolik subsamplů ho pokrývá, ho blendujeme s již existují barvou.
**MSAA [anti-aliasing](#anti-aliasing)**
**MSAA [^anti-aliasing]**
![width=500rem](./img/vph07_msaa.png)
@ -290,25 +290,24 @@ Ambient occlusion approximuje, jak moc je objekt vystaven ambientním světlu. J
- **Screen-Space Ambient Occlusion (SSAO)**\
Dívá se na okolí daného pixelu (v G-bufferu) a odhaduje tak jeho okluzi.
**SSAO [ssao](#ssao)**
**SSAO [^ssao]**
![width=500rem](./img/vph07_ssao.png)
## Zdroje
- [[[pipeline,1]]] [Rendering Pipeline Overview](https://www.khronos.org/opengl/wiki/Rendering_Pipeline_Overview)
- [[[post-process,2]]] [Vertex Post-Processing](https://www.khronos.org/opengl/wiki/Vertex_Post-Processing)
- [[[coordinate-systems,3]]] [LearnOpenGL: Coordinate Systems](https://learnopengl.com/Getting-started/Coordinate-Systems)
- [[[sw-coordinates,4]]] [Verge3D Wiki: Coordinate Systems](https://www.soft8soft.com/wiki/index.php/Coordinate_Systems)
- [[[viewport,5]]] [`glViewport`](https://registry.khronos.org/OpenGL-Refpages/gl4/html/glViewport.xhtml)
- [[[depth-range,6]]] [`glDepthRange`](https://registry.khronos.org/OpenGL-Refpages/gl4/html/glDepthRange.xhtml)
- [[[vulkan-coords,7]]] [Vulkans coordinate system](http://anki3d.org/vulkan-coordinate-system/)
- [[[pv227,8]]] [PV227 GPU Rendering (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/PV227/)
- [[[anti-aliasing,9]]] [LearnOpenGL: Anti-Aliasing](https://learnopengl.com/Advanced-OpenGL/Anti-Aliasing)
- [[[ambient-occlusion,10]]] [Wikipedia: Ambient occlusion](https://en.wikipedia.org/wiki/Ambient_occlusion)
- [[[ssao,11]]] [LearnOpenGL: SSAO](https://learnopengl.com/Advanced-Lighting/SSAO)
- [[[shadow-maps,12]]] [The Cg Tutorial: Shadow Mapping](https://developer.download.nvidia.com/CgTutorial/cg_tutorial_chapter09.html)
- [[[pa010-2021,13]]] Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)
[^pipeline]: [Rendering Pipeline Overview](https://www.khronos.org/opengl/wiki/Rendering_Pipeline_Overview)
[^post-process]: [Vertex Post-Processing](https://www.khronos.org/opengl/wiki/Vertex_Post-Processing)
[^coordinate-systems]: [LearnOpenGL: Coordinate Systems](https://learnopengl.com/Getting-started/Coordinate-Systems)
[^sw-coordinates]: [Verge3D Wiki: Coordinate Systems](https://www.soft8soft.com/wiki/index.php/Coordinate_Systems)
[^viewport]: [`glViewport`](https://registry.khronos.org/OpenGL-Refpages/gl4/html/glViewport.xhtml)
[^depth-range]: [`glDepthRange`](https://registry.khronos.org/OpenGL-Refpages/gl4/html/glDepthRange.xhtml)
[^vulkan-coords]: [Vulkans coordinate system](http://anki3d.org/vulkan-coordinate-system/)
[^pv227]: [PV227 GPU Rendering (podzim 2022)](https://is.muni.cz/auth/el/fi/podzim2022/PV227/)
[^anti-aliasing]: [LearnOpenGL: Anti-Aliasing](https://learnopengl.com/Advanced-OpenGL/Anti-Aliasing)
[^ambient-occlusion]: [Wikipedia: Ambient occlusion](https://en.wikipedia.org/wiki/Ambient_occlusion)
[^ssao]: [LearnOpenGL: SSAO](https://learnopengl.com/Advanced-Lighting/SSAO)
[^shadow-maps]: [The Cg Tutorial: Shadow Mapping](https://developer.download.nvidia.com/CgTutorial/cg_tutorial_chapter09.html)
[^pa010-2021]: Byška, Furmanová, Kozlíková, Trtík: PA010 Intermediate Computer Graphics (podzim 2021)
## Další zdroje

View File

@ -46,7 +46,7 @@ description: "TODO"
Vývojáři často zaměňují "postava" a "model".
- **Avatar**\
Grafická reprezentace uživatele či uživatelovy postavy. [avatar](#avatar) Ve hrách je typicky implementován skrze 3D mesh (obsažený v modelu) či 2D sprite obohacený o animace, collidery, apod.
Grafická reprezentace uživatele či uživatelovy postavy. [^avatar] Ve hrách je typicky implementován skrze 3D mesh (obsažený v modelu) či 2D sprite obohacený o animace, collidery, apod.
## Mnohoúhelníkové sítě
@ -91,20 +91,20 @@ description: "TODO"
- **Quad topologie**\
Při modelování (nejen postav) se snažíme, aby všechny polygony byly quady (čtyřúhelníky). Je to zejména proto, že subdivision na nich funguje lépe, a _3D artisti_ dokáží lépe odhadnout, co se s nimi při takových operacích stane.
- **Organic modeling**\
Při modelování postav většinou vycházíme z nějaké anatomie z reálného světa. Snažíme se vyjít z toho, jak jsou v reálném světě kosti, svaly, apod. umístěny. V důsledku toho je například důležité mít edge loops okolo ramen, úst, a boků. [vv036-2023](#vv036-2023)
Při modelování postav většinou vycházíme z nějaké anatomie z reálného světa. Snažíme se vyjít z toho, jak jsou v reálném světě kosti, svaly, apod. umístěny. V důsledku toho je například důležité mít edge loops okolo ramen, úst, a boků. [^vv036-2023]
Nejde jen o to vyrobit anatomicky věrný model, ale i o to, aby se model dobře rigoval a animoval. Správná topologie přispívá k tomu, aby se model plynule deformoval při animaci, aniž by se některé části modelu pohybovaly nerealisticky a rozbily _imerzi_.
**Flowing edge loops and good topology are crucial for rigging and animation [organic](#organic)**
**Flowing edge loops and good topology are crucial for rigging and animation [^organic]**
![width=500rem](./img/vph08_organic_modeling.jpg)
- **Retopologie**\
Postup, kdy začneme s high-poly modelem, který jsme nejspíš vysculptovali bez ohledu na topologii, a ručně / automaticky na něm postavíme nový low-poly model se správnou topologií. Tohle nám umožňuje se nejprve soustředit na to, co za model chceme, a pak teprve na jeho technické provedení. [vv036-2023](#vv036-2023)
Postup, kdy začneme s high-poly modelem, který jsme nejspíš vysculptovali bez ohledu na topologii, a ručně / automaticky na něm postavíme nový low-poly model se správnou topologií. Tohle nám umožňuje se nejprve soustředit na to, co za model chceme, a pak teprve na jeho technické provedení. [^vv036-2023]
- **Box modeling**\
Proces, kdy začneme od [default cube](https://www.youtube.com/watch?v=SDeVyxtdSUk), subdividneme ji a pokračujeme odtamtaď. [vv036-2023](#vv036-2023)
Proces, kdy začneme od [default cube](https://www.youtube.com/watch?v=SDeVyxtdSUk), subdividneme ji a pokračujeme odtamtaď. [^vv036-2023]
- **Point to point modeling**\
Začneme od jediného bodu / polygonu. Tahle metoda je užitečná, když očekáváme, že retopologie modelu bude náročná, jelikož nám dává větší kontrolu nad meshflow. [vv036-2023](#vv036-2023)
Začneme od jediného bodu / polygonu. Tahle metoda je užitečná, když očekáváme, že retopologie modelu bude náročná, jelikož nám dává větší kontrolu nad meshflow. [^vv036-2023]
## Textury
@ -116,7 +116,7 @@ Typický 3D model se skládá nejen z meshe, ale i z materiálů, které jsou v
- **UV unwrapping**\
Tvorba 2D reprezentace 3D modelu -- projekce jeho polygonů na 2D plochu. Toto mapování se posléze využívá při texturování. Proces zahrnuje označování _seams_ -- hran, podél kterých se bude model "rozřezávat". Nevhodná volba seams vede k deformaci textur.
**Result of unwrapping Suzanne [uv-unwrap](#uv-unwrap)**
**Result of unwrapping Suzanne [^uv-unwrap]**
![width=500rem](./img/vph08_uv_unwrapping.png)
@ -140,7 +140,7 @@ Typický 3D model se skládá nejen z meshe, ale i z materiálů, které jsou v
- **Light map**\
Zapečené statické osvětlení. Typicky se týká spíš celých scén než postav.
- **Texture baking**\
Proces přenosu detailů z (typicky high-poly) modelu na jiný (typicky low-poly) model. High-poly detaily jsou "zapečeny" do textur. Modelovací software typicky vrhá po modelu velké množství paprsků a výsledek ukládá do textur. [texture-baking](#texture-baking)
Proces přenosu detailů z (typicky high-poly) modelu na jiný (typicky low-poly) model. High-poly detaily jsou "zapečeny" do textur. Modelovací software typicky vrhá po modelu velké množství paprsků a výsledek ukládá do textur. [^texture-baking]
## Kostra modelu
@ -159,9 +159,9 @@ Typický 3D model se skládá nejen z meshe, ale i z materiálů, které jsou v
> — Josh Petty
- **Forward kinematics (FK)**\
Animace se řetězí od parent kosti k child kosti. Pohneme-li rodičovskou kostí, pohnou se i její děcka. Klouby se hýbou po křivkách. [fk-ik](#fk-ik)
Animace se řetězí od parent kosti k child kosti. Pohneme-li rodičovskou kostí, pohnou se i její děcka. Klouby se hýbou po křivkách. [^fk-ik]
- **Inverse kinematics (IK)**\
Animujeme jen koncové kosti. Pohyb rodičovských kostí je dopočítán. Klouby se hýbou po přímkách. [fk-ik](#fk-ik)
Animujeme jen koncové kosti. Pohyb rodičovských kostí je dopočítán. Klouby se hýbou po přímkách. [^fk-ik]
- **T-pose / reference pose**\
Defaultní póza pro charakter při riggování.
@ -170,18 +170,17 @@ Typický 3D model se skládá nejen z meshe, ale i z materiálů, které jsou v
![width=300](./img/vph08_tpose.jpg)
- **Skinning**\
Úprava kostry tak, aby se povrch modelu správně deformoval při animaci. [vv036-2023](#vv036-2023) Například v Blenderu se skinning dá provést automaticky nebo nastavením _envelopes_ -- objemů obsahujících ovlivněné vertexy -- a jejich vah.
Úprava kostry tak, aby se povrch modelu správně deformoval při animaci. [^vv036-2023] Například v Blenderu se skinning dá provést automaticky nebo nastavením _envelopes_ -- objemů obsahujících ovlivněné vertexy -- a jejich vah.
## Zdroje
- [[[avatar,1]]] https://en.wikipedia.org/wiki/Avatar_(computing)
- [[[vv036-2023,2]]] [VV036 3D Character Modeling (jaro 2023)](https://is.muni.cz/auth/el/fi/jaro2023/VV036/)
- [[[quads,3]]] [Why are quads used in filmmaking and triangle in gaming?](https://computergraphics.stackexchange.com/questions/5465/why-are-quads-used-in-filmmaking-and-triangle-in-gaming)
- [[[organic,4]]] [Tips and tricks for organic modelling](https://www.creativebloq.com/tips-and-tricks-organic-modelling-7123070)
- [[[texture-baking,5]]] [Texture Baking](http://wiki.polycount.com/wiki/Texture_Baking)
- [[[fk-ik,6]]] [FK and IK Explained - Which One to Use and When?](https://www.youtube.com/watch?v=0a9qIj7kwiA)
- [[[envelopes,7]]] [Blender: Deform](https://docs.blender.org/manual/en/latest/animation/armatures/bones/properties/deform.html)
- [[[uv-unwrap,8]]] [Blender: Unwrapping > Mapping Types](https://docs.blender.org/manual/en/2.79/editors/uv_image/uv/editing/unwrapping/mapping_types.html)
[^avatar]: https://en.wikipedia.org/wiki/Avatar_(computing)
[^vv036-2023]: [VV036 3D Character Modeling (jaro 2023)](https://is.muni.cz/auth/el/fi/jaro2023/VV036/)
[^quads]: [Why are quads used in filmmaking and triangle in gaming?](https://computergraphics.stackexchange.com/questions/5465/why-are-quads-used-in-filmmaking-and-triangle-in-gaming)
[^organic]: [Tips and tricks for organic modelling](https://www.creativebloq.com/tips-and-tricks-organic-modelling-7123070)
[^texture-baking]: [Texture Baking](http://wiki.polycount.com/wiki/Texture_Baking)
[^fk-ik]: [FK and IK Explained - Which One to Use and When?](https://www.youtube.com/watch?v=0a9qIj7kwiA)
[^envelopes]: [Blender: Deform](https://docs.blender.org/manual/en/latest/animation/armatures/bones/properties/deform.html)
[^uv-unwrap]: [Blender: Unwrapping > Mapping Types](https://docs.blender.org/manual/en/2.79/editors/uv_image/uv/editing/unwrapping/mapping_types.html)
## Další zdroje

View File

@ -4,7 +4,7 @@ import re
TARGET_DIR = "src/content/docs/szmgr"
footnote_pattern = re.compile(r"\[([a-zA-Z0-9_-]+)\]\(#[a-zA-Z0-9_-]+\)")
explanation_pattern = re.compile(r"- \[\[\[(\w+).+\]\]\]")
explanation_pattern = re.compile(r"- \[\[\[([\w+-]+).+\]\]\]")
files = [f for f in os.listdir(TARGET_DIR) if f.endswith(".md")]
@ -38,4 +38,4 @@ for f in files:
lines[i] = ""
with open(os.path.join(TARGET_DIR, f), "w") as file:
file.writelines(lines)
file.writelines(lines)