Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Juraj

Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 11. březen 2009, 12:07:21 Předmět: Render "neviditelných" objektů |
|
|
Zdravím,
nyní bych potřeboval radu spíše softwarove/hardwarovou. Jedná se mi o to, co se vlastně dějě s modely, které renderuji tam kam kamera aktuálně "nekouká".
Osobně si myslím, že standartně se vykreslí bez rozdílu zda jsou vidět či ne, takže vykreslení neaktuálně vyditelného objektu bere stejný výkon jako kreslení viditelného.
Pokud je to opravdu tak, jak si myslím a dokocne jsem to i zkošel testovat, je nějaká možnost jak jednoduše otestovat zda je daný model v zorném poli kamery? Napadá mě několik možností, ale možná na to už nějaký fce udělaná bude..
Asi to pro některé z Vás bude banalita, ale raději si informace upřesňuji.. |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 11. březen 2009, 12:20:27 Předmět: |
|
|
mno to je samozrejme zaklad cele rychlosti enginu - kreslit jenom to co je opravdu videt
minimalne frustrum culling bys mel vedet co je, a potom metody k zjisteni viditelnosti objektu a to napriklad kvadrantove a oktetove stromy
literatury a clanku je na netu habadej |
|
Návrat nahoru |
|
 |
Augi

Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 11. březen 2009, 12:47:03 Předmět: |
|
|
Když se podíváš na pipeline, jakou probíhá zpracování (vykreslení) modelu, tak je to víceméně jasné.
Zjednodušeně: Nejprve se vezmou vertexy modelu a ztransformují se do prostoru obrazovky (vertex shader). Pak se vezmou trojúhelníky v prostoru obrazovky a barva každého bodu trojúhelníku se vypočte v pixel shaderu, přičemž se samozřejmě počítají ty body trojúhelníku, které padly do viditelné části obrazovky (např. bod na pozici [-15258,12558] nás nezajímá).
Vertex shader se tedy spustí na všechny vertexy modelu. Pixel shader se pro objekt, který je úplně mimo obrazovku, nespustí vůbec. Takže "neviditelné" objekty se "vykreslují" většinou rychleji.
Test vůči zornému poli kamery (frustum - komolý jehlan) se nazývá frustum culling (googli). Ve finále to může vypadat tak, že pro každý model máš vypočítanou nějakou obálku (např. kouli - bounding sphere) a před vykreslením modelu nejprve otestuješ, zda obálka objektu koliduje s frustumem - pokud ne, nemá smysl objekt vůbec kreslit.
Pokud máš hodně objektů (navíc třeba statických), tak může být vhodné rozdělit svět na nějaké části a udržovat si seznam objektů, které se nachází v dané části světa. Pak děláš to, že otestuješ, zda je obálka části světa v záběru kamery - pokud ano, vykreslíš všechny objekty z příslušné části světa. Mezi tento druh optimalizace patří např. portály, quadtree a octree. |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 11. březen 2009, 13:18:17 Předmět: |
|
|
OT: Augi, kua, toto si mal za mna pred 3 hodinami napisat takto do pisomky Ja som to obkecal ohavnym pismom (predstavte si simpanza pisat lavou nohou) na jeden a pol strany
Juro: je dobre, ze ta napadaju moznosti. Sice je pravdepodobne, ze to uz niekto vymyslel, ale je najlepsie na to prist znovu, sam.
Este by som to upresnil asi takto: chces kreslit fakt len to, co je vidiet. A to optimalne len tie veci, ktore su v pohlade kamery a este, ako bonus, nie su zakryte dalsimi vecami (to ale v tomto prispevku riesit nebudeme, to riesia napriklad portaly alebo occlusion culling (orezavanie zakrytim)).
To, ci su skryte alebo nie su skryte sa da testovat aj uplne presne, no potom nemas nijaky rychlostny zisk, ze.
Potrebujes tzv. konzervativnu aproximaciu, co su uz spominane (kolizne) obalky (bounding volumes - spheres, boxes...) a/alebo priestorove delenie (space partitioning). Vsetko je to organizovane hierarchicky, co znamena ze: VEEELKA obalka (velka particia) obsahuje vsetku geometriu (modely), ktore obsajuhu mensie obalky (particie), ktore su v hierarchii nizsie. Konzervativna je preto, lebo obcas vykreslis aj zopar veci, ktore nie su v zabere, no vzdy zarucene vykreslis vsetky, ktore tam su!
Ked sa ti poradi vyradit z vykreslovania VELKU obalku, tak tie male v nej obsiahnute uz testovat nemusis. A to je ten obrovsky zisk, ak mas rychly test.
Na takychto hierarchickych strukturach funguju vsetky mozne algoritmy, nie len frustum culling, ale aj ray-tracing, detekcia kolizii pre fyzikalne simulacie a mnoho dalsich. Spominane struktury sa nazyvaju akceleracne datove struktury. _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 11. březen 2009, 20:28:24 Předmět: |
|
|
Asi tu bylo řečeno všechno, ale doporučuju vzít do úvahy testování, které nám řekne, zda je BV* celý mimo frustum**, protíná povrch frustumu nebo uvnitř frustumu. Pokud je celý uvnitř nebo celý venku, už se nemusí pokračovat v hierarchii a buď se celá hierarchie vykreslí nebo ne.
* BV = bounding volume
** anglicky(frustum) = komolý jehlan _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Juraj

Založen: 06. 12. 2007 Příspěvky: 189
|
Zaslal: 12. březen 2009, 11:03:00 Předmět: |
|
|
Tak přesně to co jsem se snažil vygooglit před tím než jsem zde uvedl dotaz se mi podařilo vygooglit po uvedení názvosloví "frustrum culling".
Díky
Veškeré výpočty kolizí BB a OBB jsem zmákl dříve než toto, holt je zde vidět moje pravidlo:
"dělej co potřebuješ, ostatní uděláš až to budeš potřebovat" i když mi někdy přidělá více práce než užitku  |
|
Návrat nahoru |
|
 |
|