Poznámky z 10. prezentace z UPG

This commit is contained in:
Filip Znachor 2023-05-25 14:21:11 +02:00
parent 35caf2ee49
commit 398020f37b
1 changed files with 238 additions and 0 deletions

View File

@ -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