Чтобы ваши острова воспроизводились на всех поддерживаемых платформах, в Fortnite установлены определённые ограничения на память.
В Unreal Редактор для Fortnite (UEFN) вы можете использовать расширенные возможности работы с памятью для создания более масштабных и разнообразных островов. Чтобы в полной мере воспользоваться этими возможностями, полезно знать, каким образом в UEFN рассчитывается использование памяти.
World Partition
World Partition — это мощная система, позволяющая создавать большие острова. Эта система автоматически делит мир на ячейки решёткой, и в игре подгружаются только необходимые ячейки.
В World Partition используется подгрузка для загрузки и выгрузки ячеек, а также иерархический уровень детализации (HLOD), который группирует ресурсы и уменьшает степень их детализации по мере удаления от камеры игрока.
Полную информацию по World Partition, подгрузке и иерархических уровнях детализации можно найти в разделе Подгрузка и иерархические уровни детализации (HLOD).
Как рассчитывается объём памяти
UEFN рассчитывает использование памяти на основе данных, получаемых во время конвертации. То есть:
Быстрые результаты на больших островах.
Стабильные показатели каждый раз при расчёте на одной и той же версии острова, сборке Fortnite и устройстве.
Широкая поддержка большего числа типов ресурсов и SceneGraph.
Система расчёта объёма памяти в UEFN работает только в режиме редактирования и не может быть использована для оценки расхода памяти в режиме игры. Она используется для проверки того, что базовый расход памяти на острове не превышает разумного порогового значения.
Однако пользовательская логика среды выполнения может привести к расходу больших объёмов памяти, что создаст проблемы для игроков, ограничив их возможности играть на острове. Мы рекомендуем использовать Пространственный профилировщик, чтобы лучше понимать, как ваш остров использует память и воспроизводится в режиме игры, чтобы у игроков не возникало проблем со стабильностью или производительностью.
Компоновка для сеанса
При загрузке сеанса в HUD-интерфейсе отображается шкала текущего расхода оперативной памяти.
Шкала имеет максимум 100 000 единиц памяти, что даёт представление об использовании локальной памяти на острове.
При включённой подгрузке память рассчитывается на основе местоположения игрока на острове, а не общего объёма памяти, используемого всеми ресурсами на острове. Наиболее точные значения памяти, занимаемой каждой подгружаемой ячейкой, даёт расчёт объёма памяти.
Некоторые ресурсы остаются в памяти независимо от местоположения игрока и увеличивают потребление памяти в любой точке карты. Большинство ресурсов загружается и выгружается по мере их подгрузки, и шкала обновляется, отображая эти показатели.
Все ресурсы, на которые ссылается уровень (включая устройства, ландшафты, пользовательские сетки, текстуры и т. д.), учитываются в общем объёме памяти.
Учтите, что если какая-либо область на уровне превысит отметку в 100 000, вы не сможете опубликовать такой остров.
Будучи пользователем UEFN, вы можете превышать ограничение шкалы в 100 000 единиц при условии, что не будете публиковать данные. Помните, что коллеги, сотрудничающие с вами на консоли, могут достичь аппаратного ограничения доступной памяти, что приведёт к их выходу из сеанса. После устранения проблемы они смогут подключиться снова.
Внесение изменений в содержимое
Для точного расчёта использования памяти системе требуются актуальные cконвертированные данные. После внесения изменений в контент в режиме Редактирования по сети или с помощью инструмента Телефон появится подсказка Применить изменения, даже если индикатор режима редактирования показывает статус Обновлено, поскольку в режиме редактирования по сети сконвертированные данные, используемые для расчёта памяти, не обновляются.
Пока вы не отправите изменения, шкала использования будет обновляться, но значение в ней будет оставаться прежним. Память, расходуемая на внесение изменений в контент, учитываться не будет.
Запустить расчёт памяти
Для успешной публикации ваш остров должен запускаться на всех поддерживаемых аппаратных платформах.
Перед публикацией необходимо убедиться, что ваш проект не превышает ограничение на память. В выпадающем меню Проект выберите Запуск расчёта памяти.
При этом рассчитывается объём памяти, используемой в каждой ячейке.
Появится диалоговое окно с предложением выгрузить частную версию. Нажмите кнопку и наблюдайте за индикатором выполнения.
При желании вы можете добавить описание версии своего проекта.
В нижней части экрана появится всплывающее окно, сообщающее о том, что идёт расчёт объёма памяти.
По завершении выгрузки всплывающее окно изменится, указывая на то, что расчёт запущен.
В клиенте отобразится результат расчёта памяти. При нажатии кнопки Продолжить возвращается контроль над персонажем игрока.
После завершения персонаж игрока телепортируется в исходное место до начала расчёта и вы увидите один из двух статусов:
Если в проекте включена подгрузка, можно облететь остров, чтобы посмотреть, сколько памяти занимают разные области.
Если подгрузка включена, шкала расхода памяти будет изменяться во время облёта. В этом режиме можно выявить области, в которых возможно превышение предела памяти.
Если потребляемая островом память превышает предел, перед публикацией необходимо решить проблемы с локальной памятью.
Мой остров требует слишком много памяти. Что делать?
Существует множество стратегий, позволяющих сэкономить память при достижении предела. Попробуйте любое сочетание из следующих решений:
После расчёта объёма памяти можно открыть список из 100 ресурсов, занимающих больше всего памяти на острове. Выберите Окно > Журнал сообщений > Результаты теста памяти.
В следующей таблице указано значение каждого термина:
Срок Пояснение Ресурс
Обычно это название ресурса в Каталоге ресурсов. Некоторые ресурсы могут отображаться как «Ресурсы Fortnite» — это название, которое мы присваиваем ресурсам, которые не были созданы в вашем проекте, но которые всё равно увеличивают потребление памяти на острове.
Тип
Это тип ресурса. Это может быть текстура, материал, уровень и проч.
# Ссылки на акторы
Количество акторов, прямо или косвенно ссылающихся на ресурс.
# Ссылки на пакет
Количество сконвертированных пакетов, ссылающихся на ресурс. Это количество обычно увеличивается, если на ресурс ссылаются несколько ячеек World Partition.
Размер
Размер ресурса. Это объём, который конкретный ресурс занимает в шкале текущего расхода оперативной памяти в выделенной области.
По возможности подгружайте текстуры. Иными словами, советуем создавать текстуры, которые будут легко подгружаться (с размерами, кратными двум) и настройка которых позволит генерировать MIP-текстуры. Если текстуры нельзя подгружать, они всегда будут использовать максимальный объём памяти, независимо от того, на каком расстоянии они используются. Подробнее: раздел Изменение размера текстур.
ВКЛЮЧИТЕ подгрузку на панели World Partition. Хотя подгрузка обязательна для больших островов, она может быть полезна и на небольших островах, особенно если на них слишком большое количество деталей.
После включения подгрузки убедитесь, что для акторов (по возможности) включён параметр «Пространственно загружаемый». Если этот параметр будет отключён, акторы будут преобразованы в пакет основного уровня и всегда будут загружаться. Это особенно важно при использовании акторов прокси подгрузки ландшафта, так как они могут содержать много данных о столкновении, которые, как правило, подгружаются по запросу.
Распределяйте контент по острову равномерно. Сосредоточение слишком большого количества акторов на небольшом участке не позволит выгружать контент и приведёт к превышению выделенного объёма памяти.
Уменьшите количество устройств, используемых на острове. Из всех размещаемых акторов больше всего ресурсов потребляют устройства. Однако при размещении нескольких экземпляров одного устройства расходуется гораздо меньше памяти.
Изучите информацию в окне «Размер проекта». Если вы обнаружите на диске объекты, занимающие много места, то скорее всего они также будут занимать много памяти в среде выполнения. Чтобы проверить размер проекта, нажмите на выпадающее меню Проект и выберите Размер проекта.
Уменьшите уровень качества уровней детализации пользовательских ресурсов, особенно тех из них, которые видны только на расстоянии.
Используйте ресурсы многократно. В лесу, состоящем из 100 деревьев, вместо 100 уникальных деревьев используйте 5 вариантов деревьев и просто продублируйте их. Это существенно сэкономит занимаемую память.
При использовании HLOD генерируйте их в процессе работы над проектом и следите за тем, чтобы они генерировались только для объектов, видимых с большого расстояния.
Используйте Слои данных, если ваши острова можно разделить на конфигурации, которые не подразумевают одновременного отображения. Например, это может быть подземелье, в которое невозможно попасть, пока игрок не войдёт в храм.
Уменьшите сложность сеток контента, создаваемого вами самостоятельно. На высокополигональные сетки расходуется больше памяти. Отредактируйте сетку, дважды нажав на ней в Каталоге ресурсов, и настройте параметр Сохранять процент треугольников в разделе Настройки Nanite. Уменьшение значения снижает сложность сетки и сокращает объём расходуемой памяти актора.
Устранение других проблем
Для надлежащей проверки необходимо, чтобы у авторов была включена функция подгрузки, а также сгенерированы MIP-текстуры для текстур. Если для какой-либо из ваших текстур у параметра MipGenSettings было выбрано значение Без MIP-текстур, то ранее при отправке острова на публикацию она не была помечена. Однако теперь, если для текстуры в вашем проекте у параметра MipGenSettings бузе значение «Без MIP-текстур», проверка не пройдёт.
Обратите внимание на следующие исключения из этого требования для подгрузки и MIP-текстур:
Это правило применяется только к текстурам, где более 1 миллиона текселей. Так, к примеру, если размеры текстуры при умножении оказываются меньше 1048576, то она пройдёт проверку, даже если для параметра MipGenSettings установлено значение Без MIP-текстур.
Для текстур в группе интерфейса не требуется включать подгрузку.