|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
27.1.2011, 19:34 | #1 |
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
[C++][DX9]Deferred rendering projekat (video i screenshots)
Evo, za sada, mali video mog hobi projekta. Batalio sam Irrlicht engine vec pre par godina jer sam resio sve sam da odradim "from scratch" sto bi rekli. Posao (koji nema veze sa programiranjem ni najmanje) mi oduzima dosta slobodnog vremena tako da mi sve ide sporo sto se tice moje ljubavi prema pravljenju igara.
Da ne bih pisao ponovo procitajte "description box" koji ide uz video na youtube-u u njemu je detaljniji text o demou. http://www.youtube.com/watch?v=s7iDsnZlBJI Kad bude kolko tolko spremno postavicu ovde "binary" da probate. EDIT 001: Evo malo screenshot-ova trenutnog progresa: 1. Na ovoj slici je test moje implementacije "Bitmap font", trenutno samo ASCII karakteri, koristi samo 1 dinamicki vertex buffer za renderovanje texta. Prikazano je par text blokova sa razlicitim bojama i skaliranjem. Ovo se "provlaci" kroz shader pa cu moci da dodajem razne efekte. 2. Trenutno se jos radi na uklanjanju bagova sa shadow acne-ma, najbolje se vidi na ovoj slici gde je samo shadow buffer prikazan: Spoiler za Slike su mozda velike za nekoga (1024x1024) pa stavljam u spoiler tags:
Kad budem ima jos nesto novo postavicu ovde u prvi post. <OFFTOPIC> Pitanje za moderatore: Zasto ne mogu da promenim naslov teme posle editovanja u naprednom editoru? Cemu onda opcija za editovanje "Naslov"-a u njemu? Hteo sam samo da promenim sadrzaj u zagradi u "(video i screenshots)" ali nista ne menja kad kliknem "Sacuvaj promene" button. Poslednja ispravka: Belphegor (28.1.2011 u 16:09) Razlog: Nove stvari dodate. |
3.2.2011, 17:52 | #2 |
V.I.P. Programiranje
|
Re: [C++][DX9]Deferred rendering projekat (za sad samo video)
Kako rešavaš problem sa shadow acne-ima? Koliko sam informisan primenjuješ fixed bias na depth vrednostima na shadow mapi, e sad nisam siguran koliko to stvarno pomaže...
Planiram i ja da sa teorije shadow mappinga pređem na praksu pa napišem shadere za parallel-split shadow mapping, pa se informišem gde stignem |
3.2.2011, 19:40 | #3 | ||
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
Re: [C++][DX9]Deferred rendering projekat (za sad samo video)
Nisam neki "strucnjak" ali mislim da sam za sada dosta materijala prosao a i uz pomoc malo logike mogu da dodjem do pristojnih rezlutata.
Pored modela iz s.t.a.l.k.e.r.-a koje sam ubacio u demou koristim i informacije sa ove stranice (mada si je do sada mozda vec video) i nesto iz ovog pdf dokumenta, mada sam za sada fokusiran uglavnom na stvari specificne za nvidia graficke karte ali cu vremenom odraditi i za ATI. Da bih dobio na performansama a i na ustedi memorije za "shadow buffer" koristim z-buffer kao texture (na to se dobija HW pcf) uz koji ide NULL(dummy) render target format (sto koriste i u samoj igri). citat iz pdf-a o NULL rt: Citat:
U vezi "shadow acne" problema Citat:
Prvi put kad sam probao "S.T.A.L.K.E.R. - Call Of Pripyat" imali su problema sa shadow offsetom pa sam nasao na netu ispravku (posle koje senke izgledju super) gde u "user.ltx" modifikuju sledece parametre: Kod:
... sun_depth_far_bias -0.00001 sun_depth_far_scale 1.0 sun_depth_near_bias 0.00001 sun_depth_near_scale 1.0 ... Kod:
// projection matrix koji se prosledjuje kad se radi shadow pass D3DXMatrixPerspectiveFovLH(&sunProj, D3DX_PI / 4.0f, SM_SIZE_X / SM_SIZE_Y, (baseClipNear + nearBias) * nearScale, (baseClipFar + farBias) * farScale); Ako imas nekih ideja ili "zanimljivih" linkova bio bih ti veoma zahvalan da to postavis ovde. |
||
3.2.2011, 21:20 | #4 | |
V.I.P. Programiranje
|
Re: [C++][DX9]Deferred rendering projekat (za sad samo video)
Da, čitao sam GPU Gems 2 (doduše samo na netu pošto nisam uspeo da se dokopam štampane verzije )
Jedna stvar mi nije jasna, koliko sam čitao po raznim sajtovima, direktan pristup z-bufferu teksture iz shadera je uvedeno tek u DirectX 10ki, pa kako pristupaš tom z-bufferu uz taj null render target iz shadera? U ovom članku piše: Citat:
Što se tiče biasovanja da bi se izbegao efekat z-fightinga prilikom renderovanja senki, meni taj peter panning efekat nije izgledao mnogo pošto bias treba da bude relativno mali da bi se izbegli ovi efekti, ali koliko znam varira od aplikacije do aplikacije. Nikad nisam radio sa PCF-om iz hardvera, pa kako on tačno radi? Da li uz sampler za shader treba proslediti i još neku direktivu da bi GPU znao da li da radi PCF, i da li je ikako moguće promeniti broj semplova za PCF (pretpostavljam da ne pošto je u GPU taj deo fixed a ne programmable)? I baš sad gledam ovaj screenshot, šta je tačno kod tebe shadow buffer? Prvo sam mislio da misliš na shadow map (klasičnu depth teksturu) ali ovaj screenshot koji si postavio nije depth buffer... Da li si senke upisivao na posebnu teksturu (taj shadow buffer) pre kompozitinga u scenu? Inače, jesi li pogledao ovaj pristup za renderovanje soft senki? Vidim da si do sada renderovao outdoor scene ali možda može da posluži ako ti zatrebaju meke senke. Interesantno je kako je uklopljen stochastic sampling u PCF algoritam i dynamic branching koji uzima prvo samo 4 sempla iz shadow mape, pa tek ako je razlika velika nastavlja da uzima dodatne semplove da bi "omekšao" senku. I variance shadow mape su zanimljiv pristup (dosta drugačiji od tradicionalnog shadow mappinga) za renderovanje malo mekših senki. I da, ako imaš u planu point svetla, pročitaj ovo (opet GPU Gems ), meni je dosta toga razjasnilo u tom pogledu, ali cenim da već znaš kako bi to odradio Mene živo zanima kako se ponašaju ove tehnike u praksi (pošto u teoriji izgledaju zanimljivo), a trenutno me je stisnulo vreme za jedan projekat pa ne mogu sam da se upustim u istraživanje okolo Izvini za ovoliko pitanja ali bih samo raščistio neke stvari koje mi nisu jasne oko ovoga (a ima ih nažalost dosta, najviše zbog high-level matematike koja se koristi, a učiću je tek u srednjoj). Pozdrav. |
|
3.2.2011, 22:48 | #5 | ||||||
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
Re: [C++][DX9]Deferred rendering projekat (za sad samo video)
Citat:
samo treba proveriti da li je flag D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS set. Citat:
vise informacija o ovome mozes videti ovde (pogledaj sekciju 6.2 Hardware Shadow Maps) Ovo je recimo specificno za nvidiu: Kod:
#define FOURCC_NULL ((D3DFORMAT)(MAKEFOURCC('N','U','L','L'))) ... // kreiranje null/dummy rt i z-buffer surfaces hr = D3D9Device->CreateTexture( SMapSize, SMapSize, 1, D3DUSAGE_RENDERTARGET, FOURCC_NULL, D3DPOOL_DEFAULT, &gDummyTex, 0); hr = gDummyTex->GetSurfaceLevel(0, &gDummySurf); hr = D3D9Device->CreateTexture( SMapSize, SMapSize, 1, D3DUSAGE_DEPTHSTENCIL, D3DFMT_D24X8, D3DPOOL_DEFAULT, &gShadowTex, 0); hr = gShadowTex->GetSurfaceLevel(0, &gShadowSurf); ... // u toku crtanja void render() { ... // renderovanje na shadow map (z-buffer surface) iz perspektive svetla D3D9Device->SetRenderTarget(0, gDummySurf); D3D9Device->SetDepthStencilSurface(gShadowSurf); D3D9Device->Clear(0, 0, D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(255, 255, 255), 1.0f, 0L); DrawScene(); ... // renderovanje na "scenu" iz perspektive "playera", prosledjivanje z-buffer texture Effect->SetTexture("shadow_tex", gShadowTex); ... DrawScene(); Citat:
Citat:
Citat:
Ako se kojim slucajem budes malo vise bavio ovom problematikom i nekako uspeo da resis "acne" problem imas od mene gajbu piva specijalno poruceno postom. Ako ne volis pivo sredicemo nesto drugo? |
||||||
3.2.2011, 23:03 | #6 |
V.I.P. Programiranje
|
Re: [C++][DX9]Deferred rendering projekat (za sad samo video)
Hvala na odgovorima.
Što se tiče acne problema, ne verujem da ću se u skorije vreme baviti ovim ali čim budem imao malon vremena da posvetim ovom odmah ću da krenem da radim, a u međuvremenu ću malo da porazmislim o tome kako se ovo rešava. EDIT: Ne znam jesi li isprobavao to, ali možda bi mogao da probaš da ne biasuješ sve poligone, već samo frontfaceove ili samo backfaceove... Nisam kući pa ne mogu da isprobam ali možda reši probleme. EDIT2: Probaj da staviš obrnuti culling - renderuj samo backfaceove u shadow map. 90% sam siguran da nećeš imati problema, pošto će u svakom slučaju biti dalje nego što jeste, bez biasovanja i peter panninga. Ako nisam nešto prevideo, senke će izgledati isto zato što bi u svakom slučaju backface bio iza frontfacea nasuprot njega. E sad, tu ćeš imati problema ako imaš rupe u geometriji (ne verujem) ili ako imaš standalone poligone (tipa billboardi) koji u tom slučaju neće bacati senku. Da vidiš koji poligon je frontface a koji backface samo uradi normala dot view vektor i onda samo proveriš znak proizvoda. To možeš da izračunaš per-vertex i da isključiš interpolaciju za taj parametar, i onda u fragment shaderu iscrtavaš ili ne iscrtavaš piksel na osnovu toga. Druga opcija je da sam ja epski lupio, al' nema veze, čovek se uči na greškama Može pivo, pod uslovom da zaslužim Poslednja ispravka: Geomaster (4.2.2011 u 0:06) |
4.2.2011, 21:50 | #8 | ||
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
Re: [C++][DX9]Deferred rendering projekat (za sad samo video)
@Geomaster
Citat:
Ako mislis na "cullmode render state" CCW -> CW? Citat:
Kod:
float Shadow = 0.0f; if((dot(normalVS, -LightPosVS) < 0.0f)) { ...//skupa operacija ...//skupa operacija Shadow = sampleShadow(shadow_samp, vShadowTexCoord);//skupa operacija } Shadow = min(Shadow + 0.32f, 1.0f);// OUT.Color = float4(Shadow.xxx, 1.0f); Video sam taj "sample", posto imam bas taj DX SDK (June 2010) radjen je u DX11 verziji kao DX10 feature level (posto moja graficka karta moze samo toliko da "iznese") a ovo sto radim je u DX9 varijanti. Nisam citao detalje vezano za ovaj primer ali cu pogledati ako moze sta da se iskoristi ako nije bas specificno za DX10-11. Probao sam ga ranije malo ali nisam bio zadovoljan: vratio "offset" slider na 0 (onda se pojave acne svuda) pa sam onda cekirao ddx/ddy i to delimicno uklanja acne, nema ih na "podu" ali se mogu uociti na zidovima kad se malo priblizis sa kamerom. Hvala obojici na trudu. |
||
12.2.2011, 15:54 | #9 |
V.I.P. Programiranje
|
Re: [C++][DX9]Deferred rendering projekat (za sad samo video)
Kako napreduješ, jel si rešio shadow acne problem, jel ima neki novi screen/video, ili binary da probamo?
|
13.2.2011, 14:34 | #10 |
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
Re: [C++][DX9]Deferred rendering projekat (za sad samo video)
Uspeo sam da se resim akni, falio mi je 1 "normalize".
Mada su sa ovim samo pojavljivale u daljini: Spoiler za slika sa aknama 1024x1024:
pa sam dodao mali "hack" gde povecavam virtual_h gde je dubina/daljina veca: Kod:
// gbuffer pixel shader // virtual_h zavisi od scene (velicine objekata) pa je meni ovde odgovaralo otprilike 0.26 // vhDist 5.0 // vhScale 0.001 float vh = virtual_h; if(IN.vPos.z > vhDist) { // IN.vPos je u "view space"-u vh += IN.vPos.z * vhScale; } float3 norm = normalize(normalVS); float3 pos = (IN.vPos.xyz + norm * vh); OUT.Position = float4(pos.xyz, 1.0f); OUT.Normal = float4(norm.xyz, 0.0f); Spoiler za slika bez akni 1024x1024:
Za sada ne vidim problem sa ovim mada cu jos da istrazujem. Izbacicu "binary" kad sve lepo sredim i odradim da moze radi i na ATI-jevim kartama + moram da izmodelrim sam modele i texture pa ce mi trebati vremena. |
Bookmarks sajtovi |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
YouTube mi iskasapi video :( | BugA | Video/TV softver | 6 | 4.4.2010 22:13 |
Google - Projekat 10 na 100-ti. (nagrada, samo 5x2 miliona $). | dzonihsv | Brbljaonica | 7 | 16.10.2008 12:03 |
(ima)nema video fajla | Selver | Kvarovi | 4 | 12.4.2008 1:57 |
MSI MP3Player i problem sa video zapisima! | Zvonko Skener | Aplikativni softver | 1 | 2.10.2006 20:35 |
Koja video kompresija? | Kokan | Video/TV softver | 8 | 3.4.2006 19:30 |