.[ ČeskéHry.cz ].
Render "neviditelných" objektů

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 11. březen 2009, 12:07:21    Předmět: Render "neviditelných" objektů Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 11. březen 2009, 12:20:27    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 11. březen 2009, 12:47:03    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1827

PříspěvekZaslal: 11. březen 2009, 13:18:17    Předmět: Odpovědět s citátem

OT: Augi, kua, toto si mal za mna pred 3 hodinami napisat takto do pisomky Very Happy Ja som to obkecal ohavnym pismom (predstavte si simpanza pisat lavou nohou) na jeden a pol strany Sad

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 11. březen 2009, 20:28:24    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 12. březen 2009, 11:03:00    Předmět: Odpovědět s citátem

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 Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna