На дълбочината на рязкост е фотографски ефект, причинен от бленда и фокусно разстояние. Много интересна статия на тази тема е бил публикуван в istockphoto.com . Тя осигурява надеждна дълбочина-бияч за двуизмерен, прогнозираните значими. С други думи: Това прави снимките изглеждат 3D, докато те са все още 2D прогнози.
В сегашното поколение графичен хардуер, е възможно да се направи много фантазия пост-обработка на ефекти - един освен меки сенки и Motion Blur, дълбочината на рязкост (DOF) може да са от от най-често се използва сила за подобряване на качеството на картината. Налице е широк обхват на различни техники за създаване ефекти приятни DOF - просто Google за "дълбочината на рязкост шейдър" ми даде около 74,000 хитове. За демонстрация, исках да напиша, реших да се използва прост, алфа-канал подход, тъй като е проста, бърза и изглежда добре.
Идеята е лесно: Ако вече имате шейдър, който прави неща, като на-пиксел осветление, просто поставете задълбочена информация в алфа канал получения цвят е. Всичко, което трябва да се направи във втория пас: направи отново изображението и размазване на изображението с подходящ ядрото. Както ядрото, избрах Поасон-Disc-филтър с CPU-precomputed данни - това е по-малко "джаги", отколкото с помощта на проста квадратна ядрото, като по-добро качество на картината, с по-малко проби. За да се предотврати лош ореоли около ръбовете на области, които имат високи дълбочина разлики, резултатът не е просто размазани снимки, но фокусно разстояние, също така контролира колко размазване на данни с изображения влязат в крайния резултат.
vec4 vColor = texture2D (sceneMap, gl_TexCoord [0] XY.); плаваш fBlurAmount = ABS (vColor.a * 2.0-1.0); плаваш fTexel = 16.0/mapSize; vec4 vResult; за (Int I = 0; и <16; + + I) { vResult + = texture2D (blurMap, gl_TexCoord [0] XY + fBlurAmount * fTexel * Поасон [в] XY * Поасон [в] Z...); } vResult / = 16,0; gl_FragColor = смес (vColor, vResult, fBlurAmount);
Наясно съм, че този подход е доста ограничено - веднага след като алфа канал е необходима за други ефекти (като светят пас или скорост), тя не може да се използва по този начин. Но така или иначе, аз съм доволен от резултатите. ![]()
| |

















































