Запрос графических возможностей для принятия решения о том, применять ли эффекты с интенсивным использованием графического процессора (через SpriteKit)

У меня есть игра, написанная с использованием SpriteKit, в которой используется SKEffectNode с эффектом размытия, чтобы размыть набор спрайтов, один из которых имеет довольно большую текстуру и которые вместе покрывают довольно большую область экрана. IMac и Mac Book Pro справляются с этим довольно счастливо, но на более скромном Mac Book наблюдается заметное снижение частоты кадров с добавленным узлом эффекта. Поскольку эффект не имеет решающего значения для функциональности игры, я мог бы просто Не добавляйте SKEffectNode для машин с менее мощными графическими возможностями.

Итак, вопрос: что было бы хорошей программной проверкой, которую я мог бы сделать, чтобы определить "мощность графического процессора" или "производительность при применении текстурных эффектов" или [предложить лучший показатель здесь] и через какой API? Спасибо за ваши предложения!

1 ответ

Решение

Вам нужно будет создать тест производительности с использованием ваших реальных процессов размытия и некоторого образца содержимого, чтобы получить точное представление о временных затратах на каждое поколение оборудования.

Размытие - это действительно странные вещи программно. "Размытие в рамке" может дать вам приятное, мягкое размытие по Гауссу при гораздо меньших затратах на обработку. Масштабирование или размытость изображения (это выглядит хорошо) на удивление дорого обходится даже на сильном оборудовании.

И есть некоторые удивительно эффективные "читы" при выполнении размытия. Поскольку нет необходимости в деталях, вы можете значительно оптимизировать операции, особенно если они нечеткие.

Apple, как полагают, делает что-то вроде этого, например, со своими пятнами:

  1. Массово уменьшить целевое изображение
  2. Сделать размытие по Гауссу на этом крошечном изображении
  3. Уменьшите его, немного
  4. Примените дешевый Box Blur, чтобы смягчить его
  5. Полностью уменьшите до желаемого размера

В качестве ужасного примера можно извлечь выгоду из хорошего масштабирования (с набором фильтров для хорошего масштабирования)

Это полноразмерное изображение размыто:

А вот версия того же изображения, масштабированная до 16-го от исходного размера, размытая, а затем размытое изображение, масштабированное обратно. Как вы можете видеть, из-за хорошего масштабирования и отсутствия детализации размытое изображение почти не отличается, но размытие требует НАМНОГО меньших затрат энергии и времени на обработку:

Другие вопросы по тегам