Введение
Здесь будет описано как уменьшить время загрузки движка и карта, а также, как увеличить общую производительность.

Движок включает в себя профайлер, который показывает много различной полезной статистики для оптимизации вашего приложения. Открыть его можно в Game.exe, в меню по кнопке Escape или из главного меню приложения.

https://lh3.googleusercontent.com/3i6x0BFCuj_adfQwgs8YOafyn8e-dzbT99KLSJsvqYXaF2Hd4PjT_i8TEBhpKzpuyY5bDlBv4QTK-UyLFU4IzYDGJ6zITihL_qkLWum9DhfaIp-dzWBKLiBMm-esTkPNU1ZYQJ63OdQvGRkQQnPE-MBtezoIgKCSh_qABnPyD1-fSL9eoc5WH6KLEXOYRMxts4QMa1Ll1jkeNLSLaBMDcZQIymrExUKxOHYjvnG3adVtJyiu7LudCi37B5oU_6HQQlC7Pe8rR0feMdrEPbfteKH4C_omh-ZXS66TyhZGy2bazl6Z2NMWAYiqphppK54tV7sehGK80IChLFxlhFJoue6Nu-erzlUi101vbIZI2mK1Cr_Df1Kuo9lIon51ucdKe4UBYDilobo3rLQ762tf7ICFXgCq6XNiAcUex56uRDRX7wDGGEoxZZtMtdxsiiwD2QzzGIKS-Opb--2m4TvaIGcy4IPMT-cMCy5n9okeGgyjlblh8GWRVUNoS9hz2g4Y7sLUaej51ZTEpBRzWsifp3R6K7xaWfYPBh0KHMMP-D4IcQmQOZXk7Y43sr-SaUyDDzNL6ohmmDxi9IsxVhg11opJwI15w6lDZk9cG0wYCrbjruHENhYIZpRwr3tTKT6c7t_FIB7niFyrrJ3KW9smV5RuSBv65Ts=w800-h556-no

Уменьшение времени загрузки
Кеш шейдеров
Самые большое влияние на загрузку движка и карт оказывает компиляция шейдеров. Обычно, проект включает в себя множество материалов, каждый из которых использует несколько шейдеров для своей работы. При большой количестве материалов шейдеров становится очень много и их компиляция может занять ощутимое время. Шейдеры компилируются в процессе загрузки карты, а также при смене глобальных настроек движка, таких как тип тумана и тип теней. В NeoAxis существует возможность скомпилировать шейдеры заранее и сохранить их в кеш. Кеширование позволяет ощутимо уменьшить время загрузки движка. О том как это сделать читайте о компиляторе шейдеров. Рекомендуется периодически пересчитывать кеш шейдеров.

Формат текстур
Разные типы текстур имеют разное время загрузки. Если использовать текстуры формата JPG, PNG, TGA, то время загрузки может существенно увеличиться. Рекомендуется использовать текстуры DDS формата, т.к. они являются "родными" для железа и загружаются максимально быстро. DDS формат текстур - это контейнер, данные которого могут быть разного формата внутри. Вы можете сконвертировать текстуры в DDS формат в редакторе ресурсов или использовать сторонние утилиты.

Рекомендуется использовать следующие форматы DDS текстур:

DXT1 - рекомендуется использовать для тех текстур, в которых нет альфа канала.
DXT5 - рекомендуется использовать для тех текстур, в которых есть альфа канал.
3Dc - рекомендуется использовать для Normal Map текстур.
(A)RGB - используйте этот формат, когда качество DXT1 и DXT5 вас не устраивает. DXT1 и DXT5 форматы являются форматами с потерей качества и в некоторых редких случаях могут быть неприемлемы.

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

Увеличение производительности
Многие новички, которые касаются 3D технологий, и движка NeoAxis в частности, довольно часто сталкиваются с проблемой маленького frames per second (FPS). Здесь будут рассказаны общие рекомендации по этой проблеме.

Количество треугольников и батчей в сцене
Первыми индикаторами влияния на FPS являются количество треугольников и батчей в сцене. Батч (или DIP вызов) - это команда видеокарте для рендеринга одной группы набора треугольников. Вы можете провести аналогию с моделями в сцене. На карте находится множество моделей, каждая из которых содержит подмеши. Чем больше подмешей в сцене, тем больше батчей. Рекомендуется внимательно анализировать ваши модели после импорта, это можно сделать в инструменте для настройки моделей.

https://lh3.googleusercontent.com/fY-3HVLDUOhJzsZuC22SgmBHTHgdQ2VyF0cAl28f2QdLU9ZnexCIvmkdEITaPdMZxaP-2e_ojdTdSztWWpPrYh_saOBH5YyTnDkgV0XtCrmuwGkKIrHYfiUWPfgUccCfNWzc518ub_N04HfceuXLqVZSHvaIsKz8iulugTcT0S654zIX4isEdNmhpiak0tock7GA9YTqA627HJg27mygvPgFMGRT_fRJJNqhUGrGmCY5IFiTAwdCW4k97kBNXwHXfcheMAah7T4OW-YnvTI3R09MD9z32C_oUGqamzRQfVqHsmVGNjNasWjhOqvENLr6BFnWYnW8_w5qvnu_C5RYRMD7cYSGTlee62lYI1jqi3enwayRVR9aiGH1_2Xmfnzlj1FyYOVffDfmyxmutgDJFn3VyotsOre0Sl9fKbSOSkY9bweAcTpZFASejFtAH9rpMk72N7xyGR5__dZt6J1cLb0X1JyBVaZtjCkZxzCvi1I_UhUOFdyui37Qo5DSxt_t39lsZpVjKmBjZqN9ah-85wYU8Q1nQxaJHNw6deworGC9K67_ZnyennVNuOrGPM_2Vu90vQ70rNUGEjHhm7iK7swlR52Adi7ezXJ6vG2VEx0TiwIHHpy3Ke0Dxar8C-bodqiOVA-12hJsTOcblCmbVKyET0h9Atw=w800-h559-no

Настройка теней
Тени, обычно, сильно влияют на производительность, особенно, если включены Parallel Split Shadow Maps (PSSM). Существует две общие настройки теней: тип теней и размер текстур. Для максимальной производительности, рекомендуется использовать тип теней как можно проще, а возможно совсем выключить, если это допустимо.

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

Настройка дальности видимости
Настройка дальности видимости карты позволяет отсекать объекты, которые находятся на значительном расстоянии от камеры. Для настройки дальности видимости, в редакторе карт, в свойствах объекта Map, используется свойство NearFarClipDistance. Вы можете настраивать много других параметров объекта Map, которые могут помочь в улучшении производительности.

Hardware Geometry Instancing
Движок поддерживает технологию Hardware Geometry Instancing, которая позволяет существенно уменьшить количество батчей. Технология объединяет одинаковые наборы треугольников и рисует их за один батч, тем самым уменьшая нагрузку на драйвер видеокарты. Для проверки работы в профайлере можно включать и отключать режим инстансинга. Для этого нужно открыть консоль движка и ввести "allowHardwareInstancing false" для отключения и "allowHardwareInstancing true" для включения. Технология инстансинга пока доступна только для Direct3D.

Уровень детализации моделей (LOD)
3D модели могут иметь несколько наборов треугольников с разным уровнем детализации. Читайте о том, как настроить лоды в редакторе для настройки моделей.

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

Настройка источников света
Источники света имеют большое влияние на общую производительность. Рекомендуется сохранять минимальное количество динамических источников света, а также для Point и Spot источников света настраивать параметры дальности.

Использование статичного освещения
Движок включает в себя расчетчик статичного освещения. Читайте о менеджере статичного освещения.

Особый алгоритм отсечения невидимой геометрии
Программисты могут изменить алгоритм определения видимых объектов, тем самым существенно увеличив производительность. Смотрите файл RenderingLowLevelMethodsImpl.cs в проекте GameCommon.

Оптимизация конечного продукта с помощью Ngen.exe (Native Image Generator)
Генератор образов в машинном коде (Ngen.exe) — это средство повышения быстродействия управляемых приложений. Ngen.exe создает образы в машинном коде, представляющие собой файлы, содержащие компилированный специфический для процессора машинный код, и устанавливает их в кэш образов в машинном коде на локальном компьютере. Среда выполнения может использовать образы в машинном коде, находящиеся в кэше, вместо использования JIT-компилятора для компиляции исходной сборки.