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

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 16. červenec 2011, 14:46:25 Předmět: Voda v oceánu, LOD |
|
|
Čau,
podle známého statistického modelu (Phiillipsovo spketrum, FFZ) jsem si udělal mořskou hladinu.
Otázka se týká LODu.. lze na to hodit dobře GeoMipMapping, nicméně popping effekt tady vypadá hrozně, díky animaci. Koukal jsem na Geomorphing, který by situaci s doskakováním vizuálně eliminoval. Nicméně jsem nějak nepochopil a nikde nemůžu najít, jak se geomorph dělá prakticky. Teoreticky to chápu, při přepnutí LODů vypočtu výškovou změnu pro body "které se objeví / zmizí". To mi ale vede na to, že bych musel např. v streamu 2 posílat na GPU pro aktuální frame výškové změny. Ve streamu 1 je statická síť s X,Y,Z a UV souřadnicemi
Plus problém co se šicím pruhem (generuji ho na CPU změnou IB)...
Nebo udělat LOD nějak úplně jinak ? U geomipmappingu se mi líbí, že ho mám funkční pro terén (teda bez geomorphingu, ale nějak mi to tam nevadilo)  _________________ Perry.cz |
|
Návrat nahoru |
|
 |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
Zaslal: 16. červenec 2011, 16:24:06 Předmět: |
|
|
Je to tak, musis poslat pro kazdej vrchol zmenu.
Pokud ti nic nebrani mit pravidelnou sit vrcholu, tak bych mozna zvazil posilat jenom souradnici Y + k tomu tu zmenu.
Nicmene kdyz jsem to implementoval tak jsem mel dost velky problemy prave u sicich pruhu vs. geomorphing.
Z toho duvodu jsem musel pouzit u geomipmappingu "skirts", tak jak je to v Chunked LOD.
Ale myslim ze to i pak vypada vpohode: http://www.youtube.com/watch?v=YxFpWZP0ZdI |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 16. červenec 2011, 18:01:58 Předmět: |
|
|
Jo na skirts jsem koukal taky... ale ty se mi moc nelíbí... pro terén ještě relativně OK, ale pro animovanou vodu mi to přijde blbý (předem neviím, jak velká sukně bude potřeba)
Při šití bych asi ten krajní pruh vypustil a na něm morphing nedělal.. nemělo by to být podle mě tak vidět
Jinak co se týče posílání změny výšky.. je to lepší udělat jako stream a dynamický vertex buffer delta hodnot, nebo mám udělat heigh mapu a tu poslat jako texturu a přistupovat k ní vertex bufferu ?
Spíš pro zajímavost.. podle čeho měníš kvalitu ? Procházel jsem přístup podle chyby ve změně pixelu (víceméně popsaný v originálním článku k geomipmappingu), ale přijde mi, že by mělo stačit měnit i podle vzdálenosti ke kameře.. díky morphingu tam to skákání taky nebude patrné, ne ? _________________ Perry.cz |
|
Návrat nahoru |
|
 |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
Zaslal: 17. červenec 2011, 08:40:16 Předmět: |
|
|
Ha tak pro prohlidce kodu zpetne zjistuju ze posilam pouze vyskovou mapu.
Ke kazdemu bloku pak jeste vzdalenost kamery od stredu a aktualni lod.
Na jeden pristup do textury zjistim Y vertexu a na dva pristupy zjistim rozdil vysky pro aktualni a nasledujici lod.
Neco jako
kód: |
int step2 = 1 << (LOD+1);
int incX = int(xPos % step2);
int incZ = int(zPos % step2);
delta = getHeight(xPos-incX, zPos+incZ) + getHeight(xPos+incX, zPos-incZ))/2.0;
height += tParam*delta
|
Obavam se ale ze pokud nebudes delat morphing i na okrajich tak to bude dost skakat.
Puvodne jsem mel generovane krajni pruhy a taky vynechaval morphing ale vysledek nic moc.
Kvalitu mam delanou tak jak v clanku. Tezko rict kolik usetrim trainglu, ale budou asi pripady ze to par procent udela. |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 17. červenec 2011, 09:20:19 Předmět: |
|
|
Ta ukázka kódu, to je ve vertex shaderu nebo v aplikaci (ty bitové operace starší karty neumí totiž)?
Jinak není zbytečné zjišťovat výšku z textury v shaderu ? Není rychlejší ji poslatve statickém VB ?
Na ty kraje zkusím něco najít nebo vymyslet.. skirts mi dělají sebeprotínání, když se mi vlna láme na kraji _________________ Perry.cz |
|
Návrat nahoru |
|
 |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
Zaslal: 17. červenec 2011, 10:27:19 Předmět: |
|
|
Kod je v shaderu.
Byl to celkove pokus napsat to trochu "jinak" nez standardne.
Mel jsem jeden statickej VB se souradnicemi X a Z(myslim ze 256x256).
Pak predgenerovanej IB pro vsechny LODy(1-4 tusim).
Kdyz jsem kreslil jednotlive bloky terenu tak jsem akorat prepinal na jinej IB ale VB byl porad stejnej.
Vysku jsem pak teda musel zjistovat v shaderu.
Navic jsem tam mel ale vyskovou mapu ktera se streamovala z disku a pouzivala toroidalni pristup(neco na zpusob geometrical clipmaps) -> nemusela se updatovat cela textura. |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 17. červenec 2011, 18:23:31 Předmět: |
|
|
Aha... takže do shaderu jednou nahrajes height-mapu a pak do ni akorat pristupujes...coz u vody vlastne uz mam tim, ze tam nahravam height mapu ty vody... prijde mi to jako pekny napad.. diky..
akorat jeste nejak ty stitch pruhy  _________________ Perry.cz |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 17. červenec 2011, 20:01:30 Předmět: |
|
|
Co to na přechodových pruzích dostatečně tessellovat, aby to sedělo?  _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 18. červenec 2011, 13:47:01 Předmět: |
|
|
Teselaci jsem nikdy nedělal.. a ani si nejsem jistý, zda ji DX9 nějak rozumně umí _________________ Perry.cz |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 18. červenec 2011, 14:33:28 Předmět: |
|
|
Nevím jak je na tom DX9, ale přes Geometry shadery v DX10 nebo Tesellation hull a Tesellation compute shadery to jde v DX11... nicméně to je tesellace za běhu, afaik pre-tesellace na CPU by měla být možná (neznám detaily algoritmu). _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
Zaslal: 20. červenec 2011, 15:14:49 Předmět: |
|
|
Pruhy jsem zkousel v geometry shaderu ale vykon sel tak na polovinu
Jinak predpocitany pruhy jsou vphode, ale pokud se pouziva ta metrika chyby pixelu tak se to dost komplikuje. |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 21. červenec 2011, 08:55:05 Předmět: |
|
|
Pruhy generuji na CPU přes dynamický IB... přičemž negeneruji pořád, ale pouze při změně rozmístění bloků... mohl bych samozřejmě ty vygenerované bloky cachovat.. ale to mi přijde jako plýtvání místem.. stejně bych musel aktualizovat IB, což mi zabere skoro více času, než vygenerování indexů
Ještě jsem někde viděl editaci bloků ve VertexShaderu.. že se posunovali souřadnice krajniích vertexů bloku tak , aby dosedli na sousední.. nicméně tady si nejsem jistý, zda to neudělá vlivem float aritmetiky "díry".. někdo nějaký názor na to ? _________________ Perry.cz |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 21. červenec 2011, 23:44:14 Předmět: |
|
|
citace: |
Ještě jsem někde viděl editaci bloků ve VertexShaderu.. že se posunovali souřadnice krajniích vertexů bloku tak , aby dosedli na sousední.. nicméně tady si nejsem jistý, zda to neudělá vlivem float aritmetiky "díry".. někdo nějaký názor na to ? |
Pokud souřadnice krajních bodů bloku posuneš tak ať dosednou, tak to díry *může* skrýt, ony tam stále budou, ale budou hůře viditelné - na otázku jak viditelné bohužel odpovědět nemohu, jelikož jsem tuto metodu neimplementoval a přemístil se raději k jiné - projection-grid metodě, avšak i ta má své mouchy, které je třeba vychytat. (a taky se mnohem hůře optimalizuje, a to především z hlediska fillrate).
citace: |
Pruhy jsem zkousel v geometry shaderu ale vykon sel tak na polovinu |
Záleží na kartě, mám doma i G80 (GeForce 8xxx) i R600 (Radeon HD 2xxx) a mají mnohem pomalejší geometry shadery než novější GPU. První generace těchto GPU je při GS hodně omezená (možná na částice jsou použitelné), u novějších generací to je čím dál lepší (uvažuji o pořízení Radeon 6950). Samozřejmě co se týče např. tesellace, tak tam GS ztrácí smysl s příchodem THS a TCS (Tesellation hull a compute shadery). _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
Zaslal: 22. červenec 2011, 17:29:40 Předmět: |
|
|
S posouvanim ve vertex shaderu jsem experimentoval tez, diry tam ale proste videt byly. Proste pokud nesedi vertex na vertex tak to tak bude vzdycky.
Geometry shader jsem zkousel na 5770 a byl jsem dost sklamany z vykonu. Na druhou stranu se tam ta dobre vyhrat |
|
Návrat nahoru |
|
 |
|