Dela se operace na mnozine trojuhelniku a ty se pak renderuji? Zajimalo by me jestli renderovany tvar je dokonaly jako u BRL-CADu, nebo aproximace z trojuhelnicku, bezierovych ploch a podobne.
Jinak - v BRL-CADu zadne union a merge neni. Tam je jen union, ktery se chova jako merge. Plyne to z principu programu, ktery je cely na CSG postaven. Povrchy se tam zadne neudrzuji, vznikaji az pri raytracingu jako rozhrani mezi hmotou a prazdnem.
Tady jsou CSG modely co jsem delal pro Ronju. Na technicke modelovani se opravdu CSG hodi: http://ronja.twibright.com/3d/
Ale kdeže. Pro raytracer s implicitně popsanými tělesy, jako je třeba koule nebo hranol, je CSG implementačně mnohem jednodušší než třeba pro CAD s winged-edge daty. Raytracer ví, že (koule - hranol) = "vše uvnitř koule, ale vně hranolu". Takže když paprskem prochází scénu, řeší vnitřek a vnějšek tělesa (koule - hranol) tak, že když vstoupí do koule, ví, že je uvnitř, když ji protne znovu, ví, že je venku, a pokud je uvnitř koule a vstoupí do hranolu, tak ví, že vystoupil z tělesa (koule - hranol). Sice to u složtějších těles začne být zajímavé (umím si živě představit, že vygenerovat mesh může při stovkách těles ve stromu CSG operací ve výsledku mnohem rychlejší), ale implementačně je to tak jednoduché, že se to klidně dá dát i do raytraceru jakožto semestrálky na vejšce. ;-)
Jako skoro vzdy jsi me s odpovedi predbehl:-) Jinak i nad CSG telesy lze vytvaret obalova telesa a provadi se take ruzne "prorezavani stromu" (pruning), takze i pri stovce objektu to nemusi byt tak hrozne - nektere raytracery (ne ty naivni - nejjednoduseji implementovatelne) jsou z tohoto pohledu docela dobre skalovatelne.
Ne, prevod na trojuhelniky se neprovadi. Pro raytracer je jednodussi pracovat primo se zakladnimi telesy, protoze jedine dve veci ktere potrebuje vedet je:
1) ziskat souradnice pruseciku paprsku s povrchem telesa
2) v miste pruseciku (pokud existuje) vypocitat normalu
Nic dalsiho; a paradoxne je nalezeni pruseciku paprsku s kouli/valcem/superellipsoidem/toroidem atd. jednodusii, nez nalezeni pruseciku s trojuhelnikem :-)
CSG je reseno tak, ze se objekty udrzuji ve stromove strukture a pri nalezeni pruseciku se timto stromem traverzuje a ziskavaji se informace o tom, jestli jde o skutecny prusecik, nebo "fantomovou" plochu. V listech stromu jsou informace o telesech, v uzlech pak CSG operace a pripadne linearni transformace (posun, rotace, atd.)
Union vs. merge - mas pravdu v tom, ze prave "merge" je tou pravou mnozinovou operaci, union tam zbyl snad kvuli rychlosti, historickym duvodum a take kvuli tomu, ze se takto daji telesa slucovat (do stromu) bez toho, aby se zmenily jejich dalsi vlastnosti.
Tak pak nechapu co za pseudoplochy ma vznikat pri operaci union? Jak se treba vypocte odrazivost pesudoplochy ktera ma na obou rozhrani sklo, stejny index lomu tedy, ale jak se pise v clanku, stejne odrazi paprsky?
Pri klasickem raytracingu, kdy se zmeny barvy paprsku pocitaji pouze na plochach, tj. pri odrazeni ci lomu, to vyznam ma, protoze i na vnitrni plose se paprsek minimalne utlumi. Tj. pokud neni pouzit upraveny algoritmus vypoctu osvetleni, tak je rozdil mezi tim, jestli paprsek stenou one "krychlo-koule" proleti dvakrat nebo ctyrikrat. Merge slouzi k odstraneni vnitrnich sten, coz neni nic jineho, nez ze se tyto steny vypoctu nezucastni - samozrejme se vypocte prusecik, ale ten se dale ignoruje.