.[ ČeskéHry.cz ].
glsl self-shadows
Jdi na stránku 1, 2  Další
 
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
franz



Založen: 30. 07. 2007
Příspěvky: 1325

PříspěvekZaslal: 23. listopad 2010, 22:17:29    Předmět: glsl self-shadows Odpovědět s citátem

Hello, chtěl bych udělat pěkné a rychlé vzájemné vrhání stínů na objekty. V podstatě nic nového.

Zatím mám jednoduchý základ - vyrenderuji pomocí FBO Depth-Buffer, který v shaderu namapuji s původní texturou:

kód:

uniform sampler2D TextureMap;
uniform sampler2DShadow ShadowMap;

void main()
{
  float shadow = shadow2DProj(ShadowMap, gl_TexCoord[1]).r;
 
  vec4 color = texture2D(TextureMap, gl_TexCoord[0].st);

  gl_FragColor = color * shadow;
}


Výsledek:


Jak se nyní zbavit toho ditheringu, který vzniká na objektu v místech, kde by měl stín spíše mizet do ztracena? Patrně nějak rozmazat... ale jak? Samotné posunutí koordinátů stínu do všech směrů a zprůhlednění sice vypadá lépe, ale není to pořád ono.. jak to dělají ostatní?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 23. listopad 2010, 22:40:17    Předmět: Odpovědět s citátem

Hi,

existuje hafo optimalizací stínových map - napsal jsem o tom diplomku (je tam PDF ke stažení).

Dvě úplně nejzákladnější optimalizace najdeš třeba tady:
1) Rozmazat shadow mapu (to můžeš zkusit, ale spíš to nedoporučuju).
2) Percentage Closer Filtering - když čteš vzdálenost se stínové mapy, tak přečteš 4 texely, provedeš pro ně samostatné vyhodnocení viditelnosti (tj. dostaneš čtyři výsledky, tj. čtyři hodnoty 0 nebo 1) a tyhle 4 výsledky zprůměruješ.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 25. listopad 2010, 11:26:22    Předmět: Odpovědět s citátem

Ale zase je to docela žrout výkonu to PCF, na větší shadowmapy se to moc nehodí. Ještě jsou Variance Shadow mapy, to taky není špatný, jenom potřebuješ ještě jednu shadowmapu mám dojem.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 25. listopad 2010, 12:15:15    Předmět: Odpovědět s citátem

Nadhodil jsem mu dvě implementačně jednoduchý optimalizace, který může mít hotový během pár minut.
Další metody optimalizace jsou uvedeny v té odkazované diplomce...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



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

PříspěvekZaslal: 25. listopad 2010, 13:49:44    Předmět: Odpovědět s citátem

PCF je v pohode a na zaciatok to urcite odporucam. Z dalsich jednoduchych optimalizacii, ktore sa ale nejavia uplne trivialne odporucam vypocet near a far planes pre generovanie shadowmapy za pomoci informacii o obalkach objektov v scene. Dostanes tak mensi rozsah Z, tj vyssiu presnost a menej artefaktov. Dost casto nie je nijaka geometria vo vzdialenosti "0.001" od svetla, je teda nezmysel to pokryvat. Zvysenie rozlisenia v XY zase dosiahnes podobnym sposobom tak, ze zmenis "focus" svetla pri generovani shadowmapy len na shadowcastery. Toto ti ale casto nijako nepomoze, napriklad ked tam ams jeden velky shadowcaster, ktory zakryva cely pohlad svetla (napriklad placku na zemi - tu ale bacha, ona by nemusela byt nutne shadowcaster, ked aj tak nikdy neuvidis veci pod nou Very Happy)

Aby som to zostrucnil: Do shadowmapy kresli len tie objekty, ktore fakt vrhaju tien a to tak, aby zaplnili co najviac texelov (tj nebolo tam prazdne miesto). Objektom pridaj vlastnost "Receive shadow" a "Cast shadow" (a to aj v pripade, ze budu v 98% oboje).
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
franz



Založen: 30. 07. 2007
Příspěvky: 1325

PříspěvekZaslal: 25. listopad 2010, 13:54:10    Předmět: Odpovědět s citátem

jj, díky, augi, PCF jsem zkusil, vypadá dobře hlavně na té podlaze, ale na objektu to stále není ono (hlavně při pohybu).

Teď mam takovou divokou verzi s rozmazáním.. no idTech to zrovna není, ale stále zkouším

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
franz



Založen: 30. 07. 2007
Příspěvky: 1325

PříspěvekZaslal: 25. listopad 2010, 14:01:53    Předmět: Odpovědět s citátem

pcmaster> toho jsem si také ve hrách všiml, nad tím rozhodně popřemýšlím
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: 25. listopad 2010, 14:26:47    Předmět: Odpovědět s citátem

pcmaster napsal:
Objektom pridaj vlastnost "Receive shadow" a "Cast shadow" (a to aj v pripade, ze budu v 98% oboje).

To je dobrý nápad, akorát až pak bude implementovat Variance Shadow Maps, tak ty vyžadují, aby Shadow casters i Shadow receivers byly v shadow mapě, jinak to nebude fungovat.

franz> Zapomeň, že jedním algoritmem na shadow mapy vyřešíš všechny problémy. Shadow mapy jsou dnes dost nevyřešenej problém a žádná technika není perfektvní. Každá řeší jen některé problémy, jenomže shadow mapy těch problémů mají aspoň 10 (ok možná přeháním) a každá technika navíc přidává svoje vlastní problémy (u Variance Shadow Maps jsou to minimálně light bleeding, vyšší nároky na přesnost). Ve výsledku budeš potřebovat minimálně 2 algoritmy, jeden na outdoor a jeden na indoor a oba budou dost odlišné. Dále můžeš mít algoritmy specializované na konkrétní situace. Tady tímto tématem se dá zabít i několik let času.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 25. listopad 2010, 15:41:44    Předmět: Odpovědět s citátem

Eosie napsal:
Tady tímto tématem se dá zabít i několik let času.


jo. a na kazdem siggraph-u je prezentovano 5 novych (dalsich) shadow-mapping algoritmu. who cares
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



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

PříspěvekZaslal: 25. listopad 2010, 15:49:09    Předmět: Odpovědět s citátem

Nestraste ho, kua Very Happy Staci PCF + "geometricke" optimalizacie ake som navrhol a potom sa uvidi, ci mu to bude stacit.

Btw, ked sme pri tom: Kto z vas uz implementoval shadowmapy z vsesmerovych bodovych svetiel? Pochvalte sa.
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
franz



Založen: 30. 07. 2007
Příspěvky: 1325

PříspěvekZaslal: 25. listopad 2010, 16:23:22    Předmět: Odpovědět s citátem

Spíš jsem doufal, že to nezabere tolik dní pokusomylů, jde-li o provařenou techniku už řadu let používanou snad v každé hře, nemůže to být nic složitého Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 25. listopad 2010, 17:22:41    Předmět: Odpovědět s citátem

pcmaster napsal:
Btw, ked sme pri tom: Kto z vas uz implementoval shadowmapy z vsesmerovych bodovych svetiel? Pochvalte sa.


Mam naimplementovane jen planar shadows, pocita se to? Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 25. listopad 2010, 18:35:23    Předmět: Odpovědět s citátem

Jak píše pcmaster, přistup k tomu pragmaticky Smile
Použil bych následující techniky:
1) Do shadow mapy renderovat jen odvrácené plochy (tj. obrátit culling). Je to jeden příkaz a může ti zvýšit fillrate a zároveň se zbavíš některých artefaktů (resp. je přesuneš někam, kde nejsou tolik na očích).
2) Konstantní posun. Když ukládáš hloubku do stínové mapy, tak k tomu přičíst prťavou konstantu.
3) Když jsme už u toho ukládání, by default se hloubka ukládá nelineárně. Bývá ale lepší mít lineární distribuci, takže je lepší přepočíst z podle vzorce nove_z = w * (z + near) / (far - near).
4) Nějaké filtrování. Pro začátek PCF, později můžeš zkusit třeba Variance Shadow Mapping.
5) Jak psal pcmaster, chce to plochu stínové mapy využít efektivně. Tj. vzít si obálky objektů vykreslovaných do stínové mapy, zjistit maximální a minimální vzdálenost a podle toho nastavit far a near kamery při renderování do stínové mapy. Tím si ošéfuješ rozumně rozsah ukládaných hodnot.
Pak je ještě dobré udělat tohl i pro X a Y.
Tzn. celý tento bod uděláš tak, že si ztransformuješ bounding boxy objektů vrhajících stín do prostoru stínové mapy a zjistší maxima a minima ve všech rozměrech (X, Y, Z). Podle z_min a z_max uděláš near a far, podle ostatních hodnot upravíš viewport (třeba jako další matice za projekční).
Pokud se ti zdá tohle složitý, vyprdni se na bounding boxy všech těles a místo toho použij těleso jedno - frustum kamery. Tj. stačí ztransformovat frustum kamery (použité pro finální rendering) do prostoru stínové mapy a tam si zjistit minima a maxima.

Ale jak psal Eosie, pro každý typ scény může být vhodné něco jiného...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 25. listopad 2010, 18:44:51    Předmět: Odpovědět s citátem

pcmaster napsal:
Btw, ked sme pri tom: Kto z vas uz implementoval shadowmapy z vsesmerovych bodovych svetiel? Pochvalte sa.
IMHO Manox.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



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

PříspěvekZaslal: 25. listopad 2010, 20:22:57    Předmět: Odpovědět s citátem

Augi napsal:
pcmaster napsal:
Btw, ked sme pri tom: Kto z vas uz implementoval shadowmapy z vsesmerovych bodovych svetiel? Pochvalte sa.
IMHO Manox.

Uz som sa tu na to imho pytal, ale nikto neriesil PCF ani nijake ine softshadowlike veci na omnilajtoch Sad
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
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
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
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