.[ ČeskéHry.cz ].
Shadery a gradient sampleru

 
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
frca



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

PříspěvekZaslal: 14. únor 2023, 21:54:20    Předmět: Shadery a gradient sampleru Odpovědět s citátem

Vyrobil jsem si shader pro pseudo-3D okna (matematika je podobná na parallax mapping):
https://github.com/Franticware/OpenMRac/blob/2b3084880734e068dd4f3abd10326a5a0e038a4b/src/shaders/light_tex_sunk.fs.h
Bohužel tam, kde je narušená kontinuita textury, se špatně vyhodnocují gradienty/derivace uv souřadnic a vybere se zřejmě mipmapa s malým rozlišením. V důsledku toho vzniká nepříjemný alias (taková ta šedá přerušovaná čára):
https://github.com/Franticware/OpenMRac/blob/2b3084880734e068dd4f3abd10326a5a0e038a4b/tests-gl/test4-gles2.png

Otázka je jednoduchá - co s tím? Dá se nějak v shaderu definovat, že "tyto 2 možné výstupní hodnoty z textury nemají souvislost a nehledej mezi nimi gradient"?
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
frca



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

PříspěvekZaslal: 14. únor 2023, 23:58:03    Předmět: Odpovědět s citátem

Tak asi vyřešeno. Prostě nedávat samplery do podmínek, ale vždy vše poctivě samplovat a interpolovat pak mezi tím. Co si s tím má jinak shader kompilátor počít, žejo. Zdroják má pak dokonce méně řádků.

Nový shader:
https://github.com/Franticware/OpenMRac/blob/9629cf655ae9d76ec6180abac5adc5b750bc94fd/src/shaders/light_tex_sunk.fs.h

Výsledek:
https://github.com/Franticware/OpenMRac/blob/9629cf655ae9d76ec6180abac5adc5b750bc94fd/tests-gl/test4-gles2.png

Hulákat zde do tmy se ukazuje jako užitečný vývojářský pomocník.
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Ladis



Založen: 18. 09. 2007
Příspěvky: 1536
Bydliště: u Prahy

PříspěvekZaslal: 15. únor 2023, 14:12:08    Předmět: Odpovědět s citátem

Výkonově je asi výhodnější použít víc vertexů, ale samozřejmě jako programátor si chceš pohrát s parallax mappingem.
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1536
Bydliště: u Prahy

PříspěvekZaslal: 15. únor 2023, 14:17:32    Předmět: Odpovědět s citátem

V Rage Carmack používal parallax mapping jen pro zamáčkliny, nikdy na vymáčkliny, že? Aby to nevypadalo blbě při pohledu z boku.
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 16. únor 2023, 09:43:54    Předmět: Odpovědět s citátem

Nedávno jsem v práci řešil něco podobného. Šlo o výpočet texturových koordinátů pro sférickou mapou mléčné dráhy. Vertexy jsem přidávat nemohl, protože sky se kreslí jako jeden veliký triangl a sampluje atmosféru. Přesně se mi stalo to, co frcovi: v místě, kde se potkává 0 s 1 vznikla čára, protože se vybrala nejmenší mipmapa.
Nakonec jsem použil funkci textureGrad, která bere custom uv derivace. K tomuto účelu jsem vypočetl ještě jedny UVčka bokem, který sice nejsou použitelný pro mapování, ale mají vhodný průběh (šev je mimo zorný pole) a derivace jsou stejný.

kód:

// Vn je view vektor, pc.mvi je invertovaná model view matice
vec3 C = mat3(pc.mvi) * Vn;
vec2 uv;
      
uv.x = (1.0 - (atan(C.y, C.x) / M_PI)) * 0.5;   
uv.y = 0.5 + (asin(C.z) / M_PI);
   
vec2 uvD;   
uvD.x = (1.0 - (atan(Vn.z, Vn.x) / M_PI)) * 0.5;   
uvD.y = 0.5 + (asin(Vn.y) / M_PI);
vec3 milkyway_color = textureGrad(milkyway, uv, dFdx(uvD), dFdy(uvD)).rgb;

_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
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