Нет, это не очередной постпроцесс-эффект. Я долго думал, куда эту тему запихнуть: вроде и OpenGL есть, но и назначение у неё немного другое... Будем считать, что это Shader Toy.
Консольная (!) прога, которая считает размывание по гауссу с помощью шейдров. Алгоритм самый что ни есть «лобовой» - суммирует все пиксели подряд, из-за чего сильно тупит на больших радиусах. Чтобы на больших радиусах считал нормально, пришлось прикрутить хитропопый алгоритм который включается опцией fast, но чуть-чуть теряет в качестве. Разумеется, потребуется карта, поддерживающая шейдры и не-mesa драйвер.
Программа для Unix систем (под Win не пойдёт). Увы, ГУИ нет, свистелок тоже нет, и возможно придется даже компилять. Но думаю, это будет интересно тем... кому интересно.
В архиве сборка под Linux 32 bit, и исходники для 64 битников - чтобы собрать самому. У этой программы нет зависимостей (разве что только от Х:). Скачать без рекламы, смс, регистрации, ожидания 60 секунд и матан-капчи можно отсюда: http://ompldr.org/vYmd2OQ
Что выдаёт эталонный бенчмарк у меня:
$ ./gauss image.jpg 500 out1.bmp
Renderer: GeForce 6600 LE/AGP/SSE2 (NVIDIA Corporation)
Driver: 2.1.2 NVIDIA 270.41.06
Time: 3.050000 sec
$ ./gauss image.jpg 500 out2.bmp fast
Renderer: GeForce 6600 LE/AGP/SSE2 (NVIDIA Corporation)
Driver: 2.1.2 NVIDIA 270.41.06
Time: 0.060000 sec
Обратите внимание на эффект от хитрого алгоритма:)
Желающие могут потестить свои карточки. Особенно интересно как покажут себя современные карты с 9000 универсальных шейдерных процессоров. Не советую запускать на Intel GMA. Х сервер падает замертво.
Как видно, на больших радиусах может проигрывать даже CPU (так как на CPU используют быстрое преобразование Фурье, которое мне писать просто лень). Немного странная формула гаусса (exp(-x*x*3.058)) возникла из-за того, что я коэффициенты рассчитал «в лоб» в Maxima, чтобы распределение давало в сумме 1.
P.S. Думаю, будет любопытно посмотреть, как консольная прожка размером 70 килобайт уделывает по производительности всякие ImageMagick'и:) Это только гаусс, но в принципе можно так сделать любой фильтр, например, создание превьюшек из 100500 фоток.
Я специально не вшивал шейдр в сырцы, чтобы желающие могли потестировать свои собственные фильтры или просто поэкспериментировать.
Там нет автоопределения размера картинки, вшито 1024х1024. Sorry... В SOIL размер картинки не выковыривался, потом придумаю что-нибудь.