OBSAH WEBU
ČTĚTE!
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
temata:12-3d_objekty:main [2011/04/21 13:07] scorpix |
temata:12-3d_objekty:main [2011/05/26 13:52] (aktuální) george [Geometrické transformace] |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
+ | ~~ODT~~ | ||
+ | |||
====== 12 - Transformace, reprezentace a zobrazení 3D objektů ====== | ====== 12 - Transformace, reprezentace a zobrazení 3D objektů ====== | ||
- | Geometrické transformace jsou jedny z nejčetnějších operací v současné počítačové grafice. Můžeme je chápat jako změnu pozice vrcholů v aktuálním souřadnicovém systému nebo jako změnu souřadnicového systému. | + | |
- | ==== Homogenní souřadnice ==== | + | ===== Geometrické transformace ===== |
- | Homogenní souřadnice bodu v 3D s karteziánskymi souřadnicemi [x,y,z] je uspořádána čtveřice [X,Y,Z,w] pro kterou platí x=X/w, y=Y/w, z=Z/w. Bod je svými homogenními souřadnicemi určen jednoznačně. Souřadnici w nazýváme váhou bodu. Hodnota této váhy je w=1 v případě lineárních transformací.\\ | + | * jsou jedny z nejčetnějších operací v současné počítačové grafice |
- | Jsou zavedeny kvůli jednotné manipulaci se všemi transformačními maticemi, protože v případě karteziánských souřadnic by jsme u posunutí použili sčítání a u ostatních operací zas násobení. Takhle všude použijeme násobení matic, tj. jednotný způsob (ulehčí implementaci). \\ | + | * můžeme je chápat jako změnu pozice vrcholů v aktuálním souřadnicovém systému nebo jako změnu souřadnicového systému |
- | Bod, který chceme transformovat, má matici P(x, y, z, w), kde x, y, z jsou jeho souřadnice, w je 1 pokud je to bod, 0 pokud je to vektor.\\ | + | * **lineární transformace** - jsou popsány lineárními rovnicemi |
- | Transformační matice je matice 4*4.Tuto obecnou transformacní | + | * **kartézská soustava souřadnic** |
- | matici získáme násobením dílcích základních transformacních matic . Toto násobení matic musí být z pravé strany a v přesném pořadí provádení | + | * je taková soustava souřadnic, u které jsou souřadné osy vzájemně kolmé a protínají se v jednom bodě - počátku soustavy souřadnic |
- | jednotlivých transformací. | + | - __pravotočivá__ - normální, co používáme |
- | === Posunutí === | + | - __levotočivá__ - osa x a y je přehozená |
+ | * **homogenní souřadnice** | ||
+ | * homogenní souřadnice bodu v 3D s kartézskými souřadnicemi [x,y,z] je uspořádána čtveřice [X,Y,Z,w] pro kterou platí: | ||
+ | - x = X/w | ||
+ | - y = Y/w | ||
+ | - z = Z/w. | ||
+ | - w = váha bodu | ||
+ | * lineární transformace: w = 1 | ||
+ | * vektory v´ = (x,y,z) reprezentujeme trojicí (x,y,z,0) | ||
+ | * bod je svými homogenními souřadnicemi určen jednoznačně | ||
+ | * jsou zavedeny kvůli jednotné manipulaci se všemi transformačními maticemi, protože v případě kartézských souřadnic by jsme u posunutí použili sčítání a u ostatních operací zase násobení => takto všude použijeme násobení matic, tj. jednotný způsob (ulehčí implementaci) | ||
+ | * bod, který chceme transformovat, má matici P(x, y, z, w), kde x, y, z jsou jeho souřadnice, w je 1 pokud je to bod, 0 pokud je to vektor.\\ | ||
+ | * **transformační matice ve 3D** | ||
+ | * matice 4*4 | ||
+ | * tuto obecnou transformační matici získáme násobením dílčích základních transformačních matic | ||
+ | * násobení matic musí být z pravé strany a v přesném pořadí provádění jednotlivých transformací | ||
+ | |||
+ | ==== Posunutí ==== | ||
{{:temata:12-3d_objekty:posun.png|}} | {{:temata:12-3d_objekty:posun.png|}} | ||
- | Pro posun v opačném směru budou koeficienty d záporné. | + | * pro posun v opačném směru budou koeficienty d záporné |
- | === Změna velikosti === | + | |
+ | ==== Změna velikosti ==== | ||
{{:temata:12-3d_objekty:zmena.png|}} | {{:temata:12-3d_objekty:zmena.png|}} | ||
- | Pro zmenšení se použije místo S 1/S. | + | * pro zmenšení se místo S použije 1/S. |
- | === Rotace === | + | ==== Rotace ==== |
- | Střed otáčení v počátku souřadného systému. | + | |
+ | * střed otáčení v počátku souřadného systému. | ||
{{:temata:12-3d_objekty:rotace_v_x.png|}} | {{:temata:12-3d_objekty:rotace_v_x.png|}} | ||
{{:temata:12-3d_objekty:rotace_v_y.png|}} | {{:temata:12-3d_objekty:rotace_v_y.png|}} | ||
{{:temata:12-3d_objekty:rotace_v_z.png|}} | {{:temata:12-3d_objekty:rotace_v_z.png|}} | ||
- | === Zkosení === | + | |
+ | ==== Zkosení ==== | ||
{{:temata:12-3d_objekty:zkos_yz.png|}} | {{:temata:12-3d_objekty:zkos_yz.png|}} | ||
{{:temata:12-3d_objekty:zkos_xz.png|}} | {{:temata:12-3d_objekty:zkos_xz.png|}} | ||
{{:temata:12-3d_objekty:zkos_xy.png|}} | {{:temata:12-3d_objekty:zkos_xy.png|}} | ||
- | ==== Reprezentace ==== | ||
- | Požadavky na modely: | ||
- | * Obecnost (popis co nejrozsáhlejší třídy objektů) | ||
- | * Úplnost (úpně popisuje daný objekt) | ||
- | * Jednoznačnost (lze vyhodnotit pouze jedním způsobem) | ||
- | * Unikátnost, jedinečnost (jednomu tělesu odpovídá jeden model) | ||
- | * Přesnost (popisu objektu) | ||
- | * Regulérnost (nemožnost vytvořit nereálnou reprezentaci) | ||
- | * Konzistence vůči vybraným operacím tělesa stejné třídy | ||
- | * Kompaktnost (malá paměťová náročnost) | ||
- | * Možnost efektivního zpracování (Možnost efektivní implementace operací s tělesem.) | ||
- | === Projekce === | + | ==== Kombinace ==== |
- | Transformace ze 3D do 2D prostoru | + | * vynásobení matic |
- | * **Paralelní** - rovnoběžná:zachovává rovnoběžnost hran, velikost průmětu nezávisí na vzdálenosti od průmětny | + | |
- | * Kavalírska projekce – všechny osy mají stejné merítko | + | |
- | * Kabinetní projekce – osa Z je v merítku 1/2 vuci ostatním osám | + | |
- | * **Perspektivní** - středová:čím blíže středu promítání tím menší objekt | + | |
- | Buď na **rovinnou průmětnu**(úsečky se projektují na úsečky, stačí promítat jen vrcholy) vs. na **zakřivenou průmětnu** např.rybí oko (úsečky se projektují na křivky, potřeba projektovat všechny rastrované body) | + | |
- | Paralelní promítnutí do roviny XY (zanedbáme Z):{{:temata:12-3d_objekty:projekceparal.png?250|}} | + | |
+ | ===== Reprezentace 3D objektů ===== | ||
- | === Metody Reprezentace === | + | * **základní metody** |
- | Objekty mohou být **manifold**(hrana sdílí jen 2 stěny, vyrobitelný) vs. **non-manifold**(nevyrobitelný objekt). | + | - [[#Konstruktivní geometrie - CSG]] |
- | * Konstruktivní geometrie -Constructive Solid Geometry- objekt je popsán stromem z 3D primitiv, transformací a booleovskými operacemi(uzly) | + | - [[#Šablonování]] (translační, rotační, potahování) |
- | * šablonování - pohyb(posun, rotace) křivky, plochy nebo tělesa po zvolené trajektorii.může být s proměnlivou profilovou křivkou(potahování) | + | - [[#Dekompoziční modely]] |
- | * dekompoziční modely - rozklad objektu na elementární objemové jednotky(krychle) tzv.**voxel**(pixel ve 3D)Uložení dat – oktalový strom(problematické procházení objemem, vhodne pro malou hustotu dat), 3D pole diskrétních hodnot(velká náročnost na paměť, vysoká rychlost přístupu) nebo subvoxely(kombinace obojího).Vykreslení algoritmem //Marching cubes// | + | - [[#Hraniční reprezentace]] |
- | * hraniční reprezentace B-Rep - objekt popsán pomocí svého povrchu, info o vnitřní struktuře není uložena, objekty definovány pomocí vrcholů(body), hran(úsečky, křivky), stěn(polygony, spline plochy) | + | - [[#Implicitní plochy]] - potenciální pole elementárních částic |
- | * Drátový model - popis pomocí vrcholů a hran | + | * **požadavky na modely:** |
- | * Polygonální model - objekt definován pomocí vrcholů, hran, stěn(trojúhelníky=polygony), hw podpora zobrazení | + | * __obecnost__ (popis co nejrozsáhlejší třídy objektů) |
- | * Okřídlená hrana - (3 lineární senzamy – vrcholů, hran, stěn){{ :temata:12-3d_objekty:okridlena_hrana.png?200|}} | + | * __úplnost__ (úplně popisuje daný objekt) |
- | * Hraniční spline model - jako polygonální ale místo polygonů jsou spline plochy, pro zobrazení se často na polygonální převádí, LOD - Level of Detail míra přesnosti podle vzdálenosti, eliminace vrcholů nebo hran | + | * __jednoznačnost__ (lze vyhodnotit pouze jedním způsobem) |
- | * 3D Plochy - plocha je definována bázovým polynomem a sítí řídících bodů(matice) | + | * __unikátnost, jedinečnost__ (jednomu tělesu odpovídá jeden model) |
- | * Bikubické plochy – interpolační, analogie Fergusonových křivek, matice 4×4 řídících bodů, spojitost plátů | + | * __přesnost__ (popisu objektu) |
- | * Beziérové plochy – aproximační, analogie Beziérových křivek, matice 4×4 řídících bodů, spojitost plátů | + | * __regulérnost__ (nemožnost vytvořit nereálnou reprezentaci) |
- | * NURBS plochy – aproximační, analogie NURBS křivek, matice 4×4 řídících bodů | + | * __konzistence vůči vybraným operacím tělesa stejné třídy__ |
- | * Implicitní plochy - Modelování pomocí kostry kolem které je potenciální pole - určuje povrch objektu. | + | * __kompaktnost__ (malá paměťová náročnost) |
- | ==== Zobrazování 3D projektů ==== | + | * __možnost efektivního zpracování__ (možnost efektivní implementace operací s tělesem) |
- | Algoritmy viditelnosti: **vektorové**(výsledkem je soubor viditelných a neviditelných hran) vs. **rastrové**(rastrový výsledek-obraz viditelných ploch, stinovani, barva osvetleni) | + | * **typy objektů:** |
- | Mezi vektorové patří například Robertsův aloritmus(dělení potencilně viditelných hran na úseky kde se mění viditelnost) | + | - __manifold__ - hrana sdílí jen 2 stěny, vyrobitelný |
- | Mezi rastrové patří např. Malířův algoritmus(vykreslování nejprve vzdálených objektů, pak bližších | + | - __nonmanifold__ - nevyrobitelný objekt |
- | ===Osvětlovací modely === | + | * **Eulerovy rovnice** |
- | == Lambertův osvětlovací model == | + | * slouží pro kontrolu topologie objektu => platí pro manifold (hrana spojuje 2 vrcholy, ve vrcholu maximálně 3 hrany, stěny se neprotínají) |
+ | * **regularizované množinové operace** | ||
+ | * skládání objektů | ||
+ | * nesmí měnit topologickou dimenzi objektu | ||
+ | * výsledek je vždy těleso | ||
+ | * -*, ∪*, ∩* | ||
+ | * **projekce** | ||
+ | * 3D objekty zobrazujeme na 2D výstupu | ||
+ | * projekční paprsek promítá body na průmětnu | ||
+ | * dochází ke ztrátě informace | ||
+ | - __perspektivní (středová)__ | ||
+ | *je zvolený __střed projekce__ | ||
+ | * velikost průmětu nezávisí na vzdálenosti od průmětny | ||
+ | * __užití:__ virtuální realita, architektura, hry | ||
+ | * __kavalírská projekce__ - všechny osy mají stejné měřítko | ||
+ | * __kabinetní projekce__ - osa Z je v měřítku 1/2 vůči ostatním osám | ||
+ | - __paralelní (rovnoběžná)__ | ||
+ | * zachovává rovnoběžnost hran => paprsky kolmé na průmětnu => střed projekce je v nekonečnu | ||
+ | * čím blíže středu promítání tím menší objekt | ||
+ | * __užití:__ technická schémata | ||
+ | * __promítání na zakřivenou průmětnu__ - např.rybí oko (úsečky se projektují na křivky, potřeba projektovat všechny rastrované body) | ||
+ | * __obrázek:__ paralelní promítnutí do roviny XY (zanedbáme Z)\\ {{:temata:12-3d_objekty:projekceparal.png?250|}} | ||
+ | |||
+ | ==== Konstruktivní geometrie - CSG ==== | ||
+ | |||
+ | {{ :temata:12-3d_objekty:csg.jpeg?150|CSG}} | ||
+ | |||
+ | * objekt je popsán stromem ze: | ||
+ | - 3D primitiv (listy stromu) | ||
+ | - transformací (zvětšení, otočení, atd... 3D primitiv) | ||
+ | - booleovských operací (uzly stromu) | ||
+ | * možnost vzniku singularit (regularizované operace) | ||
+ | * pro každé nové operace probíhá regenerace stromu | ||
+ | * možnost parametrizace operací ve stromu - parametrické modelování (CAD/CAM) | ||
+ | * nejsou informace o povrchu => převod na polygonální model (B-rep) | ||
+ | * **oktalový strom** | ||
+ | * rozdělení prostoru CSG modelu oktalovým stromem (octree) => CSG strom rozdělený (tzv. prořezaný) na podstromy | ||
+ | * urychlení regenerace stromu při lokálních operacích, urychlení zobrazování CSG modelu | ||
+ | * strojní inženýrství, architektura | ||
+ | |||
+ | ==== Šablonování ==== | ||
+ | |||
+ | {{ :temata:12-3d_objekty:sanlonovani.jpeg?150|Šablonování}} | ||
+ | |||
+ | * pohyb křivky, plochy nebo tělesa po zvolené trajektorii | ||
+ | * může být součástí CSG operací (primitiva tvořená šablonováním) | ||
+ | * využívá se invariance spline křivek a ploch vůči lineárním transformacím | ||
+ | - __pohyb po přímce__ (obrázek) | ||
+ | - __potahování s proměnlivou profilovou křivkou__ | ||
+ | - __posun po obecné křivce__ | ||
+ | - __rotační__ - NURBS křivky | ||
+ | |||
+ | ==== Dekompoziční modely ==== | ||
+ | |||
+ | {{ :temata:12-3d_objekty:dekompozicni_modely.jpeg?150|Dekompoziční modely}} | ||
+ | |||
+ | * diskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly) - **voxely** (Volumetric Pixel) | ||
+ | * nese informace o hraniční struktuře **x** hraniční modely | ||
+ | * geologie, medicína, strojírenství | ||
+ | * **uložení dat:** | ||
+ | - __3D pole diskrétních hodnot__ - rychlý přístup, ale paměťově náročné | ||
+ | - __oktalový strom__ - vhodné pro malou hustotu dat - rekurzivní dělení | ||
+ | - __subvoxely__ - kombinace dvou předchozích | ||
+ | * vykreslení pomocí **Marching cubes** | ||
+ | * nalezení a polygonizace __isoplochy__ procházející objemem | ||
+ | |||
+ | ==== Hraniční reprezentace ==== | ||
+ | |||
+ | {{ :temata:12-3d_objekty:hranicni_reprezentace.jpeg?150|Hraniční reprezentace}} | ||
+ | |||
+ | * B-rep (Boundary Representation) | ||
+ | * objekt popsán prostřednictvím svého povrchu - hranice | ||
+ | * objekty definovány pomocí vrcholů (body), hran (úsečky, křivky) a stěn (polygony, spline křivky) | ||
+ | - __drátový model__ | ||
+ | * popis pomocí vrcholů a hran => málo topologických informací => nejednoznačnost | ||
+ | * pro rychlé zobrazení | ||
+ | - __polygonální model__ | ||
+ | * objekt definován pomocí vrcholů, hran, stěn (trojúhelníky == polygony) | ||
+ | * jednoznačný popis objektu, malá přesnost (lineární aproximace povrchu) | ||
+ | * hw podpora zobrazení | ||
+ | - __okřídlená hrana__ | ||
+ | * 3 lineární seznamy - vrcholů, hran, stěn | ||
+ | * definuje sousední vrcholy, hrany ohraničující stěnu, sousední stěny | ||
+ | * zpracováním lze získat normály ve vrcholech\\ {{:temata:12-3d_objekty:okridlena_hrana.png?200|Okřídlená hrana}} | ||
+ | - __hraniční spline model__ | ||
+ | * jako polygonální ale místo polygonů jsou spline plochy | ||
+ | * pro zobrazení se často na polygonální převádí | ||
+ | * LOD - Level of Detail míra přesnosti podle vzdálenosti, eliminace vrcholů nebo hran | ||
+ | |||
+ | ==== 3D plochy ==== | ||
+ | |||
+ | {{ :temata:12-3d_objekty:3d_plochy.jpeg?150|3D plochy}} | ||
+ | |||
+ | * plocha je definována bázovou maticí (polynomy) a sítí řídících bodů (matice) | ||
+ | - __Bikubické plochy__ - interpolační, analogie Fergusonových křivek, matice 4×4 řídících bodů, spojitost plátů | ||
+ | - __Beziérové plochy__ - aproximační, analogie Beziérových křivek, matice 4×4 řídících bodů, spojitost plátů | ||
+ | - __NURBS plochy__ - aproximační, analogie NURBS křivek, matice 4×4 řídících bodů | ||
+ | |||
+ | ==== Implicitní plochy ==== | ||
+ | |||
+ | {{ :temata:12-3d_objekty:implicitni_plochy.jpeg?150|Implicitní plochy}} | ||
+ | |||
+ | * modelování pomocí kostry kolem které je potenciální pole - určuje povrch objektu | ||
+ | * povrch objektu je v místě, kde je intenzita pole rovna nule | ||
+ | |||
+ | ===== Zobrazování 3D projektů ===== | ||
+ | |||
+ | * drátový model - těžko se určuje viditelnost => nevíme, jak jsou myšleny stěny | ||
+ | * viditelné plochy jsou přivrácené k pozorovateli, přivrácené části mají normálu směrem k pozorovateli | ||
+ | * orientace normály vůči vektoru pohledu: | ||
+ | * skalární součin | ||
+ | * hodnota //z// normály po pohledové transformaci | ||
+ | * viditelnost hran: | ||
+ | * hrana mezi viditelnými plochami je viditelná | ||
+ | * hrana mezi neviditelnými plochami je neviditelná | ||
+ | * hrana mezi viditelnou a neviditelnou plochou je obrysová | ||
+ | * **předzpracování scény:** | ||
+ | * vyřazení odvrácených částí | ||
+ | * vyřazení zakrytých částí | ||
+ | |||
+ | ==== Vizualizační metody ==== | ||
+ | * **algoritmy viditelnosti:** | ||
+ | - __vektorové__ - výsledkem je soubor viditelných a neviditelných hran | ||
+ | * např. [[#Robertsův algoritmus]] - dělení potenciálně viditelných hran na úseky kde se mění viditelnost | ||
+ | - __rastrové__ - rastrový výsledek - obraz viditelných ploch, stínováni, barva osvětlení | ||
+ | * např. [[#Malířův algoritmus]] - vykreslování nejprve vzdálených objektů, pak bližších | ||
+ | * **algoritmy viditelnosti (jiné dělení):** | ||
+ | * __objektové__ - pro každý objekt scény hledá viditelné části - složitost n<sup>2</sup> | ||
+ | * __obrazové__ - pro každý pixel obrazu hledá viditelný objekt - složitost n*p | ||
+ | * __komplexní__ - scéna je zpracovávána celá najednou. Měkké stíny. Komplexní řešení. | ||
+ | |||
+ | {{ :temata:12-3d_objekty:vizualizacnimetody.png?600 |Vizualizační metody}} | ||
+ | |||
+ | === Robertsův algoritmus === | ||
+ | |||
+ | {{ :temata:12-3d_objekty:robertsuv_algoritmus.jpeg?150|Robertsův algoritmus}} | ||
+ | |||
+ | * klasický vektorový algoritmus | ||
+ | * dělení potenciálně viditelných hran na úseky, kde se mění viditelnost | ||
+ | * uděláme průsečíky s obrysovými hranami a testujeme viditelnost jejich úseků podle vzdálenosti průsečíků a zakrytí | ||
+ | |||
+ | === Plovoucí horizont === | ||
+ | |||
+ | {{:temata:12-3d_objekty:plovouci_horizont.jpeg?150|Plovoucí horizont}} | ||
+ | |||
+ | * vizualizace 3D funkcí v grafu | ||
+ | * vykreslení řezů v rovině XZ a YZ od předu dozadu (ve směru pohledu) | ||
+ | * vykreslení úseků řezu, které jsou mimo oblast horního a dolního horizontu | ||
+ | |||
+ | === Malířův algoritmus === | ||
+ | |||
+ | {{ :temata:12-3d_objekty:maliruv_algoritmus.jpeg?150|Malířův algoritmus}} | ||
+ | {{ :temata:12-3d_objekty:maliruv_algoritmus2.jpeg?150|Malířův algoritmus}} | ||
+ | |||
+ | * rastrový algoritmus | ||
+ | * vykreslování objektů odzadu dopředu => seřazení podle vzdálenosti | ||
+ | |||
+ | === Dělení obrazu - Warnock === | ||
+ | |||
+ | {{ :temata:12-3d_objekty:warnock.jpeg?150|Dělení obrazu}} | ||
+ | |||
+ | * rastrový objektový algoritmus | ||
+ | * dělení okna na čtvrtiny, dokud není vyplněn jedním objektem | ||
+ | - žádný objekt v okně => pozadí | ||
+ | - jeden objekt v okně => vykreslit | ||
+ | - více objektů v okně, ale nejbližší překrývá ostatní => vykreslit | ||
+ | - jinak => dělit | ||
+ | |||
+ | === Z-buffer === | ||
+ | |||
+ | {{ :temata:12-3d_objekty:z-buffer.jpeg?150|Z-bufer}} | ||
+ | |||
+ | * rastrový obrazový algoritmus | ||
+ | * ukládá informace o hloubce objektu (Z souřadnice nejbližších bodů) | ||
+ | * rychlý algoritmus, snadná implementace v HW | ||
+ | * každá plocha je zpracovávána pouze jednou => fronta | ||
+ | * využívá předzpracování scény | ||
+ | * využívá color buffer | ||
+ | |||
+ | === Ray tracing === | ||
+ | |||
+ | {{ :temata:12-3d_objekty:raytracing.png?150|Ray tracing}} | ||
+ | |||
+ | * **sledování paprsků** - z kamery se vypouštějí paprsky, sleduje se jejich pohyb, zlom a odraz | ||
+ | * výpočetně hodně náročné - použití u statických scén, filmu ne u her, kdy je potřeba rychlost vykreslování | ||
+ | * je nereálné sledovat všechny paprsky => **Backtracking** => zpětné sledování => procházíme rekurzivně postupně, jak se paprsek odráží | ||
+ | |||
+ | === Ray casting === | ||
+ | * rastrový obrazový algoritmus řešení viditelnosti | ||
+ | * [[#Ray tracing]] prvního stupně | ||
+ | * vrhání paprsků z místa pozorovatele, pozorují se jen primární paprsky, bez odrazů | ||
+ | * urychlení oproti Ray tracingu (snížíme počet paprsků, urychlíme výpočet průsečíků, používáme svazky paprsků, rozdělíme na více částí) | ||
+ | * **použití:** přímé zobrazování CSG modelů, vizualizace voxel modelů | ||
+ | * **nevýhody:** | ||
+ | * ostré stíny | ||
+ | * bodové zdroje světla | ||
+ | * zrcadla (lesklé plochy) sice odrážejí okolí, ale neodráží světlo do okolí => nejsou sekundárními zdroji světla | ||
+ | |||
+ | === Radiozita === | ||
+ | * vystřelování "radiozity" z plošek, které mají nejvíce energie | ||
+ | * ozářené plošky se stávají sekundárními zdroji světla | ||
+ | * rekurzivní opakování dokud se energie neutlumí | ||
+ | * nejkomplexnější řešení viditelnosti | ||
+ | * trvá nejdéle => je třeba respektovat fyzikální vlastnosti světla | ||
+ | |||
+ | ==== Osvětlovací modely ==== | ||
+ | |||
+ | === Lambertův osvětlovací model === | ||
* Empirický model | * Empirický model | ||
* Počítá pouze s difuzí | * Počítá pouze s difuzí | ||
* Ideální difuze, půlkulový odraz do všech směrů | * Ideální difuze, půlkulový odraz do všech směrů | ||
- | * Intenzita difuze závisí na úhlu dopadu paprsku na povrch (kosínové pravidlo){{ :temata:12-3d_objekty:lambert.png?350|}} | + | * Intenzita difuze závisí na úhlu dopadu paprsku na povrch (kosínové pravidlo) |
- | == Phonguv model == | + | |
+ | {{:temata:12-3d_objekty:lambert.png?350|}} | ||
+ | |||
+ | === Phonguv model === | ||
* Empirický model | * Empirický model | ||
* K difuzi přidává reflexi | * K difuzi přidává reflexi | ||
* Ideální reflexe, odraz je symetrický podle normály | * Ideální reflexe, odraz je symetrický podle normály | ||
* Intenzita reflexe závisí na směru odrazu a směru k pozorovateli | * Intenzita reflexe závisí na směru odrazu a směru k pozorovateli | ||
- | * Ambientní složka světla IA, světelný šum, rozptýlené světelné pozadí{{ :temata:12-3d_objekty:phong.png?350|}} | + | * Ambientní složka světla IA, světelný šum, rozptýlené světelné pozadí |
- | == BRDF == | + | |
+ | {{:temata:12-3d_objekty:phong.png?350|}} | ||
+ | |||
+ | === BRDF === | ||
* Fyzikálně založený model | * Fyzikálně založený model | ||
* Realistické zobrazení (Ray-tracing) | * Realistické zobrazení (Ray-tracing) | ||
* Specializace na jednotlivé efekty nebo materiály | * Specializace na jednotlivé efekty nebo materiály | ||
- | * Výpočetnˇe náročnější | + | * Výpočetně náročnější |
- | === Stínování === | + | |
- | == Flat shading == | + | ==== Stínování ==== |
+ | |||
+ | === Flat shading === | ||
* Pro každý polygon se osvětlovacím modelem vyhodnotí středový pixel | * Pro každý polygon se osvětlovacím modelem vyhodnotí středový pixel | ||
* Celý polygon má pak konstantní barvu | * Celý polygon má pak konstantní barvu | ||
- | * Nezohledňuje se zakřivení povrchu objektů{{ :temata:12-3d_objekty:konstant_shading.png?200|}} | + | * Nezohledňuje se zakřivení povrchu objektů |
- | == Goraud shading== | + | |
+ | {{:temata:12-3d_objekty:konstant_shading.png?200|}} | ||
+ | |||
+ | === Goraud shading === | ||
* Pro polygony se osvětlovacím modelem vyhodnotí pixely ve vrcholech | * Pro polygony se osvětlovacím modelem vyhodnotí pixely ve vrcholech | ||
* Při rasterizaci polygonu probíhá interpolace barvy | * Při rasterizaci polygonu probíhá interpolace barvy | ||
- | * Zohledňuje se zakřivení povrchu objektů{{ :temata:12-3d_objekty:goraud_shading.png?200|}} | ||
- | == Phong shading == | ||
- | * Při rasterizaci probíhá interpolace normál z vrcholů | ||
- | * Osvětlovací model se počítá pro každý pixel | ||
* Zohledňuje se zakřivení povrchu objektů | * Zohledňuje se zakřivení povrchu objektů | ||
- | * Velmi kvalitní výsledky, realistické zobrazení{{ :temata:12-3d_objekty:phong_shading.png?200|}} | ||
- | === Vizualizační metody === | ||
- | * Objektové - Objekty scény jsou zpracovávány sekvenčně.Nejsou stíny.Není sekundární osvětlení (od objektů navzájem).Nejsou odrazy. | ||
- | * Obrazové - pixely jsou zpracovávány sekvenčně. Ostré stíny.Není sekundární osvětlení (od objektů navzájem). | ||
- | * Komplexní - scéna je zpracvávána celá najednou. Měkké stíny. Komplexní řešení.\\ {{:temata:12-3d_objekty:vizualizacnimetody.png?550|}} | ||
- | === Z-buffer === | ||
- | * Rastrový obrazový algoritmus | ||
- | * Ukládá informace o hloubce objektu(Z souřadnice nejbližších bodů) | ||
- | * Rychlý algoritmus, snadná implementace v HW | ||
- | === Ray tracing === | + | {{:temata:12-3d_objekty:goraud_shading.png?200|}} |
- | Sledování paprsků - z kamery se vypouštějí paprsky, sleduje se jejich pohyb, zlom a odraz{{:temata:12-3d_objekty:raytracing.png?250|}} | + | |
- | * výpočetně hodně náročné - použití u statických scén, filmu ne u her, kdy je potřeba rychlost vykreslování | + | |
- | * nevýhody:ostré stíny, bodové zdroje světla, zrcadla (lesklé plochy) sice odrážejí okolí, ale neodráží | + | |
- | světlo do okolí, nejsou sekundárními zdroji světla | + | |
- | === Ray casting === | + | |
- | * Rastrový obrazový algoritmus řešení viditelnosti | + | |
- | * Ray tracing prvního stupně | + | |
- | * Vrhání paprsků z místa pozorovatele, pozorují se jen primární paprsky, bez odrazů | + | |
- | * Pomalý, kvalitní výsledky | + | |
- | * Použití: přímé zobrazování CSG modelů, vizualizace voxel modelů | + | |
- | === Radiozita === | + | |
- | * vystřelování "radiozity" z plošek, které mají nejvíce energie | + | |
- | * ozářené plošky se stávají sekundárními zdroji světla | + | |
- | * rekurzivní opakování dokud se energie neutlumí | + | |
- | * nejkomplexnější řešení viditelnosti | + | |
- | * trvá nejdéle | + | |
+ | === Phong shading === | ||
+ | * Při rasterizaci probíhá interpolace normál z vrcholů | ||
+ | * Osvětlovací model se počítá pro každý pixel | ||
+ | * Zohledňuje se zakřivení povrchu objektů | ||
+ | * Velmi kvalitní výsledky, realistické zobrazení | ||
+ | * | ||
+ | {{:temata:12-3d_objekty:phong_shading.png?200|}} | ||
- | {{tag>scorpix IZG grafika 3D}} | + | {{tag>scorpix george IZG grafika 3D}} |
<doodle single login|12> | <doodle single login|12> |