# 4. 3D modelování a datové struktury (90%) ###### tags: `grafika`, `PA010` :::warning * Mnohoúhelníkové a trojúhelníkové sítě: * datové struktury * modelování * filtrování * změna struktury sítě * Implicitní reprezentace a modelování ::: ## Mnohoúhelníkové a trojúhelníkové sítě :::success **Geometrie** * Ovlivněné deformacemi * pozice a tvar vrcholů, hran, stěn ::: :::success **Topologie** * Neovlivněné deformacenmi * konektivita/sousednost mezi různými vrcholy, hranami, stěnami * Topologicky **identické** sítě ![](https://i.imgur.com/kVa6vef.png =300x) * Topologicky **odlišné** sítě ![](https://i.imgur.com/KrewsoN.png =300x) ::: :::success **Manifold** * N-manifold: pro každý bod existuje okolí, které je topologicky ekvivalentní (homeomorfní) otevřené podmnožině n-rozměrného euklidovského prostoru * Plochy jsou 2-Manifold * Pro každý povrchový bod existuje okolí, které je topologicky ekvivalentní s rovinou * ![](https://i.imgur.com/pkzh2Iq.png =250x) ::: :::success **Oritentace** * Orientovatelné povrchy umožňují konzistentní definici orientace ve směru a proti směru hodinových ručiček * Můžeme definovat přední/zadní nebo vnitřní/vnější stranu * U neorientovatelných povrchů se může orientace změnit po průchodu smyčkou povrchu * ![](https://i.imgur.com/Ocmk5Tp.png =400x) ::: :::success **Elementy topologie** * Základní topologické prvky hraničních reprezentací/sítí: * **Vrcholy** $(V)$, **hrany** $(E)$, **plochy** $(F)$ * Kromě toho musíme sledovat: * Genus $(G)$ * Okrajové smyčky hran $(R)$ * Shells $(S)$ ::: :::success **Genus** * $1/2$ Maximálního počtu uzavřených cest které nerozpojí objekt ![](https://i.imgur.com/RAz9Qs2.png =500x) * Informačně - počet rukojetí, dír v donutu ![](https://i.imgur.com/JQZ7Yt0.png =400x) ![](https://i.imgur.com/E2w5zG9.png =400x) ::: :::success **Okrajové smyčky hran** * Označováno jako prstence - Rings $R$ * Okrajové smyčky uvnitř ploch nespojené s vnějšími hranicemi ploch * "Díry" v plochách * $𝑅 = 𝐿 − 𝐹$ * $𝐿$ – all edge loops, $𝐹$ – faces * ![](https://i.imgur.com/mQEEo7f.png =x120) ::: :::success **Shells** * Povrchově spojené komponenty * ![](https://i.imgur.com/W3BDjk9.png =x120) ::: :::success **Eulerova charakteristika** * Eulerova charakteristika $X(M)$ * Popisuje topologii tvaru $M$ * Topologický invariant – nemění se s deformací $M$ * $X(M) = 2$ pro libovolný konvexní mnohostěn * Euler-Poincaré formula * $X(𝑀) = 𝑉 − 𝐸 + 𝐹$ * $𝑉$ – vertices, $𝐸$ – edges, $𝐹$ – faces * Zobecněnější verze pro tvary s otvory * $X(𝑀) = 𝑉 − 𝐸 + 𝐹 − 𝑅 = 2 (𝑆 − 𝐺)$ * $𝑅$ – hraniční okrajové smyčky (rings), $𝐺$ – genus, $𝑆$ – shells * ![](https://i.imgur.com/Y6gqXnd.png =300x) ::: :::success **Implikace polygonální sítě** * Pro uzavřené 2-manifold trojúhelníkové sítě * Každý trojúhelník má přesně 3 hrany * Každý hrana náleží dvěma trojúhelníkům * $E = 3/2 F$ * Z Euler-Poincarého vzorce $V = 2 + E – F$ * Tedy $V = 2+ 3/2F – F = 2 + 1/2 F$ * $V \doteq 1/2 F$ * Poměr $E:F:V \doteq 3:2:1$ * V důsledku toho je průměrný vrcholový stupeň $2E/V = 6$ ::: :::success **Eulerovy operátory** * Operátory topologie zachovávající Euler-Poincarého formuli * Kompletní sada operátorů pro konstrukci topologicky korektní reprezentace * Mezivýsledky nemusí být platnými reprezentacemi tělesa * > ![](https://i.imgur.com/WKpPzny.png =200x) > MSFV make shell, face, vertex > MEV make edge, vertex > MFE make face, edge > MSH make shell, hole > MEKL make edge, kill loop > KEV kill edge, vertex > KFE kill face, edge > KSFV kill shell, face, vertex > KSH kill shell, hole > KEML kill edge, make loop ::: :::success **Regularizované booleovské operátory** * Reprezentace těles lze také upravit pomocí booleovských operací * Booleovská operace s platnými tělesy může vytvořit neplatná tělesa * ![](https://i.imgur.com/v3DUixA.png =400x) * Regularizované booleovské operátory eliminují „visící“ struktury nižší dimenze, které mohou být vytvářeny booleovskými operacemi * AND = Průnik * OR = Spojení * SUB = Rozdíl * Vnitřní body (Fialová) – všechny body $p$ z $A ∩ B$ takové, že otevřená koule o poloměru se středem v $p$ sestává pouze z bodů $A ∩ B$ pro dostatečně malý poloměr. * Hranice (Zelená) – bod $q$, který je hraničním bodem $A ∩ B$ sousedí s vnitřkem, pokud mezi $q$ a dalším bodem $r$ z $A ∩ B$ najdeme úsek křivky $(q; r)$ dostatečně malé délky, takový, že všechny body tohoto segmentu jsou vnitřními body $A ∩ B$, kromě $q$. * Množina $A ∩ B$ je otevřená, obsahuje-li pouze vnitřní body, a uzavřená, obsahuje-li i její hranici ![](https://i.imgur.com/GybhwD9.png =200x) * Regulační kroky: ![](https://i.imgur.com/MzZVA9Y.png =450x) 1. Vypočítejte obvyklou booleovskou operaci. 2. Vypočítejte vnitřek výsledku. * Tento krok odstraní všechny komponenty nižší dimenze. * Výsledkem je těleso bez hranic 3. Vypočítejte uzavření získaného interiéru sečtením všech hraničních bodů sousedících s nějakým vnitřním okolím. ::: :::success Validita hraniční reprezentace * Topologická validita * Orientovatelnost – sousední plochy musí mít správnou orientaci * Eulerovy operátory zachovávají Euler-Poincarého vzorec * Regularizované booleovské operátory zajišťují fyzicky platná tělesa (ale ne nutně manifold) * Geometrická platnost * Numerické chyby v geometrii (např. pozice vrcholů) mohou vést ke konfliktům mezi topologickými a geometrickými informacemi. * Například rovnice roviny říkají, že hrana leží uvnitř tělesa, ale topologie říká, že leží mimo ::: ### Datové struktury :::success **Seznam trojůhelníků** * Jednoduchý * Obsahuje redundantní informace o vrcholu * ![](https://i.imgur.com/aLpqBHL.png =350x) ::: :::success **Seznam bodů / indexované trojúhelníky** * Sdílení vrcholů snižuje využití paměti * Zajistí integritu sítě * Pohyb vrcholu způsobí, že se tento vrchol ve všech polygonech posune * ![](https://i.imgur.com/Qlb8NkG.png =350x) ::: :::success **Matice sousednosti** * Pokud je mezi $v_i$ a $v_j$ hrana, pak $A_{ij} = 1$ * Symetrická pro neorientované jednoduché grafy * Může představovat nemanifoldní sítě * Žádné spojení mezi vrcholem a jeho sousedními plochami * ![](https://i.imgur.com/g5OtGfi.png =300x) ::: :::success **Matice rohů** * Matice všech rohů * Seznam sousedních rohů pro každý vrchol * Dobré pro dotazy na sousedství * Určitá redundance dat, pouze pro trojúhelníkovou síť * ![](https://i.imgur.com/CeDAQpX.png =300x) ::: :::success **Half Edge** * Datová struktura s manifold topologií * Rychlé vyhledávání sousedství * Umožňuje snadnou implementaci úprav sítě * Každá položka neboli half-edge $e$ se skládá z: * Počáteční bod $A$ * Koncový bod $B$ (nepovinný) * Sousední (Twin) half-edge $twin(e)$ * Plocha $face(e)$ * Náledník $next(e)$ * Předchůdce $prev(e)$ (nepovinný) * ![](https://i.imgur.com/5lX4PrS.png =300x) ::: ### Modifikace sítě :::success **Lokální** * **Překlápění hrany** * Nahraďí hranu (b,c) hranou (a,d), trojúhelníky (a,b,c), (b,d,c) se stanou (a,d,c), (a,b,d) * ![](https://i.imgur.com/e7LDj23.png =400x) * Výsledné úpravy sítě: * Změňí se přiřazení ukazatelů pro úpravu vrcholů hran, vrcholů ploch a informací o sousedství * Nebyly přidány ani odstraněny žádné prvky * **Rozdělění hrany** * Vložte střední bod $m$ hrany (b,c), připojte jej k vrcholům $a$ a $d$ * ![](https://i.imgur.com/m0ADAyT.png =400x) * Výsledné úpravy sítě: * Přidány nové prvky: vrchol, hrany, plochy * Změněny/přiřazeny ukazatele podle nových prvků * změneny vrcholy hran a ploch, ukazatele z hran na sousední plochy atd. * **Zhroucení hrany** * Nahraďte hranu $(a,c)$ jedním vrcholem $m$ * ![](https://i.imgur.com/6AYbrHg.png =400x) * Výsledné úpravy sítě: * Odstraňeny prvky: hrana, plochy * Změna přiřazení ukazatelů k úpravě vrcholů hran a ploch ::: :::success **Globální** * **Upsampling**, např. podle dělení, používá rozdělení hran * **Downsampling** pro zjednodušení nebo kompresi, využívá zhroucení hran * **Regularizace** pomocí překlápění hran * **Remeshing**, např. z trojúhelníkové sítě na čtyřúhelníkovou ::: #### **Mesh upsampling (Subdivision)** - Zvýšení počtu vzorků sítě :::success * Vyhlazuje síť opakovaným dělením každého prvku na menší kousky * ![](https://i.imgur.com/eJ4obBu.png =400x) * Nahraďí pozice vrcholů váženým průměrem sousedů * Užitečné při modelování a animaci * Hrubá „kontrolní klec“ pro místní úpravy * Globální dělení pro konečný povrch * Hlavní úvahy: * Interpolace vs. aproximace * Limitní spojitost povrchu (C1, C2, ...) * Chování v nepravidelných vrcholech * Několik různých přístupů * Aproximace (např. Catmull-Clark, Loop subdivision) * Interpolace (např. Butterfly) ::: :::info **Polygonální sítě** * Výhoda - jednoduchá reprezentace 3D modelů * Problém - velký počet polygonů pro hladké povrchy **B-spline plochy** * Hladce spojené polynomiální oblasti aproximující vrcholy řídicí sítě * Síť kontrolních bodů musí být pravidelná * Nemůže popsat povrchy s libovolnou topologií * ![](https://i.imgur.com/rsczKv7.png =200x) **Rekurzivní dělení** * Rekurzivní zjemnění polygonální (kontrolní) sítě přidáním nových vrcholů, hran a ploch (rozdělení původní sítě) * Vytvoření hladkého (mezního) povrchu * ![](https://i.imgur.com/7wJIMDj.png =x80) ::: :::success **Bézierovo dělení** ![](https://i.imgur.com/emF8AkO.png =x100)![](https://i.imgur.com/iz9Xig7.png =x100) ![](https://i.imgur.com/BcFHSqu.png =x150) ![](https://i.imgur.com/3kL4L3w.png =350x) ::: :::success **Pravidelné B-spline dělení** * Kvadratický B-Spline (Chaikin) * Liché koeficienty $(1/4, 3/4)$ * Sudé koeficienty $(3/4, 1/4)$ * Kubický B-Spline (Catmull-Clark) * Liché koeficienty $(4/8, 4/8)$ * Sudé koeficienty $(1/8, 6/8, 1/8)$ ![](https://i.imgur.com/ZJTJVih.png =400x) ![](https://i.imgur.com/ioiHb4Y.png =400x) ::: :::success **Nepravidelné B-spline dělení** * Catmull-Clark * Generaluje Pravidelné B-Spline dělení * ![](https://i.imgur.com/4MlkdTK.png =300x) * ![](https://i.imgur.com/MC41dnw.png =x200)![](https://i.imgur.com/EMwET9r.png =x200)![](https://i.imgur.com/EC9EtcN.png =x200) ::: #### **Mesh downsampling** - Simplifikace :::success * Snížení počtu síťových prvků při snaze zachovat celkový tvar * Úroveň detailů (LOD) * Některé objekty (např. vzdálené) nepotřebují vysokou LOD * Menší LOD zlepšuje výkon, paměťové úložiště * Několik různých přístupů: * Variační tvarová aproximace * Iterativní decimace (odstranění vrcholu nebo zhroucení okraje) ![](https://i.imgur.com/VggSdck.png =300x) ::: :::success **Variační aproximace tvarů** * Shluk povrchových prvků (např. trojúhelníků) do $k$ oblastí * Začneme s náhodnými seedy ($k$ trojúhelníků) * Aplikuje se růst oblastí na základě podobnosti se seedy (blízkost, normální orientace, ...) * Upraví se seedy (naleznou se nejlepší zástupci každé oblasti) * proces se opakuje, dokud se oblasti nestabilizují * Proložte každou oblast rovinou, která minimalizuje chyby z oblasti * Např. vážený průměr normál trojúhelníku * ![](https://i.imgur.com/xXtvEyx.png =400x) ::: :::success **Simplifikace hroucením hran** * Hladový přístup: * Přiřaďí se cena každé hraně * Zhroutí se okraj s nejnižší cenou * Opakuje se, dokud není dosažen cílový počet prvků * Vyžaduje cenovou funkci, např. **metriku kvadrické chyby**: * Kvadrická chyba = součet vzdáleností mezi bodem a rovinou * Pro každou hranu najděte vrchol, který minimalizuje kvadrickou chybu, pak se zhorutí hrana s minimální chybou * ![](https://i.imgur.com/JyE1Mex.png =200x) * ![](https://i.imgur.com/uWmEz3M.png =350x) ::: #### **Mesh resampling** - Regularizace :::success * Upravení distribuci vzorků pro zlepšení kvality ![](https://i.imgur.com/qpfQUL0.png =300x) * Co je „dobrá“ trojúhelníková síť? * Tvar trojúhelníku * ![](https://i.imgur.com/SkBXbtf.png =200x) * Stupěň vrcholu * Trojúhelníkové sítě: ideální je každý vrchol se stupněm 6: ![](https://i.imgur.com/tYk1gut.png =300x) * Sudivision * ![](https://i.imgur.com/LT5YmJf.png =300x) * Delaunay triangulace * Maximalizuje minimální úhel všech úhlů trojúhelníků * Ze všech vrcholových triangulací má nejmenší součet délek všech svých hran * Vyhýbá se dlouhým a tenkým trojúhelníkům * Kružnice/koule opsané trojúhelníky neobsahují žádné další vrcholy * ![](https://i.imgur.com/pamWqpM.png =200x) * Vylepšení tvaru * Překlápění hran * Pokud $α+β > π$, překlopit ![](https://i.imgur.com/1ZLeHMK.png =300x) * V praxi jednoduchý a účinný způsob, jak zlepšit kvalitu sítě * Může změnit původní geometrii * Třeba zvážit úhel originálních trojúhelníků * ![](https://i.imgur.com/pginnrG.png =200x) * Vylepšení stupně * Překlápění hran * Pokud se celková odchylka od stupně 6 zmenší, převrátit ![](https://i.imgur.com/VukmBNe.png =300x) * Iterativní překlápění hran funguje jako „diskrétní difúze“ stupně * Žádné (známé) záruky * Funguje dobře v praxi * Vylepšení tvaru * Vystředíme body ![](https://i.imgur.com/o4KY2Jj.png =400x) * Izotropní remeshing * Opakuj čtyři kroky: * Rozděl hrany delší než 4/3 průměrné délky hrany * Kolapsuj hrany menší než 4/5 průměrné délky hrany * Překlop hrany pro zlepšení stupně vrcholu * Vystřeď body tangenciálně * ![](https://i.imgur.com/UVEpqFU.png =400x) * Klady a zápory Regularizace * Klady * Zlepšuje výkon některých algoritmů * Vyhýbá se dlouhým tenkým trojúhelníkům – žádné problémy s vykreslováním * Žádný vysoký stupeň – žádné subdivision problémy * Zápory: * Ne vždy je to možné nebo vhodné * Může vést ke ztrátě úrovně detailů * ![](https://i.imgur.com/eTb8CKy.png =150x)![](https://i.imgur.com/TH0IjES.png =150x) * Adaptivní remeshing k vyřešení tohoto problému * Adaptivní Remeshing * Regulace sítě s důrazem na LOD * Na základě různých kritérií * Lokální zakřivení (vysoké = vyšší detaily) * Cena/chyba modifikace * Potřebná LOD (např. vzdálenost od kamery) * ![](https://i.imgur.com/GdC7IXf.png =400x) * ![](https://i.imgur.com/TO2yJWp.png =400x) ::: ### Modelování :::success **A.Barr - Globální deformace** * Zavedena hierarchická transformace ploch * Lokální/tangentní transformační matice (Jakobiány) * Lokálně specifikovaná deformace * Prolínání základních deformací (kroucení, ohýbání, zužování) * Dnes běžné ![](https://i.imgur.com/TLtBrZZ.png =350x) ![](https://i.imgur.com/XBh89AV.png =350x) ![](https://i.imgur.com/uUtkvWj.png =350x) ![](https://i.imgur.com/Hovu2IG.png =350x) ::: :::success **Free-form deformace (FFD)** ![](https://i.imgur.com/MenuwHL.png) > [color=#666666] Příklad: > 1. Vytvoří se nástroj FFD (mřížka/mřížka pro Bezierův objem)> > 2. Objekt je umístěn do prostoru FFD (světové souřadnice jsou převedeny na lokální) > 3. Upraví se nástroj FFD (přesunou se body mřížky) > 4. Transformuje se vložený objekt podle změn v prostoru FFD (lokální na světové) * Lze použít pro část modelu * Část modelu je uzavřena v deformační mřížce (objem FFD) * Deformace mřížky mění obsah * ![](https://i.imgur.com/DuBiL5x.png =200x) ::: :::success **Extended Free Form Deformations (EFFD)** Sabine Coquillart (INRIA) ![](https://i.imgur.com/Bl70LD2.png =300x) * Rozšíření techniky FFD * Libovolně tvarované deformace použitím nerovnoběžných mřížek * Stejné principy jako pro deformaci * Klíčovou roli hraje definice mřížky a výpočet lokálních souřadnic $[s, t, u]$ * Mřížka je konstruována z rovnoběžnostěnových a válcových mřížek * Dělení vytváří prvky – „Chunks“ * Chunk je řízen kontrolními body * Topologie musí být zachována * Lokální souřadnicový systém * Chunk definuje svůj vlastní lokální souřadnicový systém * Místní souřadnice nelze vypočítat přímo kvůli obecnému tvaru chunku * Souřadnice mohou být aproximovány * převod na jiný souřadnicový systém * rekurzivní dělení chunků * numerická interace * Iterace Newtonovou metodou s počátečním bodem $X_0 (s,t,u) = (0.5, 0.5, 0.5)$ * Vede k velmi dobré konvergenci (2-3 iterační kroky) * Lze vylepšit pomocí dělení po částech * S degenerovanými kusy nemusí být inverze matice požadovaná Newtonem možná, * Používá se metoda pseudoinverzní matice ::: :::success **Animované FFD** * Dvě varianty * Nástroj pohybující se kolem objektu – lokální deformace * Pohyb objektu uvnitř mřížky – globální deformace ::: :::success **Axiální deformace** ![](https://i.imgur.com/OUQDaV2.png =300x) ![](https://i.imgur.com/V3Rnlc0.png =300x) * Fáze 1: 1. Definujeme původní křivku (osu) a parametry definující rozsah vlivu. 2. Připojíme všechny vrcholy objektu k ose, tj. najdeme nejbližší body $S(t_i)$ na křivce. 3. V každém bodě osy definujeme lokální souřadnicový rám * Rotace minimalizující ortogonální rám (např. Frenet frame) * Fáze 2: 1. Deformujeme křivku a aplikujeme změny na ovlivněné vrcholy pomocí lokálních rámových transformací. ::: :::success FFD s **Catmull-Clark objemy (CCV)** ![](https://i.imgur.com/TWs9ure.png) * mřížka: vrchol, hrana, plocha, buňka Příklad: * Sestrojíme mřížku obsahující původní povrch. * Pomocí n-kroků dělením CC zpřesníme mřížku na menší buňky. * Pro všechny definující body původního povrchu: 1. Najdeme buňku rafinované mřížky obsahující tento bod, $P(x,y,z)$ a označíme jej indexem buňky. 2. Vypočítáme trilineární parametrizaci u,v,w bodu $P(x,y,z)$ uvnitř buňky, např. numerickou iterací počínaje (0,5, 0,5, 0,5). 3. Deformujeme původní mřížku 4. Upřesníme ji v n-krokovém dělení, abychom získali nové pozice buněk. 5. Pomocí indexu najdeme odpovídající buňku a pomocí $(u,v,w)$ spočítáme novou polohu deformovaného bodu $P_{cjd}(u,v,w)$. * ![](https://i.imgur.com/32v5btJ.png) ::: :::success **De Casteljau** FFD ![](https://i.imgur.com/nPmjv2x.png =300x) ![](https://i.imgur.com/5yib2to.png =150x)![](https://i.imgur.com/3IgiSCs.png =150x)![](https://i.imgur.com/Djrcod3.png =150x) ::: :::success **Dráty** (Wires) – deformace na povrchu ![](https://i.imgur.com/b9Z0WqK.png =300x) * Drát je definován jako n-tice $(W,R,s,r,f)$ * $W$ – parametrická křivka volného tvaru (drátová křivka) * $R$ – parametrická křivka volného tvaru (referenční křivka) * $s$ – skalární, které řídí radiální škálování kolem křivky * $r$ – skalární definující poloměr vlivu * $f$ – funkce skalární hustoty, * alespoň $C^1$ * monotónně klesající * $f(0)=1$, $f(x)=0$ pro $x \geq 1$ * $f '(0)=0$, $f '(1)=0$ ::: :::success **Sweep-based** FFD ![](https://i.imgur.com/VDBTPTE.png =300x) * vyberou se části, které se mají deformovat * Vytvoří se klíčové průřezy rovinami vybrané části polygonálního modelu * ![](https://i.imgur.com/FODqfFP.png =300x) * Vyberou se průřez na potaženém povrchu * Aplikují se afinní transformaci na průřez * ![](https://i.imgur.com/Ib21RWW.png =300x) ::: ### Rekonstrukce :::success * Rekonstrukce 3D modelu z mračen bodů * Potřebuje se vypořádat s mnoha problémy * Nerovnoměrné vzorkování * Chybějící data * Šum a odlehlé hodnoty * Zdrojová data mohou obsahovat další informace * Normály * Barva * Tvarová omezení (CAD, architektura) * ![](https://i.imgur.com/TlgzHhb.png =200x) * Různé přístupy založené na dostupných datech a cílech * Interpolace (založená na Delaunay) * Aproximace (implicitní funkce, CSG, rozdělení prostoru...) * ![](https://i.imgur.com/UHXY2eG.png) ::: ### Filtrování :::success * Odstranění šumu, zdůraznění důležitých vlastností * Podobné jako filtrování obrázků (PB130, PV131) * Gaussův filtr * Vážený průměr vrcholů * Vyhlazuje také hrany * Bilaterální filtr * Zachovává hrany * Spektrální filtrování * Založeno na eigen-decomposition * Atd. * ![](https://i.imgur.com/evWKGFn.png =400x) ::: ## Implicitní reprezentace a modelování :::info * Definované reálnou funkcí * Klasifikuje body v prostoru * Implicitní povrchy vs. polygony * Hladší * Kompaktní reprezentace, méně primitiv * Obtížnější zobrazení v reálném čase * Implicitní povrchy vs. parametrické pláty * Snazší spojování * Bez topologických problémů * Nižší stupeň * Obtížnější parametrizace * Snadnější sledování paprsku ::: :::success **Rovina jako implicitní povrch** * Rovina ohraničuje poloprostor * Určena bodem $p$ a normálou $N$ * $f(x) = (x-p)\cdot N$ je vzdálenost bodu od roviny, pokud $||N||$ = 1$ ::: :::success **Kvadriky** * Elipsoid (koule) * Válec * Hyperboloid (Kužel) * Paraboloid * Torus ::: :::success **Distanční povrchy** * Koule: $d(x,$ bod$) – r$ * Cylindr: $d(x,$ přímka$) – r$ * Sfylindr: $d(x,$ úsečka$) – r$ * Torus: $d(x,$ kružnice$) – r$ * Obecný cylindr: $d(x,$ křivka$) – r$ * Ofsetový povrch: $d(x,$ povrch$) – r$ ::: :::success **CSG s implicitními objekty** * Předpoklad: $f < 0$ = uvnitř objektu * CSG operace pomocí min/max operací * Sjednocení: $min(f,g)$ * Průnik: $max(f,g)$ * Doplněk: $-f$ * Rozdíl: $max(f,-g)$ * C1 nespojitost ::: :::success **Bloby (kapky)** * Součet Gaussových křivek * $B_i$ – „kapkovitost“ (pozitivní) * $R_i$ – poloměr kapky v klidu * $r_i$ – funkce poloměru \begin{align*} r_i^2 (x,y,z) &= (x-x_i)^2 + (y-y_i)^2 + (z-z_i)^2 \\ f(x,y,z) &= -1 + \sum_i exp(-B_i) \frac{r_i^2 (x,y,z)}{R_i^2} + B_i) \\ f(x,y,z) &= -1 + \sum_i D(r_i) \end{align*} * ![](https://i.imgur.com/UXt8JQJ.png =150x) * ![](https://i.imgur.com/VjQXDmv.png =350x) ::: :::success **Metaballs** * Omezení potenciálové funkce, nahrazení exponenciály * $\alpha$ - měřítko \begin{align*} D(r_i)= \begin{cases} \alpha(1 - \frac{3r_i^2}{R_i^2}) \quad \quad & 0 \leq r_i \leq R_i/3 \\ \frac{3\alpha}{2} (1 - \frac{r_i}{R_i})^2 & R_i/3 \leq r_i \leq R_i \\ 0 & R_i \leq r_i \end{cases} \end{align*} * ![](https://i.imgur.com/uvPIQst.png =200x) :::