3D - geometriai modellezés, alakzatrekonstrukció, nyomtatás 19. Szabadformájú felületek simitása
http://cg.iit.bme.hu/portal/node/312 https://www.vik.bme.hu/kepzes/targyak/VIIIAV54 Dr. Várady Tamás, Dr. Salvi Péter BME, Villamosmérnöki és Informatikai Kar Irányítástechnika és Informatika Tanszék 1
Tartalom
Szép (fair) görbék és felületek
simító energia integrálok
Felületapproximáció B-spline-okkal
ismétlés - a megoldandó egyenletrendszer
simítótagokkal kibővített egyenletrendszer
Lokális kontrollpont optimalizálás
görbék - csomó törlés és beszúrás
kiterjesztés felületekre
3D-s számítógépes geometria
2
Szép (fair) görbék és felületek • nincs egyértelmű matematikai definíció... • fair: a görbületeloszlás egyenletes és a lehető legkevesebb monoton szakaszból áll • kerülendő: felesleges inflexiók, erős görbületi szélsőértékek, lapos szakaszok 1. globális eljárás: ponthalmaz illesztése simaságot optimalizáló tagokkal 2. lokális eljárás: kontrollpontok poziciójának optimalizálása
Simasági mértékek
3
Simasági mértékek • Energia-minimalizálás (fairing) − minőségmérő integrálok: a „tökéletlenséget” büntetik • A simaság fontos: pl. megjelenítésnél, anyagtulajdonságok, megmunkálás stb.
(Kobbelt)
Membrán energia: • a felület legyen kicsi
∫ dA = min. ∫∫ | r | + | r
2 2 κ + κ dA = min. 1 2 ∫
s
2
Ω
u
v
Rugalmas lap energia (thin plate): • ne legyen nagy a görbület
s
2
| dudv
∫∫ | r Ω
uu
|2 + 2 | ruv |2 + | rvv |2 dudv Simasági mértékek
Minimális görbület variáció: • ne változzon gyorsan a görbület
2
∫
s
2 ∂κ ∂κ 1 + 2 dA = min. ∂k ∂ k 1 2 4
Approximáció B-spline felületekkel1 Lineáris egyenletrendszer
adott pontok:
n+1 x m+1 ismeretlen kontrollpont:
{Pi , ui , vi }, i = 0,K, M ;
{c kl }, k = 0,K , n; l = 0, K , m;
→ {c j }, j = 0, K , N ;
M >> N egyenlet ⇒ formailag ugyanaz a probléma, mint a görbéknél: n
m
N
d i =| Pi − ∑ ∑ c kl N k (ui ) N l ( vi ) |=| Pi − ∑ c j N j (ui , vi ) |; k =0 l =0
j =0
j = k (m + 1) + l , c j = c kl , N j (ui , vi ) = N k (ui ) N l ( vi ); j = 0,..., N
négyzetes távolság függvény: M
M
N
Flsq (c 0 , K, c N ) = ∑ | Pi − S(ui , vi ) | = ∑ ∑ | Pi − c j N j (ui , vi ) |2 =|| Nc − P ||2 i =0
2
i =0 j =0
minimalizálás: M N ∂Flsq (c ) = 2∑ ∑ Pi − c j N j (ui , vi ) N k (ui , vi ), k = 0, 1,..., N i =0 j = 0 ∂c k
Approximáció - B-spline felületek
5
Approximáció B-spline felületekkel2
mátrix alakban:
min ([ N ][c ] − [P]) 2 ⇒ [ N]T [ N][c ] = [ N]T [P], [M lsq ][c ] = [b]
ahol
[M lsq ] = [ N ]T [ N ], [b] = [ N ]T [P].
a megoldás:
[c ] = [M lsq ]−1 [b] Simító integrál:
Fsmooth (c 0 , K, c N ) = ∫∫ (Suu2 + 2Suv2 + S 2vv ) du dv
minimalizálás:
Ω
Fcomp (c ) = Flsq (c ) + λ Fsmooth (c ) ⇒ [c ] = [M lsq + λM smooth ]−1[b]
simítási súly λ , helyes beállítása kritikus lehet
Approximáció - B-spline felületek
6
Kontrollpontok optimalizálása1 Harmadfokú B-spline - C2 folytonos:
&r&tt (t0− ) = &r&tt (t0+ ) → κ (t0− ) = κ (t0+ ) &r&&ttt (t0− ) ≠ &r&&ttt (t0+ ) → κ ′(t0− ) ≠ κ ′(t0+ ) • simasági mérték - a görbületváltozások összege: ∑| κ ′(ti− ) − κ ′(ti+ ) | ⇒ ∑| &r&&ttt (t0− ) − &r&&ttt (t0+ ) | i
i
• lokális optimalizálás a csomóértékeknél: a folytonossági ugrás csökkentése (i) csomótörlés → módosított görbe (ii) két szegmens közelítése eggyel → új súlyfüggvények, új tartópontok (iii) csomóbeszúrás → görbe nem változik • csomótörlés - nem egyértelmű; legegyszerűbb, ha csak egy kontrollpont változik Csomótörlés Kontrollpontok optimalizálása
7
Kontrollpontok optimalizálása2 • csomóbeszúrás poláris koordináták segítségével (lásd B-spline fejezet)
P(0,0,1)
P(0,1,2)
• csomótörlés: azonos logika visszafele • javítandó kontrollpontok sorba állítása a folytonossági ugrások alapján:
P(0,1,3)
Pold(1,2,3) P(0,0,0)
harmadfokú B-spline esetén: három csomóbeli ugrás összege kontrollpont javítás → prioritás sor módosítása
Kontrollpontok optimalizálása
Pnew(1,2,3) P(4,4,4)
P(1,3,4) P(3,4,4)
P(2,3,4)
→ [(0),0,0,0,1,2,3,4,4,4,(4)] [(0),0,0,0,1,[2→°→2],3,4,4,4,(4)]
8
Kontrollpontok optimalizálása3 Általánosítás felületekre • a csomók által alkotott rács pontjaiban | &r&&uuu (u0− , v0 ) − &r&&uuu (u0+ , v0 ) |2 + | &r&&vvv (u0 , v0− ) − &r&&vvv (u0 , v0+ ) |2 a simasági mérték: • a javítandó kontrollpontokat sorba rendezzük és optimalizáljuk
Kontrollpontok optimalizálása
9
Kontrollpontok optimalizálása4 Grafikus indikátorok • síkmetszetek (G1) • átlaggörbületi térkép (G2) • Gauss görbületi térkép (G2) • fényvonalak (isophotes) (G2) - a fény beesési szögét mutatja a normálvektorhoz viszonyítva (diszkrétizált csíkok) - nagyon érzékeny felületi jellemző
Kontrollpontok optimalizálása
10
Fényvonalak számítása
opcionális
p ref − p α = arccos n p ref − p
• A fény beesési szöge a normálvektorhoz képest • Fényforrás (referenciapont): pref • Megjelenítés: 5 fokos szögtartományok váltakozó színekkel • Probléma: mozgatáskor textúra újraszámolás (lassú) n pref • Ötlet: OpenGL textúra-koordináta generálás αα (gömb-textúra, referenciapont = szem) y p z • Gömb-textúra leképzés – (x,y,z) a visszaverődés iránya a szem-koordinátarendszerben: x x 1 y 1 + , + m 2 m 2
m = x 2 + y 2 + (1 + z ) 2
• (x,y,z) egységvektor: 1 x 2 y 2 arccos z z = 8 ⋅ − − − 1 ⇒ α = 2 4 m m
• A szögnek megfelelően kiszínezzük a textúrát Fényvonalak
11