Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Hardwire
Založen: 04. 09. 2007 Příspěvky: 117
|
Zaslal: 3. leden 2009, 20:13:52 Předmět: Voda (2D) |
|
|
Pracuju momentalne na 2D hre a protoze se z vetsiny odehrava na vode (pohled shora), tak ji potrebuju trochu vysperkovat. Teda vlastne potrebuju, aby vypadala hodne dobre, ale to zlepsim postupne
V klidu si vystacim se simulaci vodniho povrchu pomoci gridu (heightmapy), jako to popisujou treba tady:
http://freespace.virgin.net/hugo.elias/graphics/x_water.htm
Ja vychazim z clanku v GPG5, 4.2 (Dynamic Grass Simulation and Other Natural Effects), kerej je sice o simulaci travy a listu, ale vychazi ze simulace vody zpusobem podobnym tomu, co sem linkoval.
Jednotlivy bunky heightfieldu pak vyrenderuju pomoci ctvercovejch quadu. V jejich rozich pozmenim koordinaty textury podle refrakce a barvu (kterou se pak budou pixely textury nasobit) podle reflexe. Pak to hodlam vylepsit pocitanim pres pixel shadery misto quadu, tohle je jen pro vyzkouseni.
Nicmene problem mam s tim, jak to udelat s posouvanim a zoomem kamery. Ten grid musi mit konecnou velikost, ale ja predem nevim, jak velkou cast vody budu potrebovat vykreslit. Jak mam teda ten grid implementovat? Napadlo me namapovat ho na kouli, takze uzly na pravym okraji by byly spojeny s uzlama na levym okraji, takze bych ho moh nejak tilovat. Nebo by bylo lepsi ho nejakym zpusobem dogenerovat v miste, na ktery je ted videt, ale predtim videt nebylo?
Pokud jste nekdo resil vodu (i ve 3D), tak jste podobnej problem urcite potkali, tak jak jste ho vyresili?
Podotykam, ze predanimovanej sprite mi nestaci, "potrebuju" interakci s vodou. Taky by to asi nefungovalo moc dobre se zoomem kamery, zatimco na ten grid se da dobre pouzit LOD. |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 5. leden 2009, 10:32:46 Předmět: |
|
|
Mohl bys těch gridů mít 9 (3x3) každý o velikosti screenu, Pak vždycky když dojedeš na kraj, přemístit ten co už neni vidět tak, aby ten co vidět je, byl uprostřed..snad je to pochopitelný, taková jednoduchá blbost, ale jak to napsat :).
Osoboně bych grid nepoužil, když je to ve 2D, nepotřebuješ vlny. Změnu těch texturových koordinátů proveď v pixel shaderu. Interakci udělej podle další textury, do který vykreslíš třeba nějaký kolečka a podobně a podle tý pak budeš posouvat koordinát pixelu víc nebo míň. Myslím, že stačí pixel shadery 2.0, takže to pojede všude. Tímhle způsobem máš pak vyřešený to tailování, protože na geometrii ti už nezáleží. Stačí jeden fullscreen quad. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Hardwire
Založen: 04. 09. 2007 Příspěvky: 117
|
Zaslal: 5. leden 2009, 15:03:54 Předmět: |
|
|
]semo[ napsal: |
Mohl bys těch gridů mít 9 (3x3) každý o velikosti screenu, Pak vždycky když dojedeš na kraj, přemístit ten co už neni vidět tak, aby ten co vidět je, byl uprostřed..snad je to pochopitelný, taková jednoduchá blbost, ale jak to napsat . |
Ja to chapu, ale nevidim v tom vyhodu oproti tomu, ze budu mit ten grid jeden (velkej jako nekolik obrazovek) a spojim jeho protilehle konce. Problem mam ale v tom, ze kdyz nekde projede lod, a pak rychle posunu kameru tak, ze tam ten grid zopakuje (tilovanim), tak tam bude videt vlna od te puvodni lodi, prestoze tam zadna lod nemusi vubec bejt...nicmene to mozna pujde ignorovat, protoze tohle budou jen mensi vlnky.
citace: |
Osoboně bych grid nepoužil, když je to ve 2D, nepotřebuješ vlny. Změnu těch texturových koordinátů proveď v pixel shaderu. Interakci udělej podle další textury, do který vykreslíš třeba nějaký kolečka a podobně a podle tý pak budeš posouvat koordinát pixelu víc nebo míň. Myslím, že stačí pixel shadery 2.0, takže to pojede všude. Tímhle způsobem máš pak vyřešený to tailování, protože na geometrii ti už nezáleží. Stačí jeden fullscreen quad. |
Vlny potrebuju, abych moh nejak spocitat reflekci a refrakci...nechapu, jak bych mel ten displace textury bez vln spocitat?
Kdyz interakci udelam specialni texturou, tak jak mam pak udelat sireni vln?
Nemel bys nejakou ukazku pouziti tohohle pristupu v praxi? |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 5. leden 2009, 15:42:00 Předmět: |
|
|
Ja bych to udelal taky tim jednim polygonem pres celou obrazovku a ne nejakym tilovanim. Vlny muzes udelat tak, ze kazda vlna = samostatny polygon. Bez pixel shaderu by to vypadalo treba takto (tady se ty vlny roztahuji do stran a zpruhlednuji:
S PS bys asi musel ty vlny nascitat/poskladat do vysledne textury, ktera bude vstupem pro tvuj PS. Da se to udelat opet tak, ze co vlna, to polygon, ale budes to renderovat ne na obrazovku, ale do textury, ktera bude vstupem tveho PS. _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 6. leden 2009, 10:58:54 Předmět: |
|
|
citace: |
S PS bys asi musel ty vlny nascitat/poskladat do vysledne textury, ktera bude vstupem pro tvuj PS. Da se to udelat opet tak, ze co vlna, to polygon, ale budes to renderovat ne na obrazovku, ale do textury, ktera bude vstupem tveho PS. |
jak píše Ladis, vlny a další efekty budou vpodstatě další geometrie, nebo dokonce particly a ty by se vyrendrovaly do textury, která pak poslouží jako vstup pro pixelshader vody. Dosáhneš tím beztak lepší přesnosti než u heightfieldu. Tady je vývojový videíčko z jedný naší hry, je to sice ve 3D, ale ty vlny tam jsou přidaný právě tím způsobem (další geometrie v heightmapě, která je vstupem pro shader vody).
http://dev.hammerware.org/public/WaveRave/OceanClub0.wmv
(má asi 13 MB) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Ondras
Založen: 12. 09. 2007 Příspěvky: 66
|
Zaslal: 6. leden 2009, 19:21:39 Předmět: |
|
|
]Semo[ no fakt moc pekny, chvalim. Jaky metody jste pouzili? Ta interaktvini vypada, ze je mistama numericky nestabilni? Jak to tam dela takovy ty neprirozene vysoky a spicaty vlny.
Hardwire. Co je to 2D? Ja z toho popisu jsem moc nechytil jak to ma vypadat. Z jakyho uhlu je to zobrazeny, jestli to ma byt ISO? Nez neco navrhnes tak je tohle dulezity, protoze to pak nemusi byt vubec videt.
Jinak co jsme delali vodu my. Tak se to generovalo pomoci oceanografickyho spektra a pomoci inverzni Fourierovi transformace se z toho delalo vyskove pole. Jeste se tam zjsistovaly ostry vlny a jejich vrcholky a ty se prozatim jen oznacily. Ale bylo v planu aby tam byla pena. Problem byl s tim, ze ve velkejch vzdalenostech to vypadalo fakt blbe, ty normaly z toho to nedavaly a byl tam strasnej sum. Vypadalo to jak modry zrneni v televizi. Takze se do toho musela zapojit jeste jedna metoda, ta vlastne jen scitala sinusovky, ktery mely byt jako hodne dlouhy vlny a pak se mezi tema dvema metodama interpolovalo podle vzdalenosti. Jeste bylo v planu do toho nejak zapojit ty interaktivni vlny, ktery jsem mel hotovy zvlast ale uz se na to nedostalo. Byl termin a od ty doby je to nejaky stoply nebo co. To jen tak v kratkosti abych se pochlubil . Jo 8800GT si to davala v klidku stejne jako XBOX 360.
Dost zalezi co chces delat. Zkusil bych se podivat i na nejke siditka co vubec s geometrii nepracujou. napriklad tohle je super, http://www.gametutorials.com/Articles/RealisticWater.pdf mrkni se i na demo. Natoze to bezi jen nad dvema texturama.
EDIT: aha tak jsem si tvuj prispevek precetl poradne. No mohl bys to jen cist z textury a nastavit UV souradnice tak, aby kdyz sahnes mimo texturu tak se ti nacetla pozice z druhy strany. to ti zajisti automaticky, ze se ti to bude opakovat. Chce to ale osetrit tu interaktivni vodu, tam by to slo mozna i tak, ze bys to pocital zvlast v druhe texture a na to misto, kde je zrovna kamera bys to priplacl. Tim bys oresil i to pretikani z jedny strany na druhou. |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 7. leden 2009, 10:14:24 Předmět: |
|
|
OT 4 Ondras:
Je to Projective Grid a spoustu různých oserů. Numerická nestabilita tam nemá místo, je to jen chyba toho trailu, co skůtr táhne, v místech, kde se spojujou segmenty vzniká cosi, co neni vidět okem v rovině, ale když z toho udělám ty vlny, tak je. Nicméně je to vyřešný v dalších verzích, tohle video bylo ale paradoxně nejhezčí a nejakčnější :). _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Hardwire
Založen: 04. 09. 2007 Příspěvky: 117
|
Zaslal: 8. leden 2009, 01:38:08 Předmět: |
|
|
]semo[ napsal: |
citace: |
S PS bys asi musel ty vlny nascitat/poskladat do vysledne textury, ktera bude vstupem pro tvuj PS. Da se to udelat opet tak, ze co vlna, to polygon, ale budes to renderovat ne na obrazovku, ale do textury, ktera bude vstupem tveho PS. |
jak píše Ladis, vlny a další efekty budou vpodstatě další geometrie, nebo dokonce particly a ty by se vyrendrovaly do textury, která pak poslouží jako vstup pro pixelshader vody. Dosáhneš tím beztak lepší přesnosti než u heightfieldu. Tady je vývojový videíčko z jedný naší hry, je to sice ve 3D, ale ty vlny tam jsou přidaný právě tím způsobem (další geometrie v heightmapě, která je vstupem pro shader vody).
http://dev.hammerware.org/public/WaveRave/OceanClub0.wmv
(má asi 13 MB) |
Tyjo, pekna voda
Chapu, ze geometrii vlny muzes prenest na texturu a tu potom pouzit v shaderu misto gridu jako heightmapu, ale jak pak delas vlneni, resp. jak tu geometri vlny menis? Jen ji posouvas a nejak roztahujes? |
|
Návrat nahoru |
|
 |
Hardwire
Založen: 04. 09. 2007 Příspěvky: 117
|
Zaslal: 8. leden 2009, 02:20:55 Předmět: |
|
|
Ondras napsal: |
Dost zalezi co chces delat. Zkusil bych se podivat i na nejke siditka co vubec s geometrii nepracujou. napriklad tohle je super, http://www.gametutorials.com/Articles/RealisticWater.pdf mrkni se i na demo. Natoze to bezi jen nad dvema texturama.
EDIT: aha tak jsem si tvuj prispevek precetl poradne. No mohl bys to jen cist z textury a nastavit UV souradnice tak, aby kdyz sahnes mimo texturu tak se ti nacetla pozice z druhy strany. to ti zajisti automaticky, ze se ti to bude opakovat. Chce to ale osetrit tu interaktivni vodu, tam by to slo mozna i tak, ze bys to pocital zvlast v druhe texture a na to misto, kde je zrovna kamera bys to priplacl. Tim bys oresil i to pretikani z jedny strany na druhou. |
Delam takovou taktickou hru s bitevnima lodema na vode. Topdown kamera. Odehrava se to vetsinou na vode, takze ji potrebuju udelat co nejzajimavejsi.
No ale problem je, ze kdyz se to bude opakovat, tak pokud rychle posunu kameru tak, ze se to tam zopakuje, tak uvidim vlny vytvoreny lodi, ktera je ale jinde. Pokud tohle budou ale jen relativne maly zmeny, tak to asi problem nemusi uplne bejt.
Stejne to ale budu muset zkombinovat s tvorbou velkejch vln a na to se mi asi bude hodit, co jste tu popsali a nalinkovali, tak si to projdu  |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 8. leden 2009, 10:00:32 Předmět: |
|
|
No jak říkám, nemusíš tam mít žádný heightfield, ani projektivní mřížku. Stačí Fullscreen quad. Pak nemáš problém s opakováním. Metoda kreslení bude podobná jako sem posílal na videu, ale bez geometrických vln, který by stejně nebyly odzhora vidět. Vstupem pixelshaderu bude textura (třeba heightmapa) do který vykreslíš vlnky a efekty. V pixel shaderu s tím pak můžšeš dělat cokoliv. Převýst to na normalmapu, aplikovat cubemaping podle výšky v daným místě, ...
Při troše fantazie to můžeš do tý textury zapisovat přímo a updatovat ji každý frame, tím můžeš použít stejný efekty, jaký bys měl u heightfiledu počítaným na procesoru.
Edit:
citace: |
jak tu geometri vlny menis? Jen ji posouvas a nejak roztahujes? |
Jo, jen sem to posouval a roztahoval, moc sem to zmáknutý neměl. Teda co se týče brázdy za skůtrem. To ostatní je animovaná textura, kterou sem si vygeneroval jako celulární texturu (dá se udělat tilovatelná) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Hardwire
Založen: 04. 09. 2007 Příspěvky: 117
|
Zaslal: 9. leden 2009, 22:22:08 Předmět: |
|
|
Tak díky moc za tipy, ještě se k vodě v budoucnu vrátím. Potřeboval sem hru (resp. prototyp) nějak odprezentovat ve škole, tak sem udělal jen tu vodu, jak sem jí popisoval já. Není to nic extra, ale aspoň to není statický
http://data.hardwire.cz/nic/battleships_prototype.avi |
|
Návrat nahoru |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 9. leden 2009, 22:36:45 Předmět: |
|
|
Hm, to mi připomíná fraxy  _________________ Mám strach |
|
Návrat nahoru |
|
 |
Hardwire
Založen: 04. 09. 2007 Příspěvky: 117
|
Zaslal: 9. leden 2009, 22:40:44 Předmět: |
|
|
Quiark napsal: |
Hm, to mi připomíná fraxy  |
Vidíš a přece to bud úplně něco jinýho
Ale teď to tu nebudu rozpitvávat. |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 11. leden 2009, 15:53:55 Předmět: |
|
|
Je to hezký, ani nepotřebuješ rady, vždyť taková stačí, ne? :) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Hardwire
Založen: 04. 09. 2007 Příspěvky: 117
|
|
Návrat nahoru |
|
 |
|