Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
mgr-szz:in-gra:16-gra [2016/06/09 15:24] haf vytvořeno |
mgr-szz:in-gra:16-gra [2020/04/12 16:56] |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | ====== Zadanie ====== | ||
- | Parametrické plochy. Plochy dané okrajem, Bezierovy plochy, B-spline plochy, NURBS. Plátování, hladké navázání. Implicitní povrchy. | ||
- | ====== Vypracovanie ====== | ||
- | |||
- | Vyjadrenie plochy môže byť podobne ako u krivky len s doplnením ďalšej dimenzie -- //explicitné//, //implicitné// a //parametrické//. | ||
- | |||
- | **Explicitne** zadaná plocha je vyjadrená funkciou <math>z = f(x,y)</math>. | ||
- | |||
- | **Implicitne** zadaná plocha je vyjadrená rovnicou <math>F(x,y,z) = 0</math> (podrobnejšie v časti o implicitných plochách). | ||
- | |||
- | **Parametrickým** vyjaderním plochy <math>Q(u,v)</math> je bodová rovnica dvoch parametrov <math>u</math> a <math>v</math> nadobúdajúcich hodnoty z intervalu <math><0,1></math>, ktorá je zadaná ako <math>Q(u,v) = [x(u,v), y(u,v), z(u,v)]</math>. | ||
- | |||
- | //**Dotykový vektor** (tečný vektor)// <math>\vec{q_{u}}(u,v)</math> v smere parametru <math>u</math> k ploche <math>Q(u,v)</math> a dotykový vektor <math>\vec{q_{v}}(u,v)</math> v smere parametru <math>v</math> sú určené vzťahmi | ||
- | <math>\vec{q_{u}}(u,v) = \frac{\partial Q(u,v)}{\partial u}) = \left(\frac{\partial x(u,v)}{\partial u}, \frac{\partial y(u,v)}{\partial u}, \frac{\partial z(u,v)}{\partial u}\right)</math>, | ||
- | <math>\vec{q_{v}}(u,v) = \frac{\partial Q(u,v)}{\partial v}) = \left(\frac{\partial x(u,v)}{\partial v}, \frac{\partial y(u,v)}{\partial v}, \frac{\partial z(u,v)}{\partial v}\right)</math>. | ||
- | |||
- | Rovnica //**dotykovej roviny** (tečné roviny)// je určené ako <math>T(r,s) = Q(u,v) + r.\vec{q_{u}} + s.\vec{q_{v}}; r,s \in R</math>. | ||
- | //**Skruty** (skrutové vektory)// charakterizujú "vyklenutie" plochy v miestach napojenia. Sú definované pomocou zmiešaných parciálnych derivácií ako <math>\vec{q_{uv}}(u,v) = \frac{\partial^{2}Q(u,v)}{\partial u \partial v}</math>. | ||
- | //**Normálu** (kolmicu)// k ploche v bode <math>Q</math> určíme ako normalizovaný vektorový súčin dotykových vektorov, teda <math>\vec{n} = \frac{\vec{q_{u}} \times \vec{q_{v}}}{|\vec{q_{u}} \times \vec{q_{v}}|}</math>. | ||
- | |||
- | //**Hlavná krivka** plochy// v smere parametru <math>u</math> je každá krivka určená rovnicou <math>Q(u,k)</math> pevného parametru <math>k</math> a premenného parametru <math>u</math>. Analogicky to platí aj pre hlavnú krivku v smere parametru <math>v</math>. //**Rohy** plochy// sú body <math>Q(0,0)</math>, <math>Q(1,0)</math>, <math>Q(0,1)</math> a <math>Q(1,1)</math>. //**Strany** plochy// <math>Q(u,v)</math> sú hlavné krivky v oboch smeroch, kde pevný parameter má hodnotu <math>0</math> alebo <math>1</math>. Všetky strany dohromady tvoria //**okraj** plochy//. | ||
- | |||
- | Analógiou naväzovania segmentov a ich skladania do krivky aj plochy sa skladajú z častí, ktoré voláme //**pláty**//. Naväzovanie plôch sa nazýva //plátovanie//. AJ pri plochách rozoznávame parametrickú spojitosť <math>C</math> a gemometrickú spojitosť <math>G</math>. Napríklad dva pláty sú <math>C^{1}</math> spojité, ak majú spoločnú stranu a priečne parciálne derivácie vo všetkých bodoch spoločnej strany sú zhodné. | ||
- | |||
- | Plochy sa zadávajú //riadiacimi bodmi// a //bázovými funkciami//. Väčšinou sa používajú plochy //**aproximačné**//. Interpolácia vo viac ako dvoch dimenziách je náročná a vyžaduje rozsiahle výpočty. //**Interpolačná**// plocha <math>P_{ij}</math> má <math>(m + 1) \times (n + 1)</math> bodov. Interpoláciou vektorovým polynómom je možné plochu zapísať ako <math>\vec{P}(u,v) = \sum_{i=0}^{m} \sum_{j=0}^{n} b_{ij}.u^{i}.v^{j}</math>. | ||
- | |||
- | Na aproximačné vyjadrenie plôch sa používajú tzv. //12-vektorový Hermitovský plát// alebo //16-vektorový// (obsahuje navyše 4 skrutové vektory v každom rohu plátu). | ||
- | |||
- | ===== Plochy zadané okrajom ===== | ||
- | |||
- | Plochy môžu byť zadané aj pomocou všetkých kriviek určujúcich //okraj//, napr. 4 v prípade štvoruholníkového plátu. | ||
- | |||
- | //**Bilineárna Coonsova plocha**// je jednoznačne určená štyrmi krivkami <math>P(u,0)</math>, <math>P(u,1)</math>, <math>P(0,v)</math> a <math>P(1,v)</math>, ktoré musia tvoriť uzavretý okraj budúceho plátu. | ||
- | Rovnica, ktorá určuje bilineárnu Coonsovu plochu sa dá zjednodušene zapísať v tvare <math>[1-u,-1,u].\mathbf{C}.[1-v,-1,v]^{T} = 0</math>, kde bod uprostred matice <math>\mathbf{C}</math> je hľadaným riešením tejto implicitnej rovnice. Na výpočet bilineárnej plochy však slúži explicitné vyjadrenie tejto rovnice, ktoré môžeme vidieť na obrázku spolu s grafickým znázornením výpočtu. Zásadným problémom plochy je, že zo zadaného okraja nie je možné jednoducho vyjadriť priečne dotykové vektory a teda nie je ľahké vytvoriť hladké spojenie dvoch takýchto plátov. | ||
- | |||
- | {{:mgr-szz:in-gra:biCoons_surface.jpg?450|Bilineárna Coonsova plocha}} | ||
- | |||
- | //**Bikubická plocha**// je rovnako určená štyrmi krivkami, ale popísaná vzťahom <math>[F_{1}(u),-1,F_{2}(u)].\mathbf{C}.[F_{1}(v),-1,F_{2}(v)]^{T} = 0</math>, kde dané funkcie predstavujú Hermitovské polynómy <math>F_{1}(t) = 2t^{3} - 3t^{2} + 1</math> a <math>F_{2}(t) = -2t^{3} + 3t^{2}</math>. Pre rovnaké dôvody ako v predchádzajúcom prípade, ani tieto plochy sa nepoužívajú na plátovanie so spojitou prvou deriváciou. | ||
- | |||
- | Až //**všeobecná bikubická plocha**// (po česky //obecná//) umožňuje hladké naväzovanie plátov, keďže je pri nej potrebné zadávať aj dotykové vektory podľa okraja. Okrem 4 spomínaných kriviek ju preto určujú aj priečne vektory pozdĺž okrajov <math>\vec{p_{v}}(u,0)</math>, <math>\vec{p_{v}}(u,1)</math>, <math>\vec{p_{u}}(0,v)</math> a <math>\vec{p_{u}}(1,v)</math>. Ďalej je tiež určená skrutmi v jednotlivých rohoch, teda vektormi <math>\vec{t}(0,0)</math>, <math>\vec{t}(0,1)</math>, <math>\vec{t}(1,0)</math> a <math>\vec{t}(1,1)</math>. | ||
- | Vzťah pre všeobecnú bikubickú plochu je rozšírený o ďalšie dva Hermitovské polýnómy tretieho stupňa <math>F_{3}(t) = t^{3} - 2t^{2} + t</math>, <math>F_{4}(t) = t^{3} - t^{2}</math> a implicitná rovnica plochy má tvar <math>[F_{3}(u),F_{1}(u),-1,F_{2}(u),F_{4}(u)].\mathbf{C}.[F_{3}(v),F_{1}(v),-1,F_{2}(v),F_{4}(v)]^{T} = 0</math>. | ||
- | |||
- | ===== Bézierove plochy ===== | ||
- | |||
- | Bézierove plochy používajú niektoré modelovacie systémy k reprezentácii povrchu telies, pretože sú ľahko diferencovateľné, jednoducho sa modelujú a tiež je pomerne ľahko môžné vypočítať priesečník s lúčom. Tieto plochy sú vlastne špeciálnym prípadom zložitejšej reprezentácie povrchov pomocou NURBS. | ||
- | |||
- | Na obrázku vidíme definíciu Bézierovej plochy, kde bázové funkcie <math>B_{i}^{m}</math> a <math>B_{j}^{n}</math> predstavujú Bernsteinove polynómy <math>m</math>-tého (resp. <math>n</math>-tého) stupňa. | ||
- | |||
- | {{:mgr-szz:in-gra:bezier_surface_1.jpg?350 |Všeobecný Bézierov plát}} | ||
- | {{:mgr-szz:in-gra:bezier_surface_2.jpg?450|Napojenie Bézierových plôch}} | ||
- | |||
- | Bézierova plocha pri zmene jedného riadiaceho bodu zmení celý svoj tvar. Táto vlastnosť je nevýhodná, a preto sa plochy plátujú. Pre napojenie plátov so spojitosťou nultého stupňa musíme zabezpečiť stotožnenie riadiacich bodov, ktoré určujú príslušnú stranu. Na obrázku vidíme príklad napojenia s geometrickou spojitosťou prvého stupňa (<math>G^{1}</math>), ktorá vzniká vtedy, ak sú priečne dotykové vektory lineárne závislé. | ||
- | |||
- | Metódou na zobrazovanie Bézierových plôch je polygonizácia založená na princípe rekurzívneho delenia (//patch splitting//), pričom sa využíva algoritmus deCasteljau. | ||
- | |||
- | ===== B-spline plochy ===== | ||
- | |||
- | Pre modelovanie sú //**B-spline plochy**// oveľa výhodnejšie, pretože sa naväzujú omnoho jednoduchšie než Hermitovské alebo Bézierove pláty. B-spline plochy <math>n</math>-tého stupňa totiž zaručujú <math>C^{n-1}</math> spojitosť vo všetkých svojich bodoch. ďalšou výhodou je, že zmenou jedného riadiaceho bodu zmeníme vždy iba časť danej plochy. | ||
- | |||
- | {{:mgr-szz:in-gra:bspline_surface.jpg?450|Napojenie B-spline plôch}} | ||
- | |||
- | Medzi vlastnosti B-spline plochy patrí: | ||
- | * celá plocha leží v konvexnej obálke svojich riadiacich bodov, | ||
- | * pri zmene riadiaceho bodu sa zmenia iba pláty, ktoré sú ním určené | ||
- | * plocha síce všeobecne neprechádza krajnými bodmi plochy, je to ale možné dosiahnuť násobnými riadiacimi bodmi | ||
- | * sú invariantné k lineárnym transformáciam (otočenie, posun, zmena mierky, skosenie) | ||
- | |||
- | |||
- | |||
- | |||
- | ===== NURBS plochy ===== | ||
- | |||
- | //**Neuniformné racionálne B-spline plochy**// sú zovšeobecnením B-spline plôch a predstavujú dnes štandard v priemyslovom modelovaní. Umožňujú definovať širokú škálu plôch, napr. voľne tvarovateľné plochy na báze racionálnych polynómov (//free form surfaces//) alebo plochy založené na priamkách a kuželosečkách. Aj ich vznik datujeme do polovice 20. storočia pre potreby presnej matematickej reprezentácie tvaru karosérie áut, trupu lodí či lietadiel. | ||
- | |||
- | {{:mgr-szz:in-gra:nurbs_surface_1.jpg?400|NURBS plocha}} | ||
- | |||
- | Z definície, <math>N_{i}^{k}(u)</math> a <math>N_{j}^{l}(v)</math> sú normalizované B-spline bázové funkcie (<math>k</math>, <math>l</math> sú stupne polynómu) a <math>\omega_{i,j}</math> sú váhy jednotlivých bodov (homogénne súradnice) riadiace siete <math>\mathbf{P}</math>. Váhy podobe ako v prípade kriviek určujú vplyv riadiaceho bodu na plochu, pričom so zvyšujúcou sa hodnotou váhy sa plocha k bodu primkýna. Podobne ako Bézierove plochy, aj NURBS sú invariantné k lineárnym transformáciam a vďaka racionalite sú naviac invariantné aj k perspektívnej projekcii. | ||
- | |||
- | {{ :mgr-szz:in-gra:nurbs_surface_2.jpg?280|Rotačná plocha}} | ||
- | |||
- | O plochách NURBS hovoríme aj v prípade modelovacej techniky zvanej //**šablónovanie** (sweeping)//, kde patria napríklad: | ||
- | * //**translačné šablónovanie**// - obrys je ľubovoľný a trajektória, po ktorej je obrys ťahaný je úsečka, dostávame tzv. //priamkové plochy// popísané vzťahom <math>Q(u,v) = (1-u).P(0,v) + u.P(1,v)</math>, typy translačného šablónovania sú -- po úsečke s nemeniacou sa profilovou krivkou (//extruded surface//), po úsečke medzi danými profilmi (//ruled surface//) a poťahovanie (//skinning//), | ||
- | * //**rotačné šablónovanie**// - obrys je ľubovoľný a trajektória, po ktorej je obrys ťahaný je kružnica alebo jej časť -- toto teleso je možné získať aj rotáciou okolo osi, výsledkom je //rotačná plocha// (viď obrázok), | ||
- | * //**všeobecné šablónovanie**// - obrys i trajektória je ľubovoľná, získavame //zovšeobecnenú valcovú plochu//. | ||
- | |||
- | ===== Implicitné povrchy ===== | ||
- | |||
- | Implicitné vyjadrenie plochy tvorí alternatívu k povrchu definovanom pomocou polygónov alebo parametrických plátov. Výhodou je napríklad kompaktnejšia reprezentácia či jednoduchšie sledovanie lúča (paprsku). Výpočet sledovania lúča je ale časovo náročný, rovnako je náročné aj zobrazovanie plochy v reálnom čase. Väčšina zobrazovacích metód v konečom dôsledku aj tak prevádza implicitné plochy na parametrické vyjadrenie alebo rovinné plošky, tzv. //polygonizácia implicitných plôch//. | ||
- | |||
- | Funkcia <math>f(x,y,z)</math> priraďuje každému bodu v priestore nejakú skalárnu hodnotu a definuje teda skalárne pole. Nami hľadaný objekt je //izoplocha//, teda množina bodov s rovnakou funkčnou hodnotou. Ak <math>f = 0</math>, bod leží //na povrchu// plochy. Ak <math>f < 0</math> alebo <math>f > 0</math>, možeme hovoriť, že bod leží //vo vnútri// (alebo //vonku//) objektu ohraničeného plochou, no ktorá hodnota označuje čo, už závisí na konkrétnom kontexte. | ||
- | |||
- | //Normály povrchu// sú obvykle určené //**gradientom**// príslušnej funkcie, teda <math>\nabla f(x,y,z) = \left(\frac{df}{dx}, \frac{df}{dy}, \frac{df}{dz}\right)</math>. | ||
- | |||
- | Medzi implicitné povrchy zaraďujeme //**blobby objekty** (kvapky)// od J. Blinna, //**metaballs**// či //**soft objects**// od Wyvilla. | ||
- | |||
- | Príkladom implicitnej plochy (množiny bodov <math>P</math> v trojrozmernom priestore) je //guľová plocha// zadaná implicitnou rovnicou <math>Q(P) = x^{2} + y^{2} + z^{2} = r^{2}</math>. | ||
- | |||
- | Implicitné plochy môžu byť reprezentované aj takzvanými //**dištančnými povrchmi**// (viď zoznam na obrázku). | ||
- | |||
- | {{:mgr-szz:in-gra:dist_surface.jpg?250|Dištančné povrchy}} | ||
- | |||
- | ===== Delené povrchy ===== | ||
- | |||
- | Modely sú reprezentované pomocou mnohouholníkov, avšak len málokedy majú objekty reálneho sveta ostré hrany. Pri modelovaní pomocou polygónov nastávajú problémy s úrovňou detailov. Aj keď model aproximujeme dostatočným množstvom polygónov, pri zväčšení sa problém hrán znovu objaví. Riešením je delenie povrchov. | ||
- | |||
- | Polygonálna sieť je množina vrcholov a prepojení medzi nimi, čím definuje topológiu povrchu a vymedzuje jednotlivé plošky. Delenie je rekurzívny proces, pri ktorom je polygónová sieť zjemňovaná pridávaním vrcholov a plošiek. Pri zvyšovaní počtu vrcholov síce dochádza k výraznému spomaleniu a takéto modely sú pamäťovo náročné, ale aj napriek tomu je zjemňovanie siete významné pri tvorbe animácií a statických modelov. Generované povrchy, kedy zvyšujeme úroveň detailov sa nazývajú //**delené povrchy** (subdivision surfaces)//. | ||
- | |||
- | Povrchy môžeme //**deliť nad poškami**// alebo //**deliť nad vrcholmi**//. Dôležitým faktorom pri delení povrchov je //topológia// polygónovej siete. Môže sa jednať napríklad o trojuholníkovú sieť, štvorcovú sieť alebo sieť s ľubovoľnou topológiou. Obidve nasledujúce prezentované deliace schémy však dokážu deliť povrchy s ľubovoľnou topológiou, čo je ich veľká výhoda. | ||
- | |||
- | === Doo-Sabin === | ||
- | Doo-Sabin je aproximačná deliaca schéma používajúca delenie nad vrcholmi. | ||
- | |||
- | {{ http://upload.wikimedia.org/wikipedia/commons/thumb/5/56/DooSabin_subdivision.png/800px-DooSabin_subdivision.png?400|Kubické Hermitovské polynómy}} | ||
- | |||
- | //Ploškový bod// je vypočítaný ako priemer všetkých vrcholov plošky podľa vzťahu <math>V_{F} = \frac{1}{N} \sum_{i=1}^{N} V_{i}</math>. Pre každý vrchol potom vypočítame nový vrchol prislúchajúci k pôvodnému ako priemer ploškového bodu, pôvodného vrcholu a stredu hrán, ktoré z neho vychádzajú, teda <math>V' = \frac{V + V_{F} + M_{E1} + M_{E2}}{4}</math>. Takto vznikajú 3 typy nových plošiek -- //**plošková**// (červená), //**hranová**// (žltá) a //**vrcholová**// (modrá). | ||
- | |||
- | Povrchy generované delením Doo-Sabin spĺňajú podmienku <math>C^{1}</math> spojitosti (okrem hranice, kde je sieť otvorená). | ||
- | |||
- | === Catmull-Clark === | ||
- | (Tu môžete spomenúť, docent Sochor to má rád ;-), oskarový krátkometrážny animovaný film od štúdia Pixar "//Geriho hra (1997)//", ktorý režíroval český rodák Jan Pinkava a pri jeho tvorbe bola naplno využitá práve deliaca schéma Catmull-Clark (viac informácií v článku [[http://graphics.pixar.com/library/Geri/paper.pdf]]).) | ||
- | |||
- | {{ :mgr-szz:in-gra:delenie_surface.jpg?450|Delenie plochy - výpočet nových vrcholov}} | ||
- | |||
- | Catmull-Clark je aproximačná deliaca schéma používajúca delenie nad ploškami. | ||
- | |||
- | Podobne ako pri delení Doo-Sabin, aj tu si spočítame //**poškový bod**// <math>V_{F}</math>, avšak zatiaľ čo v predchádzajúcom prípade plnil len funkciu medzivýsledku pri výpočte nových bodov, teraz sa stáva súčasťou výslednej zjemnenej siete. Ďalej určíme //**hranový bod**// <math>V_{E}</math> ako priemer vrcholov hrany a ploškových bodov podľa vzťahu <math>V_{E} = \frac{E_{1} + E_{2} + V_{F1} + V_{F2}}{4}</math>. Posledný typ bodu, ktorý musíme spočítať je //**vrcholový bod**// <math>V_{V}</math> zjednodušene vyjadrený vzťahom <math>V_{V} = \frac{Q + 2R + S.(n-3)}{n}</math>, kde <math>Q</math> je priemer nových stenových bodov na stenách priľahlých k vrcholu, <math>R</math> je priemer nových hranových bodov a <math>S</math> je pôvodný vrchol. | ||
- | |||
- | Povrchy generované delením Catmull-Clark spĺňajú podmienku <math>C^{1}</math> spojitosti (mimo výnimočné vrcholy dokonca až spojitosť <math>C^{2}</math>). |