3D modelování a datové struktury

Editovat
Note

Mnohoúhelníkové a trojúhelníkové sítě: datové struktury, modelování, filtrování, změna struktury sítě, zjednodušování sítě. Implicitní a parametrické reprezentace a modelování (SDF, CSG, B-Rep).

PA010

Mnohoúhelníkové a trojúhelníkové sítě

Základní pojmy

Geometrie
  • Mění jí deformace.

  • Např. to, kde jsou body.

  • Zahrnuje zakřivení (curvature), plochu (area), vzdálenosti mezi body, atd. [1]

Topologie
  • Nemění ji deformace.

  • Např. to jak jsou body propojené.

  • Sousednost (neighborhood), souvislost (connectedness), adjacency. atd. [1]

    Topology
    Obrázek 1. Topology [7]
Topological manifold

Prostor/útvar, který lokálně připomíná (je homeomorfní) -dimenzionální Euklidovský prostor. [1] [4]

-manifold je takový topologický manifold, kde okolí každého bodu je homeomorfní s -dimenzionálním Euklidovským prostorem. [4]

Manifoldy jsou typicky fyzikálně validní a efektivní (např. pomocí half-edge).

  • Souřadnicový prostor je -manifold.

  • Libovolný diskrétní prostor je 0-manifold.

  • Kruh je 1-manifold.

  • Torus (donut) a Kleinova láhev je 2-manifold (povrch).

  • Každý povrch je 2-manifold až na neuzavřené hrany. [1]

  • -dimenzionální koule je -manifold.

    szp04 manifold
Orientability / orientace
  • Orientable surfaces allow consistent definition of clockwise and counter-clockwise orientation.

    • We can define front/back or inner/outer side.

  • In non-orientable surfaces, the orientation can change after running through a surface loop.

— PA010
Příklad 1. Möbiova páska a Kleinova láhev

Möbiova páska je neorientovatelná, protože po oběhnutí pásu se změní orientace.

Kleinova láhev je orientovatelná, protože po oběhnutí láhve se orientace nezmění.

Möbiova páska Kleinova láev

Elementy topologie
  • Vertices (vertexy / vrcholy) (V)

  • Edges (hrany) (E)

  • Faces (stěny) (F)

  • Genus (G)

  • Edge loops (L)

  • Boundary edge loops (rings, R)

  • Shells (S)

Genus
  • Počet "děr" v povrchu.

  • Počet "držadel" v povrchu.

  • Počet skupin křivek, které nelze stáhnout do bodu.

    Genus of an orientable surface is the maximum number of cuttings along nonintersecting simple closed curves without separating it.

    — PA010
    Tip

    Podle Wikipedie je genus česky rod plochy.

    Tip

    Je to maximální počet těch řezů.

    Následující povrch[6] jde rozdělit podél červené křivky na dva, ale neuvažujeme ji, protože chceme nejvyší možný počet řezů, které povrch nerozdělí.

    szp04 genus
Boundary edge loops / rings

Edge loops uvnitř stěn, které nejsou vnějšími hranicemi objektu.

"Díry" ve stěnách, ale není to genus.

szp04 rings
Shells (S)

Spojené komponenty povrchu (množiny stěn).

szp04 shells
Eulerova charakteristika / Euler-Poincaré formula

Eulerova charakteristika popisuje topologický prostor či geometrický útvar . Je to topologický invariant — nezmění se jakkoli je tento útvar pozohýbán.

Important

Pro libovolný mnohostěn (polyhedron) bez děr je .

Important

Pro uzavřený 2-manifoldní trojúhelníkový mesh:

Každý trojúhelník má 3 hrany a každá hrana je sdílena dvěma trojúhelníky, takže .

Tip
Intuitivně: pokud jsme neúsporní, pak máme tři hrany pro každý trojúhelník (), každou hranu ale "přilepíme" k nějakému dalšímu trojúhelníku, takže každou hranu máme zbytečně dvakrát (), proto , tedy .

Z Euler-Poincaré plyne, že

  • Tedy platí poměr .

  • Tedy průmeřný vertex degree (počet hran, které vycházejí z vertexu) je .

Tip

Každá hrana (ve 2-manifoldu) přispívá k degree právě dvou vertexů, protože někde začíná a končí.

Kdybychom sečetli degree všech vertexů, dostali bychom , proto .

Simplex

Nejjednodušší polytop (generalizace mnohoúhelníku, mnohostěnu, atd.). Generalizace trojúhelníku v libovolné dimenzi:

  • 0D — bod

  • 1D — úsečka

  • 2D — trojúhelník

  • 3D — tetraedr

  • 4D — 5-cell (5nadstěn)

Datové struktury

Seznam trojúhelníků / list of triangles (polygon soup)

Jednoduchý, ale obsahuje redundantní informace. Neříká nic o sousednosti.

Indexed face set

Vrcholy trojúhelníků jsou dány pomocí indexů do pole vertexů. Méně redundantní, ale neříká nic o sousednosti.

Adjacency matrix

Matice vertexů říkající, zda-li je mezi vertexy hrana. Nijak nereprezentuje faces.

szp04 adjacency matrix
Corner table / tabulka rohů

Pro každý vertex udává sousední rohy. Fajn, pokud nás zajímá sousednost vertexů. Trochu redundantní. Použitelná jen pro trojúhelníkové sítě.

  •  — vertex rohu,

  •  — trojúhelník rohu,

  •  — následující roh trojúhelníku,

  •  — předchozí roh trojúhelníku,

  •  — opačný roh v sousedním trojúhelníku (opačný roh kdyby to byl quad).

  •  — "pravý" roh v sousedním trojúhelníku,

  •  — "levý" roh v sousedním trojúhelníku.

szp04 corner table
Half-edge data structure

Použitelná pro 2-manifoldy. Poskytuje rychlé hledání sousednosti. Umožňuje efektivní modifikace meshů.

record HalfEdge // e.g. e
{
    Vertex Start { get; set; } // e.g. A
    // NB: End is optional since you can easily access Twin.Start.
    Vertex End { get; set; } // e.g. B
    HalfEdge Twin { get; set; }

    HalfEdge Next { get; set; }
    // NB: Prev is optional since you can easily access Next.Next.
    HalfEdge Prev { get; set; }
    Face Face { get; set; }
}
szp04 half edge

Modelování

Important
Tahle sekce má docela průnik s otázkou Modelování 3D postav.
Boundary representation model (B-rep)

Modelování objektů pomocí jejich hranic — boundaries (hrany, stěny, atd.).

Polygonální síť / mesh

Síť trojúhelníků. Hrany jsou vždy rovné. Potřebuje velké množství polygonů na hladké povrchy.

B-spline plochy

Vertexy řídící sítě slouží k aproximaci křivek. Nedokáže popsat libovolnou topologii.

Topologická validita
  • B-rep model splňuje Euler-Poincaré formuli. (Což neimplikuje, že je 2-manifold.)

  • Sousedící faces mají stejnou orientaci.

  • Žádné faces "nevisí" ven z modelu.

Geometrická validita

Numerické chyby v geometrii (např. v pozicích vertexů) mohou způsobit konflikty mezi topologickou a geometrickou informací. [1]

Např.: Rovnice rovin tvrdí, že hrana je uvnitř objektu, ale topologie říká, že je mimo něj.

Eulerovy operátory

Operátory zachovávající Euler-Poincaré formuli. Jsou dostatečné pro konstrukci užitečných meshů. Pracují s 6 parametry:  — vertices,  — edges,  — faces,  — components,  — shells,  — genus. [1] [8]

Note
Zdá se, že  — components je ekvivalentní  — rings.

Ač Eulerových operátorů se dá zadefinovat mnoho, v praxi stačí:

Operátor Popis

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

Regularizované booleovské operátory / regularized boolean operators

Reprezentace těles pomocí booleovských operací. Regularizované značí, že výsledek je vždy platné 2-manifold těleso.

  • AND - průnik

  • OR - sjednocení

  • SUB - rozdíl

Regularizace vypadá tak, že nejprve je provedena booleovská operace, poté je vypočítán interior a následně closure. [9]

  • Interior point tělesa je takový bod, že existuje takové, že otevřená koule s poloměrem a středem v obsahuje jen body z .

  • Exterior point tělesa je takový bod, že existuje takové, že otevřená koule s poloměrem a střem v nemá žádný průnik s .

  • Interior tělesa je množina všech jeho interior pointů.

  • Exterior tělesa je množina všech jeho exterior pointů.

  • Boundary tělesa je množina bodů, které nejsou ani interior ani exterior tělesa .

  • Clusure tělesa je sjednocení jeho interior a boundary.

Tip

Otevřená koule je koule bez povrchu. Tedy právě ty body, které jsou jejím "vnitřkem".

szp04 interior boundary
Obrázek 2. Schéma interior and a boundary tělesa [1]
szp04 rbo
Obrázek 3. Příklad regularizovaného průniku [1]
Global deformations (Alan Barr)

Mění tvar celého meshe. Obvykle jednoduché a snadno implementovatelné. Jsou fajn při modelování.

  • Translace,

  • Rotace,

  • Škálování / scale,

  • Zkosení / shear,

  • Tapering / zúžení — nekonstantní škálování,

    szp04 tapering
    Obrázek 4. Tapering in 3ds Max
  • Twisting / screw / šroubování — nekonstantní rotace okolo osy,

    szp04 twisting
    Obrázek 5. Twisting in 3ds Max
  • Bending / ohýbání — ohnutí rozsahu vertexů okolo daného bodu o daný úhel.

    szp04 bending
    Obrázek 6. Bending in Blender
Free-form deformations (FFD)

Lokální deformace vertexů v dané "kleci" / mřížce / lattice — Bezierově objemu.

  1. Vyrob FFD mřížku (Bezierův objem).

  2. "Umísti" do objemu objekt, který chceš deformovat.

  3. Deformuj mřížku (hýbej s jejími body).

  4. Transformuj vertexy v mřížce podle změn v FFD prostoru.

szp04 ffd

Má řadu rozšíření s různými tvary mřížky.

Změna struktury sítě

Important
Modifikace meshů mají značný přesah do otázky Křivky a povrchy a taky Pokročilá počítačová grafika
Překlápění hrany / edge flip

Lokální změna, která nahradí hranu hranou . Trojúhelníky a se stanou a . [1]

szp04 edge flip
Rozdělení hrany / edge split

Lokální změna přidávající další vertex a hrany mezi dva trojúhelníky, které tak rozdělí na čtyři. [1]

szp04 edge split
Zhroucení grany / edge collapse

Lokální změna, která nahrazuje hranu vrcholem. [1]

szp04 edge collapse
Upsampling / subdivision

Globální změna, která rozdělí jedno primitivum (trojúhelník / quad) na více. Vyhlazuje mesh dělením na menší kousky. [1]

szp04 subdivision
Downsampling / decimation / simplification

Globální redukce množství primitiv. Často využívá edge collapse.

Regularization / mesh resampling

Globální upráva s cílem zlepšit kvalitu meshe, např.: tvar trojúhelníků a četnost vertexů. [1]

szp04 mesh regularization
Isotropic remeshing

Algoritmus pro regularizaci meshů. Opakuje čtyři kroky:

  1. Rozděl hrany delší než průměrné délky.

  2. Zhruť hrany kratší než průměrné délky.

  3. Překlop hrany, pokud to zlepší stupeň vrcholu (ideální je 6).

  4. Vycentruj vrcholy.

Zlepšuje rychlost některých algoritmů, eliminuje podlouhlé trojúhelníky, které se blbě renderují, zlepšuje subdivision, ale nejde použít vždy a může vést ke ztrátě detailů (řeší Adaptive remeshing). [1]

szp04 isotropic remeshing

Implicitní reprezentace a modelování

Když máme objekt definovaný polévkou matematických symbolů místo hromádky trojúhelníků. Jinými slovy máme jednu nebo více reálných funkcí, které klasifikují body v prostoru.

Rovina

Dána bodem a normálou , ohraničuje poloprostor. Vzdálenost bodu od roviny je dána (za předpokladu, že je normalizovaná):

Kvadriky / kvadratické plochy
  • Elipsoid (třeba koule): ,

    szp04 ellipsoid
    Obrázek 7. An ellipsoid by Sam Derbyshire
  • Hyperboloid (třeba kužel): ,

    szp04 hyperboloid
    Obrázek 8. A one-sheeted hyperboloid by Sam Derbyshire
  • Válec (cylinder): ,

    szp04 cylinder
    Obrázek 9. A cylinder by Sam Derbyshire
  • Paraboloid (třeba miska): ,

    szp04 paraboloid
    Obrázek 10. A paraboloid by Sam Derbyshire
Kvartiky / kvartické plochy
  • Torus (donut): .

    szp04 torus
    Obrázek 11. A torus
Distance surfaces

Tělesa lze definovat pomocí vzdálenosti od jiných entit:

  • Sphere: ,

  • Cylinder / capsule: ,

  • Torus: ,

  • Generalized cylinder: ,

  • Offset surface: .

kde je nejmenší vzdálenost bodu od entity . [2]

Constructive solid geometry (CSG)

Umožňuje kombinovat implicitní objekty pomocí logických operací. Předpokládáme, že pokud pak je bod uvnitř objektu daném . Tato metoda nezachovává spojitost. Pro dva objekty a : [2]

  • Sjednocení: ,

  • Průnik: ,

  • Rozdíl: .

  • Komplement: .

Bloby (kapky)

Součet několika Gaussových křivek. [2]

kde:

  • je "blobbiness",

  • je poloměr blobu v klidu,

  • je Gaussova křivka,

  • je funkce poloměru kapky.

szp04 blobs
Metaballs

Podobné blobům, ale nepoužívá exponenciální funkci. Organicky se "slévající" koule. [2]

szp04 metaballs
Obrázek 12. Metaballs by SharkD