# 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ý (difúzní) odraz - část dopadajícího světla se pohltí - část se odrazí ve všech směrech - často definováno pro každou barvu zvlášť - lesklý (spekulární, zrcadlový) 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