Комментарии 16
Автору спасибо за красивости. Очередной толчок к изучению WebGL :)
0
А почему не Лена?
+8
Во-первых на изображении леса и травы с проблесками света эффект смотрится лучше, во-вторых это hdr формат изображения, соответственно боке выглядит натуральнее и в-третьих — это уже готовый проект с несколькими кубмапами, о нем я напишу в следующих статьях.
Хотя, если честно, про Лену я почему-то даже не вспомнил(
Хотя, если честно, про Лену я почему-то даже не вспомнил(
+3
Ещё неплохо было бы сказать что у такого dof есть косяк на границах ближних объектов, когда они начинают размываться, их границы остаются резкими. Для решения проблемы dof нужно разделить на 2 текстуры 1 — ближние объекты 2 — объекты в фокусе и дальше фокуса. Размываем их по dof (размытие первой текстуры будет слегка отличатся) и потом смешиваем.
+1
Да, такой недостаток есть. Частично я от него избавился, записывая силу размытия ближних объектов с отрицательным знаком, но если приглядеться косяк все равно заметен. Это я покажу в следующих статьях.
Спасибо за замечание, сейчас добавлю.
Спасибо за замечание, сейчас добавлю.
0
Еще вокруг объекта в этом примере наблюдается некий светлый ореол снизу. Его лучше видно, если перевести изображение в градации серого. К слову, хорошее средство тестирования результатов — разложение их в GIMP на частотные планы (плагин Wavelet Decomposition) — на высокочастотных (1,2,4) оставшиеся резкие артефакты в областях, где все должно быть размыто, легко увидеть.
0
Спасибо за статью.
Лично меня заинтересовал ваш альтернативный подход:
> проходимся по текстуре специальным шейдером, в котором выявляем наиболее контрастные места и записываем их координаты в буффер
Я видимо слишком нуб в шейдерах, чтобы понять, как это можно записать координаты в буфер, если количество точек результата заранее неизвестно. Не подскажите?
Лично меня заинтересовал ваш альтернативный подход:
> проходимся по текстуре специальным шейдером, в котором выявляем наиболее контрастные места и записываем их координаты в буффер
Я видимо слишком нуб в шейдерах, чтобы понять, как это можно записать координаты в буфер, если количество точек результата заранее неизвестно. Не подскажите?
0
Там используютя атомарные операции, а сам буффер имеет фикированную длину. То есть он не динамический, место под него выделяется заранее.
0
То, что буфер может быть только фиксированным — это понятно, а что вы имеете ввиду под атомарными операциями?
Единственное, что мне приходит в голову — это зафиксировать за каждым элементом буфера небольшую часть экрана, в которой шейдер будет искать наиболее контрастную точку, и записывать её координаты. Но в этом случае мы не найдём все такие точки.
Единственное, что мне приходит в голову — это зафиксировать за каждым элементом буфера небольшую часть экрана, в которой шейдер будет искать наиболее контрастную точку, и записывать её координаты. Но в этом случае мы не найдём все такие точки.
0
Вы имеете ввиду как вычисляется индекс в буфере по которому записываются координаты? Для этого есть атомарный счетчик, как только нашли достаточно контрастное место — увеличиваем счетчик и по нему вычисляем индекс в буфере
Вот кусок шейдера из той книги:
Вот кусок шейдера из той книги:
if(( lumCenter - lumNeighs) > LumThreshold && cocCenter > CoCThreshold)
{
int current = int(atomicCounterIncrement(BokehCounter));
imageStore(BokehPositionTex , current ,vec4(gl_FragCoord.x, gl_FragCoord.y, depth , ←
cocCenter));
imageStore(BokehColorTex , current , vec4(colorCenter , 1));
}
+1
Хотелось бы оставить здесь эту песочнице для GLSL.
+1
Довольно годная и простая реализация боке. Я как-то просматривал OpenGL Insights, но там вроде смысл был в поиске контрастных мест на изображении и отрисовывание в местах с локальным максимумом яркости спрайтов с боке. Для отрисоки боке использовались новые возможности из OGL4, поэтому я особо рассматривать не стал.
У вас довольно приятные результат с малыми силами — спасибо за статью!
У вас довольно приятные результат с малыми силами — спасибо за статью!
0
Делал blur для Cocos2d-x на C++ так как не смог добиться нормальной работы шейдера… Игра для мобильных устройств — надо попробовать ваши варианты…
Вы проводили какие-либо тесты на вашем оборудовании?
Вы проводили какие-либо тесты на вашем оборудовании?
0
На размытой палке больше похоже на то, что она светится, чем на то, что она размыта. Ну не оптический это эффект уж точно.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Такой разный Blur