Nopea ja yksinkertainen 2-Pass Syväterävyys

Gnome Depth-Of-Field Syväterävyys on valokuvaus aiheuttaman aukon ja polttovälin. Erittäin mielenkiintoinen artikkeli tästä aiheesta on julkaistu istockphoto.com . Se tarjoaa luotettavan syvyys-vihje kaksiulotteinen, ennustettu materiaalia. Toisin sanoen: Se tekee kuvat näyttävät 3D kun ne ovat vielä 2D ennusteita.

Nykyisissä sukupolven näytönohjaimen, se on mahdollista tehdä paljon hienoja jälkikäsittely vaikutuksia - lisäksi pehmeät varjot ja liikkeessä hämärtää, syväterävyys (dof) saattavat olla useimmin käytetty vaikutus parantaa kuvan laatua. On suuri kattavuus eri tekniikoita luoda miellyttävä dof vaikutuksia - yksinkertainen Google "depth of field shader" antoi minulle noin 74,000 osumia. Sillä demo halusin kirjoittaa, päätin käyttää yksinkertaista, alfa-kanavan perustuva lähestymistapa, koska se on yksinkertainen, nopea ja näyttää hienolta.

Ajatus on helppo: Jos sinulla on jo shader, että tekee asioita, kuten per-pikseli-valaistus, vain laittaa syvällistä tietoa saatuun värin alfa-kanava. Kaikki tämä on tehtävä toinen pass: tehdä kuvan uudelleen ja hämärtää kuvan sopivan ytimen. Kuten kernel, päätin Poisson-Disc-Filter CPU-esilasketun data - tämä on vähemmän "jaggy" kuin käyttämällä yksinkertaista asteen ytimen, mikä mahdollistaa paremman kuvanlaadun vähemmän näytteitä. Estää ikäviä halot reunoilla alueilla, joilla on suuri syvyys-eroja, tulos ei ole pelkästään näön kuva, mutta polttovälin valvoo myös kuinka paljon näön kuvadatan päästä lopputulokseen.

  vec4 vColor = texture2D (sceneMap, gl_TexCoord [0]. xy);
 float fBlurAmount = abs (vColor.a * 2,0-1,0);
 float fTexel = 16.0/mapSize;
 vec4 vResult;
 for (int i = 0; i <16; + + i) {
     vResult + = texture2D (blurMap, gl_TexCoord [0]. xy + fBlurAmount * fTexel * Poisson [i]. xy * Poisson [i]. z);
 }
 vResult / = 16,0;
 gl_FragColor = mix (vColor, vResult, fBlurAmount); 

Olen tietoinen siitä, että tämä lähestymistapa on varsin rajallinen - heti kun alfa-kanavan tarvitaan muita vaikutuksia (kuten hehku-pass tai nopeuden), sitä ei voi käyttää näin. Mutta joka tapauksessa, olen tyytyväinen tuloksiin. ;)

Tämä merkintä oli lähetetty Computer Science and tagged , , , . Kirjanmerkki permalink .

Kommentit ovat kiinni.