.[ ČeskéHry.cz ].
Problém s přechodem textury u terénu

 
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
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 21. červen 2009, 14:54:01    Předmět: Problém s přechodem textury u terénu Odpovědět s citátem

Hezký den,
pokoušel jsem se vyrobit terén s hladkými přechody z jedné textury do druhé. Což jsem si také myslel, že se mi povedlo, než jsem zvolil pro kontrolu textury s vyšším kontrastem.

Z nějakého důvodu mi zůstávají částečně viditelné hrany... Zkusil jsem to celé přepsat, ale problém zůstal. Přechody řeším tak, že nejprve se vykreslí základní čtverce bez přechodů a následně jsou doplněny přechodovými čtverci kreslenými s blendingem.

Zdrojový kód terénu případně naleznete zde, další screenshoty na mém webu.

Nutno podotknout, že špatně přechod vypadá pouze z jedné strany... A ještě jedna poznámka, trojúhelníky v terénu střídají svůj směr / \ / \ (kvůli hladšímu vzhledu), což si myslím, že vliv nemá, protože po odzkoušení bez střídání jsem uviděl stejnou chybu.

Mám chybu někde co se týče hodnot alpha kanálu? Nebo je celý princip špatně? Děkuju moc za případné rady...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



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

PříspěvekZaslal: 21. červen 2009, 15:05:04    Předmět: Odpovědět s citátem

no chyba bude urcite v interpolacii miesacieho pomeru. pouzivas shadery alebo iba fixed pipeline?
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 21. červen 2009, 15:11:46    Předmět: Odpovědět s citátem

FFP co se týče mísení, nicméně vertex shaderem nanáším mapu stínů Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 21. červen 2009, 15:14:21    Předmět: Odpovědět s citátem

Hlavně mě fascinuje, že v jednom směru (doprava dozadu nebo doleva dopředu) je ten přechod vždycky dobře... To je to, co prostě nedokážu pochopit Smile Začínám uvažovat o pixel shaderu, ten by to vyřešil asi elegantněji...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



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

PříspěvekZaslal: 21. červen 2009, 16:30:53    Předmět: Odpovědět s citátem

jj urcite elegantnejsie.len jedno. ako kombinujes FFP a shadery?
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 21. červen 2009, 17:10:35    Předmět: Odpovědět s citátem

Asi jsem se nevyjádřil dost jasně Smile Používám vertex shader, mísení však neprovádím pixel shaderem, ale obyčejným blendingem. Vertex shader generuje jenom texturové koordináty pro shadow mapu. Smile
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: 21. červen 2009, 17:52:15    Předmět: Odpovědět s citátem

Ty přechodové čtverce máš blbě. Víc k tomu říct nemůžu, protože nemám dost informací.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 21. červen 2009, 19:44:20    Předmět: Odpovědět s citátem

To už jsem tak nějak věděl Very Happy Wink Já na to přijdu.

EDIT: Tak už jsou špatně jenom rohové přechody, potíž je v tom, že některé přechodové trojúhelníky se zbytečně kreslí dvakrát, což zaručeně nedodá plynulý přechod alpha kanálu 0 - 0,5 - 1 ale 0 - 0,75 - 1 Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ladik-BigBoss



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

PříspěvekZaslal: 22. červen 2009, 22:31:19    Předmět: Odpovědět s citátem

to co si myslíš, že je přechodový čtverec se rozdělí na dva trojúelníky takže vertexy, které nemají pak společné se vůbec neovlivní a uprostřed vzniká artefakt. zkoušel jsem podobnou techniku použít a platí na to jenom větší teselace, kde se poblému nezbavíš, ale je méně postřehnutelý. nejlepší je si to nainterpolovat sám shaderu pokud to opravdu potřebuješ. asi by šlo vymyslet nějaké celkem šílené řešení s texturami, ale do toho bych se opravdu nepouštěl, nejspíš by to vzalo hodně paměti, aby to vypadalo trochu slušně...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
Marek



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

PříspěvekZaslal: 22. červen 2009, 23:35:39    Předmět: Odpovědět s citátem

Pro ladik-BigBoss (sorry za víceméně OT příspěvek):

Jaký artefakt máš na mysli? Lineární interpolaci mezi vertexama? To je celkem normální a nic bych na tom neměnil. On s tímto nemá problém.

Problém bych viděl v tom, že ty přechody špatně generuje. Třeba ty žlutý zuby vlevo dole. Každej ten zub se dá brát jako čtverec, kde alphy (váhy pro jednotlivé textury) se dají popsat maticí:
(0 1)
(1 0)

Ale správně má být:
(0 1)
(0 0)

Možná by se hodilo ukázat wireframe, aby šlo pěkně vidět tu síť trojúhelníků a pak by neměl problém být problém určit, kde jsou ty váhy špatně.

Jiným natočením trojúhelníků jde samozřejmě dosáhnout jinak vypadající lineární interpolaci mezi vertexama, ale to už není autorův problém. Pokud je tato interpolace nežádoucí, dá se použít i nelineární. Princip spočívá v tom, že alpha kanál se podle svého okolí (nebo jiných parametrů) rozdělí na dvě složky a,b, aby na daném vertexu platilo alpha=a/b, a ty se dají interpolovat jako 2D vektor. V pixel shaderu se pak původní alpha získá pomocí podílu a/b a pošle na výstup. Je zřejmé (dá se snadno dokázat), že pokud b je pro každý vertex různé, pak lineární interpolace proměnné alpha (tak to má teď) je obecně různá od výpočtu podílu a/b po interpolaci hodnot (a,b) samostatně. (a z toho plyne, že ta druhá interpolace není lineární) Teoreticky by mělo být možné pomocí této metody dosáhnout lepšího vzhledu na hranách vertexů a možná i vymyslet lepší funkci než a/b, ale asi bych si na to sám netroufl. Toť částečná alternativa k teselaci. Wink

Taky by to šlo rozmazat Gaussianem v dalším průchodu, ale to (opět) neřeší autorův problém a tím jsou zjevně špatné váhy. Wink
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 28. červen 2009, 10:08:08    Předmět: Odpovědět s citátem

Ano, celé jsem si to ještě jednou prošel, zapnul jiný druh blendingu, který chyby neskutečně zvýraznil (src_alpha, one), takže už bylo mnohem lehčí chybu objevit.

Děkuju moc všem, co mi zde odpověděli. Wink
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