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. ![]()
| |

















































