2012-01-08 2 views
1

На одном из уровней моей игры у меня довольно много больших текстур для рисования. Чтобы дать вам представление о том, о чем я говорю, это размеры текстур и количество на уровне. 448x420 - 3, 315x400-2, 305x429 -3, 366x167-1, 356x265-4, 401x343-2, 387x251-1 плюс около 20 элементов с гораздо меньшим размером текстуры.Как оптимизировать производительность в xna для Windows Phone

Выполнение моей первоначальной реализации было 20 кадров в секунду. Затем я создал единую карту текстур, содержащую все текстуры, используемые на уровне, это дало мне около 3-4 дополнительных кадров в секунду. 24fps недостаточно для меня, что еще я могу попытаться оптимизировать свою работу?

ответ

2

Некоторые вещи, которые я мог думать в минуту

  • Есть ли у него специальный GPU и памяти или с использованием разделяемой памяти?
  • Вы пытались расширить свои текстуры до двух размеров (хотя может быть только время загрузки).
  • Вы используете mipmaps или другие типы фильтрации текстур?
  • Howmany texels он пытается собрать?
  • Вы пытались использовать текстуру 1 на 1, просто чтобы убедиться, что это на самом деле ваше узкое место?

По моему опыту, тексельные звонки на мобильные устройства довольно тяжелые. Не забудьте попытаться уменьшить размер ваших текстур как можно больше. Посмотрите на свой проект, если объект занимает около 10% экрана, действительно ли нужна текстура 128x128 или больше? Я не знаю, какой проект и целевое устройство вы используете, но текстуры 448x420 (не сила двух ?!) кажутся чрезмерными для мобильной игры. На самом деле, я бы решил, что вы попытаетесь остаться ниже общего использования текстуры 1024x1024 или что-то в этом роде?

Насколько я понимаю, это ваш общий размер текстуры? (448 * 420 * 3) + (315 * 400 * 2) + (305 * 429 * 3) + (366 * 167) + (356 * 265 * 4) + (401 * 343 * 2) + (387 * 251) = 2.019.720 пикселей (игнорируя 20 элементов, которые вы упомянули)

Это означает, что предполагается, что текстуры в 32 бита, теоретически, вы используете около 64 МБ памяти, только для хранения текстур (и даже не предполагая mipmaps и XNA не увеличивает масштабирование до двух текстур) (не уверен, что XNA внутренне использует сжатие dds/dxt (?)). Я могу представить, что это довольно дорого для мобильного устройства.

Надеюсь, это поможет решить проблему с вашим узким местом.

+1

Предложение текстур 1x1 настолько прост в тестировании и поэтому говорит, что оно всегда должно быть первым, что нужно попробовать. Тот факт, что использование атласа текстуры только улучшает вещи в 3-4 кадрах/сек, вызывает у меня подозрение в остальной части программы. – Elideb

1

Вы должны попробовать профилировать свое приложение, чтобы проверить, действительно ли проблемы находятся в графическом рендеринге или где-то еще.

Для этого есть некоторые инструменты, хотя большинство из них имеют ограничения при работе в WP7. Первыми рекомендациями будут Microsoft Windows Phone profiler и PIX для мониторинга графики, упомянутые в сообщении. Существует также XNA Framework Remote Performance Monitor, но насколько я могу судить, нет версии, совместимой с WP7.

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