From 398020f37b9e8c554513af0a3be16566bd741242 Mon Sep 17 00:00:00 2001 From: Filip Znachor Date: Thu, 25 May 2023 14:21:11 +0200 Subject: [PATCH] =?UTF-8?q?Pozn=C3=A1mky=20z=2010.=20prezentace=20z=20UPG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KIV UPG/10. Základy 3D grafiky.md | 238 ++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 KIV UPG/10. Základy 3D grafiky.md diff --git a/KIV UPG/10. Základy 3D grafiky.md b/KIV UPG/10. Základy 3D grafiky.md new file mode 100644 index 0000000..fa89862 --- /dev/null +++ b/KIV UPG/10. Základy 3D grafiky.md @@ -0,0 +1,238 @@ +# Základy 3D grafiky + +## 3D grafika + +- princip + - objekty modelovány ne 3D + - výsledek převedený na 2D +- oba procesy mohou být úzce provázány + - např. počítačové hry (XNA, DirectX, OpenGL) +- oba procesy mohou být oddělené + - příprava 3D dat provedena v prvním nástroji + - zobrazení na 2D provedeno druhým nástrojem + - např. filmový průmysl ++ typické užití + + počítačové hry a filmový průmysl + + augmented reality + + vizualizace terénu (např. Google Earth) + + vizualizace strojírenských součástek + + vizualizace architektonických budov + + vizualizace medicínských dat + + ... + +### Programování 3D aplikací + +- různé přístupy dle výsledné aplikace + +**1. přístup** +- programuji pouze rozhraní mezi modelovací a zobrazovaní komponentou +- nejjednodušší +- 3D data připravý někdo jiný, zobrazení provede standardní prohlížeč + +**2. přístup** +- provádím vytváření 3D objektů, zobrazování neřeším +- připravím 3D objekty (nehybné, interaktivní), rozmístím je v prostoru +- výsledkem scéna, kterou zobrazí standardní prohlížeč + +**3. přístup** +- řeším zobrazování 3D objektů +- řeším, jak bude vypadat scéna + - chci zvýšit realističnost, přehlednost či výkon + - mohu použít 3D knihovny + +**Souřadný systém scény** +- kartézský souřadný systém + - natočení os bývá aplikačně závislé + - osa z někdy bývá vodorovná, jindy vertikální, často také ve směru od/do tradiční 2D roviny +- točivost systému + - jakým směrem probíhá rotace o kladný úhel okolo os x, y, z + - levotočivý a pravotočivý systém + +**3D objekty** +- získávány z databáze 3D objektů nebo vlastním vytvořením +- databáze 3D objektů + - volné i komerční + - volné často omezené, komerční často drahé + - nejjednodušší způsob získání, často nejlevnější + - modely podléhají licencím + - často obsahují skrytý watermark +- vlastní tvorba 3D modelu + - tvorba složitějších modelů je časově náročná + - základní principy + - 3D skenování + - oskenování reálného objektu 3D skenerem či systémem kamer + - výsledkem zašumělá množina bodů ve 3D + - data je nutné zpracovat + - 3D modelování + +### 3D modelování + +- lze použít dostupné modelovací nástroje + - technicky orientované (CAD) + - graficky orientované +- objekty bývají modelovány + - skládáním z jednodušších objektů + - rotací 2D křivky okolo osy (tzv. resolve) + - vytažením 2D křivky + - manipulací s primitivy, ze kterých je objekt vymodelován + +**Jednoduché objekty** + - válec, kvádr, kužel, koule, ... + - snadno vymodelovatelné + +**Složité objekty** +- reprezentovány množinou primitiv (body, úsečky, trojúhelník, čtyřúhelník, ...) +- mohou vzniknout převodem analyticky vyjádřených objektů +- mohou vzniknou rotací kolem osy (váza, láhev, hřebík, ...) +- Beziérův plát - zobecnění Beziérovy křivky (určen 4x4 vrcholy) +- kvalita na výstupu je určena velikostí primitiv po jejich transformaci na 2D grafiku + - využívá se analytických popisů objektů + - technika Level of Detail (LOD) + - více modelů pro jeden objekt (vybere se nejvhodnější) + +**Čtyřúhelníkové sítě** +- přirozenější pro strojírenství, GIS, ... +- vrcholy čtyřúhelníku nemusí ležet na rovině +- pro zobrazení je čtyřúhelník automaticky rozdělen na 2 trojúhelníky + +**Trojúhelníkové sítě** +- množina trojúhelníků +- trojúhelník zadán třemi vrcholy + - může zdegenerovat na úsečku nebo bod + - nezdegerovaný korektně reprezentuje rovinu +- souřadnice ve floatech +- nejčastěji specifikována dvojicí seznamů + - seznam vrcholů + - seznam trojúhelníků + +**Izolované body a hrany** +- občas je potřeba do scény přidat izolované body nebo hrany +- body a hrany mají 0 rozměr +- je potřeba je + - modelovat jako objekty ve 3D s danou velikostí ve fyzických jednotkách + - modelování bodů ve 3D + - trojúhelník/čtyčúhelník se natáčí k pozorovateli (tzv. billboard) + - 3D objekt + - modelování hran ve 3D = válec + - zobrazit jako překryvnou vrstvu při ve výsledném 2D obrázku + - 3D scéna zobrazena, přes výsledný obraz nakresleny 2D objekty +- 3D grafické knihovny běžně podporují oba přístupy + +**Kamera** +- bod jejího umístění +- bod, na který se dívá +- vektor natočení vůči EC (Up) +- zorné pole - Field of View (FOVx, FOVy) +- přední ořezová rovina (near clipping) + - bližší objekty jsou ignorovány +- zadní ořezová rovina (far clipping) + - vzdálenější objekty jsou ignorovány + - urychlení vykreslování +- typy kamer + - ortogonální + - kolmé promítání + - velikost zobrazení objektu nezávisí na jeho vzdálenosti od kamery + - vhodné pro technické zobrazování + - perspektivní + - paprsky se sbíhají + - velikost zobrazení objektu závisí na jeho vzdálenosti od kamery + - napodobuje lidské vnímání světa +- zobrazovaný prostor (view frustum) + - kvádr pro ortogonální kameru + - komolý jehlan pro perspektivní kameru + +#### Zobrazení scény + +- různé zobrazovací techniky +- **drátěný model** (wireframe) + - vypočte 2D pozice crcholů + - spojí 2D vrcholy 2D úsečkami + - nejjednodušší a nejrychlejší + - dívám se skrz objekty (můžu s nimi manipulovat) +- **jednobarevné plošné zobrazení** + - zakryté plošky nejsou vidět + - 2D obrazce se vyplní jednou barvou + - velmi rychlé + - vhodné např. pro schématická CAD zobrazení + - využívá se v kombinaci se zobrazením obrysových hran +- **konstantní stínování** + - obdoba jako jednobarevné plošné zobrazení + - jas trojúhelníků zavislý na dopadajícím světle (je potřeba definovat světla) + - velmi rychlé + +**Normála** +- normálový vektor = vektor kolmý k povrchu +- pro trojúhelníkové sítě ji 3D grafické knihovny vypočítají obvykle samy +- vrcholy trojúhelníků musá být zadávány v konzistentním pořadí + - po/proti směru hodinových ručiček (CW/CCW) + +**Světla** +- důležité pro složitější zobrazovací přístupy +- pro scénu nezbytné nadefinovat alespoň jeden zdroj světla +- pro každé se specifikuje jeho barva (obvykle RGB) +- modely zdrojů světla + - **rovnoběžné** + - definováno směrem + - paprsky na scénu dopadají rovnoběžně + - **bodové** + - definováno pozicí ve scéně + - paprsky se šíří všemi směry od pozice + - **kuželové** + - reflektor (spotlight) + - paprsky se šíří ve směru kužele + - **ambientní** (roztýlené) + - definováno pouze barvou + - přichází ze všech směrů + - bez něj jsou části bez světla černé + +**Materiály objektů** +- určují, jak objekt odráží světlo +- nejčastěji definovány třemi parametry + - matný odraz + - část dopadajícího světla se pohltí + - část se odrazí ve všech směrech + - lesklý odraz + - část dopadajícího světla se pohltí + - část dopadajícího světla se odrazí dle zákona odrazu + - rozptýlený odraz + - pracuje pouze s rozptýleným (ambientním) světlem + +**Stínování** +- Goraud [Guró] stínování + - také smooth shading + - jas barvy se na ploše 2D trojúhelníku mění v závislosti na dopadajícím světle +- Sofistikovanější stínování + - např. Phongovo stínování + - náročnost výpočtů na pozadí + - není běžně implementováno + +**Fotorealistické modelování** +- **1. možnost** + - reálné objekty modelovány velmi jemnou sítí + - každý trojúhelník má přiřazenu jednu barvu + - vysoce neefektivní +- **2. možnost** + - parametry difúzního odrazu v libovolném bodě trojúhelníku uloženy ve 2D barevné textuře + - velmi rychlé a rozšířené + +**Textura** +- mnoho významů a použití +- pro naše účely: textura = bitmapový obrázek +- typicky čtvercové o hraně mocniny 2 + - 128x128, 256x256, 512x512 +- obsahem může být + - uměle vygenerovaný obrázek + - reálná fotografie + +### 3D formáty + +**Binární** +- VTK, OBJ, X (DirectX), ... + +**Textové** +- VTK, OBJ, STL, PLY, COLLADA (.dae), X, X3D, VRML, XAML + +Různá složitost formátů +- některé pouze jeden objekt, jiné celé systémy +- některé pouze statické scény, jiné dynamické ++ některé formáty požadují kameru jako součást popisu \ No newline at end of file