.[ ČeskéHry.cz ].
Voda v oceánu, LOD

 
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
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 16. červenec 2011, 14:46:25    Předmět: Voda v oceánu, LOD Odpovědět s citátem

Č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) Very Happy
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
johnnash



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

PříspěvekZaslal: 16. červenec 2011, 16:24:06    Předmět: Odpovědět s citátem

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



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 16. červenec 2011, 18:01:58    Předmět: Odpovědět s citátem

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



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

PříspěvekZaslal: 17. červenec 2011, 08:40:16    Předmět: Odpovědět s citátem

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



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 17. červenec 2011, 09:20:19    Předmět: Odpovědět s citátem

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



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

PříspěvekZaslal: 17. červenec 2011, 10:27:19    Předmět: Odpovědět s citátem

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



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 17. červenec 2011, 18:23:31    Předmět: Odpovědět s citátem

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 Smile
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 17. červenec 2011, 20:01:30    Předmět: Odpovědět s citátem

Co to na přechodových pruzích dostatečně tessellovat, aby to sedělo? Cool
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 18. červenec 2011, 13:47:01    Předmět: Odpovědět s citátem

Teselaci jsem nikdy nedělal.. a ani si nejsem jistý, zda ji DX9 nějak rozumně umí
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 18. červenec 2011, 14:33:28    Předmět: Odpovědět s citátem

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



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

PříspěvekZaslal: 20. červenec 2011, 15:14:49    Předmět: Odpovědět s citátem

Pruhy jsem zkousel v geometry shaderu ale vykon sel tak na polovinu Smile
Jinak predpocitany pruhy jsou vphode, ale pokud se pouziva ta metrika chyby pixelu tak se to dost komplikuje.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 21. červenec 2011, 08:55:05    Předmět: Odpovědět s citátem

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



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 21. červenec 2011, 23:44:14    Předmět: Odpovědět s citátem

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



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

PříspěvekZaslal: 22. červenec 2011, 17:29:40    Předmět: Odpovědět s citátem

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
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