Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje
Uputstvo Članstvo Kalendar Današnje poruke Pretraži

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 27.1.2011, 19:34   #1
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom [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:


i druga slika sa svim efektima:



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.
Belphegor je offline   Odgovor sa citatom ove poruke
Sledećih 6 korisnika se zahvaljuje korisniku Belphegor na korisnoj poruci:
Andross (3.2.2011), EclipsE (27.1.2011), Game fever (4.2.2011), Geomaster (3.2.2011), MG-RAY (28.1.2011), zokocx (31.1.2011)
Stara 3.2.2011, 17:52   #2
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom 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
Geomaster je offline   Odgovor sa citatom ove poruke
Stara 3.2.2011, 19:40   #3
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom 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:
Render targets created with this format will not have any memory allocated internally...
Na demou koristim 4096x1024 (4 splita) pa ofsetujem po x-u kad citam iz samplera ali imam u planu da uradim 4x1024x1024 ping-pong RT gde cu da akumuliram rezlutat shadow buffer-a u pass-ovima pa cu da vidim kako ce to da se ponasa.

U vezi "shadow acne" problema
Citat:
...primenjuješ fixed bias na depth...
to se uglavnom primenjuje na "software shadow rendering" gde ga dodaju na z(dubinu) ali to dovodi do drugih problema gde se pojavljuje relativno veliki offset izmedju objekata koji se dodiruju pa mi izgleda ruzno (primer Call Of Duty 4 pa nadalje) a i mora "rucno" da se radi neki blur/pcf filter pa je dosta sporije.

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
...
videci ovo pretpostavljam da koriste 2 projection matrice za biasovanje senki, nesto kao:
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);
pa sam tokom daljih pretraga naisao na ovu stranicu to sam nesto malo probao ali nisam jos zadovoljan tako da sam trenutno stao na tome dok ne resim.
Ako imas nekih ideja ili "zanimljivih" linkova bio bih ti veoma zahvalan da to postavis ovde.
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 3.2.2011, 21:20   #4
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom 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:
Under DirectX 9, it is not possible to directly access the main z-buffer. Depth must be explicitly created using one of three methods. Multiple render targets (MRTs) can be used: Color information is written to the first target; depth is written to the second. There are a couple of disadvantages to this approach. All targets must have equal bit depths. The back buffer will be 32-bit (or more), but less might suffice for depth. More seriously, MRTs are not compatible with multisample antialiasing (MSAA) in DirectX 9.
Alternatively, depth can be created by writing to a single render target in a separate pass. This has the obvious disadvantage of requiring an extra pass over most of the scene's geometry, or at least that part which intersects the particle effect. On the plus side, depth can be written directly at the required off-screen resolution, without a downsampling operation.
Pošto vidim da se pominje samo main z-buffer, da li to znači da možeš da pristupiš z-bufferu uz neki drugi RT, dok je glavni nepristupačan (ovo mi malo nije jasno)?

Š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.
Geomaster je offline   Odgovor sa citatom ove poruke
Stara 3.2.2011, 22:48   #5
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: [C++][DX9]Deferred rendering projekat (za sad samo video)

Citat:
Citat:
...All targets must have equal bit depths...
Nisam jos procitao ovu stranicu ali iz ovog citata vidim da je delimico netacno jer neki uredjaji podrzavaju nezavisni bit depth kod MRT-a
samo treba proveriti da li je flag D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS set.

Citat:
...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?
Da, direktan pristup z-bufferu kao texture nije nativno podrzan u Dx9-tci ali je dostupno kao "extenzija" u zavisnosti od vendora (ATI, nvidia...)
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:
...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)?
Koliko je meni poznato mislim da ne moze.

Citat:
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?
Da, "shadow buffer" nazivam sumu/kompoziciju svih senki u sceni pre mixovanja sa ostalim komponentama back buffer-a. Nigde nisam procitao konkrento definiciju za ovo ali mislim da je logicno.

Citat:
Inače, jesi li pogledao ovaj pristup za renderovanje soft senki?
Hvala za link, nisam ga video ranije. A sto se tice "variance shadow map", probao sam nesto ranije ali mi se nije svideo rezlutat, ne mogu da nadjem dobar kompromis da dobijem solidan blur a da ga ne unisti "light bleeding".

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?
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 3.2.2011, 23:03   #6
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom 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)
Geomaster je offline   Odgovor sa citatom ove poruke
Stara 4.2.2011, 2:24   #7
EclipsE
Starosedelac
 
Član od: 16.4.2006.
Lokacija: Scary Movie Reputacija: ■■□
Poruke: 1.337
Zahvalnice: 378
Zahvaljeno 279 puta na 196 poruka
Slanje poruke preko Skypea korisniku EclipsE
Određen forumom Re: [C++][DX9]Deferred rendering projekat (za sad samo video)

Mozda ovo moze da pomogne.
EclipsE je offline   Odgovor sa citatom ove poruke
Stara 4.2.2011, 21:50   #8
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: [C++][DX9]Deferred rendering projekat (za sad samo video)

@Geomaster
Citat:
Probaj da staviš obrnuti culling - renderuj samo backfaceove u shadow map...
Taj "hack" mi je odavno poznat, video sam ga na par demoa sa shadow mapama a i probao naravno, jeste uklanja acne ali nazalost on ima svoju manu "light bleeding".
Ako mislis na "cullmode render state" CCW -> CW?

Citat:
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...
To koristim za neke druge stvari, recimo u pixel shader-u za light backfacing "poligone" kad treba da citam iz shadow mape (ne moze per-vertex ovde zato sto je ovo "deferred rendering" pozicije vertexa su u texturi):
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);
@EclipsE
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.
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 12.2.2011, 15:54   #9
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom 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?
Geomaster je offline   Odgovor sa citatom ove poruke
Stara 13.2.2011, 14:34   #10
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom 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);
ovo "guta" akne:
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.
Belphegor je offline   Odgovor sa citatom ove poruke
Sledećih 2 korisnika se zahvaljuje korisniku Belphegor na korisnoj poruci:
EclipsE (13.2.2011), Geomaster (16.2.2011)
Odgovor

Bookmarks sajtovi


Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


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


Sva vremena su po Griniču +2 h. Sada je 6:09.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com