.[ ČeskéHry.cz ].
optimalizacia poradia

 
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
nou



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

PříspěvekZaslal: 4. leden 2009, 13:19:20    Předmět: optimalizacia poradia Odpovědět s citátem

pisem render a taktiez ma napadol sposob optimalizacie. chcem vyuzit prioritnu frontu do ktorej nahadzem vsetky objekty ktore mi vylezu z orezovych testov. v nej to necham usporiadat podla urciteho poradia ktore este nemam ujasnene.

kedze programujem v OpenGL tak tym chcem dosiahnut co najnizsi pocet zmenov stavov.
co som vyrozumel tak by sa malo usporiadavat podla
shader
textura
VBO
ine stavy depth test atd.
takze ake je vhodne poradie usporiadavania? ono sa to dalej bije s dalsou doporucovanou optimalizaciou a to kreslit odpredu dozadu ale kedze v mojom pripade to nebude mat velky vplyv kedze sa nebudu modely prilis prekrivat tak to nema moc zmysel.
takze mam sa trapit s prioritnou frontou alebo mat len obycajnu.

taktiez ci si mam sam testovat ci je potrebne dany stav zmenit alebo ak je aktivna urcita textura a ja ju znova bindnem ci to ovladac bindne odznova alebo to preleti akoby nic.

taktiez by ma zaujimalo nakolko narocne je glGetUniformLocation ci to mam nejak cachovat.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
am!go



Založen: 19. 08. 2007
Příspěvky: 61
Bydliště: Praha

PříspěvekZaslal: 4. leden 2009, 13:38:43    Předmět: Odpovědět s citátem

Vetsinou se to sklada do skupin podle materialu tj. primarne podle shaderu a potom podle textur. Potom taky budes muset brat vpotaz na jake objekty sviti urcite svetlo atd a takhle to nejak seskupovat. To ale plati pro nepruhledny objekty, u pruhlednych ti nezbyde nic nez seradit je od nejvzdalenejsiho po nejblizsi.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



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

PříspěvekZaslal: 4. leden 2009, 14:21:40    Předmět: Odpovědět s citátem

Spíš to vezmu tak nějak obecně a řeknu, čeho se držím a co se dle mého názoru vyplatí řešit právě v OpenGL.

Všechny glGet* volání mohou být pomalejší - driver jede v druhém vlákně a musí zamykat (pokud si neudělal kopii dat do tvého vlákna). Vycházím z toho, že nejdražší je přepínání shaderů. Řadím takto:

- podle efektů (FX) (obsahuje průchody + renderstate + shadery)
- podle instancí (instance stejných objektů chci mít za sebou, abych pak snadno využil instancing a vyrenderoval celou skupinu jedním voláním)
- pro každej efekt seřadím jeho objekty dle vzdálenosti od kamery tak, abych nerozbil skupiny instancí (dle efektu buď odpředu dozadu nebo odzadu dopředu), pokud je jich víc jak nějaké n, tak neřadím.

Nezapomeň, že největší nárůst výkonu jsem zaznamenal, když jsem tam přidal:
- instancing - tohle je nutnost (ARB_draw_instanced, ARB_instanced_arrays nebo shader-based s duplikací meshů)
- optimalizace nastavování proměnných do shaderu - nastavení celé skupiny proměnných jedním voláním (EXT_gpu_program_parameters pro ARB programy, EXT_bindable_uniform pro GLSL shadery nebo trik s definicema pro GLSL, viz níže)
- může se hodit ARB_vertex_array_object pro rychlé přepínání meshů, implementace je triviální

Trik s definicema pro rychlejší nastavování proměnných. V shaderu:
kód:
uniform vec4 defaultStorage[32];
#define lightColor      defaultStorage[0]
#define lightPosition   defaultStorage[1]
#define modelViewMatrix mat4(defaultStorage[2], defaultStorage[3], defaultStorage[4], defaultStorage[5])
... // atd.

defaultStorage nastavíš jedním voláním glUniform4fv. glGetUniformLocation si musíš udělat vlastní, který navíc ještě zpracuje všechny ty #define řádky. Odvážnější mohou vzít zdroják libovolnýho shaderu a strojově ho přepracovat do této podoby. Takhle to v OpenGL řeší např. ID Software.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
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