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

Shaders and multiple lights

[es] :: 3D programiranje :: Shaders and multiple lights

[ Pregleda: 4493 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
212.200.238.*

ICQ: 208550327


+14 Profil

icon Shaders and multiple lights15.04.2008. u 13:19 - pre 194 meseci
Ne uzimajuci u obzir da danasnje kartice mogu da obradjuju veliki broj instrukcija u shader-ima, zanima me kako bi ste vi resili problem shadera sa vise svetala.
Npr, imamo 9 light source-a.

Sta je najbolje od sledecih tehnika:

- da se odradi multpass ( rendering 9 puta ) sa shaderom koji u sebi ima jedno svetlo ( ovo definitivno nije resenje ali jos uvek nisam siguran da li ga treba izbegavati )
- da se u shader stave svih 9 svetala ( ovo sa povecanjem instrukcija vise nije problem )
- da se u shaderu odradi proracun za 3 svetla i da imamo 3 rendering pass-a ( meni se ovo cini kao najbolje resenje, malo se komplikuje kod ali, kad se odradi algoritam sve moze biti ok )

Postoje li bolje tehnike?
EOF
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
218.1.28.*

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Shaders and multiple lights16.04.2008. u 02:29 - pre 194 meseci
Ja bih ti preporučio deferred shading: http://en.wikipedia.org/wiki/Deferred_shading

Kod ove tehnike se komponente koje koristiš za senčenje upisuju u MRT pa se na
kraju osenči cela scena u jednom prolazu - broj prolaza će zavisiti od broja svetala,
tj. da li možeš sva svetla da smestiš u konstante šejdera ili teksturu, u zavisnosti
od toga gde držiš parametre. Takođe mislim da ti broj instrukcija nije previše važan
jer ćeš senčenje raditi u petlji pa je i SM2.0 verovatno dovoljan za dosta toga.

Mane ove tehnike su otežan rad sa više različitih formula za osvetljenje,
dosta potrebne memorije za sve frejm bafere, rendering transparentnih objekata
je otežan i slično.
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
212.200.238.*

ICQ: 208550327


+14 Profil

icon Re: Shaders and multiple lights16.04.2008. u 09:20 - pre 194 meseci
Hvala na odgovoru.

Da, radio sam sa deferred shading-om. Opet se tu postavlja pitanje, u Diffuse + Specular prolazu oko toga kako osmisliti optimalno renderovanje ( multipass + multilight PIXEL shader )

Mozda je najbolje videti koliko shader moze da izdrzi i u zavisnosti da li je 2.x, 3, 4, ( 5 :P ) model, postaviti optimalan broj svetala u shaderu.

Postoji li neki primer gde se to moze najbolje videti?

Evo jednog primera kako FarCry koristi neke tehnike za renderovanje (DX9)
http://ati.amd.com/developer/gdc/d3dtutorial08_farcryanddx9.pdf



EOF
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
218.1.28.*

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Shaders and multiple lights16.04.2008. u 09:51 - pre 194 meseci
Citat:
glorius: Hvala na odgovoru.

Da, radio sam sa deferred shading-om. Opet se tu postavlja pitanje, u Diffuse + Specular prolazu oko toga kako osmisliti optimalno renderovanje ( multipass + multilight PIXEL shader )

Ovo bi bio jedan od razloga zašto želim opet da vidim softverski rendering - previše cimanja oko
previše dostupnog hardvera. Čak i direkt iks 10 ne garantuje baš sve fičure svuda :(
Tvoj problem zavisi od potencijalnog rasporeda i broja svetala u sceni koju renderuješ
(nad ovim imaš delimičnu kontrolu u fazi dizajna) i kartice/šejder modela na kome
će to da se dešava (ako želiš da radi svuda - nemaš nikakvu kontrolu).
Srećno, mogao bi kasnije da podeliš svoja iskusva ovde, mnogo je nešto utihnuo forum :)
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
212.200.238.*

ICQ: 208550327


+14 Profil

icon Re: Shaders and multiple lights16.04.2008. u 12:16 - pre 194 meseci
Hvala! Uglanom bi to bio sledeci scenario...

Odredjivanje svih svetlosnih izvora cije bounding sfere zahvataju trenutno vidljive poligone ( neki BSP sistem ). Verovatno ne bih imao potrebe za vise od 4-5 svetlosnih izvora u trenutku ali bi sigurno postojao neki exception ( npr. nekoliko eksplozija koje odaju svetlost + torch :) + prirodni izvori svetlosti ).

Verovatno bi enable-ovao vise izvora ako user ima bolju graficku itd...

A da, sto se tice featur-a i ovog prelaza sa DX9 na DX10 i postojanja raznih tehnika u zavisnosti od dostupnog hardvera, sve totalno zbunjuje... Treba pohvatati sve tehnika... ( samo za Instancing mislim da ima minimum 4... :P )

Ogranicicu se za sada na DirectX 9.0c... Shag'n'fur ce malo da saceka :)
EOF
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
79.101.139.*

ICQ: 208550327


+14 Profil

icon Re: Shaders and multiple lights16.04.2008. u 16:48 - pre 194 meseci
OK. Mogla bi mala pomoc oko deferred renderinga. Najbolji izvor koji sam nasao je famozni PostProcess primer iz DirectX SDK. Naravno, to je samo postprocessing ali, koliko kapiram i deferred se izvodi na potpuno isti nacin.

Ono koliko ja kapiram je:

1. Renderovati scenu pomocu Ambient shader-a ( Emissive, ili kako je jos zovu, Glow tekstura + Ambient faktor materijala + Ambient faktor svakog svetla ) i to sacuvati u Ambient RT

2. Renderovati diffuse + specular komponente u sledeci RT ( da li ovo odraditi kao dva odvojena pass-a? ) Bloom koristi specular koliko sam skapirao.

3. Izvesti postprocessing ( Glow, HDR... ) ( Koriscenje gaussian blura, additivno dodavanje... )

PostProcessing primer koristi nekoliko RT...

Sve mi je ovo donekle jasno ali ne znam pravi nacin da odradim. Sta renderovati u glavni framebuffer, sta u RT tj., optimalni nacin kombinovanja ovih RT.
EOF
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
218.1.28.*

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Shaders and multiple lights17.04.2008. u 02:56 - pre 194 meseci
Raspoređivanje komponenti po RT-ovima je u zavisnosti od tvojih potreba, ali najčešće će ti trebati
normala (tri bajta dovoljna), pozicija u vrld spejsu ili samo Z pa sam rekonstruišeš u PS-u i informacije
o materijalima (spekular, difjuz i slično).

Ovaj članak je prilično detaljan: Photo-realistic Deferred Lighting
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
212.200.238.*

ICQ: 208550327


+14 Profil

icon Re: Shaders and multiple lights17.04.2008. u 14:59 - pre 194 meseci
C# ali dobra polazna tacka...

http://www.catalinzima.com/?page_id=38

EOF
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
79.101.180.*

ICQ: 208550327


+14 Profil

icon Re: Shaders and multiple lights19.04.2008. u 10:07 - pre 194 meseci
Deferred shading rocks :)))

Interesuju me neke stvarcice vezane za hardversku podrsku i tehnicke detalje. Moja graficka je nVidia GeForce NX8600GT 256

1. Zbunjuju me malo ovi formati RT-ova ( za position, normal, color, ... ) Na koji nacin determinisati prave formate ( Device CAPS checking? )

npr. ono sto sam ja uzeo: Position : D3DFMT_A16B16G16R16F
Normal : D3DFMT_A8R8G8B8
Diffuse Color: D3DFMT_A8R8G8B8

2. Kako da renderujem sa vise svetala. Posto se sve radi pomocu texture lookup-a, da li mogu da u glavnom programu napravim for petlju i aditivno 'nalepljujem', tako da mi je u shaderu samo jedno svetlo ( ovo je dobro zbog starijih grafickih )

3. Obuhvatanje veceg spektra grafickih: Evo kako ja shvatam nacin podesavanja renderinga od boljih ka losijim karticama

- Non Power Of 2 Render Targets, 4 RTs u GBuffer shaderu
- Power of 2 Render Targets, posebni pass-ovi za GBuffer ako graficka podrzava manje od 2, 3 ili 4 RT ( mada, ako podrzava 2 RT, onda moze 2 pass-a x 2 )
- Single pass Multilight
- Multipass Multilight :)

Izvinjavam se za ovaj post, jer sam sve ovo sam mogao da probam i naucim ali mislim da je diskusija u ovoj fazi istrazivanja Renderinga korisna.
EOF
 
Odgovor na temu

Filip Strugar
Filip Strugar
UK

Član broj: 9871
Poruke: 383
..nge86-141.btcentralplus.com.



+1 Profil

icon Re: Shaders and multiple lights19.04.2008. u 12:18 - pre 194 meseci
Citat:
glorius: Deferred shading rocks :)))

Interesuju me neke stvarcice vezane za hardversku podrsku i tehnicke detalje. Moja graficka je nVidia GeForce NX8600GT 256

1. Zbunjuju me malo ovi formati RT-ova ( za position, normal, color, ... ) Na koji nacin determinisati prave formate ( Device CAPS checking? )

npr. ono sto sam ja uzeo: Position : D3DFMT_A16B16G16R16F
Normal : D3DFMT_A8R8G8B8
Diffuse Color: D3DFMT_A8R8G8B8

Vidi koji ti je minimum target hardware pa nadji na internetu koje RT formate podrzava i njih koristi. Postoje spiskovi kartica i CAPSova koje podrzavaju - samo ne mogu da se setim tacno gde sam to gledao. Naravno, sto manje memorije po pixelu koristis za taj G-buffer (ili kako vec ga zovu - ) to ce stvar biti brza.

Citat:
2. Kako da renderujem sa vise svetala. Posto se sve radi pomocu texture lookup-a, da li mogu da u glavnom programu napravim for petlju i aditivno 'nalepljujem', tako da mi je u shaderu samo jedno svetlo ( ovo je dobro zbog starijih grafickih )

Samo tako i mozes da radis - for petlja u lighting pass-u i za svako svetlo radis sledece: kao ulaz imas G-buffer i podatke o svetlu (pozicija, tip i tako to), a za izlaz sve zapisujes u lighting texturu (aditivno). Dobra optimizacija jeste da ne crtas ceo ekran za svako svetlo nego samo parcence koje svetlo pokriva ali o tome razmisljaj kad ti sve proradi.
Nakon toga tu light texturu 'zalepis' preko color buffera i - radost!
Pre toga mozes da primenis neki bloom efekat na light texturu ili sta god zelis..

Citat:
3. Obuhvatanje veceg spektra grafickih: Evo kako ja shvatam nacin podesavanja renderinga od boljih ka losijim karticama

- Non Power Of 2 Render Targets, 4 RTs u GBuffer shaderu
- Power of 2 Render Targets, posebni pass-ovi za GBuffer ako graficka podrzava manje od 2, 3 ili 4 RT ( mada, ako podrzava 2 RT, onda moze 2 pass-a x 2 )
- Single pass Multilight
- Multipass Multilight :)

Izvinjavam se za ovaj post, jer sam sve ovo sam mogao da probam i naucim ali mislim da je diskusija u ovoj fazi istrazivanja Renderinga korisna.

Sve zavisi od toga sta ti je target platforma i kakvog tipa ti je projekat... Moj predlog ti je da ne pravis nikakve razlicite varijante, nego uzmes najmanji zajednicki sadrzalac i radis za njega - inace ces se zakopati u milion varijanti i nikad neces nista zavrsiti :)

Nisam siguran da razumes tacno kako radi deferred rendering/shading posto pominjes 'single pass multilight' i 'multipass multilight'. :)

Treba da (uprosceno):
1.) Iscrtas celu vidljivu geometriju u g-buffer (BEZ ikakvih informacija o svetlima). Ispisujes: boju, poziciju (moze samo Z kako Tosha kaze), normalu, specular ako hoces i to je valjda to. To je prakticno nacin da konvertujes geometriju u teksturu. Dalje ti vise geometrija ne treba (osim za senke i slicno).
2.) Koriscenjem tog g-buffera (treba ti pozicija, normala, specular) prodjes svako svetlo (koje moze imati uticaja na vidljivu geometriju) i dodajes rezultat u light texturu - koja sadrzi kolicinu svetla sa svakog izvora.
3.) Spojis color informaciju iz g buffera i light texturu u konacni rezultat.


I da, deferred shading nije nikakav silver bullet - ono ima svoje prednosti i mane - ima smisla za slucajeve kada imas mnogo svetala i geometrije koja ti se preklapa i slicno - i mozda je laksi za izprogramirati i bolji za postprocessing. Ali ima i svojih mana jer razne stvari neces moci da uradis. Ne znam dal' postoje neke nove tehnike u toj oblasti ali poslednji put kad sam gledao alpha blending i anti aliasing nisu bili jednostavni za uraditi ako koristis deferred shading... (tojest, bili su manje vise nemoguci bez dodatnog velikog cimanja).


I, kad uradis nesto obavezno okaci demo :)
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
79.101.180.*

ICQ: 208550327


+14 Profil

icon Re: Shaders and multiple lights19.04.2008. u 13:55 - pre 194 meseci
Sto se ove optimizacije za svetlo tice, verovatno mislis na Scissor rectangle?

Ovo ostalo sto sam spominjao Single Pass Multilight i Multipass je alternativa ako ne koristim deferred shading. Naravno, jos uvek ne razumem sve...
EOF
 
Odgovor na temu

Filip Strugar
Filip Strugar
UK

Član broj: 9871
Poruke: 383
..nge86-141.btcentralplus.com.



+1 Profil

icon Re: Shaders and multiple lights19.04.2008. u 20:56 - pre 194 meseci
Citat:
glorius: Sto se ove optimizacije za svetlo tice, verovatno mislis na Scissor rectangle?

Da! Moze da bude i neki poligon - npr za spotlight i slicno!

Citat:
Ovo ostalo sto sam spominjao Single Pass Multilight i Multipass je alternativa ako ne koristim deferred shading. Naravno, jos uvek ne razumem sve...

A, sorry, nisam razumeo.

Evo i linka na jednu dobru diskusiju na tu temu:

http://www.gamedev.net/community/forums/topic.asp?topic_id=424979

Citat:
Deferred rendering:

Pros:
-VERY easy and simple to make, and can be made fairly fast.
-Very tight boundaries on what pixels the light volumes affect (i.e. not many pixels, if any, are wasted).
-Fairly geometric complexity-agnostic because you're only doing a single draw.
-Low amount of state changes
-One-time generation of reasonably complex perpixel data, e.g. calculation of normals for normal mapping, Fresnel specular coefficients, anisotropic filtering.
-Scales very nicely as number of lights increases

Cons:
-No hardware antialiasing.
-Fairly high memory cost, especially at higher resolutions.
-No hardware antialiasing.
-Difficult, but not impossible, to support a reasonably wide variety of materials.
-No hardware antialiasing.
-High initial cost of G-Buffer generation due to the large amount of data that must be generated. (the last pro above should be strongly noted in conjunction with this point)
-No hardware antialiasing.
-Very fillrate/memory-bandwidth intensive.
-No hardware antialiasing.
-[This is more of an anti-pro than a con...] If you're doing any kind of shadowing solution, the geometry complexity argument flies out the window.
-I'm not sure if I mentioned this or not, but there's also no hardware antialiasing.

 
Odgovor na temu

[es] :: 3D programiranje :: Shaders and multiple lights

[ Pregleda: 4493 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

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