.[ ČeskéHry.cz ].
OpenGL efektivni kresleni terenu

 
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
johnnash



Založen: 30. 07. 2007
Příspěvky: 80

PříspěvekZaslal: 11. listopad 2009, 16:27:24    Předmět: OpenGL efektivni kresleni terenu Odpovědět s citátem

V OpenGL implementuju GeoMipMapping(http://www.flipcode.com/archives/article_geomipmaps.pdf).
V soucasne dobe premyslim jak efektivne renderovat bloky terenu.
Problem je, ze okolni bloky muzou mit rozdilne LODy.
V paperu je toto resene tak ze blok s vyssim LODem je na okrajich vykreslen s odpovidajicm LODem bloku s kterym sousedi(proste aby nevznikaly diry).
Vertexy mam ve VBO na karte, a ted otazka.
Je rozumne posilat a generovat odpovidajici indexy v kazdem framu nebo to mit predpocitane? Predpocitane indexy by zase zabrali furu mista...
Jak byste to resili?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 11. listopad 2009, 18:18:53    Předmět: Odpovědět s citátem

Polož si otázku, jestli máš dost paměti, jestli jo tak je to pohoda, nic neřeš a předpočítej to. Ty paměťový nároky můžeš zmenšit tak, že si dáš třeba pravidlo, že Lod N se může adaptovat maximálně na lody N-1 a N-2 a hned si vyřadil spoustu kombinací.

Já tohle kdysi řešil tak, že sem měl ty okraje vygenerovaný zvlášť a při adaptování sem to tak nějak poskládal. Vycházelo to většinou tak 2 drawcally na jeden adaptující čtverec (s použitím dalších optimalizací). Neni to ideální, ale zdálo se mi to jako takový rozumný kompromis. Detaily nebo zdroják můžu kdyžtak ukázat.

Kompletní předgenerování je nejrychlejší na render, ale bude vycházet na pěkných pár mega. S použitím nějaký rychlý šikovný komprese se dostaneš na rozumnější čísla, asi bych to dnes zkusil takhle.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
johnnash



Založen: 30. 07. 2007
Příspěvky: 80

PříspěvekZaslal: 11. listopad 2009, 19:29:46    Předmět: Odpovědět s citátem

No stejne budu asi muset vyzkouset oboje co je rychlejsi.
Pak kdyztak postnu k cemu jsem dosel.
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. listopad 2009, 20:34:29    Předmět: Odpovědět s citátem

Pokud máš nějakou maximální rychlost kamery vůči terénu, že dokážeš určit, za jak dlouho se blok může přepnout na detailnější verzi, můžeš si dovolit mít celý terén na disku. Budeš načítat jen to, co kamera vidí nebo může vidět třeba za 10s (za tu dobu bys měl s přehledem stihnout načíst aspoň 300MB). V 3D API si vždycky jen namapuješ nový vertex/index buffer (glMapBuffer, v D3D myslím Lock) a do něj budeš načítat přímo z disku ve vedlejším vlákně, aby to nemělo vliv na fps. Tak můžeš celkem bezpečně udělat načítání detailnějších bloků z disku za běhu a uvolňování z paměti těch, co jsou příliš daleko. Dřív nebo později to stejně budeš muset takhle dělat, pokud to s terénama myslíš vážně, takže proč to neudělat dobře už na začátku.

Paměť se snaž trochu srazit, ale jinak se o ni moc nestarej, na disku je místa dost. Hlavně nic nekomprimuj, při načítání není na dekompresi čas, CPU má i tak dost práce se scénou.
_________________
AMD Open Source Graphics Driver Developer
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. listopad 2009, 22:02:09    Předmět: Odpovědět s citátem

Jedině mít data na disku zakomprimovaná takovým způsobem, že se dekomprese provede až na GPU...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 12. listopad 2009, 08:31:58    Předmět: Odpovědět s citátem

Eosie: nesouhlasím, myslím, že v tomto případě je lepší mít to všechno v ramce a zkomprimovaný. Dekomprese by ale mohla probíhat tak, jak navrhuješ načítání z disku, jenže by to nebylo načítání ale příprava index bufferu. Pod pojmem dekomprese si nepředstavujte žádnej Hardcore (zip a podobně), mluvím o pár instrukcích navíc).

Jiná věc je načítání výškových dat terénu (tedy vertexbufferu), to je jiná, tady bych souhlasil. Velikost a výkon indexů se dá ale odchytat tak, aby nebylo potřeba hrabat na disk.

EDIT: Augi, dekomprimovat indexy na GPU? To potřebuješ nějakej dost pokročilej shader model ne?
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
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: 12. listopad 2009, 08:54:51    Předmět: Odpovědět s citátem

Jsem myslel třeba nějaké úsporné uložení pozice a normály...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 12. listopad 2009, 08:57:17    Předmět: Odpovědět s citátem

Jo ták, to máš pravdu. Měl jsem ale na mysli Index buffery.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
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: 12. listopad 2009, 12:43:14    Předmět: Odpovědět s citátem

Jasný - já právě myslel optimalizaci na jiný úrovni - rozhodně bych to nepodceňoval - myslim, že VladR něco takovýho používal...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 12. listopad 2009, 12:56:39    Předmět: Odpovědět s citátem

]semo[ napsal:
Eosie: nesouhlasím, myslím, že v tomto případě je lepší mít to všechno v ramce a zkomprimovaný

Vidím to stejně, do grafiky samozřejmě tolik nevidím, ale očekávat sekvenční čtení 30 MB/s u náročné hry na zaprasených discích hráčů se mi zdá jako dost optimistický předpoklad, zvlášť když přerušení činnosti disku je tak kritická operace (pokud bude současně systém invalidovat stránky paměti se swapem a dalšími soubory na disku, tak to půjde hned do kytek). Možná až bude převaha SSD i na datových discích hráčů (nejdřív očekávám zastoupení jako menší systémové disky, viz ohlášený low cost 40GB od intelu za 120 USD)
_________________
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: 12. listopad 2009, 15:23:31    Předmět: Odpovědět s citátem

Mem> On se mnou nesouhlasil jen v případě index bufferu. Dále, dnešní hry se musí vypořádat se streamováním terénu z DVD (Xbox, PS3), to je mnohem větší peklo. To všechno vůbec nevadí, vždycky se dá s přepnutím LODu počkat, než se data načtou. Udržet vysoké fps by neměl být žádný problém. Pak už je to jenom o granularitě bloků a prioritě načítání LODů. Z disku se dokonce načítají za běhu i textury (megatexture technology) a VRAM pak slouží jen jako taková texturová cache, to je mnohem víc dat než zabírá terén. A swap tu netahej, to je pro děti. Wink

semo> Jestli jsou indexy v RAM a vertexy na disku, to už je docela jedno ne? Při renderingu je stejně potřeba obojí. Co se týče dekomprese index bufferu, snažil jsem se naznačit, že během načítání by nemělo CPU nic dělat (připravuje rendering, počítá fyziku, herní logiku atd). Přenos dat by měl být jenom HDD -> page-locked buffer v RAM -> VRAM s minimální asistencí CPU, to řídí jen první přenos. Druhý přenos řídí většinou GPU, které už si to z RAM pomocí DMA natahá samo.

Co se týče komprese vertex bufferu. Používat 8bit normalized typ pro jednotkový vektory, pro ostatní věci 16bit float, pokud to podporuje API. Pokud je podporováno, použít vertex texture fetch z DXTC/BC textur pro načtení některých dat vertexů (např. výška vertexu Y). Pokud je podporováno, vypočítat pozici v mřížce (X a Z souřadnice) z ID vertexu (tj. číslo počítaného vertexu dostupné v shaderu, např. gl_VertexID v OpenGL). Tohle jsou všechno jednoduché přímočaré věci. Existují i sofistikovanější metody, ale těm bych se spíš vyhnul, protože mohou věci víc komplikovat.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 12. listopad 2009, 16:56:10    Předmět: Odpovědět s citátem

Eosie napsal:
A swap tu netahej, to je pro děti. Wink

Jo, to je vidět na tvé argumentaci Wink Při čtení z DVD média k tomu má hra obvykle exkluzivní přístup a čte si to sekvenčně, zatímco na HDD se toho děje spousta, bavíte se tu o zaplňování RAM atd., takže page faulty můžou být docela časté (bez ohledu na velikost RAM nebo "zakázání" swap file, pořád se swapuje kód přímo z disku)
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 13. listopad 2009, 09:16:54    Předmět: Odpovědět s citátem

Eosie: ano, když bude implementovat to streamování, může tam ty index dát taky. Pokud nebude, stále assertivně trvám na mojem řešní :). Dekomprese proběhne jednou za Xtej frejm, případně se může dekomprimovat postupně, nebo rovnou paralelně. Tak či onak, dekomprese těchto známých dat bude opravdu velmi rychlá. Odhaduju, že by to nemusel bejt ani dvojnásobek kopírování toho bufferu do VRAM v nekomprimované podobě.
Další věc je, že predikce lodů bude složitější na implementaci i výpočet, než predikce čtverců co budou vidět za chvíli. Takže se může stát, že tam skočí nějakej LOD a budeš muset hrabat na disk pro index buffer, zatímco bys ho mohl vytáhnout rychle z paměti.

EDIT: nejspíš půjdou dobře implementovat oba způsoby, ale tahle technická debata mě baví, je to lepší než ty sračky v popelnici :)
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
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