Запрос графических возможностей для принятия решения о том, применять ли эффекты с интенсивным использованием графического процессора (через SpriteKit)
У меня есть игра, написанная с использованием SpriteKit, в которой используется SKEffectNode с эффектом размытия, чтобы размыть набор спрайтов, один из которых имеет довольно большую текстуру и которые вместе покрывают довольно большую область экрана. IMac и Mac Book Pro справляются с этим довольно счастливо, но на более скромном Mac Book наблюдается заметное снижение частоты кадров с добавленным узлом эффекта. Поскольку эффект не имеет решающего значения для функциональности игры, я мог бы просто Не добавляйте SKEffectNode для машин с менее мощными графическими возможностями.
Итак, вопрос: что было бы хорошей программной проверкой, которую я мог бы сделать, чтобы определить "мощность графического процессора" или "производительность при применении текстурных эффектов" или [предложить лучший показатель здесь] и через какой API? Спасибо за ваши предложения!
1 ответ
Вам нужно будет создать тест производительности с использованием ваших реальных процессов размытия и некоторого образца содержимого, чтобы получить точное представление о временных затратах на каждое поколение оборудования.
Размытие - это действительно странные вещи программно. "Размытие в рамке" может дать вам приятное, мягкое размытие по Гауссу при гораздо меньших затратах на обработку. Масштабирование или размытость изображения (это выглядит хорошо) на удивление дорого обходится даже на сильном оборудовании.
И есть некоторые удивительно эффективные "читы" при выполнении размытия. Поскольку нет необходимости в деталях, вы можете значительно оптимизировать операции, особенно если они нечеткие.
Apple, как полагают, делает что-то вроде этого, например, со своими пятнами:
- Массово уменьшить целевое изображение
- Сделать размытие по Гауссу на этом крошечном изображении
- Уменьшите его, немного
- Примените дешевый Box Blur, чтобы смягчить его
- Полностью уменьшите до желаемого размера
В качестве ужасного примера можно извлечь выгоду из хорошего масштабирования (с набором фильтров для хорошего масштабирования)
Это полноразмерное изображение размыто:
А вот версия того же изображения, масштабированная до 16-го от исходного размера, размытая, а затем размытое изображение, масштабированное обратно. Как вы можете видеть, из-за хорошего масштабирования и отсутствия детализации размытое изображение почти не отличается, но размытие требует НАМНОГО меньших затрат энергии и времени на обработку: