Типы сжатия данных сетки
Unity предоставляет два способа сжатия мешей. Они работают по-разному и влияют на различные аспекты производительности:
- Сжатие вершин — это настройка, которая влияет на каждую меш в вашем проекте. Она позволяет использовать в мешах форматы данных с меньшей точностью. Это уменьшает размер данных меши в памяти, немного уменьшает размер файла и может повысить производительность GPU. Потенциальным недостатком является потеря точности.
- Сжатие сетки — это настройка, которая влияет на отдельные меши. Она сжимает данные меши на диске, что уменьшает размер файла. Потенциальными недостатками являются увеличение времени загрузки, увеличение использования временной памяти при загрузке и возможность артефактов сжатия.
Чтобы получить доступ к настройкам сжатия сетки, откройте окно Настройки импорта модели, перейдите на вкладку Модель, раздел Сетки, и используйте раскрывающийся список Сжатие сетки.
Вы можете использовать оба метода сжатия в одном проекте, но не на одной и той же сетке. Если вы применяете Сжатие Сетки к сетке, Unity не применяет Сжатие Вершин к этой сетке.
Примечание: Настройки по умолчанию Unity для сжатия вершин и сжатия сетки подходят для большинства проектов. Вы должны изменять эти настройки только в случае возникновения проблемы и оценивать результаты, чтобы убедиться, что изменения помогли.
Сжатие вершин
Настройка Сжатие вершин позволяет использовать форматы данных с меньшей точностью для всех мешей в вашем проекте. Вы делаете это, настраивая тип данных для конкретных каналов данных.
Вы можете изменить тип данных для данного канала с FP32 (Плавучий Point32, 32-битное число с плавающей точкой) на FP16 (Плавучий Point16, также известный как полуточковый плаватель). Формат FP16 хранит числа с меньшим количеством знаков после десятичной запятой, чем числа FP32, что означает, что он занимает меньше места, но предлагает немного меньшую точность.
Данные, преобразованные из FP32 в FP16, занимают меньше места в памяти и немного меньше места на диске. На GPU данные используют меньше пропускной способности памяти, что может немного повысить производительность GPU.
Метод сжатия вершин сжимает сетку на коэффициент, который меняется в зависимости от того, сколько вершинных атрибутов вы выбираете для сжатия. Коэффициент сжатия обычно составляет около 1.45x, когда вы сжимаете нормали, касательные, цвет и три набора координат UV.
Сжатие сетки
Вы можете использовать параметр Сжатие сетки для сжатия данных сетки для данного ассета модели на диске. Алгоритм сжатия сетки более агрессивен, чем метод сжатия вершин, что приводит к более высоким коэффициентам сжатия и, следовательно, меньшим размерам файлов. Однако у него есть и больше недостатков.
Когда вы применяете эту настройку, Unity использует алгоритм для замены явных значений для каждого канала сжатия диапазоном между максимальным и минимальным, где фиксированное число битов представляет, где каждое значение входит в этот диапазон. Это уменьшает размер данных сетки на диске. Когда Unity загружает сетку в память, он декомпрессирует данные, что означает, что он преобразует этот диапазон обратно в исходные значения. После этого производительность не влияет.
Этот метод может быть полезен, если вам нужно уменьшить размер окончательной сборки или размер AssetBundle, в котором находится сетка, насколько это возможно, и если снижение производительности от декомпрессии во время выполнения приемлемо.
Ограничения сжатия сетки
Во время выполнения декомпрессия меши использует дополнительные ресурсы CPU; это означает, что загрузка данных меши занимает больше времени. Unity также использует больше временной памяти при декомпрессии мешей.
Кроме того, относительно высокий коэффициент сжатия означает, что могут появиться нежелательные артефакты, когда Unity разсжимает сетку. Чтобы избежать этих артефактов, вы должны проверить каждую опцию для сетки, которую хотите сжать, и проверить, что она отображается правильно.