Valasek Gábor valasek@inf.elte.hu Eötvös Loránd Tudományegyetem Informatikai Kar 2016-2017 tavaszi félév
Tartalom Test- és felületmodellezés
Test- és felületmodellezés Tartalom Test- és felületmodellezés
Test- és felületmodellezés Motiváció Geometriai Modellezés előadáson volt szó testek reprezentációjának két módszeréről: Constructive Solid Geometry (CSG) a térfogatot elemi térfogatok (primitívek) halmazelméleti műveletekkel képzett kombinációjaként kezeli. Boundary representation (B-rep) esetén csak a térfogat irányított felületét reprezentáljuk, azaz csúcsok, élek és lapok szomszédossági gráfjának kiértékeléseként. Különböző szempontok szerint más-más a jó (például megfelelő primitív halmaz esetén CSG-nél nem kell aggódni az eredmény topologikus helyessége miatt - ugyanezt eldönteni egy B-rep reprezentációról már nehéz kérdés)
Test- és felületmodellezés Motiváció Eddig csak alacsony szinten foglalkoztunk a reprezentációval, most részben erre is építeni fogunk Emlékeztetőül az adott művelet kezelése triviális-e ( ) vagy adott esetben bonyolult algoritmusokat is igényelhet ( ): művelet implicit parametrikus pontok előálĺıtása a felületen pont a testen van-e? topológia triviális kezelése halmazműveletek
Test- és felületmodellezés Motiváció Most áttekintünk néhány szempontot, amik, függetlenül a választott konkrét reprezentációtól, segítenek rendszerezni a tennivalókat. Ezek inkább felhasználói szempontból vizsgálják a problémát és azt mondják meg, hogy miképp tudunk modellezni egy alakzatot egy reprezentációban
Test- és felületmodellezés Megjegyzés Az ábrák Christopher Hoffmann könyvének második fejezetéből: LINK származnak.
Test- és felületmodellezés Primitívek Paraméteres alap-testek: egy adott elemi térfogathalmazból választott, paraméteres felületsereg (például egy gömb két paramétere a gömb középpontja és sugara). Súrolt térfogatok: valamilyen elemi térfogat (vagy kontúr) adott pálya mentén való mozgatásával kapott térfogat (például egy adott körlemez egy h hosszúságú egyenes mentén történő mozgatásával egy hengert kapunk. Egy gömb pályán való mozgatásával pedig egy csőfelületet kapunk.) Féltér primitívek: {[x, y, z] T f (x, y, z) 0}, ahol f (x, y, z) egy irreducibilis polinom.
Test- és felületmodellezés Lokális módosítások Természetes igény felhasználói részről, hogy egy módosítás hatása a végső geometriára előre kiszámítható mértékű legyen A B-rep-ben könnyen megvalósíthatóak, de vigyázni kell, hogy helyes marad-e az eredmény
Test- és felületmodellezés Globális módosítások A transzformációkon (eltolás, forgatás stb.) kívül ide értendőek a halmazműveletek Illetve egy felhasználói szempontból nélkülözhetetlen: az undo/redo
Test- és felületmodellezés Globális módosítások - undo/redo
Test- és felületmodellezés Globális módosítások - undo/redo Naív megközeĺıtés: A felhasználó minden műveletét és annak paramétereit tároljuk el egy faszerkezetben. Ez jó, ha annotálható. Egy tetszőleges állapot visszaálĺıtható, ha a fa gyökerétől az adott pontig alkalmazunk minden egyes műveletet. Az egyes műveletek eredményének validitását ilyenkor nem kell ellenőrizni, de ettől még meglehetősen költséges.
Test- és felületmodellezés Globális módosítások - undo/redo Hatékonyabb, ha minden műveletnek létezik az inverze a Command pattern-nel szépen implementálható (és implementálják is, csak egy igazi rendszerben ez még bonyolultabb lehet - lásd pl. 59. slide-tól ITT) bár bizonyos esetekben triviálisan megvalósítható, más esetekben viszont nagyon költséges tud lenni (például visszacsinálni egy B-rep-en elvégzett halmazműveletet) Ezért sokszor az a jó, ha elmentjük a teljes állapotteret és undo esetén ide megyünk vissza (Memento pattern-es megközeĺıtés). Azaz gyakorlatban a kettő keverékét kell megvalósítani.
Tartalom Test- és felületmodellezés
Reprezentáció és kiértékelés Tartalom Test- és felületmodellezés Reprezentáció és kiértékelés Görbe-test osztályozás Felület-test osztályozás Befoglalók
Reprezentáció és kiértékelés CSG Egy CSG modell primitívek egy adott halmazából épül fel regularizált halmazműveletek és mozgástranszformációk felhasználásával. Ezeket egy fával ábrázolhatjuk
Reprezentáció és kiértékelés CSG
Reprezentáció és kiértékelés CSG fa A fa levelei primitívek Belső csúcsai lehetnek transzformációk (ha nincsenek a levélszintre lekötve) halmazműveletek A fa által reprezentált alakzatot a gyökér ábrázolja, kiértékeléséhez a levelekből (primitívekből) kiindulva el kell végezni minden műveletet
Reprezentáció és kiértékelés CSG fa Ártalmatlannak tűnik, de már az előző példa is problémás tud lenni Ha például azt vizsgáljuk, hogy egy pont benne van-e a két téglatest uniójában lehet, hogy közös lapon lévő pont a numerikus hibák miatt egyszer sem megy át sikeresen a tartalmazási teszten Ezért ráhagyásokat is kell néha használnunk
Reprezentáció és kiértékelés CSG fa - megjegyzés Egy művelet elvégzése általában a fa mélységében lineáris Ezért fontos, hogy azonosítsuk azokat a részfákat, amik triviális altereket alkotnak (üres vagy teljes tér) Egy rész-fát redundánsnak mondunk, hogy ha helyettesítve az üres halmazzal vagy annak komplementerével, nem változik a reprezentált térfogat
Reprezentáció és kiértékelés Regularizált halmazműveletek A hagyományos halmazműveletek elvégzése után felesleges, alacsonyabb dimenziójú topológiai elemek is maradhatnak tüntessük el a térfogat nélküli darabokat Erre használjuk a regularizált halmazműveleteket: Ax B = int(axb), x {,, } Azaz a regularizált halmazműveletek az eredeti halmazművelet eredményeképp előállt halmaz belső pontjainak a lezártjai.
Reprezentáció és kiértékelés Regularizált halmazműveletek Ekkor egy regularizált halmazművelet elvgézése a következő lépésekből áll: 1. A klasszikus algebrai halmazművelet elvégzése 2. Az eredmény P halmaz összes olyan p pontjának megtartása, amelyekhez létezik olyan ɛ > 0, hogy k ɛ (p) P (belső pontok számítása) 3. Az eredményhez adjuk hozzá a P összes olyan q pontját, amely pontok nem belső pontok, de létezik hozzájuk olyan r belső pont és k ɛ (r) környezet, hogy q és r összeköthető egy olyan olyan görbével, aminek az egésze k ɛ (r)-ben halad, kivéve a q-beli végpontját (lezárás számítása)
Reprezentáció és kiértékelés Regularizált halmazműveletek A gyakorlatban ennél hatékonyabban kell kiértékelni ezeket a műveleteket Ehhez a regularizált halmazművelet argumentumainak pontjait kell osztályozni aszerint, hogy: in: a test belső pontja (van olyan környezete a pontnak, aminek egésze a testben van) on: a test határolófelületén van (a pont környezetének van olyan része, ami a testben van és van olyan része, amin azon kívül találhat) out: a testen kívül található (van olyan környezete a pontnak, aminek egésze a testen kívül van)
Tartalom Test- és felületmodellezés Reprezentáció és kiértékelés Görbe-test osztályozás Felület-test osztályozás Befoglalók
El szeretnénk dönteni egy pontról, hogy a testen belül (in), rajta (on) vagy azon kívül van (out) Ehhez egy kétfázisú algoritmust használunk: 1. a kérdéses pontot letoljuk a fa gyökeréből indulva és a leveleken elvégezzük a kiértékelést, ezáltal megkapjuk a megfelelő primitívre a pontosztályozás eredményét 2. ezután a kiértékelés eredményeket a levelekből elindítjuk felfelé a gyökér felé, a halmazműveleteket alkalmazva az osztályozásokra
- lefelé irány A lefelé irány a következőppen valósítandó meg: legyen x = [x, y, z] T az osztályozni kívánt pont és induljunk el a gyökérből. Ekkor 1. ha az aktuális csúcs a CSG fában egy halmazművelet, akkor a művelet mindkét gyermekének továbbítjuk x-et 2. ha az aktuális csúcs egy M mozgástranszformáció (eltolás vagy elforgatás), akkor a gyermekének az M 1 x pontot továbbítjuk 3. ha az aktuális csúcs egy levél, akkor elvégezzük rajta az osztályozást
- lefelé irány A primitív-pont osztályozás implicit reprezentációval triviális, csak egy behelyettesítés és előjelvizsgálat A lefelé irány elvégzése után a kiindulási x pontra minden levélben születik egy l {in, on, out} cimke A felfelé iránynál ezeket kombináljuk, egészen addig, amíg el nem érünk a gyökérig
- felfelé irány Minden egyes levélből elindulunk fölfelé a fában Ha az aktuális csúcs egy halmazművelet, akkor a két argumentumot kiértékeljük és az eredményt visszük tovább feljebb a fába
- felfelé irány, unió A regularizált unió művelettáblája a következő: in on out in in in in on in in/on on out in on out
- on-on unió
- on-on unió
- on-on unió
- on-on unió
- felfelé irány, metszet A regularizált metszet művelettáblája a következő: in on out in in on out on on on/out out out out out out
- on-on metszet
- on-on metszet
- on-on metszet
- on-on metszet
On-on probléma Nem dönthető el egyértelműen sem a regularizált metszet, sem pedig az unió ha csak az osztályozás eredményét ismerjük A problémát azok a pontok okozzák, amik a reprezentált test felületén vannak A kétértelműség feloldásához szükségük van a lekérdezési pont egy nagyobb környezetben vett szomszédosságára Illetve annak típusára
Pont szomszédossága A p = [x, y, z] T pont szomszédossága az S testre vonatkoztatva N(p) := k ɛ (p) S, egy infinitezimálisan kicsiny ɛ > 0 értékre. A szomszédossága teli gömb, azaz N(p) = kɛ (p), ha a pont az S-en belül van, üres gömb, azaz N(p) =, ha a pont a testen kívül van a teli gömb egy valódi részhalmaza, ha p az S határán van
Pont szomszédossága - felületi pontoknál A nem triviális eset könnyebb értelmezéséhez most tekintsük a poliédereket Azaz a testünk határolófelülete csúcsokból, élekből és lapokból áll Általános, görbület felületi elemeknél a pontos szomszédosság helyett érdemes valamilyen közeĺıtő (befoglaló) szomszédossággal számolni
Pont szomszédossága - lap belső pontja (lap-szomszédosság) Ha egy pont egy határolólap belsejében van, akkor a test a szomszédossága egy sík által meghatározott két féltérhez tartozik A reprezentációhoz a pont maga és a kifelé mutató normális tartozik
Pont szomszédossága - él belső pontja (él-szomszédosság) Ha egy pont egy él belső pontja, akkor a környezete ékhez hasonĺıt, az általa elválasztott lapok alatti félterek darabokat metszenek ki (balra lent) Most megengedjük, hogy egy él ne csak két lapot választhasson ketté, ekkor több ékünk lesz (jobbra lent)
Pont szomszédossága - csúcsban (csúcs-szomszédosság) A csúcspont esetén pedig a befutó élek egy-egy kúpkörnyezetet metszenek ki a pont szomszédosságából A kúpok csúcsa az a pont, aminek a környezetét vizsgáljuk
Pont szomszédossága - felületi pontok környezetei
- javított felfelé irány, unió /1 Tekintsük a felfelé irány alábbi módosított algoritmusát, ahol N L a bal-, az N R pedig a jobboldali unió argumentum környezetét jelöli: az unió eredményeképp kapott N környezetre 1. ha N L a teli gömb, akkor N is teli gömb 2. ha N L az üres gömb, akkor N = N R 3. ha N L, N R egyaránt lap-szomszédosságok, akkor N egy él-szomszédosság, kivéve ha a két lap egybeesik. Ha egybeesnek, akkor N általában egy lap-szomszédosság lesz, kivéve ha a lapok ellentétesen orientáltak, mert ekkor N a teljes gömb lesz.
- javított felfelé irány, unió /2 4. ha N L, N R él-szomszédosságok, akkor N általában egy csúcs-szomszédosság lesz, kivéve ha az illető élek egybeesnek. Egybeeséskor N általában maga is él-környezet lesz, kivéve ha N L és N R együtt egy lapot alkotnak, amikor is N egy lap-környezetté válik.
- javított felfelé irány, unió /3 4. ha N L, N R él-szomszédosságok, akkor N általában egy csúcs-szomszédosság lesz, kivéve ha az illető élek egybeesnek. Egybeeséskor N általában maga is él-környezet lesz, kivéve ha N L és N R együtt egy lapot alkotnak, amikor is N egy lap-környezetté válik.
- javított felfelé irány, unió /4 4. ha N L, N R él-szomszédosságok, akkor N általában egy csúcs-szomszédosság lesz, kivéve ha az illető élek egybeesnek. Egybeeséskor N általában maga is él-környezet lesz, kivéve ha N L és N R együtt egy lapot alkotnak, amikor is N egy lap-környezetté válik.
- javított felfelé irány, unió /5 5. ha N L, N R egyike csúcs-, a másik pedig él-szomszédosság, akkor N általában csúcs-szomszédosság lesz, kivéve ha N L, N R egy él-szomszédossággá egészítik ki egymást
- javított felfelé irány, unió /6 6. ha N L, N R egyaránt csúcs-szomszédosságok, akkor N általában csúcs-szomszédosság, kivéve ha a kúpok egy éket vagy lapot nem formálnak, amikor is N rendre él- és lap-szomszédossággá válik.
- javított felfelé irány, unió /6 6. ha N L, N R egyaránt csúcs-szomszédosságok, akkor N általában csúcs-szomszédosság, kivéve ha a kúpok egy éket vagy lapot nem formálnak, amikor is N rendre él- és lap-szomszédossággá válik.
- javított felfelé irány, unió /6 6. ha N L, N R egyaránt csúcs-szomszédosságok, akkor N általában csúcs-szomszédosság, kivéve ha a kúpok egy éket vagy lapot nem formálnak, amikor is N rendre él- és lap-szomszédossággá válik.
- javított felfelé irány A többi eset hasonlóan belátható: N L, N R {ures, teli, lap, el, csucs} A többi művelet szintén analóg (de HF végiggondolni őket)
Görbe-test osztályozás Tartalom Test- és felületmodellezés Reprezentáció és kiértékelés Görbe-test osztályozás Felület-test osztályozás Befoglalók
Görbe-test osztályozás Görbe-test osztályozás A pont-test osztályozásnál látotthoz hasonló elven, kétfázisú algoritmussal: 1. A görbeleírást a gyökértől indulva továbbítsuk az összes levél felé. A levelekben osztályozzuk a görbe részeit, ezáltal kint/bent/rajta szakaszokra osztva a görbét. 2. Ezután a szegmenseket a levelektől vigyük fel a gyökérig, hogy megkapjuk a görbe végső osztályozását.
Görbe-test osztályozás Görbe-test osztályozás Ebben az esetben a görbe parametrikusan reprezentációja mellett oldható meg könnyebben a feladat De ettől még gyökkeresést kell megoldani, hogy az implicit-parametrikus metszést megvalósítsuk Vigyázzunk arra, hogy a görbe nem csak egyenes lehet! De az egyenest már egyszer láttuk is...
Görbe-test osztályozás CSG modellek metszése sugárral Levél: triv., metszéspontok: p + t 1 v és p + t 2 v A sugár (p + t 1 v, p + t 2 v) szakaszon a primitív belsejében halad. Összes levélből: t 1... t n, elég ezeket vizsgálnunk. Szakasz-listákat fogunk nyílvántartani.
Görbe-test osztályozás CSG modellek metszése sugárral Belső csúcsok: a gyerekektől származó szakasz-listákra is végrehajtjuk a műveletet Összeérő szakaszokat egyesítjük, különben hozzávesszük a listához. Kiszámítjuk a szakaszok metszeteit. \ Kivonjunk a szakaszokat egymásból. Gyökérben: a legkisebb pozitív t értékű pont lesz a szemhez legközelebbi metszés. Ha a metszések száma páros: kívül vagyunk az objektumon, ha páratlan, akkor a belsejében.
Felület-test osztályozás Tartalom Test- és felületmodellezés Reprezentáció és kiértékelés Görbe-test osztályozás Felület-test osztályozás Befoglalók
Felület-test osztályozás Felület-test osztályozás 1. Metszük el a felületet az összes primitívvel (a gyökértől a levélig tartó transzformációkat figyelembe véve) 2. Osztályozzuk az eredményül kapott metszésgörbéket 3. A helyes orientációra ügyelve kombináljuk a felület-darabokat
Felület-test osztályozás Felület-test osztályozás A fenti algoritmus használható B-rep-re történő konverzióra is A levelekben lévő primitíveket egymással kell metszeni és a metszett végén lapokra osztályozott görbékből lesz a B-rep reprezentáció határgörbéje
Befoglalók Tartalom Test- és felületmodellezés Reprezentáció és kiértékelés Görbe-test osztályozás Felület-test osztályozás Befoglalók
Befoglalók Befoglalók A CSG fa geometriáival végzett műveletek költségesek tudnak lenni Ezért érdemes felgyorsítani az elvégzésüket előszűréssel Ennek egyik legkényelmesebb módja olyan egyszerűbb térfogatokat hozzárendelni a geometriákhoz, amelyek tartalmazzák a primitív összes pontját
Befoglalók Műveletek befoglalókkal Jelölje O(T ) a T CSG részfa befoglaló térfogatát (pl. AABB). A levelekben található primitívek befoglaló objektumai adottak.
Befoglalók Műveletek befoglalókkal A fából felfelé haladva található halmazműveletek mentén O(T ) a következőképpen számítható: ( ) T = T 1 T 2 O(T ) := O O(T 1 ) O(T 2 ) ( ) T = T 1 T 2 O(T ) := O O(T 1 ) O(T 2 ) T = T 1 T 2 O(T ) := O(T 1 )