Задать вопрос
@Magneto903

PIXI js как оптимизировать фильтры (motion blur filter)?

У меня есть упрощённая реализация игры "астероиды" (в ней вместо астероидов зелёные круги). Я использовал PIXIJS motion blur filter чтобы имитировать размытие при движении.
Лететь вперёд - стрелка вперёд или W.
Направление движение - мышка

На примере выше - 10 астероидов и это 60 FPS

Но когда я хочу добавить побольше астероидов, например 150 штук.


Производительность резко падает до 20 FPS

Я выяснил, что проблема заключается в фильтрах, я применяю их к каждому астероиду.
Если убрать фильтры к астероидам, то производительность снова возрастает до 60 FPS при том же количестве астероидов


Но естественно эффект размытия при движении пропадает.

Возможно ли как-то оптимизировать эти фильтры? Или может есть более лёгкий способ добиться желаемого эффекта - эффекта размытия при движении?
  • Вопрос задан
  • 536 просмотров
Подписаться 1 Средний 4 комментария
Решения вопроса 1
@Magneto903 Автор вопроса
Один из вариантов - накладывать фильтр только на те астероиды, которые видны через камеру (viewport)
if (asteroids[i].x + 100 > viewport.left && asteroids[i].x - 100 < viewport.right && 
			asteroids[i].y + 100 > viewport.top && asteroids[i].y - 100 < viewport.bottom) {
// накладываем фильтр
 } else {
// снимаем фильтр
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@twoone
В реальных играх фильтры не используют, все делается на png. В качестве варианта решения вашей проблемы можно попробовать сделать предварительные рендер фильтров. То есть нарисовать шейп, применить к нему фильтр, а затем отрисовать шейп с фильтром в спрайт. Таким образом создаете множество спрайтов и уже их в мувиклипе объединяете и при необходимости рендерите его как анимацию.

Но прежде нужно посмотреть доки, вдруг там галачка есть кеширования фильтров. Просто я фильтры никогда не использовал и поэтому не знаю.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы