К игровым текстурам предъявляются особые требования для их правильной отрисовки в игре. При создании текстур в Unreal Editor для Fortnite (UEFN) из импортированных изображений убедитесь, что файл исходного изображения имеет высоту и ширину в виде степеней двойки. Это повысит стабильность и совместимость вашего острова при запуске на разных платформах.
Форматы файлов со сжатием для графических процессоров (ГП) должны поддерживать масштабирование по степеням двойки на всех консолях, ПК и мобильных устройствах. Текстуры, не поддерживающие масштабирование по степеням двойки, будут работать нестабильно на низкопроизводительных платформах и могут привести к сбоям в игре. Принцип степеней двойки также используется при подгрузке текстур, чтобы снизить разрешение текстур на платформах с меньшим объёмом памяти.
Подгрузка текстур помогает решать следующие задачи:
Изменение разрешения текстуры.
Определение скорости загрузки игры.
Повышение качества графики игры.
Экономия памяти графического процессора.
Что такое степень двойки
Компьютеры и консоли обрабатывают данные не сразу, а ограниченными пакетами. Это похоже на принцип отрисовки фонов с помощью системы разбиения мира.
Когда пакеты игровых данных подчиняются правилу степеней двойки, эти пакеты устанавливают ряд жёстко заданных физических ограничений на носитель информации. Если эти ограничения не соблюдаются, игровой движок будет тратить ресурсы, пытаясь корректно отрисовать ресурсы.
Правило степеней двойки — это способ оптимизации игровых данных и отрисовки изображений для эффективного создания визуальной составляющей игры.
Например, допустимы изображения со следующими размерами: 256x256, 512x512 и 1024x2048. Текстуры, которые не основаны на степенях двойки, не будут оптимизированы и приведут к нестабильности и проблемах с производительностью острова.
Текстуры с размерами в виде степеней двойки позволяют UEFN использовать три ключевые функции:
Сжатие текстур: уменьшает занимаемый объём памяти примерно в восемь раз при минимальном снижении качества картинки.
MIP-текстурирование: автоматическое создание вариантов с более низким разрешением
Подгрузка текстур: показывает вариант с более низким разрешением, прежде чем в память будут подгружены данные с более высоким разрешением.
В совокупности эти функции позволяют отрисовывать даже высококачественный ресурс с 4K-текстурами на любой платформе. Это обеспечивается тем, что текстуры будут иметь высококачественные варианты в сниженном разрешении.
Например, текстура размера 4000 x 4000 без альфа-слоя потребует 64 мегабайта памяти. Она может быть загружена сразу и всё равно будет отображаться в разрешении 4000 x 4000, даже если это вызывает искажение контуров на небольшом рекламном щите вдали от игрока. Текстуры слишком большого размера могут привести к сбоям на устройствах с недостаточным объёмом памяти.
С другой стороны, вариант текстуры с разрешением 4096 x 4096, в которой используется сжатие по умолчанию, будет занимать всего 8 мегабайт, подгружаться постепенно и вызывать меньше искажений контуров на расстоянии. Текстуры слишком большого размера также увеличивают размер пакета, но не приводят к сбоям игрового процесса.
Проверка текстур
Перед использованием в проекте текстуры следует проверить для обеспечения должной производительности. Текстура, не прошедшая проверку, приведёт к следующим проблемам:
Сбой, вызванный нехваткой памяти из-за того, что исходные текстуры оказались слишком большими.
Сбои на различных платформах из-за слишком больших размеров текстур, сконвертированных в формат соответствующей платформы.
Проблемы с производительностью на определённых платформах из-за неоптимизированных текстур.
Текстуры, не прошедшие проверку, не позволят опубликовать проект.
Правила проверки
Правила проверки включают в себя универсальные правила, применяемые ко всем ресурсам, и три основных правила, которые применяются только к текстурам.
Универсальное правило
Исходный размер не может превышать 4096 текселей.
2D-текстуры в интерфейсе
Любые конвертированные в формат платформы текстуры с менее чем 1,048,576 текселями (1024 x 1024) проходят проверку автоматически.
2D-текстуры
Сконвертированные в формат платформы текстуры размером менее 1 048 576 текселей (1024×1024) проходят проверку автоматически.
Размеры после конвертации в формат платформы не могут быть больше 2048 текселей.
Размеры после конвертации в формат платформы должны быть степенями двойки.
Должен быть подгружаемым и позволять создавать MIP-текстуры.
Текстуры кубической карты
Любая конвертированная в формат платформы текстура (на каждой грани) с менее чем 1,048,576 текселями, проходит проверку автоматически.
Размеры после конвертации в формат платформы не могут быть больше 1024 текселя. Учитывается каждая грань, а не ресурс.
Размеры после конвертации в формат платформы должны быть степенями двойки.
Должен быть подгружаемым и позволять создавать MIP-текстуры.
Поиск недопустимых текстур
UEFN имеет строгие требования к размеру текстур, поэтому, чтобы проверять, что все импортированные текстуры используют надлежащие ограничения по размеру, UEFN использует дополнительные средства проверки, помимо того, что представлено в Fortnite. Эти средства проверки используют правила для выявления проблем на более ранней стадии процесса сборки, чтобы избежать выгрузки проектов, которые впоследствии не удастся конвертировать в формат платформы.
Проверка текстуры выполняется на двух этапах: во время проверки проекта, а также при добавлении в Каталог ресурсов.
Проверка проекта
Ошибки проверки текстуры отображаются после того, как проект проходит проверку. В этом процессе всегда используются фактические данные текстуры (в отличие от тегов ресурсов). Все результаты сохраняются в журнале сообщений вместе с токеном «Автоматическое исправление».
Проверка в Каталоге ресурсов
Миниатюра и всплывающая подсказка текстуры отображают значок и краткое описание соответственно. В контекстном меню есть функция «Подогнать текстуру». При её использовании выполняется попытка задействовать фактические данные текстуры и из соображений оптимизации производительности выполняется возврат к тегам ресурсов, если текстура не загружена. Если считываются теги ресурсов, то при отсутствии определённых тегов точность может быть немного ниже. Однако при следующей проверке фактических данных текстуры (проверка проекта, OnObjectTransacted) всплывающая подсказка и миниатюра будут обновлены с точностью.
Ресурсы текстур, не соответствующие описанным выше требованиям, помечаются в **Каталоге ресурсов** значком ошибки. При наведении курсора на ресурс в верхней части подсказки отображаются подробные сведения о проблеме:
Подробнее об использовании функции подгона текстур рассказано в разделе «Приведение недопустимых текстур в соответствие требованиям» ниже.
Требования к размеру текстур в UEFN
Для того, чтобы все острова хорошо работали на всех целевых платформах, в UEFN существуют определенные требования к ресурсам текстур.
Если ваш проект содержит текстуры, не соответствующие этим требованиям, они не пройдут проверку, и вы не сможете загрузить свой проект.
Если ваша текстура назначена в группу текстур интерфейса, её размеры должны быть меньше максимального размера 2048×2048. Однако размеры текстуры не обязательно должны быть равны числу в степени двойки. (Текстуры интерфейса обычно работают без подгрузки, поэтому они всегда будут выглядеть максимально чёткими.)
Если ваша текстура _не_ назначена в группу текстур интерфейса, её размеры должны быть меньше максимального размера 4096×4096. Кроме того, если количество пикселей на ней превышает максимальное значение (1024×1024 или 1 048 576), она должна быть подгружаемой. Это означает, что:
Каждый из размеров должен соответствовать степени двойки (например, 256×256, 512×512, 1024×1024 и т. д.).
Изображение не обязательно должно быть квадратным, пока размеры его сторон соответствуют степени двойки. Например, 256×512, 512×1024, 256×1024 и т. д.
Свойство текстуры Не подгружать должно быть отключено.
Для текстуры должно быть включено автоматическое создание MIP-текстур.
Общий объём памяти, расходуемой на все неподгружаемые текстуры в вашем проекте не должен превышать максимальный установленный объём. Объём расходуемой памяти для вашего проекта определяется путем суммирования объёма памяти на все текстуры текстур, у которых включено свойство **Не подгружать**. Например:
Все текстуры, размеры которых не равны степени двойки (и которые не были заполнены или растянуты до размеров, соответствующих степени двойки, с помощью функции изменения размера до заданного разрешения). Свойство **Не подгружать** для таких текстур включается автоматически;
Все прочие текстуры, для которых свойство «Не подгружать» было включено вручную.
У каждой текстуры есть параметр **Группа текстур**, который указывает на ее предполагаемое назначение. Вы можете задать эту группу и другие свойства текстуры, упомянутые выше, дважды щёлкнув по текстуре в **Каталоге ресурсов**, чтобы открыть **Редактор текстур**.
Изменение размера текстур
В UEFN старые импортированные текстуры с неровными или чрезмерными размерами можно масштабировать для приведения к степеням двоек. Найдите и исправьте неудачные текстуры, выполнив следующие действия:
Откройте Панель ресурсов или Каталог ресурсов и выберите корневую папку контента своего проекта, которая доступна в FortniteGame на панели дерева файлов слева.
В разделе Все найдите папку YourProjectName Content.
Введите
NeverStream==true&&TextureGroup!=UIв строке поиска вверху Панели ресурсов. При этом выполнится запрос поиска всех затрагиваемых ресурсов.
Все ресурсы, отображаемые в этом отфильтрованном представлении, являются затрагиваемыми. Хотя на исправление потребуется некоторое время, производительность вашего уровня возрастёт.
Есть два способа обновить затрагиваемые текстуры, не входящие в группу интерфейса.
Вариант A основан на возможностях массового редактирования UEFN для группировки текстур и их редактирования за один шаг. Это самый быстрый способ автоматически скорректировать текстуры, дополнив их до правильного соотношения сторон; однако такая подгонка может привести к излишнему расходу памяти.
Вариант B занимает немного больше времени, но позволяет оптимально использовать выделенный объём памяти, когда нужно исправить несколько затрагиваемых текстур. Этот вариант позволяет редактировать и повторно выгружать текстуры, чтобы избежать ненужного дополнения.
Вариант A
Нажмите на значок меню с тремя линиями в Каталоге ресурсов рядом со строкой поиска и выберите Текстуры. В Каталоге ресурсов будут отображены только все текстуры.
Нажмите на значок Настройки и включите Столбцы. Теперь все текстуры будут отображены в столбцах Каталога ресурсов.
Найдите в столбце Размеры все ресурсы, размеры которых не соответствуют степеням двойки.
Выберите все текстуры, которые не соответствуют правилу степеней двойки.
Нажмите правой кнопкой мыши в Каталоге ресурсов и выберите Действия с ресурсами > Редактировать выбор в матрице свойств. Откроется инструмент массового редактирования, в котором все выбранные текстуры будут отображены на вкладке «Редактор компонентов».
Выберите все имена файлов текстур в разделе Начало.
Нажмите на изображение, чтобы его увеличить.
Разверните раздел Текстура на вкладке Закреплённые столбцы.
Выберите Дополнить до степеней двойки из выпадающего меню Заполнение и растяжение. В нижней части окна редактора появится индикатор выполнения.
Теперь размеры всех текстур преобразованы в степени двойки и текстуры будут работать на всех платформах.
Вариант B
Дважды нажмите на текстуру, чтобы открыть редактор текстур.
В строке поиска в верхней части панели Сведения введите имя исходного файла. В результате вы увидите путь на ПК к файлу, который будет использоваться в качестве исходного файла текстуры.
Нажмите на изображение, чтобы его увеличить.
Измените размер текстуры до ближайшей степени двойки в редакторе изображений, таком как GIMP или Paint.NET 5. Вы можете использовать даже редактор Paint, если текстура не имеет альфа-слоя.
Размер в виде степени двойки — это 256, 512, 1024 и т. д.
Например, текстура 500 x 500 может быть приведена к размеру 512 x 512, а текстура 600 x 256 — к 512 x 256.
Изменение соотношения сторон не должно отрицательно сказываться на вашем острове.
Нажмите правой кнопкой мыши на текстуре в Каталоге ресурсов и выберите Повторный импорт.
Если исходное изображение текстуры отсутствует в ваших файлах:
Нажмите правой кнопкой мыши на текстуре в Каталоге ресурсов, а затем выберите Действия с ресурсами > Экспорт, чтобы получить новую копию.
Измените размеры текстуры до ближайших степеней двойки. Затем в Каталоге ресурсов нажмите правой кнопкой мыши на текстуру и выберите Реимпортировать с новым файлом. Когда файл будет импортирован, дважды нажмите на текстуру, чтобы открыть редактор текстур.
В строке поиска на панели Сведения введите Никогда не подгружать и выберите значение False. Если значение False недоступно для выбора, убедитесь, что в спецификации Импортировано вверху указано, что размеры вашего изображения соответствуют степеням двойки.
На панели Сведения найдите Настройки создания MIP-текстур. Затем в выпадающем меню выберите Из группы текстур.
На панели Сведения найдите параметр Настройки сжатия, а затем выберите из выпадающего меню По умолчанию (DXT1/5).
После выполнения этих действий убедитесь, что вы успешно удалили ограниченную текстуру, для чего снова введите NeverStream==true&&TextureGroup!=UI в строке поиска Каталога ресурсов. Обновлённые вами ресурсы больше не должны отображаться здесь.
Изменение отдельной текстуры
Если у вас только одна текстура, не соответствующая правилу степеней двойки, действуйте следующим образом.
Дважды нажмите на текстуру, чтобы открыть редактор текстур.
Нажмите на изображение, чтобы его увеличить.
В строке поиска на панели Сведения введите Режим степеней двойки. Затем в выпадающем меню Заполнение и растяжение выберите Растянуть до квадрата.
Найдите параметр Никогда не подгружать и установите для неё значение False.
Найдите параметр Настройки создания MIP-текстур. Затем в выпадающем меню выберите Из группы текстур.
Найдите Настройки сжатия, а затем выберите из выпадающего меню По умолчанию (DXT1/5).
После выполнения этих действий убедитесь, что вы успешно удалили ограниченную текстуру, для чего введите NeverStream==true&&TextureGroup!=UI в строке поиска Каталога ресурсов. Обновлённые вами ресурсы больше не должны отображаться в списке.
Приведение недопустимых текстур в соответствие требованиям
Лучший способ исправить недопустимые текстуры, импортированные из внешних файлов, — отредактировать их в приложении, которое вы использовали для их создания, а затем повторно импортировать ресурс. Вы также можете отредактировать текстуры перед повторным импортом в UEFN в любом другом приложение для редактирования изображений.
Убедитесь, что размеры каждого изображения не превышают максимальные размеры, указанные выше. Если вы используете изображение не для интерфейса, сделайте его высоту и ширину соответствующими степени двойки. Изображение не обязательно должно быть квадратным, пока размеры его сторон соответствуют степени двойки.
В качестве альтернативы UEFN предлагает встроенный способ автоматического приведения размеров текстур в соответствие требованиям UEFN. Чтобы это сделать:
Выберите одну или несколько несоответствующих текстур в Каталоге ресурсов.
Нажмите правой кнопкой мыши на миниатюру текстуры и выберите в контекстном меню Подогнать текстуру.
Редактор попытается откорректировать свойства выбранных текстур, чтобы избежать проблем с валидацией, и записывает результаты в **Журнал выходных данных**.
Эта операция даст следующие результаты:
Если текстура входит в группу текстур интерфейса и её размеры превышают максимально допустимые, корректируется параметр текстуры Сжатие > Расширенные настройки > Максимальный размер текстуры, чтобы ограничить максимальное разрешение текстуры, которое может быть загружено в среде выполнения.
Если текстура не входит в группу текстур интерфейса и её размеры превышают максимально допустимые, корректируется параметр текстуры Предпочтительный уровень детализации, чтобы самая большая MIP-текстура пропускалась. Это эффективно ограничивает максимальное разрешение текстуры, которое может быть загружено в среде выполнения.
Если текстура не входит в группу текстур интерфейса, а её размер не соответствуют степени двойки, настройка текстуры Заполнение и растяжение устанавливается как Растянуть до степени двойки.
Если текстура не входит в группу текстур интерфейса, параметр Не подгружать для неё отключается.