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 :)