Transform callouts to GH flavor

This commit is contained in:
Vojtěch Struhár 2025-06-07 00:22:34 +02:00
parent 3372fbb235
commit f3a6fd9c7d
33 changed files with 453 additions and 468 deletions

View File

@ -3,13 +3,11 @@ title: "Základy vizualizace"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Základní metriky pro hodnocení kvality vizualizace, vizuální proměnné. Základní vizualizační techniky pro 1D, 2D, 3D a 4D data. Objemová data vizualizace explicitních a implicitních povrchů. Geovizualizace choropletové mapy, kartogramy.
> <br>
> _PV251, PA214_
Základní metriky pro hodnocení kvality vizualizace, vizuální proměnné. Základní vizualizační techniky pro 1D, 2D, 3D a 4D data. Objemová data vizualizace explicitních a implicitních povrchů. Geovizualizace choropletové mapy, kartogramy.
_PV251, PA214_
</dd></dl>
Neexistuje jednotná definice vizualizace, ale může to být například "Proces předávání dat grafickou formou", nebo "Nástroj, který umožňuje uživateli vhled do dat".
@ -89,11 +87,9 @@ Někdy se přidává k základním 7 vizuálním proměnným. Lze ho připojit k
## Základní vizualizační techniky prostorových dat
<dl><dt><strong>💡 TIP</strong></dt><dd>
> [!TIP]
> V téhle otázce se autor pravděpodobně maličko jinak kouká na to, co znamená dimenze dat, než je uvedeno ve slidech z PV251. Zde se dimenze dat chápe jako počet proměnných, nikoliv jako počet prostorových dimenzí. Zde uvedená 1D prostorová data mají tedy 2 a více dimenzí, 2D prostorová data mají 3 a více dimenzí a 3D prostorová data mají 4 a více dimenzí.
V téhle otázce se autor pravděpodobně maličko jinak kouká na to, co znamená dimenze dat, než je uvedeno ve slidech z PV251. Zde se dimenze dat chápe jako počet proměnných, nikoliv jako počet prostorových dimenzí. Zde uvedená 1D prostorová data mají tedy 2 a více dimenzí, 2D prostorová data mají 3 a více dimenzí a 3D prostorová data mají 4 a více dimenzí.
</dd></dl>
### 0D (neprostorová) data

View File

@ -3,13 +3,11 @@ title: "Metody vizualizace"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Vizualizace multidimenzionálních dat scatterplot matrix, paralelní souřadnice, skládání dimenzí. Vizualizace hierarchických struktur treemaps, radiální techniky. Základní třídy interakčních technik, techniky používané v prostoru obrazovky, objektu, dat, datových struktur.
> <br>
> _PV251, PA214_
Vizualizace multidimenzionálních dat scatterplot matrix, paralelní souřadnice, skládání dimenzí. Vizualizace hierarchických struktur treemaps, radiální techniky. Základní třídy interakčních technik, techniky používané v prostoru obrazovky, objektu, dat, datových struktur.
_PV251, PA214_
</dd></dl>
## Vizualizace multidimenzionálních dat
@ -80,11 +78,9 @@ Node-link diagram, Tree (Klasické zobrazení), Radial Tree (Sunburst, ale strom
Tyto interakce můžeme aplikovat na různé operandy. Operand interakce je prostor, na který interakci aplikujeme.
<dl><dt><strong>💡 TIP</strong></dt><dd>
> [!TIP]
> Rozdělení mi není úplně 100% jasné, takže budu rád za opravy. Celé slidy čerpají z knihy Interactive Data Visualization: Foundations, Techniques, and Applications, Second Edition (dostupné z [Annas Archive](https://annas-archive.org/md5/0bf49e061a8b82167d0e05a5d2b50476))
Rozdělení mi není úplně 100% jasné, takže budu rád za opravy. Celé slidy čerpají z knihy Interactive Data Visualization: Foundations, Techniques, and Applications, Second Edition (dostupné z [Annas Archive](https://annas-archive.org/md5/0bf49e061a8b82167d0e05a5d2b50476))
</dd></dl>
### Techniky pro prostor obrazovky (Pixely)

View File

@ -3,13 +3,11 @@ title: "Základy počítačové grafiky"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> OpenGL blokový diagram, GLSL vertex a fragment shader. Vytvoření GLSL programu. Základní typy vstupních a výstupních proměnných. Druhy grafických primitiv. Vertex Buffer Objects a Vertex Array Objects. Princip rasterizace, framebuffer. Textury: mapování, filtrování, syntéza.
> <br>
> _PB009, PA010, PV112, PV227_
OpenGL blokový diagram, GLSL vertex a fragment shader. Vytvoření GLSL programu. Základní typy vstupních a výstupních proměnných. Druhy grafických primitiv. Vertex Buffer Objects a Vertex Array Objects. Princip rasterizace, framebuffer. Textury: mapování, filtrování, syntéza.
_PB009, PA010, PV112, PV227_
</dd></dl>
## OpenGL blokový diagram
@ -370,11 +368,9 @@ Výhodami syntetizovaných textur je:
- dobrá návaznost na hranách geometrie, pokud syntetizujeme 3D texturu
- parametrizovatelnost
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!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](#synthesis1) a [synthesis2](#synthesis2).
</dd></dl>
## Zdroje

View File

@ -3,19 +3,15 @@ title: "Geometrické algoritmy"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Konvexní obaly, konstrukce ve 2D a 3D. Voroného diagramy, Delaunayova triangulace, dualita, triangulace, triangulace s omezením. Prostorové vyhledávání (datové struktury, algoritmy).
> <br>
> _MA017, PA093_
Konvexní obaly, konstrukce ve 2D a 3D. Voroného diagramy, Delaunayova triangulace, dualita, triangulace, triangulace s omezením. Prostorové vyhledávání (datové struktury, algoritmy).
_MA017, PA093_
> [!TIP]
> Většina algoritmů je výborně popsaná na webu předmětu [MA017 Geometrické algoritmy](https://is.muni.cz/auth/do/sci/UMS/el/geometricke-alg/index.html) včetně interaktivních animací a ukázek.
</dd></dl>
<dl><dt><strong>💡 TIP</strong></dt><dd>
Většina algoritmů je výborně popsaná na webu předmětu [MA017 Geometrické algoritmy](https://is.muni.cz/auth/do/sci/UMS/el/geometricke-alg/index.html) včetně interaktivních animací a ukázek.
</dd></dl>
## Konvexní obaly

View File

@ -3,13 +3,11 @@ title: "Techniky dělení prostoru a scény"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Datové struktury (oct-, quad-, BSP-, k-d stromy), jejich konstrukce a údržba, používané heuristiky. Objemem ohraničující tělesa a jejich hierarchie, způsob konstrukce a použití. Detekce kolizí, vykreslování.
> <br>
> _MA017, PA010, PA213_
Datové struktury (oct-, quad-, BSP-, k-d stromy), jejich konstrukce a údržba, používané heuristiky. Objemem ohraničující tělesa a jejich hierarchie, způsob konstrukce a použití. Detekce kolizí, vykreslování.
_MA017, PA010, PA213_
</dd></dl>
Hierarchické reprezentace scény se snaží zefektivnit výpočty kolizí pomocí rozdělení scény na menší části. Díky tomu je možné testovat kolize na méně objektech a navíc na takových, kde je tento výpočet jednodušší.

View File

@ -3,19 +3,15 @@ title: "Vykreslování objemových dat"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Rekonstrukce povrchu - kontury, objem, bodový mrak. Algoritmus pochodujících kostek. Přímé vykreslování objemových dat.
> <br>
> _PB009, PA010, PA213_
Rekonstrukce povrchu - kontury, objem, bodový mrak. Algoritmus pochodujících kostek. Přímé vykreslování objemových dat.
_PB009, PA010, PA213_
> [!TIP]
> Většina obsahu převzata z původní otázky VPH01 Pokročilá počítačová grafika
</dd></dl>
<dl><dt><strong>💡 TIP</strong></dt><dd>
Většina obsahu převzata z původní otázky VPH01 Pokročilá počítačová grafika
</dd></dl>
## Bodový mrak (point cloud)

View File

@ -3,13 +3,11 @@ title: "Lokální a globální modely osvětlení"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Blinn-Phongův osvětlovací model, BRDF, sledování paprsků, radiosita, fotonové mapy, participující média. Vykreslování založené na fyzikálních modelech (PBR). Osvětlení založené na obrázku (IBL).
> <br>
> _PB009, PV227, PA010, PA213_
Blinn-Phongův osvětlovací model, BRDF, sledování paprsků, radiosita, fotonové mapy, participující média. Vykreslování založené na fyzikálních modelech (PBR). Osvětlení založené na obrázku (IBL).
_PB009, PV227, PA010, PA213_
</dd></dl>
- **Lokální osvětlení (local illumination) / direct lighting**\
Berou v úvahu jen světlo, které dopadá přímo na daný bod/objekt. Neřeší okolní objekty, ani nepřímé osvětlení. Je založený na empirických znalostech o chování světla, spíš než simulaci fyzikálních zákonů.
@ -232,11 +230,9 @@ Physically based rendering (PBR) je způsob renderování, který se snaží co
## Image-based lighting (IBL)
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Tahle část otázky by si možná zasloužila rozšířit, ale bohužel tomu víc nerozumím :D
Tahle část otázky by si možná zasloužila rozšířit, ale bohužel tomu víc nerozumím :D
</dd></dl>
IBL využívá envitornmentálních textur (HDR CubeMap, ...) pro vyhodnocení světla z každého směru scény.

View File

@ -3,13 +3,11 @@ title: "Vykreslování v reálném čase"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Ořezávání, techniky založené na viditelnosti, vykreslování s různou úrovní detailů (LOD rendering), vykreslování terénu. Stíny: tvrdé stíny, měkké stíny, techniky vykreslování stínů v prostoru scény a v obrazovém prostoru.
> <br>
> _PA010, PA213_
Ořezávání, techniky založené na viditelnosti, vykreslování s různou úrovní detailů (LOD rendering), vykreslování terénu. Stíny: tvrdé stíny, měkké stíny, techniky vykreslování stínů v prostoru scény a v obrazovém prostoru.
_PA010, PA213_
</dd></dl>
- **Real time rendering**\
Snažíme se zlevnit a zrychlit vyrenderování jednoho snímku scény. Můžeme toho docílit typicky zahozením částí, které nejsou vidět a nahrazením drahého renderování vzdálených objektů levnějším.
@ -228,8 +226,8 @@ Stíny jsou důležité, jelikož:
![width=500rem](./img/vph01_shadow_maps.png)
**❗ IMPORTANT**\
Shadow mapám se důkladně věnuje otázka [Renderování s využitím GPU](../renderovani-s-vyuzitim-gpu/)
> [!IMPORTANT]
> Shadow mapám se důkladně věnuje otázka [Renderování s využitím GPU](../renderovani-s-vyuzitim-gpu/)
- **Shadow volumes**\
Počítá stíny ve 3D. Shadow volume explicitně popisuje objem prostoru ve stínu nějakého polygonu.

View File

@ -3,13 +3,11 @@ title: "Zpracování obrazu pomocí minimalizace energie"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Variační filtrování. Aktivní křivky a plochy (geodetický model, Chan-Vese model). Minimalizace pomocí grafových řezů. Variační optický tok.
> <br>
> _PA166_
Variační filtrování. Aktivní křivky a plochy (geodetický model, Chan-Vese model). Minimalizace pomocí grafových řezů. Variační optický tok.
_PA166_
</dd></dl>
## Variační filtrování

View File

@ -3,13 +3,11 @@ title: "Zpracování obrazu pomocí PDE"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Difúzní filtrování (lineární difuze, nelineární izotropní a nelineární anizotropní difuze). Level set metody (pohyb ve směru normály, pohyb řízený křivostí a pohyb ve vnějším vektorovém poli). Fast marching algoritmus.
> <br>
> _PA166_
Difúzní filtrování (lineární difuze, nelineární izotropní a nelineární anizotropní difuze). Level set metody (pohyb ve směru normály, pohyb řízený křivostí a pohyb ve vnějším vektorovém poli). Fast marching algoritmus.
_PA166_
</dd></dl>
- **Divergence**\
Operace, která nám říká, jak moc vektorové pole míří ven z daného bodu. Pokud je $\text{div} j > 0$, pak se v daném bodě hodnota časem snižuje, pokud je $\text{div} j &lt; 0$, pak se hodnota zvyšuje.

View File

@ -3,10 +3,9 @@ title: Zpracování obrazu - intro
description: "TODO"
---
<dl><dt><strong>💡 TIP</strong></dt><dd>
> [!TIP]
> Doporučuju kouknout na shrnutí v [zápiscích z předmětu PA166 od xrosecky](https://xrosecky.notion.site/PA166-Image-analysis-II-b2875a07366c404dabbf20a8b75a6e2e?pvs=74)
Doporučuju kouknout na shrnutí v [zápiscích z předmětu PA166 od xrosecky](https://xrosecky.notion.site/PA166-Image-analysis-II-b2875a07366c404dabbf20a8b75a6e2e?pvs=74)
</dd></dl>
* **Gradient $\nabla$**\
Vektorové pole ve směru největšího nárůstu.

View File

@ -3,13 +3,11 @@ title: "Algoritmy a datové struktury"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Pokročilé techniky návrhu algoritmů: dynamické programování, hladové strategie, backtracking. Amortizovaná analýza. Vyhledávání řetězců: naivní algoritmus pro hledání řetězců, Karp-Rabinův algoritmus, hledání řetězců pomocí konečných automatů. Algoritmus Knuth-Morris-Pratt.
> <br>
> _IV003_
Pokročilé techniky návrhu algoritmů: dynamické programování, hladové strategie, backtracking. Amortizovaná analýza. Vyhledávání řetězců: naivní algoritmus pro hledání řetězců, Karp-Rabinův algoritmus, hledání řetězců pomocí konečných automatů. Algoritmus Knuth-Morris-Pratt.
_IV003_
</dd></dl>
## Pokročilé techniky návrhu algoritmů
@ -30,20 +28,18 @@ Konkrétněji, dynamické programování je vhodnou technikou, pokud:
- (optimální) řešení původního problému lze jednoduše spočítat z (optimálních) řešení jeho podproblémů,
- podproblémy jde přirozeně seřadit od _nejmenšího_ po _největší_.
<dl><dt><strong>💡 TIP</strong></dt><dd>
> [!TIP]
> O tom, že problémů musí být polynomiální počet, přemýšlím intuitivně tak, že se musí dát vyřešit v nějakém vícenásobném `for`-cyklu a uložit do multi-dimenzionálního pole.
> <br>
> Pokud mám $l$ zanořených cyklů, vyřeším nejvíc $n^l$ podproblémů.
O tom, že problémů musí být polynomiální počet, přemýšlím intuitivně tak, že se musí dát vyřešit v nějakém vícenásobném `for`-cyklu a uložit do multi-dimenzionálního pole.
Pokud mám $l$ zanořených cyklů, vyřeším nejvíc $n^l$ podproblémů.
</dd></dl>
#### Memoizace
_Memoizace_ v zásadě není nic jiného než tabulka, pole, `HashSet`, nebo něco podobného, kam si algoritmus ukládá řešení jednotlivých podproblémů.
**💡 TIP**\
V pseudokódu se označuje jako $M$ (asi memory), $A$ (asi array), nebo $C$ (asi cache).
> [!TIP]
> V pseudokódu se označuje jako $M$ (asi memory), $A$ (asi array), nebo $C$ (asi cache).
#### Bottom-up
@ -51,11 +47,9 @@ Rekurze tradičně řeší problém _zeshora_ -- začně celým problémem, kter
Jediným háček je v tom přijít na to, které podproblémy jsou ty nejmenší a v jakém pořádí je musíme spočítat, aby byly všechny připravené pro výpočet větších podproblémů. Bez tohohle algoritmus nebude fungovat korektně.
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Zjednodušeně jde o to přetransformovat rekurzi na cykly. Pěkný vedlejším efektem je, že je jednodušší určit složitost algoritmu.
Zjednodušeně jde o to přetransformovat rekurzi na cykly. Pěkný vedlejším efektem je, že je jednodušší určit složitost algoritmu.
</dd></dl>
#### Kuchařka
@ -201,8 +195,8 @@ Umožňuje přesnější analýzu časové a prostorové složitosti, protože u
**Připomenutí**
**💡 TIP**\
Viz bakalářská otázka [Korektnost a složitost algoritmu](../../szb/korektnost-a-slozitost-algoritmu/).
> [!TIP]
> Viz bakalářská otázka [Korektnost a složitost algoritmu](../../szb/korektnost-a-slozitost-algoritmu/).
Základními pojmy analýzy složitosti jsou:
@ -260,14 +254,14 @@ Pro každou operaci v posloupnosti:
- Pokud je _skutečná_ cena nižší než _kreditová_, tak zaplatíme skutečnou cenu a přebývající kredity uspoříme na _účtu_.
- Pokud je _skutečná_ cena vyšší než _kreditová_, tak zaplatíme skutečnou cenu a případný nedostatek kreditů doplatíme z úspor na _účtu_.
**❗ IMPORTANT**\
Pokud je po celou dobu provádění operací stav účtu **nezáporný**, pak je _skutečná_ složitost celé posloupnosti operací menší nebo rovna součtu _kreditových_ cen operací.
> [!IMPORTANT]
> Pokud je po celou dobu provádění operací stav účtu **nezáporný**, pak je _skutečná_ složitost celé posloupnosti operací menší nebo rovna součtu _kreditových_ cen operací.
**⚠️ WARNING**\
Pokud stav účtu **kdykoliv během posloupnosti** klesne pod nulu, pak jsou kreditové ceny nastaveny **špatně**!
> [!WARNING]
> Pokud stav účtu **kdykoliv během posloupnosti** klesne pod nulu, pak jsou kreditové ceny nastaveny **špatně**!
**💡 TIP**\
Tato metoda se dá upravit tak, že kredity náleží individuálním objektům ve struktuře místo struktury jako celku. Cena operace se pak platí z kreditů objektů, nad kterým operace probíhá.
> [!TIP]
> Tato metoda se dá upravit tak, že kredity náleží individuálním objektům ve struktuře místo struktury jako celku. Cena operace se pak platí z kreditů objektů, nad kterým operace probíhá.
**Zásobník (kredity)**
@ -674,11 +668,11 @@ int KnuthMorrisPratt(string text, string pattern)
}
```
**⚠️ WARNING**\
Nejsem si jistý, že ty indexy v kódu výše mám dobře.
> [!WARNING]
> 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)
> [!NOTE]
> "In other words we can amortize character mismatches against earlier character matches." [iv003-strings](#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`.

View File

@ -3,13 +3,11 @@ title: "Numerické metody"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Iterativní metody pro řešení nelineárních rovnic (Newtonova metoda a její modifikace). Přímé metody pro řešení systému lineárních rovnic (Gaussova eliminace, Jacobi, Gauss-Seidel, relaxační metody). Numerická diferenciace, diferenciační schémata.
> <br>
> _MA018_
Iterativní metody pro řešení nelineárních rovnic (Newtonova metoda a její modifikace). Přímé metody pro řešení systému lineárních rovnic (Gaussova eliminace, Jacobi, Gauss-Seidel, relaxační metody). Numerická diferenciace, diferenciační schémata.
_MA018_
</dd></dl>
- **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)
@ -283,16 +281,16 @@ Numerická diferenciace se využívá pro aproximaci differenciálních rovnic (
- **Langrangeova interpolace**\
Pokud známe hodnoty $f$ můžeme mezi nimi interpolovat pomocí Lagrangeova polynomu a derivovat ten, protože derivovat polynomy je jednoduché.
**❗ IMPORTANT**\
Lagrangeovu interpolaci řeší část otázky [Křivky a povrchy](../krivky-a-povrchy/).
> [!IMPORTANT]
> Lagrangeovu interpolaci řeší část otázky [Křivky a povrchy](../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)
Jednotlivým "odstínům" -- konkrétním výpočetním vzorcům -- téhle metody se říká _diferenciační schémata_.
**💡 TIP**\
Abych pravdu řekl, nepodařilo se mi najít zdroj pro konkrétní definici pojmu "diferenciační schéma".
> [!TIP]
> 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)
@ -317,8 +315,8 @@ Numerická diferenciace se využívá pro aproximaci differenciálních rovnic (
kde $h$ je kladné číslo napodobující nekonečně malou změnu (limitu) v definici derivace. Může to být konstanta, může ale být i zvoleno adaptivně.
**💡 TIP**\
Tečna je tak napodobena sečnou.
> [!TIP]
> Tečna je tak napodobena sečnou.
- **Richardson extrapolation**\
Způsob zlepšení rate of convergence iterativních metod. [richardson](#richardson)

View File

@ -3,18 +3,16 @@ title: "Statistika"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Diskrétní a spojité náhodné veličiny (NV), základní rozložení. Číselné charakteristiky NV. Centrální limitní věta. Bodové odhady, intervaly spolehlivosti, testování statistických hypotéz, hladina významnosti. Základní parametrické a neparametrické testy, ANOVA, testy nezávislosti NV. Lineární regrese, celkový F-test, dílčí t-testy.
> <br>
> _MV013_
Diskrétní a spojité náhodné veličiny (NV), základní rozložení. Číselné charakteristiky NV. Centrální limitní věta. Bodové odhady, intervaly spolehlivosti, testování statistických hypotéz, hladina významnosti. Základní parametrické a neparametrické testy, ANOVA, testy nezávislosti NV. Lineární regrese, celkový F-test, dílčí t-testy.
_MV013_
</dd></dl>
**Opakování**
**💡 TIP**\
Viz bakalářské otázky [Kombinatorika a pravděpodobnost](../../szb/kombinatorika-a-pravdepodobnost/) a [Statistika](../../szb/statistika/).
> [!TIP]
> 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)
@ -143,8 +141,8 @@ Stejně jako náhodné veličiny popisují jevy, číselné charakteristiky popi
- **Střední hodnota / mean / expected value**\
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)
> [!NOTE]
> Taky někdy označovaný jako _obecný moment prvního řádu / první obecný moment_. [moment](#moment)
- **$\alpha$-kvantil $Q_\alpha$**\
Dělí statický soubor na stejně velké části.
@ -174,8 +172,8 @@ Jak moc se od sebe prvky liší (nezávisle na konstantním posunutí)?
\text{var}(X) = E\left((x_i - E(X))^2\right)
```
**📌 NOTE**\
Taky někdy označovaný jako _centrální moment druhého řádu / druhý centrální moment_. [moment](#moment)
> [!NOTE]
> Taky někdy označovaný jako _centrální moment druhého řádu / druhý centrální moment_. [moment](#moment)
- **Směrodatná odchylka / standard deviation**\
Míra variability NV. Značí se $\sigma$ nebo $\text{SD}(X)$. Je definovaná jako $\sqrt{\sigma^2}$.
@ -227,8 +225,8 @@ Popisuje chování _výběrového průměru_ pro velké soubory vzorků a umož
- **Lévyho-Lindenbergova věta**
**💡 TIP**\
Zobecnění Moivreovy-Laplacovy věty.
> [!TIP]
> Zobecnění Moivreovy-Laplacovy věty.
Mějme NV $X$. Pokud je $X$ součtem $n$ vzájemně nezávislých NV $X_1, X_2, ..., X_n$ se shodným rozdělením libovolného typu, s konečnou střední hodnotou $E(X_i) = \mu$ a konečným rozptylem $D(X_i) = \sigma^2$, pak pro normovanou NV $U$ asymptoticky s $n \to \infty$ platí:
@ -300,8 +298,8 @@ Popisuje chování _výběrového průměru_ pro velké soubory vzorků a umož
> T_n = T(X_1, X_2, \ldots, X_n)
> ```
**💡 TIP**\
_Estimator_ je funkce počítající statistiku použitá k odhadu parametru. [statistic](#statistic)
> [!TIP]
> _Estimator_ je funkce počítající statistiku použitá k odhadu parametru. [statistic](#statistic)
- **Bodový odhad / point estimate / pointwise estimate**\
Odhad parametru daný **jednou hodnotou**, která hodnotu parametru aproximuje.
@ -358,11 +356,11 @@ Máme vzorek velikosti $n$ s výběrovým průměrem $\overline{X}$ a výběrov
Říká, jak dobře náš model (rozdělení pravděpodobnosti náhodné veličiny dané parametry) sedí na naměřená data.
**📌 NOTE**\
Pravděpodobnost je funkce jevů. Likelihood je funkce parametrů modelu.
> [!NOTE]
> Pravděpodobnost je funkce jevů. Likelihood je funkce parametrů modelu.
**📌 NOTE**\
Likelihood nemusí nutně vracet čísla z intervalu $\lbrack 0, 1 \rbrack$.
> [!NOTE]
> 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)
@ -402,12 +400,11 @@ Platí presumpce nevinny. Předpokládáme, že člověk zločin nespáchal, dok
- _Typ I_: zamítnutí $H_0$, i když je pravdivá -- _false positive_.
- _Typ II_: nezamítnutí $H_0$, i když je nepravdivá -- _false negative_.
<dl><dt><strong>📌 NOTE</strong></dt><dd>
_Positive_ = zamítnutí $H_0$, tedy potvrzení $H_1$.
_Negative_ = nezamítnutí $H_0$, tedy o $H_1$ nevíme nic.
</dd></dl>
> [!NOTE]
> _Positive_ = zamítnutí $H_0$, tedy potvrzení $H_1$.
> <br>
> _Negative_ = nezamítnutí $H_0$, tedy o $H_1$ nevíme nic.
- **$p$-hodnota (hladina významnosti)**\
Nejmenší hladina významnosti $\alpha$, při které ještě zamítáme $H_0$. [p-value](#p-value)
@ -418,8 +415,8 @@ Platí presumpce nevinny. Předpokládáme, že člověk zločin nespáchal, dok
p = P(\text{type I error}) = P(\text{we reject } H_0 \;|\; H_0)
]
**💡 TIP**\
Pokud $p$-value vyjde menší než požadovaná hladina významnosti $\alpha$, pak pravděpodobnost, že došlo k chybě typu I je dostatečně malá na to, abychom mohli tvrdit, že zavrhujeme $H_0$, protože $H_0$ neplatí, a tedy akceptujeme $H_1$.
> [!TIP]
> Pokud $p$-value vyjde menší než požadovaná hladina významnosti $\alpha$, pak pravděpodobnost, že došlo k chybě typu I je dostatečně malá na to, abychom mohli tvrdit, že zavrhujeme $H_0$, protože $H_0$ neplatí, a tedy akceptujeme $H_1$.
### Parametrické testy

View File

@ -3,13 +3,11 @@ title: "3D modelování a datové struktury"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Mnohoúhelníkové a trojúhelníkové sítě: datové struktury, modelování, pass:[&lt;s>filtrování&lt;/s>], změna struktury sítě, **\*zjednodušování sítě\*\***. Implicitní **a parametrické\*** reprezentace a modelování **_(SDF, CSG, B-Rep)_**.
> <br>
> _PA010_
Mnohoúhelníkové a trojúhelníkové sítě: datové struktury, modelování, pass:[&lt;s>filtrování&lt;/s>], změna struktury sítě, **\*zjednodušování sítě\*\***. Implicitní **a parametrické\*** reprezentace a modelování **_(SDF, CSG, B-Rep)_**.
_PA010_
</dd></dl>
## Mnohoúhelníkové a trojúhelníkové sítě
@ -80,19 +78,17 @@ _PA010_
>
> — PA010
<dl><dt><strong>💡 TIP</strong></dt><dd>
> [!TIP]
> Podle Wikipedie je _genus_ česky _rod plochy_.
Podle Wikipedie je _genus_ česky _rod plochy_.
</dd></dl>
<dl><dt><strong>💡 TIP</strong></dt><dd>
Je to **maximální** počet těch řezů.
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í**.
![width=500rem](./img/szp04_genus.png)
</dd></dl>
> [!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í**.
> <br>
> ![width=500rem](./img/szp04_genus.png)
- **Boundary edge loops / rings**\
Edge loops uvnitř stěn, které nejsou vnějšími hranicemi objektu.
@ -116,34 +112,31 @@ _PA010_
\chi(M) = V - E + F - R = 2 \cdot (S - G) \text{ (s děrami)}
```
<dl><dt><strong>❗ IMPORTANT</strong></dt><dd>
> [!IMPORTANT]
> Pro libovolný mnohostěn (polyhedron) bez děr je $\chi = 2$.
Pro libovolný mnohostěn (polyhedron) bez děr je $\chi = 2$.
</dd></dl>
<dl><dt><strong>❗ IMPORTANT</strong></dt><dd>
Pro uzavřený 2-manifoldní trojúhelníkový mesh:
Každý trojúhelník má 3 hrany a každá hrana je sdílena dvěma trojúhelníky, takže $E = \frac{3}{2} F$.
**💡 TIP**\
Intuitivně: pokud jsme neúsporní, pak máme tři hrany pro každý trojúhelník ($3F$), každou hranu ale "přilepíme" k nějakému dalšímu trojúhelníku, takže každou hranu máme zbytečně dvakrát ($2E$), proto $3F = 2E$, tedy $E = \frac{3}{2} F$.
Z Euler-Poincaré plyne, že
```math
V = 2 + E - F = 2 + \frac{3}{2} F - F = 2 + \frac{1}{2} F \sim \frac{1}{2}
```
- Tedy platí poměr $E:F:V = 3:2:1$.
- Tedy průmeřný vertex degree (počet hran, které vycházejí z vertexu) je $2 \cdot \frac{E}{V} \sim 6$.
Každá hrana (ve 2-manifoldu) přispívá k degree právě dvou vertexů, protože někde začíná a končí.
Kdybychom sečetli degree všech vertexů, dostali bychom $2E$, proto $2E \sim 6V$.
</dd></dl>
> [!IMPORTANT]
> Pro uzavřený 2-manifoldní trojúhelníkový mesh:
> <br>
> Každý trojúhelník má 3 hrany a každá hrana je sdílena dvěma trojúhelníky, takže $E = \frac{3}{2} F$.
> <br>
> **💡 TIP**\
> > Intuitivně: pokud jsme neúsporní, pak máme tři hrany pro každý trojúhelník ($3F$), každou hranu ale "přilepíme" k nějakému dalšímu trojúhelníku, takže každou hranu máme zbytečně dvakrát ($2E$), proto $3F = 2E$, tedy $E = \frac{3}{2} F$.
> <br>
> Z Euler-Poincaré plyne, že
> <br>
> ```math
> V = 2 + E - F = 2 + \frac{3}{2} F - F = 2 + \frac{1}{2} F \sim \frac{1}{2}
> ```
> <br>
> - Tedy platí poměr $E:F:V = 3:2:1$.
> - Tedy průmeřný vertex degree (počet hran, které vycházejí z vertexu) je $2 \cdot \frac{E}{V} \sim 6$.
> <br>
> Každá hrana (ve 2-manifoldu) přispívá k degree právě dvou vertexů, protože někde začíná a končí.
> <br>
> Kdybychom sečetli degree všech vertexů, dostali bychom $2E$, proto $2E \sim 6V$.
- **Simplex**\
Nejjednodušší polytop (generalizace mnohoúhelníku, mnohostěnu, atd.). Generalizace trojúhelníku v libovolné dimenzi:
@ -200,8 +193,8 @@ _PA010_
### Modelování
**❗ IMPORTANT**\
Tahle sekce má docela průnik s otázkou [Modelování 3D postav](../modelovani-3d-postav/).
> [!IMPORTANT]
> Tahle sekce má docela průnik s otázkou [Modelování 3D postav](../modelovani-3d-postav/).
- **Boundary representation model (B-rep)**\
Modelování objektů pomocí jejich hranic -- boundaries (hrany, stěny, atd.).
@ -221,8 +214,8 @@ Tahle sekce má docela průnik s otázkou [Modelování 3D postav](../modelovani
- **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)
**📌 NOTE**\
Zdá se, že $H$ -- components je ekvivalentní $R$ -- rings.
> [!NOTE]
> Zdá se, že $H$ -- components je ekvivalentní $R$ -- rings.
Ač Eulerových operátorů se dá zadefinovat mnoho, v praxi stačí:
@ -328,8 +321,8 @@ Tahle sekce má docela průnik s otázkou [Modelování 3D postav](../modelovani
### Změna struktury sítě
**❗ IMPORTANT**\
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](../pokrocila-pocitacova-grafika/)
> [!IMPORTANT]
> 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](../pokrocila-pocitacova-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)

View File

@ -3,13 +3,11 @@ title: "Křivky a povrchy"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Implicitní a parametrické reprezentace. Interpolace a aproximace. Cn, Gn spojitost, podmínky spojitosti pro po částech definované funkce. Bézierovy křivky, B-spline křivky, pass:[&lt;s>NURBS, &lt;/s>]Coonsovy pass:[&lt;s>křivky a &lt;/s>]pláty. Povrchy tvořené rekurzivním dělením polygonů.
> <br>
> _PB009, PA010_
Implicitní a parametrické reprezentace. Interpolace a aproximace. Cn, Gn spojitost, podmínky spojitosti pro po částech definované funkce. Bézierovy křivky, B-spline křivky, pass:[&lt;s>NURBS, &lt;/s>]Coonsovy pass:[&lt;s>křivky a &lt;/s>]pláty. Povrchy tvořené rekurzivním dělením polygonů.
_PB009, PA010_
</dd></dl>
## Druhy reprezentace
@ -47,11 +45,11 @@ kde $c$ je konstanta a je obvykle rovná 0.
Tato rovnice udává množinu bodů, ze které se křivka nebo povrch sestává. Takové množině se někdy říká _level set_ a metodám, které s nimi pracují _level-set methods_.
**❗ IMPORTANT**\
Výhodou implicitně zadaných ploch je kompaktnější reprezentace a jednodušší ray casting. Nicméně výpočty s nimi jsou časově náročné, takže se stejně nejdřív převádí na polygonové meshe -- _polygonizace_.
> [!IMPORTANT]
> Výhodou implicitně zadaných ploch je kompaktnější reprezentace a jednodušší ray casting. Nicméně výpočty s nimi jsou časově náročné, takže se stejně nejdřív převádí na polygonové meshe -- _polygonizace_.
**❗ IMPORTANT**\
Tahle sekce přesahuje do [3D modelování a datové struktury](../3d-modelovani-a-datove-struktury/) -> _Implicitní reprezentace a modelování_.
> [!IMPORTANT]
> Tahle sekce přesahuje do [3D modelování a datové struktury](../3d-modelovani-a-datove-struktury/) -> _Implicitní reprezentace a modelování_.
### Parametrická reprezentace
@ -228,8 +226,8 @@ Je podobná parametrické spojitosti, ale vyžaduje jen "geometrickou" spojitost
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.
> [!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.
## Křivky
@ -381,8 +379,8 @@ Mezi jejich vlastnosti patří:
Lze ji definovat pomocí **Cox-de Boorovy** rekurzivní formule:
**💡 TIP**\
de Boorův algoritmus je generalizací DeCasteljauova algoritmu ale pro B-splajny.
> [!TIP]
> de Boorův algoritmus je generalizací DeCasteljauova algoritmu ale pro B-splajny.
```math
\begin{aligned}
@ -412,8 +410,8 @@ Jejich užitečnost spočívá v tom, že libovolný splajn stupně $n$ daný se
S(x) = \sum_{i=0} c_i B_{i,n}(x)
```
**📌 NOTE**\
Uzlů je zpravidla víc než $n+1$, protože pak teprve máme víc než jeden B-spline, který kombinujeme.
> [!NOTE]
> Uzlů je zpravidla víc než $n+1$, protože pak teprve máme víc než jeden B-spline, který kombinujeme.
- **Uniformní B-splajny**\
Uzly jsou rozloženy rovnoměrně. Tedy mezi každými dvěma uzly $t_i$ a $t_{i+1}$ je stejná vzdálenost $h$.
@ -447,8 +445,8 @@ Uzlů je zpravidla víc než $n+1$, protože pak teprve máme víc než jeden B-
![width=400](./img/szp05_coons_basis.png)
**📌 NOTE**\
Něco ohledně tohohle termínu mi hrozně smrdí. Zdá se, že jediní, kdo používají "coons cubic curve" jsme my a ČVUT.
> [!NOTE]
> Něco ohledně tohohle termínu mi hrozně smrdí. Zdá se, že jediní, kdo používají "coons cubic curve" jsme my a ČVUT.
## Povrchy
@ -490,8 +488,8 @@ Interpolační povrch.
Plochy vzniknuvší interpolací mezi křivkami udávající jejich okraje. Dají se na sebe pěkně napojovat, právě protože jsou definovány svými okraji.
**⚠️ WARNING**\
Coonsovy pláty jsou **interpolační**, zatímco Coonsovy křivky jsou **aproximační**.
> [!WARNING]
> Coonsovy pláty jsou **interpolační**, zatímco Coonsovy křivky jsou **aproximační**.
- **Bilineární Coonsovy pláty**
@ -622,8 +620,8 @@ 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)
> [!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)
## Surface subdivision / rekurzivní dělení polygonů

View File

@ -3,16 +3,14 @@ title: "Strojové učení"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Strojové učení a rozpoznávání vzorů: problém klasifikace a regrese, shluková analýza, učení s učitelem a bez učitele. Vícevrstvé neuronové sítě, vícevrstvé perceptrony, ztrátové funkce, zpětná propagace. pass:[&lt;s>Hopfieldova síť, &lt;/s>]konvoluční sítě, rekurentní sítěpass:[&lt;s>, samo-organizující mapy&lt;/s>].
> <br>
> _PV021_
Strojové učení a rozpoznávání vzorů: problém klasifikace a regrese, shluková analýza, učení s učitelem a bez učitele. Vícevrstvé neuronové sítě, vícevrstvé perceptrony, ztrátové funkce, zpětná propagace. pass:[&lt;s>Hopfieldova síť, &lt;/s>]konvoluční sítě, rekurentní sítěpass:[&lt;s>, samo-organizující mapy&lt;/s>].
_PV021_
</dd></dl>
**💡 TIP**\
Velkou část zpracování téhle otázky jsem ukradl [sám sobě](/fi/pv021/).
> [!TIP]
> Velkou část zpracování téhle otázky jsem ukradl [sám sobě](/fi/pv021/).
## Strojové učení a rozpoznávání vzorů
@ -107,8 +105,8 @@ Velkou část zpracování téhle otázky jsem ukradl [sám sobě](/fi/pv021/).
- bias -- udává "jak těžké" je pro neuron se aktivovat (čím vyšší číslo, tím těžší je pro neuron vydat nenulový výstup)
- $x_0$ -- pro snažší implementaci se závádí dodatečný vstup, který má vždy hodnotu 1 a váhu rovnu -bias
**📌 NOTE**\
Vnitřní potenciál funguje jako nadrovina (čára při 2D, rovina při 3D, nepředstavitelný mostrum ve vyšších dimenzí), která rozděluje prostor vstupů na část, kde je $\xi &lt; 0$ a kde $\xi > 0$.
> [!NOTE]
> Vnitřní potenciál funguje jako nadrovina (čára při 2D, rovina při 3D, nepředstavitelný mostrum ve vyšších dimenzí), která rozděluje prostor vstupů na část, kde je $\xi &lt; 0$ a kde $\xi > 0$.
- **Multilayer perceptron (MLP)**
@ -156,8 +154,8 @@ Velkou část zpracování téhle otázky jsem ukradl [sám sobě](/fi/pv021/).
### Trénink
**❗ IMPORTANT**\
Pro likelihood viz otázka [Statistika](../statistika/).
> [!IMPORTANT]
> Pro likelihood viz otázka [Statistika](../statistika/).
Neuronka je model, kde váhy neuronů jsou parametry. Při učení neuronek je naším cílem maximalizovat likelihood, jakožto míru toho, že naše síť sedí na "naměřená data", training set $\cal T$. Tomuhle přístupu se říká _maximum likelihood principle_.
@ -243,8 +241,8 @@ w_{ji}^{(t+1)}
Za předpokladu, že $E$ je squared error, pak:
**⚠️ WARNING**\
V případě, že $E$ není squared error, následující výpočet neplatí.
> [!WARNING]
> V případě, že $E$ není squared error, následující výpočet neplatí.
```math
\large
@ -278,8 +276,8 @@ V případě, že $E$ není squared error, následující výpočet neplatí.
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)
**❗ IMPORTANT**\
Pro konvoluci viz otázka [Zpracování rastrového obrazu](../zpracovani-rastroveho-obrazu/).
> [!IMPORTANT]
> Pro konvoluci viz otázka [Zpracování rastrového obrazu](../zpracovani-rastroveho-obrazu/).
**Typical CNN by [Aphex34](https://commons.wikimedia.org/w/index.php?curid=45679374)**
@ -370,8 +368,8 @@ Neuronové sítě, jejichž architektura obsahuje cykly. Tedy výstup v jednom b
\mathcal{T} = \{ (\bold{x}_1, \bold{d}_1), ..., (\bold{x}_p, \bold{d}_p) \}
```
**📌 NOTE**\
Ano, to znamená, že $x_{lt1}$ je první prvek $t$-ho prvku v $l$-té vstupní sekvenci.
> [!NOTE]
> Ano, to znamená, že $x_{lt1}$ je první prvek $t$-ho prvku v $l$-té vstupní sekvenci.
Squared error samplu $(\bold{x}, \bold{d})$:
@ -424,8 +422,8 @@ Neuronové sítě, jejichž architektura obsahuje cykly. Tedy výstup v jednom b
\end{aligned}
```
**💡 TIP**\
Pokud $\textcolor{red}{\sigma' \cdot W_{kk}} \not\approx 1$, pak gradient buď vybouchne nebo se ztratí.
> [!TIP]
> Pokud $\textcolor{red}{\sigma' \cdot W_{kk}} \not\approx 1$, pak gradient buď vybouchne nebo se ztratí.
- **Long Short-Term Memory (LSTM)**\
LSTM řeší problém s vanishing a exploding gradientem, kterým RNN. V RNN je $\sigma$ typicky $\tanh$. V LSTM obsahuje jeden hidden neuron vlastně čtyři "podvrstvy", které mimo jiné umožňují část paměti zapomenout:

View File

@ -3,16 +3,14 @@ title: "Grafy a grafové algoritmy"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Reprezentace grafů. Souvislost grafu, rovinné grafy. Prohledávání grafu do šířky a do hloubky, nejkratší vzdálenosti, kostry, toky v sítích. Algoritmy: Bellman-Ford, Dijkstra, Ford-Fulkerson, Push-Relabel, maximální párování v bipartitních grafech.
> <br>
> _IB000, IB002, IV003_
Reprezentace grafů. Souvislost grafu, rovinné grafy. Prohledávání grafu do šířky a do hloubky, nejkratší vzdálenosti, kostry, toky v sítích. Algoritmy: Bellman-Ford, Dijkstra, Ford-Fulkerson, Push-Relabel, maximální párování v bipartitních grafech.
_IB000, IB002, IV003_
</dd></dl>
**💡 TIP**\
Tahle otázka má solidní překryv s bakalářskými otázkami [Grafy](../../szb/grafy/) a [Grafové problémy](../../szb/grafove-problemy/).
> [!TIP]
> Tahle otázka má solidní překryv s bakalářskými otázkami [Grafy](../../szb/grafy/) a [Grafové problémy](../../szb/grafove-problemy/).
## Terminologie
@ -174,11 +172,11 @@ Hledá nejkratší cesty z jednoho vrcholu do všech ostatních.
- Je podobný BFS, ale používá prioritní frontu.
- Funguje **pouze** na grafech **bez záporných** hran.
**💡 TIP**\
Složitost závisí na implementaci prioritní fronty. Je to $\Theta(V)$ insertů, $\Theta(V)$ hledání nejmenšího prvku, $\Theta(E)$ snížení priority.
> [!TIP]
> Složitost závisí na implementaci prioritní fronty. Je to $\Theta(V)$ insertů, $\Theta(V)$ hledání nejmenšího prvku, $\Theta(E)$ snížení priority.
**📌 NOTE**\
Implementace níže používá pole (resp. Pythoní `list`), tedy složitost je $\Theta(V^2)$, jelikož hledání minima je lineární.
> [!NOTE]
> Implementace níže používá pole (resp. Pythoní `list`), tedy složitost je $\Theta(V^2)$, jelikož hledání minima je lineární.
```python
def dijkstra(graph: List[List[Tuple[int, int]]], s: int) \
@ -208,8 +206,8 @@ Dijkstrův algoritmus lze optimalizovat, pokud nás zajímá jen nejkratší ces
- Můžeme hledat zároveň ze začátku a konce pomocí dvou front a skončit, jakmile se někde potkají.
- Můžeme přidat _potenciál_ -- dodatečnou heuristickou váhu.
**❗ IMPORTANT**\
Téhle variantě se říká A\* (A star). Věnuje se mu část otázky [Umělá inteligence v počítačových hrách](../umela-inteligence-v-pocitacovych-hrach/).
> [!IMPORTANT]
> Téhle variantě se říká A\* (A star). Věnuje se mu část otázky [Umělá inteligence v počítačových hrách](../umela-inteligence-v-pocitacovych-hrach/).
## Kostry
@ -283,8 +281,8 @@ Dijkstrův algoritmus lze optimalizovat, pokud nás zajímá jen nejkratší ces
- Každá fáze zabere $\mathcal{O}( \lvert E \rvert )$ času, protože procházíme všechny hrany.
- Celková složitost: $\mathcal{O}( \lvert E \rvert \log \lvert V \rvert )$
**💡 TIP**\
Kruskal sice taky buduje stromy na více místech najednou, ale není "paralelní", protože minimalita kostry spoléhá na to, že hrany jsou seřazené. Borůvka takový požadavek nemá, a proto je paralelizovatelnější.
> [!TIP]
> Kruskal sice taky buduje stromy na více místech najednou, ale není "paralelní", protože minimalita kostry spoléhá na to, že hrany jsou seřazené. Borůvka takový požadavek nemá, a proto je paralelizovatelnější.
**Složitosti algoritmů**
@ -338,8 +336,8 @@ Dijkstrův algoritmus lze optimalizovat, pokud nás zajímá jen nejkratší ces
- **Augmenting path $P$**\
Jednoduchá $s \rightsquigarrow t$ cesta v residuální síti $G_f$.
**📌 NOTE**\
T.j. cesta která může jít i proti směru toku $f$.
> [!NOTE]
> T.j. cesta která může jít i proti směru toku $f$.
_Bottleneck kapacita_ je nejmenší kapacita hran v augmenting path $P$.
@ -423,8 +421,8 @@ Dijkstrův algoritmus lze optimalizovat, pokud nás zajímá jen nejkratší ces
- _sink_: $h(t) = 0$,
- _height difference_: $(\forall (v, w) \in E_{G_f})(h(v) \le h(w) + 1)$.
**📌 NOTE**\
Pokud mezi dvěma vrcholy $(v, w)$ v reziduální síti vede hrana, pak je $v$ nejvýše o jednu úroveň výš než $w$.
> [!NOTE]
> Pokud mezi dvěma vrcholy $(v, w)$ v reziduální síti vede hrana, pak je $v$ nejvýše o jednu úroveň výš než $w$.
- **Push operace**\
Pro (reziduálně-grafovou) hranu $(v, w)$ se pokusí přesunout excess flow z $v$ do $w$, aniž by porušil (reziduální) kapacitu $(v, w)$.

View File

@ -3,13 +3,11 @@ title: "Zpracování rastrového obrazu"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Bodové transformace. Histogram, vyrovnání histogramu, analýza histogramu. Lineární a nelineární filtry. Detekce hran. Fourierova transformace. Vzorkovací teorém, převzorkování, geometrické transformace. Vlnková transformace. Houghova/Radonova transformace.
> <br>
> _PB130/PV131_
Bodové transformace. Histogram, vyrovnání histogramu, analýza histogramu. Lineární a nelineární filtry. Detekce hran. Fourierova transformace. Vzorkovací teorém, převzorkování, geometrické transformace. Vlnková transformace. Houghova/Radonova transformace.
_PB130/PV131_
</dd></dl>
- **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)
@ -149,8 +147,8 @@ Histogram kvantifikuje množství a frekvenci barev obsažených v obraze. Ve st
![width=49%](./img/szp09_histogram_eq_after_01.jpg)
![width=49%](./img/szp09_histogram_eq_after_02.svg)
**📌 NOTE**\
Původní fotku vyfotil [Phillip](https://commons.wikimedia.org/w/index.php?curid=855363) [Capper](https://commons.wikimedia.org/w/index.php?curid=855383).
> [!NOTE]
> 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)
@ -194,8 +192,8 @@ Histogram kvantifikuje množství a frekvenci barev obsažených v obraze. Ve st
kde $h$ je _kernel / konvoluční jádro_ dáno jako matice velikosti $(2k + 1) \times (2k + 1)$.
**⚠️ WARNING**\
Všimni si, že kvůli $f \lbrack x - m, x - n \rbrack$ se jádro při aplikaci na obraz překlápí. Kdyby to bylo $f \lbrack x + m, x + n \rbrack$, tak jde o **korelaci**, ne o konvoluci.
> [!WARNING]
> Všimni si, že kvůli $f \lbrack x - m, x - n \rbrack$ se jádro při aplikaci na obraz překlápí. Kdyby to bylo $f \lbrack x + m, x + n \rbrack$, tak jde o **korelaci**, ne o konvoluci.
Konvoluce má složitost $O(MNKL)$, kde $M \times N$ je velikost obrazu a $K \times L$ je velikost jádra. Pro velká jádra se složitost blíží $O(M^2 N^2)$.
@ -268,8 +266,8 @@ Proces, kdy hledání _hran_ v obraze. Hrana je křivka, podél níž pixely vý
- Bývá implementováná pomocí (první, druhé) derivace (resp. numerické diferenciace).
- Hrany lze detekovat pomocí konvoluce.
**❗ IMPORTANT**\
Numerické diferenciaci se věnuje otázka [Numerické metody](../numericke-metody/).
> [!IMPORTANT]
> Numerické diferenciaci se věnuje otázka [Numerické metody](../numericke-metody/).
### Podle první derivace (gradientu)
@ -296,10 +294,9 @@ Numerické diferenciaci se věnuje otázka [Numerické metody](../numericke-meto
kde $I$ je vstupní obraz.
<dl><dt><strong>📌 NOTE</strong></dt><dd>
Všimni si podobnosti s Sobelovým operátorem. Jen místo Gaussovského rozmazání používá box filtr.
</dd></dl>
> [!NOTE]
> Všimni si podobnosti s Sobelovým operátorem. Jen místo Gaussovského rozmazání používá box filtr.
- **Sobelův operátor**\
Aproximuje velikost gradientu pomocí **centrálních** konečných diferencí. Skládá se ze dvou konvolucí s jádry:
@ -429,11 +426,9 @@ Patří sem transformace jako:
>
> — Nika Kunzová
<dl><dt><strong>💡 TIP</strong></dt><dd>
> [!TIP]
> 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...)_
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...)_
</dd></dl>
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)
@ -540,11 +535,11 @@ Samplování je převod spojitého signálu na diskrétní. [sampling](#sampling
- 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.
**💡 TIP**\
Aliasingu se věnuje část otázky [Renderování s využitím GPU](../renderovani-s-vyuzitim-gpu/).
> [!TIP]
> Aliasingu se věnuje část otázky [Renderování s využitím GPU](../renderovani-s-vyuzitim-gpu/).
**💡 TIP**\
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čí.
> [!TIP]
> 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)
@ -581,11 +576,9 @@ Patří sem operace jako:
## Vlnková transformace / wavelet transform
<dl><dt><strong>💡 TIP</strong></dt><dd>
> [!TIP]
> Opět výborné video, bohužel ne od 3b1b, ale obdobně kvalitně zpracované: [Wavelets: a mathematical microscope](https://www.youtube.com/watch?v=jnxqHcObNK4).
Opět výborné video, bohužel ne od 3b1b, ale obdobně kvalitně zpracované: [Wavelets: a mathematical microscope](https://www.youtube.com/watch?v=jnxqHcObNK4).
</dd></dl>
- **Vlnka / wavelet**\
Funkce $\psi$, která je omezená v čase. Je to "brief oscillation". [wavelet](#wavelet)
@ -686,11 +679,9 @@ Matematicky vzato, k vysoké korelaci vlnky se signálem (vysokému korelačním
## Houghova transformace
<dl><dt><strong>💡 TIP</strong></dt><dd>
> [!TIP]
> Super [minutu a půl dlouhé video, co ti řekne úplně všechno](https://www.youtube.com/watch?v=X1DxCPS1iwA).
Super [minutu a půl dlouhé video, co ti řekne úplně všechno](https://www.youtube.com/watch?v=X1DxCPS1iwA).
</dd></dl>
Integrální transformace, která identifikuje přímky v obraze. V rozšířené podobě hledá libovolné tvary zadané parametricky. [hough](#hough)
@ -711,11 +702,9 @@ Integrální transformace, která identifikuje přímky v obraze. V rozšířen
## Radonova transformace
<dl><dt><strong>💡 TIP</strong></dt><dd>
> [!TIP]
> Jako je již tradicí, mám pro vás [video](https://www.youtube.com/watch?v=f0sxjhGHRPo)...
Jako je již tradicí, mám pro vás [video](https://www.youtube.com/watch?v=f0sxjhGHRPo)...
</dd></dl>
Integrální transformace, která integruje funkci přes přímky. Tedy rozkládá funkci na hromádku parametrů, které definují přímky.

View File

@ -3,13 +3,11 @@ title: "Analýza rastrového obrazu"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Segmentace obrazu, algoritmy značení komponent, popis objektů, klasifikace objektů. Výpočet mapy vzdáleností. Základy matematické morfologie (dilatace a eroze, otevření a uzavření, hit-or-miss, top-hat, watershed).
> <br>
> _PB130/PV131_
Segmentace obrazu, algoritmy značení komponent, popis objektů, klasifikace objektů. Výpočet mapy vzdáleností. Základy matematické morfologie (dilatace a eroze, otevření a uzavření, hit-or-miss, top-hat, watershed).
_PB130/PV131_
</dd></dl>
- **Typické fáze analýzy obrazu**
1. Předzpracování
@ -57,8 +55,8 @@ Před samotnou segmentací je vhodné obraz předpřipravit.
Obraz je převeden na graf, kde každý pixel je vrchol a hrany jsou mezi sousedními pixely. Hrany jsou ohodnoceny podle podobnosti sousedních pixelů. Segmenty jsou pak komponenty souvislosti v grafu.
**❗ IMPORTANT**\
Segmentace je problém nalezení oblastí. CCL je jen jedno z možných řešení.
> [!IMPORTANT]
> Segmentace je problém nalezení oblastí. CCL je jen jedno z možných řešení.
### Neuronové sítě
@ -164,8 +162,8 @@ Popis objektů je proces, při kterém se počítají vlastnosti segmentovaných
- **Topologické vlastnosti**\
Vlastnosti objektu nezávislé na jeho deformaci. Např. počet děr.
**❗ IMPORTANT**\
Pro topologické vlastnosti viz otázka [3D modelování a datové struktury](../3d-modelovani-a-datove-struktury/).
> [!IMPORTANT]
> Pro topologické vlastnosti viz otázka [3D modelování a datové struktury](../3d-modelovani-a-datove-struktury/).
- **Ohraničující obdélník / bounding box**\
Nejmenší obdélník ohraničující objekt.
@ -213,8 +211,8 @@ Popis objektů je proces, při kterém se počítají vlastnosti segmentovaných
![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)
> [!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)
- **Prostorová orientace / spatial orientation**\
Směr a velikost delší strany nejmenšího bounding boxu. Lze ji také spočítat pomocí momentů setrvačnosti.
@ -231,8 +229,8 @@ Popis objektů je proces, při kterém se počítají vlastnosti segmentovaných
Problém zařazení objektů do jedné z předem daných tříd.
**❗ IMPORTANT**\
Detaily přístupů řešení klasifikace lze nalézt v otázce [Strojové učení](../strojove-uceni/).
> [!IMPORTANT]
> Detaily přístupů řešení klasifikace lze nalézt v otázce [Strojové učení](../strojove-uceni/).
- **Konstrukce formálního popisu / známý algoritmus**\
Pokud lze napsat formální popis tříd, lze klasifikátor realizovat přímo pomocí programu.

View File

@ -3,18 +3,16 @@ title: "Grafické principy ve vývoji her (2024)"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Příprava a vývoj scény (grayboxing, zástupné modely (placeholders)). Lokální a globální modely nasvícení. Vykreslování založené na fyzikálních modelech (PBR). Techniky optimalizace výkonu vykreslování (úrovně detailů, řešení viditelnosti objektů (culling), MIP mapy).
> <br>
> _PB009, PA010, PA213, PV255_
Příprava a vývoj scény (grayboxing, zástupné modely (placeholders)). Lokální a globální modely nasvícení. Vykreslování založené na fyzikálních modelech (PBR). Techniky optimalizace výkonu vykreslování (úrovně detailů, řešení viditelnosti objektů (culling), MIP mapy).
_PB009, PA010, PA213, PV255_
</dd></dl>
## 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)
> [!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)
- **Iterace**\
Práce v iteracích pomáhá:
@ -217,8 +215,8 @@ BRDF je řešena pomocí ray tracingu, radiosity, nebo nějakým hybridním ře
![width=300rem](./img/vph02_mipmaps.png)
**💡 TIP**\
Jak je patrné z obrázku výše, chytrým uložením je mipmapovaná textura jen o 33 % větší než původní textura. (Nová má velikost $\frac{4}{3}$ té staré.)
> [!TIP]
> Jak je patrné z obrázku výše, chytrým uložením je mipmapovaná textura jen o 33 % větší než původní textura. (Nová má velikost $\frac{4}{3}$ té staré.)
- **Shaderové / GPU optimalizace**\
Existuje řada nástrojů, které umožňují debugovat a optimalizovat GPU:

View File

@ -3,23 +3,21 @@ title: "Pokročilá počítačová grafika (2023)"
description: "TODO"
---
**⚠️ WARNING**\
Tato je stará verze otázky. Nová verze: [Grafické principy ve vývoji her](./VPH01_graficke_principy_ve_vyvoji_her.ad).
> [!WARNING]
> Tato je stará verze otázky. Nová verze: [Grafické principy ve vývoji her](./VPH01_graficke_principy_ve_vyvoji_her.ad).
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Techniky aproximace objektů. Renderování objemových dat (bodový mrak, techniky rekonstrukce povrchů, přímé renderování objemu). Lokální a globální modely nasvícení. Renderování založené na fyzikálních modelech (PBR). Techniky renderování stínů.
> <br>
> _PA010, PA213_
Techniky aproximace objektů. Renderování objemových dat (bodový mrak, techniky rekonstrukce povrchů, přímé renderování objemu). Lokální a globální modely nasvícení. Renderování založené na fyzikálních modelech (PBR). Techniky renderování stínů.
_PA010, PA213_
</dd></dl>
## Techniky aproximace objektů
3D objekty mohou být definované mnoha miliony polygony či výpočetně náročnými matematickými funkcemi. Pro renderování v reálném čase je tedy žádoucí je zjednodušit a přitom zachovat jejich vzhled -- aproximovat je.
**❗ IMPORTANT**\
Aproximace objektů souvisí s collidery, kterým se částečně věnuje otázka [Grafické a fyzikální principy](../graficke-a-fyzikalni-principy/).
> [!IMPORTANT]
> Aproximace objektů souvisí s collidery, kterým se částečně věnuje otázka [Grafické a fyzikální principy](../graficke-a-fyzikalni-principy/).
### Redukce počtu polygonů
@ -348,8 +346,8 @@ Stíny jsou důležité, jelikož:
![width=500rem](./img/vph01_shadow_maps.png)
**❗ IMPORTANT**\
Shadow mapám se důkladně věnuje otázka [Renderování s využitím GPU](../renderovani-s-vyuzitim-gpu/)
> [!IMPORTANT]
> Shadow mapám se důkladně věnuje otázka [Renderování s využitím GPU](../renderovani-s-vyuzitim-gpu/)
- **Shadow volumes**\
Počítá stíny ve 3D. Shadow volume explicitně popisuje objem prostoru ve stínu nějakého polygonu.

View File

@ -3,13 +3,11 @@ title: "Fyzikální principy ve vývoji her (2024)"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Typy fyzikálních simulací a jejich využití ve hrách (tuhá tělesa, deformovatelná tělesa, částice). Dynamika tuhých těles (síly, tření). Objekty pro detekci kolizí (“colliders”, typy, limity), kolizní vrstvy. Detekce kolizí (diskrétní a spojitá detekce, obvyklé problémy, využití v herních mechanikách).
> <br>
> _PV255_
Typy fyzikálních simulací a jejich využití ve hrách (tuhá tělesa, deformovatelná tělesa, částice). Dynamika tuhých těles (síly, tření). Objekty pro detekci kolizí (“colliders”, typy, limity), kolizní vrstvy. Detekce kolizí (diskrétní a spojitá detekce, obvyklé problémy, využití v herních mechanikách).
_PV255_
</dd></dl>
## Fyzikální simulace

View File

@ -3,21 +3,19 @@ title: "Grafické a fyzikální principy (2023)"
description: "TODO"
---
**⚠️ WARNING**\
Tato je stará verze otázky. Nová verze: [Fyzikální principy ve vývoji her](./VPH02_fyzikalni_principy_ve_vyvoji_her.ad).
> [!WARNING]
> Tato je stará verze otázky. Nová verze: [Fyzikální principy ve vývoji her](./VPH02_fyzikalni_principy_ve_vyvoji_her.ad).
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Příprava a vývoj scény, grayboxing, zástupné modely (placeholders). Optimalizace výkonu vykreslování (úrovně detailů, odstřelování objektů, MIP mapy). Využití shaderů pro efekty ve hrách. Sledování paprsků, objekty pro detekci kolizí, fyzika hadrové panenky.
> <br>
> _PA010, PA199, PA213, PV255_
Příprava a vývoj scény, grayboxing, zástupné modely (placeholders). Optimalizace výkonu vykreslování (úrovně detailů, odstřelování objektů, MIP mapy). Využití shaderů pro efekty ve hrách. Sledování paprsků, objekty pro detekci kolizí, fyzika hadrové panenky.
_PA010, PA199, PA213, PV255_
</dd></dl>
## 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)
> [!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)
- **Iterace**\
Práce v iteracích pomáhá:
@ -87,8 +85,8 @@ Poznámky o grayboxingu, iterování, modulárním workflow, atd. jsou z předn
![width=300rem](./img/vph02_mipmaps.png)
**💡 TIP**\
Jak je patrné z obrázku výše, chytrým uložením je mipmapovaná textura jen o 33 % větší než původní textura. (Nová má velikost $\frac{4}{3}$ té staré.)
> [!TIP]
> Jak je patrné z obrázku výše, chytrým uložením je mipmapovaná textura jen o 33 % větší než původní textura. (Nová má velikost $\frac{4}{3}$ té staré.)
- **Shaderové / GPU optimalizace**\
Existuje řada nástrojů, které umožňují debugovat a optimalizovat GPU:
@ -141,8 +139,8 @@ Poznámky o grayboxingu, iterování, modulárním workflow, atd. jsou z předn
![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)
> [!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)
## Ray tracing / sledování paprsků
@ -223,8 +221,8 @@ Ray tracing jsou techniky, které trasují paprsky světla napříč scénou.
## Fyzikální simulace
**❗ IMPORTANT**\
Renderování založenému na fyzikálních principech se věnuje část otázky [Pokročilá počítačová grafika](../pokrocila-pocitacova-grafika/).
> [!IMPORTANT]
> Renderování založenému na fyzikálních principech se věnuje část otázky [Pokročilá počítačová grafika](../pokrocila-pocitacova-grafika/).
- **Rigid body**\
Aproximace reálného fyzikálního tělesa. Předpokládá uniformní hostotu a **neřeší:**

View File

@ -138,13 +138,13 @@ Games are not experiences, they are artifacts people play with while / to create
Hry dovedou navodit řadu různých herních zážitků, které můžeme různými způsoby kategorizovat.
**❗ IMPORTANT**\
Herní zážitky souvisí s pojmem obtížnost, kterému se věnuje část otázky [Herní design II](../herni-design-ii/).
> [!IMPORTANT]
> Herní zážitky souvisí s pojmem obtížnost, kterému se věnuje část otázky [Herní design II](../herni-design-ii/).
==== LeBlancs Eight Kinds of Fun
**💡 TIP**\
Taky označované jako _Taxonomy of Game Pleasures_ a _herní "pošušňáníčka"_. [pa215-2019](#pa215-2019)
> [!TIP]
> Taky označované jako _Taxonomy of Game Pleasures_ a _herní "pošušňáníčka"_. [pa215-2019](#pa215-2019)
Game designer Marc LeBlanc rozdělil herní zážitky do osmi kategorií: [leblanc](#leblanc)[mda](#mda)
@ -197,8 +197,8 @@ Něco známeho, povědomého pro hráče.
== Prototypování her
Designér iterativně vytváří hrubé verze hry, které testuje a upravuje. Prototyp je osekaná verze hry, která obsahuje mechaniky, ale ne nutně grafiku. Prototyp lze využít k ověření herního designu - je hra zábavná?
**❗ IMPORTANT**\
Testováním se více zabývá otázka [Herní design II](../herni-design-ii/).
> [!IMPORTANT]
> Testováním se více zabývá otázka [Herní design II](../herni-design-ii/).
== Game Designer
@ -273,8 +273,8 @@ Zjednodušit a předat informace o tom co fungeje a co ne ostatním. Musí umět
== The Core Game Ontology
**📌 NOTE**\
Ontologie -- disciplína zabývající se bytím a základními pojmy jako je realita, existence, atp.
> [!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)

View File

@ -3,13 +3,11 @@ title: "Herní design II"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Jednotka herního designu, návrh designu hry, designový dokument hry. Teoretické koncepty herní analýzy - magický kruh (Huizinga), kybertext (Aarseth), plynutí (flow; Csikszentmihalyi). Symetrické a nesymetrické (kompetitivní) hry, dominantní strategie. Narativ, vyprávění, příběh, hraní (gameplay). Tutoriál (návod/naučení), onboarding (organické/neinvazivní naučení hry), foreshadowing (před-naznačování). Testování herního zážitku (cílové skupiny (focus), obecné testování hry (play)).
> <br>
> _PA215, PA216_
Jednotka herního designu, návrh designu hry, designový dokument hry. Teoretické koncepty herní analýzy - magický kruh (Huizinga), kybertext (Aarseth), plynutí (flow; Csikszentmihalyi). Symetrické a nesymetrické (kompetitivní) hry, dominantní strategie. Narativ, vyprávění, příběh, hraní (gameplay). Tutoriál (návod/naučení), onboarding (organické/neinvazivní naučení hry), foreshadowing (před-naznačování). Testování herního zážitku (cílové skupiny (focus), obecné testování hry (play)).
_PA215, PA216_
</dd></dl>
## Návrh hry
@ -73,8 +71,8 @@ Hry můžou mít různou obtížnost. Ta se dá mnohdy explicitně nastavit v me
#### Flow channel
**💡 TIP**\
Termín, se kterým přišel Mihaly Csikszentmihalyi _[me-high cheek-sent-me-high]_.
> [!TIP]
> Termín, se kterým přišel Mihaly Csikszentmihalyi _[me-high cheek-sent-me-high]_.
Balanc mezi nudou a přílišnou obtížností.
@ -87,8 +85,8 @@ Balanc mezi nudou a přílišnou obtížností.
## Teorie her
**⚠️ WARNING**\
Game design != Game theory
> [!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)
@ -207,8 +205,8 @@ V emergentním vyprávění je příběh důsledkem toho, že hra je dostatečn
- **Content generation**\
Některé hry umožňují hráčům vytvářet nebo přidávat vlastní obsah. Toto velice často podporuje emergentní vyprávění. Možnost měnit věci, zvyšuje entropii / kreativní chaos a podporuje tak fandom, prosumerismus.
**📌 NOTE**\
Prosumer = producer + consumer
> [!NOTE]
> Prosumer = producer + consumer
## Tutoriál a onboarding
@ -234,19 +232,17 @@ Jak tutoriál tak onboarding učí hráče, jak hru hrát. Onboarding je širš
- Kognitivní (např. paměť, pozornost)
- Senzorické (např. zrak, sluch, hmat)
<dl><dt><strong>⚠️ WARNING</strong></dt><dd>
> [!WARNING]
> Pozor na kognitivní overload!
Pozor na kognitivní overload!
</dd></dl>
<dl><dt><strong>💡 TIP</strong></dt><dd>
Doporučuje se učit hráče **maximálně** tři věci najednou. Může to být třeba:
1. Jak aktivovat nějakou schopnost.
2. Jak ji použít jako reakci na nepřítele.
3. A jak navíc uhýbat před projektily, zatímco ji používám.
</dd></dl>
> [!TIP]
> Doporučuje se učit hráče **maximálně** tři věci najednou. Může to být třeba:
> <br>
> 1. Jak aktivovat nějakou schopnost.
> 2. Jak ji použít jako reakci na nepřítele.
> 3. A jak navíc uhýbat před projektily, zatímco ji používám.
- **Tutoriál**\
Typicky jeden nebo více levelů, kdy jsou hráči dány informace, jak hru hrát. Tyto levely jsou často vytrženy ze zbytku hry a nejsou součástí vyprávění a herního světa.

View File

@ -3,13 +3,11 @@ title: "Vývoj her"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Architektura herního engine (jednotlivé moduly a jejich význam). Herní rozhraní (fyzická, virtuální, typy vstupních a výstupních zařízení, mapování). Audio ve hrách (propagace zvuku ve scéně, digitální zvuk, PCM, latence, mixování zvuků). Síťová vrstva (přenosová rychlost, latence, obousměrné zpoždění, jitter a ztráta dat), metody redukce latence, TCP vs. UDP.
> <br>
> _PV255_
Architektura herního engine (jednotlivé moduly a jejich význam). Herní rozhraní (fyzická, virtuální, typy vstupních a výstupních zařízení, mapování). Audio ve hrách (propagace zvuku ve scéně, digitální zvuk, PCM, latence, mixování zvuků). Síťová vrstva (přenosová rychlost, latence, obousměrné zpoždění, jitter a ztráta dat), metody redukce latence, TCP vs. UDP.
_PV255_
</dd></dl>
## Architektura herního enginu
@ -59,8 +57,8 @@ _Fyzická rozhraní_ jsou všechny možné ovladače, klávesnice, myš, joystic
- **Analogová**\
Posílají spojité signály. Typickým příkladem je analogový joystick, ale taky např. tlačítka na gamepadu, která mohou mít různou intenzitu stisku. Patří sem, ale taky motion sensory jako kinect, gyroskop, akcelerometr, atd.
**📌 NOTE**\
Mechanické klávesnice, které mnohdy taky posílají spojité signály, zdá se nikdo zatím moc nepoužil.
> [!NOTE]
> Mechanické klávesnice, které mnohdy taky posílají spojité signály, zdá se nikdo zatím moc nepoužil.
### Virtuální rozhraní
@ -91,8 +89,8 @@ Na _virtuální rozhraní_ si hráč nesáhne. Jsou to všemožná menu, invent
![width=400](./img/vph05_meta_interface.jpg)
**💡 TIP**\
[Meta](https://about.meta.com) rozhraní != Oculus Quest
> [!TIP]
> [Meta](https://about.meta.com) rozhraní != Oculus Quest
- **Spatial (prostorová) rozhraní**\
Nejsou "bežnou" součástí herního světa, ale nejsou ani mimo něj.
@ -330,8 +328,8 @@ Monetizace je proces extrakce finančních prostředků z videoherního, interak
Hry se do tohoto modelu většinou spadnou až po dostatečně dlouhé době (abandonware).
**💡 TIP**\
Víš, že sem spadá třeba [Quake](https://github.com/id-Software/Quake), [DOOM](https://github.com/id-Software/DOOM) nebo [Wolfenstein 3D](https://github.com/id-Software/wolf3d)?
> [!TIP]
> Víš, že sem spadá třeba [Quake](https://github.com/id-Software/Quake), [DOOM](https://github.com/id-Software/DOOM) nebo [Wolfenstein 3D](https://github.com/id-Software/wolf3d)?
- **Games as a service (GaaS)**\
Různé taktiky, jak hru monetizovat i po té, co si ji hráč koupil, aby za ni platil kontinuálně. Mezi tyto taktiky patří např. subscripce, mikrotransakce, reklamy, atd.
@ -373,8 +371,8 @@ Serious games se dají dělit podle jejich cíle:
Třeba simulace letu, řízení nějakého průmyslového procesu, nebo lékařského postupu.
**📌 NOTE**\
Chce se mi zmínit [Surgeon Simulator](https://store.steampowered.com/app/233720/surgeon_simulator/), ale to nejspíš není nejlepší příklad.
> [!NOTE]
> Chce se mi zmínit [Surgeon Simulator](https://store.steampowered.com/app/233720/surgeon_simulator/), ale to nejspíš není nejlepší příklad.
- **Zvýšení povědomí a změna chování**\
Například aplikace o globálním oteplování, třídění odpadu, nebo o zdravém životním stylu.

View File

@ -3,13 +3,11 @@ title: "Umělá inteligence v počítačových hrách"
description: "TODO"
---
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Pohyb, kinematický a dynamický pohyb. Hledání cest, algoritmy prohledávání grafu, A\* s jeho datovými strukturami a heuristikami, reprezentace herního světa, hierarchické hledání cest. Rozhodování, rozhodovací stromy, stavové automaty, stromy chování, cílem orientované chování. Taktická a strategická umělá inteligence, navigační body a taktika, taktická analýza. Deskové hry, minimax algoritmy, Monte Carlo prohledávání.
> <br>
> _PA217_
Pohyb, kinematický a dynamický pohyb. Hledání cest, algoritmy prohledávání grafu, A\* s jeho datovými strukturami a heuristikami, reprezentace herního světa, hierarchické hledání cest. Rozhodování, rozhodovací stromy, stavové automaty, stromy chování, cílem orientované chování. Taktická a strategická umělá inteligence, navigační body a taktika, taktická analýza. Deskové hry, minimax algoritmy, Monte Carlo prohledávání.
_PA217_
</dd></dl>
## Pohyb
@ -314,8 +312,8 @@ Agenti nevidí herní svět stejně jako hráči, vidí ho spíš jako graf s uz
Nejprve hledá cestu na vysoké úrovni (mezi clustery), pak v rámci clusteru.
**❗ IMPORTANT**\
Výhodou je, že zrychluje hledání cest.
> [!IMPORTANT]
> Výhodou je, že zrychluje hledání cest.
Nevýhodou je, že vzdálenost mezi clustery se blbě měří, protože hráč do něj mohl vstoupit z různých míst. V praxi se používá třeba:

View File

@ -3,16 +3,14 @@ title: "Renderování s využitím GPU (2023)"
description: "TODO"
---
**⚠️ WARNING**\
Tato otázka zatím nebyla aktualizována. Nová varze obsahuje pár termínů navíc!
> [!WARNING]
> Tato otázka zatím nebyla aktualizována. Nová varze obsahuje pár termínů navíc!
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Principy OpenGL, souřadnicové systémy (prostor světa, prostor kamery, prostor objektů), typy shaderů a jejich použití (vertex, fragment, compute, teselační). Technika stínových map. Principy odloženého stínování a jejich použití. Efekty prostoru obrazu (anti-alias, ambientní okluze).
> <br>
> _PV227_
Principy OpenGL, souřadnicové systémy (prostor světa, prostor kamery, prostor objektů), typy shaderů a jejich použití (vertex, fragment, compute, teselační). Technika stínových map. Principy odloženého stínování a jejich použití. Efekty prostoru obrazu (anti-alias, ambientní okluze).
_PV227_
</dd></dl>
- **OpenGL**\
API pro (nejen) vykreslování grafiky na GPU.
@ -39,8 +37,8 @@ _PV227_
## Souřadnicové systémy
**❗ IMPORTANT**\
Tahle část otázky má značný překryv s otázkou [Modelování a projekce](../modelovani-a-projekce/).
> [!IMPORTANT]
> Tahle část otázky má značný překryv s otázkou [Modelování a projekce](../modelovani-a-projekce/).
**Coordinate Systems [coordinate-systems](#coordinate-systems)**
@ -82,8 +80,8 @@ Tahle část otázky má značný překryv s otázkou [Modelování a projekce](
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)
> [!WARNING]
> Počátek (origin) viewport space je **vlevo dole** a má ve výchozím nastavení má souřadnice $(0, 0)$. [viewport](#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í:
@ -167,8 +165,8 @@ Při zvolání `glDraw*` se používá OpenGL pipeline, která se skládá z ně
- stencil test -- zahodí fragmenty, které neprojdou testem na stencil buffer -- umožňuje např. implementovat Portal effect,
- test hloubky -- zahodí fragmenty, které jsou zakryty jinými fragmenty,
**💡 TIP**\
Tenhle test se nemusí nutně stát až po FS. OpenGL se dá nastavit tak, aby provedlo _early depth test_ před spuštěním FS.
> [!TIP]
> Tenhle test se nemusí nutně stát až po FS. OpenGL se dá nastavit tak, aby provedlo _early depth test_ před spuštěním FS.
- color blending a bitwise operace.
@ -179,8 +177,8 @@ Při zvolání `glDraw*` se používá OpenGL pipeline, která se skládá z ně
## Shadow mapy
**❗ IMPORTANT**\
Renderování stínů se věnuje také otázka [Pokročilá počítačová grafika](../pokrocila-pocitacova-grafika/).
> [!IMPORTANT]
> Renderování stínů se věnuje také otázka [Pokročilá počítačová grafika](../pokrocila-pocitacova-grafika/).
1. Vytvoř shadow mapu -- vyrenderuj scénu z pohledu světla a ulož hloubku do Z-bufferu.
2. Stínování -- vyrenderuj scénu jako obvykle, ale aplikuj shadow mapu
@ -241,25 +239,23 @@ Tuto techniku použijeme např. když máme ve scéně fakt hodně světel.
![vph07_deferred_shading](./img/vph07_deferred_shading.png)
<dl><dt><strong>❗ IMPORTANT</strong></dt><dd>
> [!IMPORTANT]
> Výhody:
> <br>
> - osvětlení je počítáno jen jednou pro každý pixel,
> - můžeme mít více světel,
> - vyhodnocujeme méně různých kombinací materiálů a světel,
> - hodí se i na další post-process efekty.
Výhody:
- osvětlení je počítáno jen jednou pro každý pixel,
- můžeme mít více světel,
- vyhodnocujeme méně různých kombinací materiálů a světel,
- hodí se i na další post-process efekty.
</dd></dl>
> [!WARNING]
> Nevýhody:
> <br>
> - vzdáváme se multisamplingu (resp. musíme nejprve použít edge detection, aby multisampling fungoval správně),
> - ztěžuje implementaci průhledných materiálů,
> - vyžaduje více paměti,
> - materiály nesmí být příliš komplikované kvůli omezeným možnostem paměti.
<dl><dt><strong>⚠️ WARNING</strong></dt><dd>
Nevýhody:
- vzdáváme se multisamplingu (resp. musíme nejprve použít edge detection, aby multisampling fungoval správně),
- ztěžuje implementaci průhledných materiálů,
- vyžaduje více paměti,
- materiály nesmí být příliš komplikované kvůli omezeným možnostem paměti.
</dd></dl>
## Screen space effects / efekty prostoru obrazu

View File

@ -3,16 +3,14 @@ title: "Modelování 3D postav (2023)"
description: "TODO"
---
**⚠️ WARNING**\
Tato otázka zatím nebyla aktualizována. Nová varze obsahuje pár věcí navíc!
> [!WARNING]
> Tato otázka zatím nebyla aktualizována. Nová varze obsahuje pár věcí navíc!
<dl><dt><strong>📌 NOTE</strong></dt><dd>
> [!NOTE]
> Avatar, postava, model. Modelování mnohoúhelníkových sítí (high-poly, low-poly), topologie a modifikace těchto sítí, tvorba textur (maps baking). Kostra modelu a potažení kostry (rigging, skinning).
> <br>
> _VV035, VV036_
Avatar, postava, model. Modelování mnohoúhelníkových sítí (high-poly, low-poly), topologie a modifikace těchto sítí, tvorba textur (maps baking). Kostra modelu a potažení kostry (rigging, skinning).
_VV035, VV036_
</dd></dl>
- **Model**\
Model je komplikované slovo s mnoha významy:
@ -81,14 +79,14 @@ _VV035, VV036_
## Topologie a modifikace
**💡 TIP**\
Pro základní topologické pojmy viz [3D modelování a datové struktury](../3d-modelovani-a-datove-struktury/).
> [!TIP]
> Pro základní topologické pojmy viz [3D modelování a datové struktury](../3d-modelovani-a-datove-struktury/).
- **Meshflow**\
Logické uspořádání hran a polygonů v mnohoúhelníkové síti.
**📌 NOTE**\
Nepovedlo se mi tenhle termín najít jinde než ve slidech pro VV035/VV036. Zdá se mi, že je to v zásadě synononymum pro _topologii_.
> [!NOTE]
> Nepovedlo se mi tenhle termín najít jinde než ve slidech pro VV035/VV036. Zdá se mi, že je to v zásadě synononymum pro _topologii_.
- **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.
@ -112,8 +110,8 @@ Pro základní topologické pojmy viz [3D modelování a datové struktury](../3
Typický 3D model se skládá nejen z meshe, ale i z materiálů, které jsou v herních enginech typicky reprezentovány texturami (mapami).
**📌 NOTE**\
Typy map souvisí s _physically based rendering_ (PBR), kterému se částečně věnuje otázka [Pokročilá počítačová grafika](../pokrocila-pocitacova-grafika/).
> [!NOTE]
> Typy map souvisí s _physically based rendering_ (PBR), kterému se částečně věnuje otázka [Pokročilá počítačová grafika](../pokrocila-pocitacova-grafika/).
- **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.

View File

@ -16,8 +16,8 @@ Poznámky k magisterským státnicím oboru _Vývoj počítačových her_ v čer
- [Podzim 2021](https://is.muni.cz/auth/el/fi/podzim2021/PA215/index.qwarp)
- [Podzim 2019](https://is.muni.cz/auth/el/fi/podzim2019/PA215/um/)
**💡 TIP**\
Odpovědi na některé podotázky jsou jen ve starších materiálech.
> [!TIP]
> Odpovědi na některé podotázky jsou jen ve starších materiálech.
- **PA216 Game Design II**
- [Jaro 2023](https://is.muni.cz/auth/el/fi/jaro2023/PA216/index.qwarp)

View File

@ -13,6 +13,9 @@
--sl-color-gray-5: #353841;
--sl-color-gray-6: #24272f;
--sl-color-black: #17181c;
/* A bit wider content */
--sl-content-width: 50rem;
}
/* Light mode colors. */

74
transform-callouts.py Normal file
View File

@ -0,0 +1,74 @@
import os
TARGET_DIR = "src/content/docs/szmgr"
def leading_space(text: str) -> str:
"""Returns only the leading space of a line"""
return " " * (len(text) - len(text.lstrip()))
files = [f for f in os.listdir(TARGET_DIR) if f.endswith(".md")]
for f in files:
print(f"\t- {f}")
lines = []
with open(os.path.join(TARGET_DIR, f), "r") as file:
lines = file.readlines()
dl_mode_active = False
dl_indent = ""
for i in range(len(lines) - 1):
l = lines[i]
l2 = lines[i+1]
indent = leading_space(l)
if "**⚠️ WARNING**\\" in l:
lines[i] = indent + "> [!WARNING]\n"
lines[i+1] = indent + "> " + l2.lstrip()
elif "**💡 TIP**\\" in l:
lines[i] = indent + "> [!TIP]\n"
lines[i+1] = indent + "> " + l2.lstrip()
elif "**📌 NOTE**\\" in l:
lines[i] = indent + "> [!NOTE]\n"
lines[i+1] = indent + "> " + l2.lstrip()
elif "**❗ IMPORTANT**\\" in l:
lines[i] = indent + "> [!IMPORTANT]\n"
lines[i+1] = indent + "> " + l2.lstrip()
if "<dl>" in l:
dl_mode_active = True
dl_indent = leading_space(l)
if "IMPORTANT" in l:
lines[i] = dl_indent + "> [!IMPORTANT]\n"
elif "WARNING" in l:
lines[i] = dl_indent + "> [!WARNING]\n"
elif "NOTE" in l:
lines[i] = dl_indent + "> [!NOTE]\n"
elif "TIP" in l:
lines[i] = dl_indent + "> [!TIP]\n"
else:
print("UNRECOGNIZED LINE")
print(l)
continue
if dl_mode_active:
if "</dl>" in l:
lines[i] = dl_indent + "\n"
dl_mode_active = False
# Potential cleanup, don't leave <br> hanging
if "> <br>" in lines[i - 1]:
lines[i - 1] = "" # Delete
else:
if l.lstrip():
lines[i] = dl_indent + "> " + l.lstrip()
else:
if "> [!" in lines[i - 1]:
# if previous line is the callout header, don't put a <br> here
lines[i] = ""
else:
lines[i] = dl_indent + "> <br>\n"
with open(os.path.join(TARGET_DIR, f), "w") as file:
file.writelines(lines)