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
|
Zaslal: 21. červen 2009, 14:54:01 Předmět: Problém s přechodem textury u terénu |
|
|
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 |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 21. červen 2009, 15:05:04 Předmět: |
|
|
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 |
|
 |
micky

Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
Zaslal: 21. červen 2009, 15:11:46 Předmět: |
|
|
FFP co se týče mísení, nicméně vertex shaderem nanáším mapu stínů  |
|
Návrat nahoru |
|
 |
micky

Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
Zaslal: 21. červen 2009, 15:14:21 Předmět: |
|
|
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 Začínám uvažovat o pixel shaderu, ten by to vyřešil asi elegantněji... |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 21. červen 2009, 16:30:53 Předmět: |
|
|
jj urcite elegantnejsie.len jedno. ako kombinujes FFP a shadery? _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
micky

Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
Zaslal: 21. červen 2009, 17:10:35 Předmět: |
|
|
Asi jsem se nevyjádřil dost jasně 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.  |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 21. červen 2009, 17:52:15 Předmět: |
|
|
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 |
|
 |
micky

Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
Zaslal: 21. červen 2009, 19:44:20 Předmět: |
|
|
To už jsem tak nějak věděl 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  |
|
Návrat nahoru |
|
 |
ladik-BigBoss

Založen: 28. 07. 2007 Příspěvky: 162
|
Zaslal: 22. červen 2009, 22:31:19 Předmět: |
|
|
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 |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 22. červen 2009, 23:35:39 Předmět: |
|
|
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.
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.  _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
micky

Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
Zaslal: 28. červen 2009, 10:08:08 Předmět: |
|
|
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.  |
|
Návrat nahoru |
|
 |
|