2017-01-14 2 views
4

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

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

+1

Извините за странные вопросы: этот эффект статический, в том смысле, что вы не оживляете количество размытия, например, от 10 до 100 единиц, т. е. всегда напр. 100 единиц размытия? – Confused

+1

Q2. Сохраняется ли текстура, которая будет размыта, меняется ли она или всегда одна и та же текстура? – Confused

+1

Вопрос: Если значение размытия является статическим, и текстура может быть предсказана, вы можете сделать одну важную вещь для оптимизации производительности: предварительно визуализировать размытие и сохранить его как текстуру, применяемую в качестве текстуры, когда вам нужно размытое эффект. Если текстура изменяется, но величина размытия постоянна, вы можете сделать размытие всякий раз, когда вам нужно, а затем установить растеризацию в true: https://developer.apple.com/reference/spritekit/skeffectnode/1459381-shouldrasterize – Confused

ответ

5

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

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

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

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

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

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

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

enter image description here

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

enter image description here

+2

+10 для велосипеда – Fluidity

+0

@Fluidity Фантастический! Я тоже, отличный ответ. –

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