Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Документация jMonkeyEngine
        jMonkeyEngine Уроки и Документация
            Документация для уверенных пользователей
                Рекомендация по оптимизации

Рекомендация по оптимизации

Опубликованно: 07.04.2017, 21:02
Последняя редакция, Andry: 26.09.2017 13:35

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

Поддерживать низкий уровень геометрии

Чем больше объектов Geometry добавляется в сцену, тем сложнее справляться с ними быстро. Причина этого в том, что для каждого объекта должна выполняться команда визуализации, потенциально создающая узкое место между процессором и видеокартой.

Возможные методы оптимизации

  • Используйте GeometryBatchFactory.optimize(node) для объединения сетки геометрий, содержащихся в данном узле, в меньшее количество индивидуальных, каждая из которых основана на общих используемых материалах. Вы можете оптимизировать узлы, используя SceneComposer в SDK: щелкните правой кнопкой мыши узел и выберите «Оптимизация геометрии».

Побочные эффекты

  • Использование GeometryBatchFactory объединяет отдельные геометрии в единую сетку. Тем самым становится трудно применять конкретные материалы или удалить одну геометрию. Поэтому его следует использовать только для статических геометрии, которые не требуют частых изменений или отдельных материалов/текстур.
  • Использование Текстурный Атлас обеспечивает ограниченное индивидуальное текстурирование геометрических объектов.
  • Использование все еще экспериментального BatchNode позволяет группировать геометрию, сохраняя отдельные объекты Geometry отдельно (подобно анимации, буфер обновляется в соответствии с положением геометрии).

Избегайте создания новых объектов

Различные реализации Java используют разные алгоритмы сбора мусора, поэтому в зависимости от платформ, на которые вы нацеливаетесь, применяются разные рекомендации.

Основными вариантами являются Oracle JRE, старые (пред-Gingerbread) Android и новые (Gingerbread или более поздние) Android.

В Oracle jre, работает копирующий сборщик. Это означает, что для объектов, которые стали неиспользуемыми, не нужно выполнять какую-либо работу для удаления, новые объекты просто копируются в эту области памяти и перерабатывают неиспользуемую область в целом. Старые объекты копируются реже, поэтому накладные расходы на сбор мусора примерно пропорциональны скорости, с которой ваш код создает новые объекты, которые выживают, скажем, более минуты.

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

Старые Androids используют очень наивный сборщик мусора, который должен выполнять отдельно работу с каждым объектом, как во время создания, так и во время сбора. Так что создание локальных переменных может создать кучу работы, особенно если функция вызывается часто.

Чтобы избежать создания множества временных объектов используйте локальные методы для перезаписи содержимого уже существующих объектов, вместо создания новых временных объектов, для более лучшего результата.

Например. Когда вы используете математическую операцию, такую как vectorA.mult(vectorB);, они создают новые объекты для результата.

Проверьте свои математические операции на возможность использования локальной версии математических операций, например vectorA.multLocal(vectorB). Локальные методы сохраняют результат в vectorA и не создают новый объект.

Избегайте больших объектов в физике

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

Проверить статистику

SimpleApplication отображает HUD статистику. Используйте app.setDisplayStatView(true); Для её активации, и false для её деактивации. StatsView подсчет Объектов,Uniforms(Юниформы),Triangles(Треугольники),Vertices(Вершины) в сцене, и подсчет как много FrameBuffers(Кадровый буфер), Textures(Текстуры), или Shaders(Шейдеры):

  • были переключены в последнем кадре (S)
  • использовались во время последнего кадра (F)
  • существуют в памяти OpenGL (M)

Например, Textures (M) сообщает, сколько текстур в данный момент находится в памяти OpenGL.

В целом jME3 хорошо оптимизирован и оптимизирует эти вещи правильно. Прочитайте statsview, чтобы узнать подробности о том, как интерпретировать статистику, как определить, были ли ваши значения выключены, или указывают на проблему.


Переведено для jmonkeyengine.ru, оригинал
Автор перевода: Andry

Добавить комментарий

Содержание

jMonkeyEngine.ru © 2017. Все права сохранены.