Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Soft Shadows - demo screenshots

[es] :: 3D programiranje :: Soft Shadows - demo screenshots

[ Pregleda: 2741 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
109.93.164.*

ICQ: 208550327


+14 Profil

icon Soft Shadows - demo screenshots28.02.2010. u 18:10 - pre 172 meseci
Moj prvi Soft Shadow demo! :))))

Ideju sam preuzeo sa sledeceg linka:
http://www.gamedev.net/reference/articles/article2193.asp

Cilj demo-a je bio da detaljno razumem kako radi jedan od nacina generisanja senki.

Nacin generisanja senki:

1. Renderovanje scene iz perspektive svetla u Depth buffer render target ( DepthRT )
2. Renderovanje scene iz perspektive kamere pri kojem se odredjuje koji pixel je u senci koristeci podatke iz Depth buffer render target i smestanje vrednosti rezultata ovog testa (crna ili bela boja) u poseban render target ( ShadowMapRT ) ciji sadrzaj izgleda ovako.


3. Blurovanje ShadowMapRT pomocu vertikalnog i horizontalnog Gaussian blura dva puta ( BlurRT ) tako da se dobija iluzija mekane senke. Primer.


4. Na kraju se renderuje scena sa osvetljenjem. Iz BlurRT se uzimaju vrednosti (ShadowTerms) tako sto se u Light shaderu proracunaju screen space texture koordinate i izvrsi se lookup BlurRT texture. Na kraju se konacna boja ( diffuse + specular ) mnozi ShadowTerm-om. Blur shader je dosta zahtevan, koliko mi se cini, pa bi u buducnosti mogao da probam sa blurovanjem downsamplovane verzije ShadowMap-e zbog Frame Rate-a mada nisam siguran kakav ce kvalitet senki biti.

Soft Shadows 1

Ovde sam dodao malo ambient osvetljenja senkama tako da izgledaju realnije ( nisu skroz crne )
Soft Shadows 2
Soft Shadows 3

U primerima je velicina Shadow Mape 512x512. Mogao sam da izaberem 1024x1024 ( bolje izgleda ) ali vizeulno i 512x512 zadovoljava.

Sledeci korak je dodavanje vise svetala koja bacaju senke. Ideja je da se renderuje u vise ShadowMap Render Targeta i da se vrednosti pixela iz tih RT-a mnoze tako da se dobije jedna ShadowMapa na kojoj su siluete senki svih svetala.

Za sledeci demo cu uraditi bolju scenu u MAX-u :)
EOF
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Re: Soft Shadows - demo screenshots02.03.2010. u 07:38 - pre 172 meseci
Naisao sam na jedan primer implementacije Shadow mapa i dok sam razgledao kod, video sam da se u njemu NE koristi depth buffer pri renderovanju u Shadow Depth teksturu ali se ipak prikazuju senke ( osim u slucaju kada smanjim velicinu prozora ). Ovo me je navelo da proverim kako u stvari radi depthstencil surface.

Probao sam da vidim sadrzaj Depth Map-e ( floating vrednosti predstavljene plavom bojom ) sa i bez depth-stencil-a. Sa depth-stencil bufferom sileuta scene se jasno videla dok sam bez depth-stencil buffera dobijao cist svetloplavi ekran ( sto znaci da se depth vrednosti nisu upisale u render target ).

Zbunjuje me to sto moj DepthMap shader vec vraca Z vrednosti svakog pixela. Posto je color render target ionako u D3DFMT_R32F formatu ( prihvata floating vrednosti ) on ce imati proracunate Z vrednosti pixela. Cemu potreba za depthstencil surface? Jasno je da depth vrednosti nisu upisane u color render target bez koriscenja depthstencil surface ali zar nije dovoljno postaviti u shaderu flag ZEnable = true ?

[Ovu poruku je menjao glorius dana 02.03.2010. u 15:13 GMT+1]
EOF
 
Odgovor na temu

Filip Strugar
Filip Strugar
UK

Član broj: 9871
Poruke: 383
91.143.178.*



+1 Profil

icon Re: Soft Shadows - demo screenshots04.03.2010. u 13:53 - pre 172 meseci
Bravo! :)

Da odgovorim na pitanje: Moras da koristis depth/stencil da bi pravilno iscrtao bilo sta, jer ce inace svaki novi pixel koji iscrtavas biti iscrtan bez obzira da li je ispred ili iza prethodno iscrtanih, a tebi za generisanje shadow mape trebaju oni najblizi svetlu a ne bilo koji.

Ono sto ne moras da koristis je depth map (to verovatno radi taj primer) jer mozes da koristis depth/stencil kao depth map. Dakle, da generises depth map pises samo u depth/stencil a render target postavis na NULL i koristis najprostiji pixel shader (ili tako nekako).
Tako dobijes brze iscrtavanje shadow (depth) mape i koristis manje tekstura, ali je sve malko komplikovanije.

Ne secam se trenutno detalja, ali ovo u DirectX9 nije podrzano na svim grafickim karticama tako da moras da proveris CAPS, tako da najbolje da se ne cimas sa time. U DirectX 10/11 ovo je mnogo jednostavnije jer je uvek podrzano.

Takodje sam algoritam za crtanje senke treba da bude drukciji jer citas iz Depth/Stencil bafera koji je u post-projection space-u (ide od 0 do 1).
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Re: Soft Shadows - demo screenshots04.03.2010. u 14:07 - pre 172 meseci
Posle malo izucavanja, shvatio sam o cemu se radi prilikom koriscenja posebnog DepthStencil buffera :)

Malo sam preuredio kod koji mozete skinuti odavde.

Dovoljno je da ceo folder stavite u DirectXSDKRoot\Samples\C++\Direct3D. Za development sam koristio Microsoft DirectX SDK (February 2010), nisam isprobao da li radi sa starijim verzijama tako da cete mozda morati da skinete najnoviji SDK.

Da bih pojednostavio primer, izostavio sam blur-ovanje senki tako da su sada hard shadows ali i deo koda koji sluzi za blurovanje ( i shader-i ) se nalaze u okviru source-a.


EOF
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Re: Soft Shadows - demo screenshots04.03.2010. u 14:51 - pre 172 meseci
Kada ne bih koristio depth buffer, jasno je da se ne bi proveravao depth pixela tako da, kao sto kazes, meni trebaju samo oni pixeli koji se vide iz perspektive svetla pa se zato i koristi depthstencil buffer. Razmisljao sam zasto se ne koristi depth buffer attachovan za back-buffer ali,posle mi je postalo jasno je da nisu iste velicine ( pa ni istog formata, mozda ) pa se mora koristiti poseban depth buffer.

I meni je palo na pamet da je upisivanje u color render target suvisno jer, posle renderovanja scene iz perspektive svetla, depthstencil buffer se popunjava depth vrednostima tako da se one mogu iskoristiti ali u svim primerima sam video ovaj nacin ( koriscenje floating-point render targeta + depthstencil buffer )...







EOF
 
Odgovor na temu

[es] :: 3D programiranje :: Soft Shadows - demo screenshots

[ Pregleda: 2741 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.