Poznámky z 10. prezentace z UPG
This commit is contained in:
parent
35caf2ee49
commit
398020f37b
1 changed files with 238 additions and 0 deletions
238
KIV UPG/10. Základy 3D grafiky.md
Normal file
238
KIV UPG/10. Základy 3D grafiky.md
Normal 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
|
Loading…
Reference in a new issue