Каков наиболее эффективный способ реализации фильтра свертки в пиксельном шейдере?

Реализация свертки в пиксельном шейдере довольно затратна из-за очень большого количества выборок текстуры.

Прямой способ реализации фильтр свертки должен выполнять N x N поисков на фрагмент, используя два цикла для каждого фрагмента. Простой расчет показывает, что изображение 1024x1024, размытое с помощью гауссова ядра 4x4, потребует 1024 x 1024 x 4 x 4 = 16M просмотров.

Что можно с этим сделать?

  1. Можно ли использовать некоторую оптимизацию, которая потребовала бы меньшего количества поисков? Меня не интересуют специфичные для ядра оптимизации, такие как оптимизация для Гаусса (или они специфичны для ядра?)
  2. Можно ли хотя бы ускорить эти поиски, каким-то образом используя локальность пикселей, с которыми он будет работать?

Спасибо!

15
задан Albus Dumbledore 9 March 2011 в 09:52
поделиться