2014-07-09 2 views
1

Я использую рамку GPUImage от Брэда Ларсона. Однако, когда я пытаюсь применить фильтр kuwahara с радиусом фильтра 5.0f, я получаю артефакты на iPhone 4S. (Отлично работает на более высоких устройствах производительности)GPUImage Фильтр Kuwahara на iPhone 4S

Источника размера был 2048x2048px.

Читая комментарии оригинального разработчика, я понял, что есть своего рода сторожевого таймера, который срабатывает, если что-то занимает слишком много времени, чтобы работать на GPU.

Так что мой вопрос в том, что такое максимально возможное разрешение для iPhone 4S. Я могу применить фильтр Kuwahara с радиусом 5.0f без получения артефактов?

ответ

0

На самом деле нет жесткого ограничения. Артефакты черепицы, которые вы видите, связаны с таймером сторожевого таймера OpenGL ES, прервавшим рендеринг сцены после того, как он занимает слишком много времени. Если у вас есть один кадр, который занимает дольше, чем приблизительно 2 секунды для рендеринга, рендеринг вашего кадра будет убит таким образом.

Точное время, которое требуется, это функция аппаратных возможностей, загрузки системы, сложности шейдеров и версии iOS. В GPUImage вы в значительной степени видите это только с фильтром Кувахара из-за смехотворно неоптимизированного шейдера, который я использую для этого. Это взято из публикации, которая делала это с использованием настольных графических процессоров, и относится к наихудшей работе для мобильных GPU, подобных этим. Кто-то предоставил версию с фиксированным радиусом, которая значительно быстрее, но вам нужно будет создать свою собственную оптимизированную версию, если вы хотите использовать ее с большими изображениями на чем угодно, кроме новейших устройств.

+0

Я думал, что можно было создать максимальный лимит, основанный на производительности каждого gpu на устройствах iOS. Не знал, что это может зависеть от загрузки системы и версии iOS. Даже с эффектом удара Кувахара - такой замечательный фильтр. Большое спасибо за быстрый ответ. – sleepwalkerfx

2

Фильтр Кувахара делает квадратные артефакты и очень сложными.

  1. Вы можете использовать генерализованный фильтр Кувахара (например, с 8 сегментами).
  2. Вы можете вручную генерировать шейдер без циклов для выбранного радиуса. Для уменьшения количества показаний из текстуры вы можете сделать трюк:
    • Создайте шейдер для постоянного радиуса.
    • Смещение пикселей должно зависеть от соотношения радиуса тока и постоянного радиуса.

Вы получаете некоторые артефакты, но они артистичны (как холст). И Кувахара будет быстрее.

Смежные вопросы