.[ ČeskéHry.cz ].
Filtering textur v shaderu

 
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: 22. srpen 2010, 19:36:22    Předmět: Filtering textur v shaderu Odpovědět s citátem

Ahoj,

měl bych otázku. Pokud vypočítám v shaderu výslednou barvu pixelu, jak mohu aplikovat filtr až "po shaderu"? Například u shadow mapy - tam také nejprve spočtu, jestli je pixel zastíněný, a teprve pak mohu vyhlazovat. Metoda for-cyklu pro X pozic v okolí mi nepřijde zrovna efektivní...

Tedy, je možné tohle provést, případně jsou nějaké minimální nároky na verzi shaderů?

Díky.
_________________
https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



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

PříspěvekZaslal: 22. srpen 2010, 22:32:03    Předmět: Odpovědět s citátem

Můžeš mít jeden velký shader program obsahující oba shadery, tj. výsledek prvního je vstupem pro druhý, nebo to rozložit na víc kroků - víceprůchodový rendering nebo renderováním do textury, která pak bude vstupem pro další část renderování. Výběr závisí na typu efektu a taky na schopnostech grafiky.
_________________
Award-winning game 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: 22. srpen 2010, 23:59:49    Předmět: Odpovědět s citátem

Počkej, takže výstupem prvního shaderu je barva, kterou zpracuje druhý shader... pořád tedy zůstávám u toho, že pro jeden pixel bude muset proběhnout operace několikrát? Nebo je v tom nějaká vtipná pointa, co mi uniká? (0:59 ... ono to není takle v noci težký Very Happy )
_________________
https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/
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: 23. srpen 2010, 03:44:14    Předmět: Odpovědět s citátem

Je nemožný udělat filtering v texturové jednotce až po shaderu. Měl bych 3 řešení:

1) Udělat filtering ručně v shaderu (můžeš ho udělat i lepší než ten bilineární, ale hádám, že bilineární bude stačit). Jednoduchý průměrování je většinou na hovno, pokud nemáš dostatek vzorků (pixelů textury).

2) Použít normálně depth textury (od GL3/D3D10 jsou i float depth textury) a shadow samplery. Shadow samplery se od ostatních samplerů liší tím, že provádějí porovnání hned po čtení z textury automaticky a nabízí i filtrování (to ale taky asi až od GL3/D3D10). Do shaderu pak jde výsledná barva. Něco mi říká, že depth textury v D3D asi nebudou, to teď nevím jistě.

3) Použít funkci známou pod názvem Fetch4 nebo taky Gather4. Funguje to tak, že máš jednokanálovou texturu (pokud máš vícekanálovou, dá se myslím vybrat kanál, ze kterého se čte - závisí na hw podpoře) a do shaderu ti dojde barva ze čtyř vzorků, se kterými by se provedlo bilineární filtrování, do jednoho vec4/float4. Je to v podstatě to samý jako (1), akorát dostaneš 4 vzorky hned naráz. Podpora je až od GL4/D3D11, ale ATI to umí myslím už v GL3 a možná i v D3D10.1.

Pokud máš jednoduché porovnání hloubky s depth texturou a chceš jenom ten filtr, (2) je jasná volba. Pokud jedno z toho máš komplikovanější, pak jedině (3) nebo (1) podle možností.

Samozřejmě klasika už od GL2/D3D9 je dělat všechno v shaderu. D3D9 standardně shadow samplery nemá, takže tam to ani jinak nejde. Normálně si načti vzorky z textury na tebou zvolených pozicích a nakombinuj si to jak chceš.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



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

PříspěvekZaslal: 23. srpen 2010, 15:40:53    Předmět: Odpovědět s citátem

Další možné řešení je použít Summed Area Tables, ovšem to už není čistě jen o shaderu ale také o přepočtu textury při načítání do SAT, případně generovat SAT přímo z framebufferů.
_________________
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
micky



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

PříspěvekZaslal: 23. srpen 2010, 21:27:49    Předmět: Odpovědět s citátem

Díky moc za rady, zkusím se s tím poprat. Wink
_________________
https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/
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