Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
statnice:bakalar:be4b39vgo [2025/05/27 15:20] – zapleka3 | statnice:bakalar:be4b39vgo [2025/06/05 18:36] (current) – zapleka3 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== Vnímání barev a barevné modely. Rastrová grafika, základní rastrové formáty souborů. Vektorová grafika, reprezentace 2D a 3D objektů, základní formáty souborů pro 2D a 3D data. Principy 3D modelování a mapování textur. ==== | + | ====== Vnímání barev a barevné modely. Rastrová grafika, základní rastrové formáty souborů. Vektorová grafika, reprezentace 2D a 3D objektů, základní formáty souborů pro 2D a 3D data. Principy 3D modelování a mapování textur. |
[[https:// | [[https:// | ||
Line 10: | Line 10: | ||
* **Principy mapování textur** – zobrazení textury na 3D objektu s použitím UV mapování. Různé způsoby vytvoření UV mapování a k čemu jsou vhodné. | * **Principy mapování textur** – zobrazení textury na 3D objektu s použitím UV mapování. Různé způsoby vytvoření UV mapování a k čemu jsou vhodné. | ||
- | ==== 1. Vnímání barev ==== | + | ===== 1. Vnímání barev ===== |
Lidské oko vnímá světlo jako elektromagnetické vlnění v rozsahu přibližně **380 až 720 nm**. Každá vlnová délka odpovídá určité vnímané barvě – např. modrá (krátké vlny), zelená (střední), | Lidské oko vnímá světlo jako elektromagnetické vlnění v rozsahu přibližně **380 až 720 nm**. Každá vlnová délka odpovídá určité vnímané barvě – např. modrá (krátké vlny), zelená (střední), | ||
- | === 1. Tvorba barevného vjemu v lidském oku === | + | ==== 1. Tvorba barevného vjemu v lidském oku ==== |
- | == Struktura oka a sítnice == | + | === Struktura oka a sítnice |
* **Sítnice (retina)** pokrývá ~2/3 vnitřního povrchu oka a obsahuje dva typy fotoreceptorů: | * **Sítnice (retina)** pokrývá ~2/3 vnitřního povrchu oka a obsahuje dva typy fotoreceptorů: | ||
Line 30: | Line 30: | ||
* Každá vnímaná barva je výsledkem kombinace signálů ze tří typů čípků ⇒ barevný vjem lze popsat jako **3D vektor** (např. RGB). | * Každá vnímaná barva je výsledkem kombinace signálů ze tří typů čípků ⇒ barevný vjem lze popsat jako **3D vektor** (např. RGB). | ||
- | == Světlo a barva == | + | === Světlo a barva === |
* **Monochromatické světlo** – má jednu konkrétní vlnovou délku (např. laser). | * **Monochromatické světlo** – má jednu konkrétní vlnovou délku (např. laser). | ||
Line 37: | Line 37: | ||
* Oko je nejcitlivější na **zelené** světlo, pak **červené**, | * Oko je nejcitlivější na **zelené** světlo, pak **červené**, | ||
- | == Metamerismus == | + | === Metamerismus |
* **Metamery** – dvě různá spektra světla, která vyvolají **stejný barevný vjem**, protože produkují stejnou odpověď čípků. | * **Metamery** – dvě různá spektra světla, která vyvolají **stejný barevný vjem**, protože produkují stejnou odpověď čípků. | ||
* To je důvod, proč je možné barvy reprezentovat v trojrozměrném barevném prostoru (např. RGB), i když spektrum světla je spojité. | * To je důvod, proč je možné barvy reprezentovat v trojrozměrném barevném prostoru (např. RGB), i když spektrum světla je spojité. | ||
- | === 2. Kolorimetrický experiment === | + | ==== 2. Kolorimetrický experiment |
* Provádí se s: | * Provádí se s: | ||
Line 50: | Line 50: | ||
* Ne každá barva je dosažitelná kombinací RGB – některé vyžadují **záporné intenzity**, | * Ne každá barva je dosažitelná kombinací RGB – některé vyžadují **záporné intenzity**, | ||
- | === 3. Barevné prostory podle CIE === | + | ==== 3. Barevné prostory podle CIE ==== |
- | == CIE RGB == | + | === CIE RGB === |
* Vznikl z kolorimetrického experimentu. | * Vznikl z kolorimetrického experimentu. | ||
Line 59: | Line 59: | ||
* {{: | * {{: | ||
- | == CIE XYZ == | + | === CIE XYZ === |
- | * Transformace z CIE RGB za účelem odstranění | + | * Převádí prostor |
* **Vlastnosti: | * **Vlastnosti: | ||
* Všechny srovnávací funkce jsou **kladné**. | * Všechny srovnávací funkce jsou **kladné**. | ||
Line 68: | Line 68: | ||
* {{: | * {{: | ||
- | == CIE xyY == | + | === CIE xyY === |
- | * Normalizovaná verze XYZ – pro eliminaci vlivu jasu. | + | * Normalizovaná verze XYZ, která umožňuje snadnější porovnání barev bez ohledu na jejich jasovou složku. |
* Definováno takto: | * Definováno takto: | ||
\[ | \[ | ||
Line 79: | Line 79: | ||
x + y + z = 1 | x + y + z = 1 | ||
\] | \] | ||
- | * Pro daný jas \( Y \) lze z \( x \) a \( y \) zrekonstruovat celou barvu. | + | * Z hodnot |
- | * Umožňuje znázornění barev v 2D diagramu – **chromatickém | + | * Barvy lze znázornit ve 2D pomocí |
- | === 4. Chromatický diagram (CIE 1931) === | + | ==== 4. Chromatický diagram (CIE 1931) ==== |
* Zobrazuje všechny barvy, které může lidské oko vnímat. | * Zobrazuje všechny barvy, které může lidské oko vnímat. | ||
Line 168: | Line 168: | ||
* **Neuniformní** – přizpůsobené lidskému vnímání (např. s větším důrazem na zelené odstíny) | * **Neuniformní** – přizpůsobené lidskému vnímání (např. s větším důrazem na zelené odstíny) | ||
- | ==== 3. Rastrová grafika ==== | + | ===== 3. Rastrová grafika |
Rastrová grafika reprezentuje obraz jako **mřížku pixelů**, kde každý pixel nese informaci o barvě. Vzniká digitalizací spojité obrazové funkce pomocí **vzorkování a kvantizace**. | Rastrová grafika reprezentuje obraz jako **mřížku pixelů**, kde každý pixel nese informaci o barvě. Vzniká digitalizací spojité obrazové funkce pomocí **vzorkování a kvantizace**. | ||
Line 174: | Line 174: | ||
{{: | {{: | ||
- | === 1. Digitalizace obrazu === | + | ==== 1. Digitalizace obrazu |
== Obraz jako signál == | == Obraz jako signál == | ||
Line 183: | Line 183: | ||
* **Kvantizace** – převod hodnot do omezené množiny (diskretizace oboru hodnot). | * **Kvantizace** – převod hodnot do omezené množiny (diskretizace oboru hodnot). | ||
- | == PPI a DPI == | + | === PPI a DPI === |
* **PPI (pixels per inch)** – udává hustotu pixelů pro zobrazovací zařízení (vliv na velikost obrazu). | * **PPI (pixels per inch)** – udává hustotu pixelů pro zobrazovací zařízení (vliv na velikost obrazu). | ||
* **DPI (dots per inch)** – počet tiskových bodů na palec (vliv na kvalitu tisku). | * **DPI (dots per inch)** – počet tiskových bodů na palec (vliv na kvalitu tisku). | ||
- | === 2. Vzorkování, | + | ==== 2. Vzorkování, |
- | == Vzorkování == | + | === Vzorkování |
* Vzorkování s frekvencí \( f_s \) musí být **alespoň 2× vyšší** než maximální frekvence signálu – tzv. **Shannonův teorém**. | * Vzorkování s frekvencí \( f_s \) musí být **alespoň 2× vyšší** než maximální frekvence signálu – tzv. **Shannonův teorém**. | ||
* Nedostatečné vzorkování ⇒ **aliasing** – falešné vzory, zubaté hrany, moaré efekt. | * Nedostatečné vzorkování ⇒ **aliasing** – falešné vzory, zubaté hrany, moaré efekt. | ||
- | == Antialiasing == | + | === Antialiasing |
* {{: | * {{: | ||
Line 203: | Line 203: | ||
* {{: | * {{: | ||
- | === 3. Kvantizace, polotónování a dithering === | + | ==== 3. Kvantizace, polotónování a dithering |
- | == Kvantizace barev == | + | === Kvantizace barev === |
* Rozdělení barevného prostoru na **diskrétní intervaly**. | * Rozdělení barevného prostoru na **diskrétní intervaly**. | ||
Line 213: | Line 213: | ||
* {{: | * {{: | ||
- | == Polotónování == | + | === Polotónování |
* Nahrazení pixelu **mřížkou bodů** různé hustoty tak, aby se z dálky jevily jako jiná barva. | * Nahrazení pixelu **mřížkou bodů** různé hustoty tak, aby se z dálky jevily jako jiná barva. | ||
Line 219: | Line 219: | ||
* {{: | * {{: | ||
- | == Dithering == | + | === Dithering |
* Simuluje více odstínů pomocí **rozložení chyb** kvantizace na okolní pixely. | * Simuluje více odstínů pomocí **rozložení chyb** kvantizace na okolní pixely. | ||
Line 228: | Line 228: | ||
* **Floyd–Steinberg** – distribuce chyby na okolní pixely. | * **Floyd–Steinberg** – distribuce chyby na okolní pixely. | ||
- | === 4. Reprezentace barev === | + | ==== 4. Reprezentace barev ==== |
- | == Přímá reprezentace (Direct color) == | + | === Přímá reprezentace (Direct color) |
* Každý pixel obsahuje své RGB (příp. RGBA) hodnoty. | * Každý pixel obsahuje své RGB (příp. RGBA) hodnoty. | ||
Line 237: | Line 237: | ||
* 32bit RGBA – přidán kanál průhlednosti (alpha) | * 32bit RGBA – přidán kanál průhlednosti (alpha) | ||
- | == Indexovaná reprezentace == | + | === Indexovaná reprezentace |
{{: | {{: | ||
Line 248: | Line 248: | ||
* {{: | * {{: | ||
- | === 5. Transformace rastrového obrazu === | + | ==== 5. Transformace rastrového obrazu |
- | == Problém transformací == | + | === Problém transformací |
* Při transformacích (např. **rotace, změna velikosti, zkosení**) dochází ke změně souřadnic pixelů, které **nemusí odpovídat celým číslům**. | * Při transformacích (např. **rotace, změna velikosti, zkosení**) dochází ke změně souřadnic pixelů, které **nemusí odpovídat celým číslům**. | ||
Line 257: | Line 257: | ||
* **Překryvy** – více původních pixelů se promítne do stejné cílové pozice. | * **Překryvy** – více původních pixelů se promítne do stejné cílové pozice. | ||
- | == Metody transformace == | + | === Metody transformace |
* **Forward mapping** – každý pixel původního obrázku je promítnut do nových souřadnic pomocí transformační matice. | * **Forward mapping** – každý pixel původního obrázku je promítnut do nových souřadnic pomocí transformační matice. | ||
Line 266: | Line 266: | ||
* {{: | * {{: | ||
- | == Interpolace při transformaci == | + | === Interpolace při transformaci |
* **Nearest neighbor** – použije nejbližší pixel, rychlé, ale hrubé. | * **Nearest neighbor** – použije nejbližší pixel, rychlé, ale hrubé. | ||
Line 273: | Line 273: | ||
* **Kubická interpolace** – plynulejší přechody, využívá více sousedů. | * **Kubická interpolace** – plynulejší přechody, využívá více sousedů. | ||
- | === 6. Komprese rastrových obrázků === | + | ==== 6. Komprese rastrových obrázků |
- | == Typy komprese == | + | === Typy komprese |
- | * **Bezeztrátová (lossless)** – původní obraz lze plně rekonstruovat. | + | * **Bezeztrátová (lossless)** – zachována všechna |
- | * **Ztrátová (lossy)** – část dat je nenávratně ztracena (využívá limitace lidského | + | * **Ztrátová (lossy)** – část dat se ztrácí, |
- | == Bezeztrátové metody == | + | === Bezeztrátové metody |
- | * **RLE (Run-Length Encoding)** – opakující se hodnoty | + | * **RLE (Run-Length Encoding)** – opakující se hodnoty zapsány jako počet + hodnota. Vhodné pro jednoduché obrázky s opakujícími se barvami. |
- | * **Huffmanovo kódování** – podle četnosti | + | * **Huffmanovo kódování** – podle četnosti |
- | * **LZW (Lempel-Ziv-Welch)** – dynamická slovníková komprese, | + | * **LZW (Lempel-Ziv-Welch)** – dynamické slovníkové kódování; |
- | == Ztrátová metoda – JPEG == | + | === Ztrátová metoda – JPEG === |
- | * Vhodná | + | * Optimalizovaná |
- | | + | |
- | | + | == Postup |
- | * **DCT (diskrétní | + | |
- | * Kvantizace hodnot | + | |
- | * Linearizace | + | * Jasová složka (Y) se oddělí od barevných složek (Cb, Cr), protože **oko je citlivější |
+ | - **Downsampling | ||
+ | * Barevné | ||
+ | - **Rozdělení obrazu na bloky 8×8 pixelů** | ||
+ | * Obraz je segmentován na malé čtverce, což umožňuje | ||
+ | - **Diskrétní | ||
+ | * Každý | ||
+ | - **Kvantizace DCT koeficientů** | ||
+ | * Koeficienty se zaokrouhlují podle kvantizační matice – tím se **odstraní jemné detaily**, které nejsou výrazné pro lidské oko. | ||
+ | - **Entropické kódování** | ||
+ | * Zbylá data se **lineárně uspořádají** a dále komprimují kombinací **RLE a Huffmanova kódování**, | ||
+ | |||
+ | |||
+ | ==== 7. Formáty rastrových obrázků ==== | ||
+ | === GIF (Graphics Interchange Format) === | ||
+ | |||
+ | * **Indexované barvy** – max. 256 barev v paletě (8bitová hloubka). | ||
+ | * Barvy mohou být 24bitové (RGB), průhlednost pouze **zcela průhledná / zcela neprůhledná**. | ||
+ | * Komprese: **bezeztrátová LZW**. | ||
+ | * Podporuje: | ||
+ | * **Jednoduché animace** | ||
+ | * **Interlacing** (postupné vykreslování) | ||
+ | * Vhodné pro loga, diagramy, skici – nevhodné pro fotografie. | ||
+ | |||
+ | === PNG (Portable Network Graphics) === | ||
+ | |||
+ | * Podporuje: | ||
+ | * **Indexované** i **přímé RGB/RGBA** barvy. | ||
+ | * **Průhlednost** i **poloprůhlednost (alfa kanál)**. | ||
+ | * **Stupně šedi**. | ||
+ | * Komprese: **bezeztrátová (dvoustupňová: | ||
+ | * Vhodné pro loga, technické výkresy, skici i obrázky s průhledností. | ||
+ | * Nevýhoda: větší soubory než JPEG u fotek. | ||
+ | |||
+ | === JPEG (Joint Photographic Experts Group) === | ||
+ | |||
+ | * Používá **ztrátovou kompresi** (viz výše). | ||
+ | * Barvy: přímé **24bitové RGB** (bez alfa kanálu). | ||
+ | * Nepodporuje průhlednost. | ||
+ | * Vhodné pro fotografie – **nevhodné** pro obrázky s ostrými hranami (loga, texty), průhledností nebo nízkým počtem barev. | ||
+ | |||
+ | ===== 4. Vektorová grafika a reprezentace 2D objektů ===== | ||
+ | |||
+ | Vektorová grafika popisuje obraz pomocí **geometrických útvarů** (např. úsečky, křivky, elipsy), nikoliv maticí | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Používá se v nástrojích jako **Adobe Illustrator, | ||
+ | |||
+ | ==== 1. Reprezentace 2D objektů ==== | ||
+ | |||
+ | * Objekty jsou tvořeny segmenty křivek (např. šipky ve Wordu) a definovány **kontrolními body**. | ||
+ | * Každý objekt má svou **modelovou transformační matici**, kterou lze kombinovat s dalšími. | ||
+ | * Objekty lze seskupovat do **scénických grafů** – skupiny mají vlastní transformace, | ||
+ | * Kromě tvaru lze u objektů nastavit: | ||
+ | * **Výplň** (fill) – např. barva, gradienty; pravidla výplně: **Non-zero** a **Even-odd**. | ||
+ | * **Styl hran (stroke)** – tloušťka, barva, typ čáry (plná, čárkovaná…). | ||
+ | |||
+ | ==== 2. Parametrické polynomiální křivky ==== | ||
+ | |||
+ | Parametrické křivky popisují 2D (či 3D) tvar pomocí **funkce bodu \( P(t) \)** závislé na parametru \( t \in [0,1] \). Jsou základním nástrojem pro přesnou definici tvaru, animace a transformace. | ||
+ | |||
+ | Rozlišujeme dva typy: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | * **Interpolační** – křivka prochází všemi kontrolními body (např. Lagrangeova interpolace). | ||
+ | * **Aproximační** – křivka kontrolní body jen " | ||
+ | |||
+ | === Spojitost segmentů u křivek === | ||
+ | |||
+ | Spojitost (continuity) určuje, jak hladce na sebe navazují segmenty **složených (piecewise) křivek**. Každý segment je sám o sobě plynulý, ale **přechody mezi nimi** mohou být ostré nebo hladké podle typu spojitosti. | ||
+ | |||
+ | **Parametrická spojitost (Cⁿ)** – zajišťuje hladkost na základě derivací: | ||
+ | |||
+ | * **C₀ spojitost (pozice)** | ||
+ | * Segmenty se dotýkají – koncový bod jednoho je totožný se začátkem druhého. | ||
+ | * Křivka může mít ostrý zlom. | ||
+ | * **C₁ spojitost (rychlost)** | ||
+ | * První derivace (tečna) je plynulá – segmenty mají stejný směr a velikost tečny v místě spojení. | ||
+ | * Zaručuje vizuálně hladké napojení. | ||
+ | * **C₂ spojitost (zrychlení)** | ||
+ | * I druhá derivace je spojitá – zakřivení se mění plynule. | ||
+ | * Křivka je ještě plynulejší, | ||
+ | |||
+ | **Geometrická spojitost (Gⁿ)** – zachovává pouze **vizuální hladkost**, bez ohledu na velikosti derivací: | ||
+ | |||
+ | * **G₀** – jako C₀, segmenty se spojí ve stejném bodě. | ||
+ | * **G₁** – tečny mají stejný směr, ale mohou mít jinou velikost. | ||
+ | * **G₂** – křivka má plynulé zakřivení (ne nutně přesně stejné derivace jako u C₂). | ||
+ | |||
+ | Geometrická spojitost je méně striktní než parametrická, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | === Bézierovy křivky === | ||
+ | |||
+ | * Definovány **kontrolními body** \( P_0, \dots, P_n \) a **Bernsteinovými polynomy**. | ||
+ | * Neprochází všemi body, ale vždy začíná v \( P_0 \) a končí v \( P_n \). | ||
+ | * Křivka je vždy uvnitř **konvexního obalu** svých bodů. | ||
+ | * Nejčastěji používané stupně: | ||
+ | * **Kvadratické (n=2)** a **kubické (n=3)** – standard ve vektorové grafice a fontech. | ||
+ | * Výpočet pomocí **de Casteljauova algoritmu** – opakovaná lineární interpolace. | ||
+ | * Lze spojovat s garantovanou C₀, C₁ a C₂ spojitostí (viz podmínky na body). | ||
+ | |||
+ | {{: | ||
+ | |||
+ | === de Casteljauův algoritmus (pro Bézierovy křivky) === | ||
+ | |||
+ | * {{: | ||
+ | * Pracuje s danými **kontrolními body** a parametrem \( t \in [0,1] \). | ||
+ | * Opakovanou **lineární interpolací** mezi sousedními body vytváří nové body, dokud nezíská jediný bod na křivce odpovídající danému \( t \). | ||
+ | * Algoritmus je **rekurzivní** – umožňuje: | ||
+ | * **Vyhodnocení bodu** na křivce, | ||
+ | * **Dělení křivky** na dvě části v libovolném \( t \), | ||
+ | * **Rendering** křivky pomocí opakovaného dělení. | ||
+ | |||
+ | === B-spline křivky === | ||
+ | {{: | ||
+ | |||
+ | * **Piecewise** aproximační křivky – složené z více segmentů. | ||
+ | * Definovány: | ||
+ | * **Kontrolními body** a | ||
+ | * **uzlovým vektorem (knot vector)** – určuje, jak silně a kde jednotlivé body ovlivňují křivku. | ||
+ | * Výhody: | ||
+ | * **Lepší kontrola tvaru** – změna bodu ovlivní jen lokální segmenty. | ||
+ | * Umožňují vysokou **hladkost (C₂)** a flexibilní tvarování. | ||
+ | * **Levnější výpočetně** než Bézier pro složité křivky. | ||
+ | * Uniformní vs. neuniformní: | ||
+ | * **Uniformní** – rovnoměrné rozložení uzlů. | ||
+ | * **Non-uniformní** – uzly mohou být různě rozmístěné nebo opakované. | ||
+ | * **Multiplicita** uzlu/bodu ovlivňuje spojitost: | ||
+ | * Spojitost = \( C_{n-r} \), kde \( r \) je násobnost a \( n \) stupeň křivky. | ||
+ | * {{: | ||
+ | * **Reparametrizace a převod B-spline na Bézier** | ||
+ | * Aby bylo možné efektivně vykreslit B-spline křivku pomocí de Casteljauova algoritmu, je třeba provést **reparametrizaci** – úpravu parametrického rozsahu tak, aby odpovídal jednotlivým segmentům. | ||
+ | * Následně se zvýší **násobnost vnitřních uzlů** (uzlového vektoru) na hodnotu **rovnou stupni křivky**. Tím se zajistí, že každý segment lze zapsat jako samostatná Bézierova křivka. | ||
+ | * **Převod zpět z Bézier na B-spline** | ||
+ | * Spojením sousedních Bézierových segmentů a snížením **násobnosti uzlů** vznikne zpět hladká B-spline křivka. | ||
+ | * Výsledná křivka může dosáhnout vyšší spojitosti (např. C1, C2) podle snížené multiplicity a stupně křivky. | ||
+ | * Použití: technické výkresy, CAD systémy. | ||
+ | |||
+ | === NURBS (Non-Uniform Rational B-Spline) === | ||
+ | |||
+ | * Nejobecnější forma B-spline. | ||
+ | * Umožňuje přidělit **váhy bodům** – reprezentuje se pomocí **homogenních souřadnic** \((xw, yw, w)\). | ||
+ | * Zachovává tvar při: | ||
+ | * **Afinních transformacích**, | ||
+ | * **Perspektivní projekci** – racionální forma. | ||
+ | * Spojitost a tvar lze řídit pomocí **multiplicity uzlů a vah**. | ||
+ | * Přesně modeluje **kružnice, | ||
+ | * Rendering: převede se na Bézier segmenty zvýšením násobnosti uzlů. | ||
+ | * Využití: **3D modelování, | ||
+ | |||
+ | == de Boorův algoritmus (pro B-spline a NURBS křivky) == | ||
+ | |||
+ | * **Zobecnění de Casteljauova algoritmu** pro libovolné B-spline křivky s uzlovým vektorem. | ||
+ | * Slouží pro **vyhodnocení bodu na křivce** pomocí postupného váženého zprůměrování kontrolních bodů. | ||
+ | * Zohledňuje: | ||
+ | * **stupeň křivky \( n \)**, | ||
+ | * **multiplicitu uzlu \( r \)**, | ||
+ | * **lokální kontrolní body** určené uzlovým intervalem. | ||
+ | |||
+ | **Postup výpočtu bodu:** | ||
+ | - Najdi interval uzlového vektoru \( u_i \leq u < u_{i+1} \), kam parametr \( u \) spadá. | ||
+ | - Aplikuj opakované zprůměrovávání kontrolních bodů mezi uzly (rekurze přes stupně). | ||
+ | - Výsledkem je bod \( d^{n-r}_{i-r+1}(u) \) na křivce. | ||
+ | |||
+ | ==== 3. Rendering parametrických křivek ==== | ||
+ | |||
+ | Parametrické křivky se nevykreslují jako celek, ale **aproximují se pomocí úseček**. K tomu se používá princip **rekurzivního dělení křivky**, které zajistí požadovanou přesnost vykreslení. | ||
+ | |||
+ | Rendering probíhá na základě algoritmu vhodného pro daný typ křivky: | ||
+ | |||
+ | * **Bézierovy křivky** – používá se dělení pomocí **de Casteljauova algoritmu**. | ||
+ | * **B-spline a NURBS křivky** – používá se **de Boorův algoritmus** nebo převod na Bézierovy segmenty. | ||
+ | |||
+ | - **Zhodnocení velikosti segmentu** | ||
+ | * U Bézierových křivek se například kontroluje **plocha konvexního obalu** (např. čtyřúhelník daný kontrolními body). | ||
+ | * Pokud je oblast menší než určitý práh (threshold), | ||
+ | - **Dělení křivky na menší segmenty** | ||
+ | * Pokud není segment dostatečně „malý“, | ||
+ | * U racionálních křivek probíhá dělení v **homogenních souřadnicích**, | ||
+ | - **Rekurzivní vykreslování** | ||
+ | * Proces pokračuje, dokud nejsou všechny segmenty dostatečně malé pro vykreslení přímkou. | ||
+ | * Tím vznikne čárková aproximace celé křivky. | ||
+ | - **Převod B-spline/ | ||
+ | * Zvýší se **násobnost vnitřních uzlů** v uzlovém vektoru na hodnotu rovnající se stupni křivky. | ||
+ | * Každý výsledný segment se poté vykreslí jako **samostatná Bézierova křivka**. | ||
+ | - **Výpočty v souřadnicových systémech** | ||
+ | * Pokud výpočet probíhá **v kartézských souřadnicích**, | ||
+ | * U **racionálních křivek** je nutné výpočty provádět **v homogenním prostoru** \((xw, yw, w)\), aby se zachovala spojitost a správný tvar. | ||
+ | - **Alternativní přístup – vzorkování** | ||
+ | * Křivka se vyhodnocuje v rovnoměrných parametrech a výsledné body se spojí úsečkami. | ||
+ | * Tato metoda poskytuje rychlou, ale méně přesnou aproximaci. | ||
+ | |||
+ | ==== 4. SVG – Scalable Vector Graphics ==== | ||
+ | |||
+ | * **XML formát** popisující vektorovou grafiku. | ||
+ | * Používá předdefinované značky: `< | ||
+ | * **Scalable** – velikost lze libovolně měnit bez ztráty kvality. | ||
+ | * Podporuje: | ||
+ | * Interaktivitu (např. přes JavaScript), | ||
+ | * Využívá se pro **webovou grafiku, ikony, diagramy**. | ||
+ | * Vykreslování probíhá podle pořadí definic (tzv. **malířův algoritmus**). | ||
+ | * Problém nastává např. u tří objektů, které se všechny částečně překrývají (**malířův problém**). | ||
+ | |||
+ | ===== 5. Reprezentace 3D objektů a principy 3D modelování ===== | ||
+ | |||
+ | 3D objekty lze reprezentovat různými způsoby v závislosti na účelu použití – rendering, fyzikální simulace, nebo modelování. Každá reprezentace má specifické výhody z hlediska přesnosti, úspory paměti nebo možností úprav. | ||
+ | |||
+ | ==== 1. Typy reprezentace 3D objektů ==== | ||
+ | |||
+ | * **Hraniční reprezentace (Boundary Representation)** – objekt je určen povrchem složeným z polygonů (typicky trojúhelníky nebo quady). | ||
+ | * **Polygonální reprezentace** – objekty tvořené: | ||
+ | * **Vertex** – bod ve 3D prostoru, | ||
+ | * **Edge** – spojení dvou vrcholů, | ||
+ | * **Face** – plocha uzavřená hranami (trojúhelníky/ | ||
+ | * **Polygonální polévka** – nestrukturovaná množina polygonů bez topologie, opakované vrcholy, nevhodná pro úpravy. | ||
+ | * **3D mesh** – strukturovaná reprezentace se známou topologií (sousednost bodů, hran, stěn). | ||
+ | * **Diskrétní reprezentace** – 3D objekty uložené jako: | ||
+ | * Rasterové obrázky (sprites, textury), | ||
+ | * Volumetrická data – 3D pole voxelů (např. lékařské skeny). | ||
+ | * **Implicitní reprezentace** – definice objektu rovnicí: např. f(x, y, z) = 0. | ||
+ | * **Procedurální reprezentace** – objekt generován pravidly nebo algoritmem (např. L-systémy). | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== 2. Datové struktury pro reprezentaci ==== | ||
+ | |||
+ | * **Polygonální polévka** – seznam nezávislých polygonů, žádné informace o sousednosti. | ||
+ | * **Seznam vrcholů a stěn** – vrcholy uloženy zvlášť, stěny definovány indexy do seznamu vrcholů. | ||
+ | * **Winged edge** – každá hrana zná sousední stěny a vrcholy, efektivní pro topologii. | ||
+ | * **Half-edge** – každá hrana rozdělena na dvě orientované poloviny, vhodné pro směrové operace a reprezentaci topologie. | ||
+ | |||
+ | ==== 3. Formát OBJ ==== | ||
+ | |||
+ | * Lidsky čitelný textový formát pro ukládání 3D modelů. | ||
+ | * **v** – vertex (x, y, z, [w]), | ||
+ | * **vt** – texture coordinate (u, [v, w]), | ||
+ | * **vn** – normal vector (x, y, z), | ||
+ | * **f** – face (seznam vertexů, např. `f v1/vt1/vn1 ...`), | ||
+ | * **l** – line. | ||
+ | |||
+ | ==== 4. Parametrické povrchy – Bézierovy a B-Spline plochy ==== | ||
+ | |||
+ | Parametrické plochy slouží k přesné reprezentaci zakřivených povrchů pomocí funkcí dvou proměnných (u, v). Povrch je tvořen pohybem kontrolních bodů po křivce, čímž vzniká síť bodů definujících tvar. | ||
+ | |||
+ | * Požadavky na plochy: | ||
+ | - **Přesnost** – věrné zachycení tvaru modelu. | ||
+ | - **Kompaktnost** – reprezentace s malým počtem bodů, nízké paměťové nároky. | ||
+ | - **Lokalita změn** – úprava kontrolního bodu ovlivní jen část povrchu. | ||
+ | - **Spojitost** – typicky požadujeme C² spojitost. | ||
+ | - **Invariantnost vůči transformacím** – afinní i perspektivní, | ||
+ | - **Efektivní rendering** – možnost rychlé teselace. | ||
+ | |||
+ | * **Piecewise parametrické plochy (patches)** – povrch se skládá z menších oblastí, na nichž je definována parametrizace. Toto rozdělení zajišťuje lokalitu změn. | ||
+ | * **Z křivek na plochu** – např. máme křivky v u-směru a jejich kontrolní body použijeme jako kontrolní body pro křivku ve v-směru. | ||
+ | |||
+ | === Bézierovy plochy === | ||
+ | |||
+ | * Aproximační polynomiální plochy definované maticí kontrolních bodů. | ||
+ | * Využívají Bernsteinovy polynomy pro výpočet pozice bodů na ploše. | ||
+ | * Nejčastěji stupně 2 nebo 3; plocha je obdélníková a uzavřená uvnitř konvexního trupu. | ||
+ | * Spojitost: C₀ – spojení segmentů, C₁ – plynulé tangenty, C₂ – spojité zakřivení. | ||
+ | * Rendering: | ||
+ | - **Přímý de Casteljau** – bilineární interpolace mezi body ve dvou směrech (u, v). | ||
+ | - **Nepřímý de Casteljau** – výpočetně náročnější, | ||
+ | * Výhody: | ||
+ | - Jednoduchost a snadné pochopení, | ||
+ | - přesnost v rámci definovaného patch. | ||
+ | * Nevýhody: | ||
+ | - Špatná lokalita změn – úprava jednoho bodu ovlivní celý patch, | ||
+ | - mnoho bodů potřebných pro složité plochy. | ||
+ | |||
+ | * **Teselace Bézierových patchů**: | ||
+ | - Opakované dělení pomocí de Casteljau algoritmu. | ||
+ | - Pro vyšší přesnost se patch rozděluje na menší části. | ||
+ | - Při spojení více patchů může docházet k vizuálním mezerám, pokud není zajištěna geometrická spojitost. | ||
+ | |||
+ | === B-Spline plochy === | ||
+ | |||
+ | * Aproximační plochy, které jsou obecnější než Bézierovy. | ||
+ | * Využívají dvě množiny **knot vektorů** – jeden pro každou parametrizaci (u, v). | ||
+ | * Každá dimenze (směr u i v) má vlastní stupeň, vlastní množinu kontrolních bodů a knot vektor. | ||
+ | * Výpočet bodu na ploše: **přímý de Boorův algoritmus**, | ||
+ | * Spojitost lze řídit **multiplicitou uzlů** – více stejných uzlů znamená menší spojitost (např. C⁰). | ||
+ | * Výhody: | ||
+ | - Lepší lokalita změn, | ||
+ | - méně kontrolních bodů při zachování tvaru, | ||
+ | - snadný převod na Bézierovy patche pro rendering. | ||
+ | * Nevýhody: | ||
+ | - Složitější konstrukce než Bézier, | ||
+ | - omezení na obdélníkovou topologii. | ||
+ | |||
+ | * **Teselace B-Spline plochy**: | ||
+ | - Nejprve se převede na Bézierovy patche (pomocí knot insertion), | ||
+ | - následně se teseluje každá část samostatně. | ||
+ | - Pro složité plochy je nutné složit více patchů dohromady. | ||
+ | |||
+ | === NURBS (Non-Uniform Rational B-Spline) === | ||
+ | |||
+ | * Rozšíření B-Spline ploch o **váhy** a **homogenní souřadnice**. | ||
+ | * Schopné reprezentovat přesné kuželosečky (např. kruhy), které klasický B-Spline nezvládne. | ||
+ | * Výhody: | ||
+ | - Nejuniverzálnější a nejpřesnější parametrická plocha, | ||
+ | - invariantní vůči afinním i perspektivním transformacím. | ||
+ | * Výpočet musí probíhat v homogenních souřadnicích, | ||
+ | * Citlivé na chyby v aritmetice – např. při nesprávném převodu může dojít ke ztrátě spojitosti. | ||
+ | |||
+ | ==== 5. Modelovací operace ==== | ||
+ | |||
+ | - **Blokování** – skládání základních 3D tvarů (kvádry, válce, kužely) do hrubého modelu. | ||
+ | - **Bridge** – spojení dvou profilů (např. křivek nebo ploch) stěnami za vzniku nové plošky; profily musí mít stejný stupeň a knot vektor. | ||
+ | - **Extrude** – vytažení 2D profilu do prostoru podél přímky nebo křivky; vznikne plocha nebo těleso s konstantním průřezem. | ||
+ | - **Loft** – propojení více 2D profilů podle jejich pořadí za vzniku hladkého tělesa. | ||
+ | - **Rotační plocha (lathe)** – otáčení 2D profilu kolem osy; vhodné pro osově symetrické objekty jako vázy nebo kola. | ||
+ | - **Volné modelování** – přímá úprava vrcholů, hran a ploch pro tvorbu složitých tvarů bez použití primitiv. | ||
+ | - **Proporcionální editace** – při pohybu jednoho vrcholu jsou ovlivněny i okolní podle vzdálenosti; | ||
+ | - **Sculpting (sochání)** – organické modelování pomocí štětců, deformací a objemového tahu, vhodné pro tvorbu detailních povrchů. | ||
+ | - **Knife / Subdivide / Loop cut** – rozdělení geometrie pro zvýšení detailu nebo změnu topologie; např. loop cut přidá nové hrany podél smyčky. | ||
+ | - **Snapping** – přichytávání vrcholů k mřížce, jiným vrcholům, hranám nebo plochám; umožňuje přesné zarovnání nebo změnu topologie. | ||
+ | - **Modifiers** – nedestruktivní nástroje pro úpravu geometrie jako Mirror, Array, Bevel, Boolean; lze řetězit a jejich pořadí ovlivňuje výsledek. | ||
+ | - **Subdivision surfaces (Catmull-Clark)** – hladké dělení čtvercových polygonů na menší pro plynulé organické tvary; běžné v animaci. | ||
+ | |||
+ | ==== 6. Dělené plochy (Subdivision Surfaces) ==== | ||
+ | |||
+ | * **Catmull-Clark** – každý čtyřúhelník (quad) se dělí na čtyři menší, čímž vzniká hladší síť se spojitostí C2 (mimo výjimek). | ||
+ | * **Topologická flexibilita** – není nutné dodržet obdélníkovou mřížku jako u Bézier/ | ||
+ | * **Lokální detail** – jemné detaily lze přidávat pouze v potřebných oblastech bez ovlivnění celé plochy. | ||
+ | * **Výjimečné vrcholy (póly)** – vrcholy s ≠4 hranami nezaručují C2 spojitost, ale plocha zůstává vizuálně plynulá. | ||
+ | * **Ostré hrany** – lze nastavit ostrost hran pomocí parametrů sharpness; při každém dělení se ostrost snižuje. | ||
+ | * **Frakční ostrost** – ostrost lze nastavit i nelineárně (např. 0.6), výsledný tvar se interpoluje mezi ostrou a hladkou verzí. | ||
+ | * **Nevýhody Bézier/ | ||
+ | * **Výhody Subdivision** – jednoduché řízení detailu, snadná konverze na polygonální síť, univerzální pro organické i technické tvary. | ||
+ | * **Požadavky na data** – použití složitějších struktur (např. winged-edge) pro sledování vztahů mezi vrcholy, hranami a plochami. | ||
+ | * **Výsledný mesh** – je definován iterací dělicích pravidel, bez potřeby trimování nebo připojování dalších povrchů. | ||
+ | |||
+ | ==== 7. Implicitní plochy ==== | ||
+ | |||
+ | * **Definice** – implicitní plocha je určena rovnicí ve tvaru F(x, y, z) = 0 (např. koule: x² + y² + z² − r² = 0). | ||
+ | * **Vlastnosti** – bod může být: | ||
+ | - uvnitř (F(x, y, z) < 0), | ||
+ | - na povrchu (F(x, y, z) = 0), | ||
+ | - vně (F(x, y, z) > 0). | ||
+ | * **Výhody** – snadné určení pozice bodu vůči ploše, podpora booleovských operací (sjednocení, | ||
+ | * **Pole vzdálenosti** – definováno v celém prostoru, lze použít pro výpočet vzdálenosti od bodu, přímky nebo tělesa. | ||
+ | |||
+ | * **Modelování pomocí blobů (metaballs)** – výsledný tvar je kombinací více funkcí popisujících jednotlivé objekty. | ||
+ | - Každý objekt definuje lokální pole vlivu D(r) (např. D(r) = 1 / r² nebo Gaussova funkce). | ||
+ | - Výsledná plocha vzniká jako **isosurface** celkového pole při daném prahu T. | ||
+ | * **Metaballs (Blinn 1982, Nishimura 1985)** – vylepšení blob objektů pomocí funkcí s omezeným dosahem: | ||
+ | - Parametr *a* – síla vlivu (může být i záporná). | ||
+ | - Parametr *b* – poloměr vlivu (za hranicí r ≥ b vliv zaniká). | ||
+ | - Výhodou je řízené spojování a oddělování tvarů podle vzdálenosti a vlivu. | ||
+ | * **Nevýhoda** – změna jednoho objektu ovlivní celé globální pole (malá lokalita změn), vysoká výpočetní náročnost. | ||
+ | * **Využití** – vhodné pro organické a plynulé struktury (např. kapky, tekutiny). | ||
+ | * **Rendering** – extrakce izoploch pomocí: | ||
+ | - **Marching Cubes** – převod na polygonální síť. | ||
+ | - **Raycasting** – sledování průsečíku paprsku s izoplochou. | ||
+ | |||
+ | ==== 8. Sochání (Sculpting) ==== | ||
+ | |||
+ | * Umožňuje přirozené formování detailních objektů. | ||
+ | * Využívá různé štětce, proporční editaci, multi-resolution mesh. | ||
+ | * Vhodné pro organické modely, detaily, postavy. | ||
+ | |||
+ | ===== 6. Principy mapování textur ===== | ||
+ | |||
+ | Mapování textur je proces přiřazení souřadnic textury jednotlivým bodům na povrchu 3D objektu, aby mohla být textura správně zobrazena. Nejčastější metodou je UV mapování, které převádí 3D povrch na 2D rovinu a umožňuje efektivní zobrazení detailů bez nutnosti složité geometrie. | ||
+ | |||
+ | ==== 1. Textury a mapování ==== | ||
+ | |||
+ | * **Textura** – funkce reprezentující vlastnosti povrchu objektu: barvu, lesklost, výšku, strukturu. | ||
+ | - Typy: barva (diffuse), specular, roughness, normal, displacement. | ||
+ | - Textura je většinou diskétní funkce definovaná na povrchu objektu. | ||
+ | - Nejčastěji se používají 2D textury, vzácněji 1D nebo 3D textury. | ||
+ | |||
+ | * **Mapování** – každému vrcholu objektu přiřadíme UV souřadnice (U, V) v rozsahu < | ||
+ | - UV souřadnice definují, která část textury se zobrazí na daném místě objektu. | ||
+ | * {{: | ||
+ | |||
+ | * **Interpolace** – pro body mezi vrcholy se UV souřadnice počítají lineárně a pak se z nich získá barva textury. | ||
+ | |||
+ | * **Chování mimo rozsah UV**: | ||
+ | - *Repeat*: souřadnice se periodicky opakují (modulo 1), | ||
+ | - *Extend*: souřadnice se omezí na < | ||
+ | - *Clip*: použije se výchozí barva (např. černá). | ||
+ | - {{: | ||
+ | |||
+ | * **Mip-mapy** – sekvence textur, kde každá má poloviční rozlišení než předchozí. | ||
+ | - Používá se pro lepší vykreslování detailů z různých vzdáleností. | ||
+ | - Pomáhá potlačit aliasing díky odstranění vysokofrekvenčních detailů. | ||
+ | * {{: | ||
+ | |||
+ | ==== 2. UV mapování ==== | ||
+ | |||
+ | * **UV mapování** – proces přiřazení 2D souřadnic (U, V) jednotlivým bodům modelu, které umožní přiřadit texturu ke 3D geometrii. | ||
+ | * **UV unwrapping** – převod 3D modelu na 2D mapu. | ||
+ | * Cílem je minimalizace zkreslení a efektivní rozložení ploch. | ||
+ | * Každý vrchol může mít v různých plochách různé UV souřadnice. | ||
+ | |||
+ | ==== 3. Způsoby unwrappingu ==== | ||
+ | |||
+ | * **Ruční švy (seams)** – uživatel definuje hrany, kde se model „rozstřihne“ pro vytvoření UV mapy. | ||
+ | * Výhodné pro organické a ručně modelované objekty. | ||
+ | * Cílem je zachování tvaru a poměru stran mezi 3D a 2D pro minimální deformaci. | ||
+ | * {{: | ||
+ | |||
+ | * **Limitní úhel (Smart UV Project)** – automatické dělení podle úhlu mezi normálami sousedních ploch. | ||
+ | * Nižší limit znamená více částí a detailnější UV mapu. | ||
+ | * Každá nová plocha je přidána jen pokud úhel normál je pod daným limitem. | ||
+ | * {{: | ||
+ | |||
+ | * **Lightmap packing** – vytvoření mřížky v UV prostoru bez zachování tvaru a sousednosti. | ||
+ | * Používá se pro přepočítané osvětlení nebo ambient occlusion. | ||
+ | * Efektivní využití prostoru v textuře, často pro více objektů najednou. | ||
+ | * {{: | ||
+ | |||
+ | ==== 4. Primitivní projekce ==== | ||
+ | |||
+ | * **Projekce z pohledu (camera projection)** – použije aktuální pohled kamery pro projekci. | ||
+ | * Vhodné pro ploché objekty a projekce podle fotografií. | ||
+ | * Ztrácí hloubkovou složku (Z souřadnice je zahozena). | ||
+ | * {{: | ||
+ | |||
+ | * **Box mapping** – plochy se rozdělují podle orientace normály vůči šesti stranám krychle. | ||
+ | * Výhodné pro objekty se strukturovanými plochami (např. domy, krabice). | ||
+ | * Projekce je ortogonální na každou ze stěn. | ||
+ | |||
+ | * **Spherical mapping** – projekce pomocí sférických souřadnic (azimut, zenit, radius). | ||
+ | * Radius se ignoruje, výsledkem je UV mapa vhodná pro koule. | ||
+ | |||
+ | * **Cylindrical mapping** – používá azimut a výšku (z souřadnici) pro válcové objekty. | ||
+ | * Např. sloupy, lahve, komíny. | ||
+ | |||
+ | ==== 5. Další techniky ==== | ||
+ | |||
+ | * **Texture painting** – ruční kreslení textury přímo na model. | ||
+ | - Pro detailní doladění, švy a realistické efekty. | ||
+ | - Malování přímo ve 3D zobrazení nebo v 2D UV mapě. | ||
+ | |||
+ | * **Texture cloning** – přenos části fotografie na 3D objekt. | ||
+ | - Typicky se používají fotografie z reálného světa. | ||
+ | - Vyžaduje UV mapu z „projekce z pohledu“ pro přesné zarovnání. | ||
+ | |||
+ | * **Seamless textures** – textury navržené pro opakování bez zjevných hran. | ||
+ | - Používají se na velké plochy (např. stěny, podlahy, příroda). | ||
+ | - Často vytvořeny pomocí filtrů (např. Gaussian blur, grain merge) nebo offset a klonovacích nástrojů. | ||
+ | |||
+ | === Bonus: | ||
+ | |||
+ | * **Normal mapping** – textura obsahující normálové vektory, která simuluje detaily bez geometrie. | ||
+ | - Používá RGB kanály pro zakódování vektoru. | ||
+ | - Normály mohou být definovány v prostorách: | ||
+ | - Používá se hlavně pro low-poly modely s vypálenými detaily z high-poly. | ||
+ | |||
+ | * **Bump mapping** – výšková mapa v odstínech šedi, která ovlivňuje osvit bez změny geometrie. | ||
+ | - 50 % šedá = žádná změna, světlejší = výstupky, tmavší = prohlubně. | ||
+ | - Lze konvertovat na normal mapu. | ||
+ | |||
+ | * **Displacement mapping** – skutečné posunutí vrcholů objektu na základě textury. | ||
+ | - Vyžaduje hustou geometrii pro správný efekt. | ||
+ | - Oproti bump/normal mapám mění skutečný tvar objektu. | ||
+ | |||
+ | * **Texture baking** – vypékání informací (osvětlení, | ||
+ | - Používá se pro přenos detailů z komplexního modelu na low-poly verzi. | ||
+ | - Např. vypékání normál, stínů, světla, barevného rozložení atd. | ||
+ | |||
+ | * **PBR materiály (Physically Based Rendering)** – využívají více typů textur pro simulaci realistických materiálů. | ||
+ | - Např. Base Color, Metallic, Roughness, Normal, Height, AO. | ||
+ | - Využívá BSDF shader (např. principled BSDF v Blenderu). | ||
+ | - Umožňuje realistické odrazy, lom světla a materiálové vlastnosti. | ||
+ | |||
+ | * **Environment mapping** – textury reprezentující okolní prostředí. | ||
+ | - Umožňuje reflexe/ | ||
+ | - Typy mapování: mirror ball, equirectangular (HDRI). | ||
- | === 7. Formáty rastrových obrázků === | ||
- | * **GIF** – indexované barvy, LZW, animace, max. 256 barev, průhlednost pomocí alfa = 0 | ||
- | * **PNG** – bezeztrátová komprese (LZW), podpora přímých i indexovaných barev, včetně průhlednosti (RGBA) | ||
- | * **JPEG** – ztrátová komprese (DCT), vhodná pro fotografie, **nepodporuje** průhlednost | ||