Стоят ли спрайты? Застежка-молния - хорошая альтернатива?
Мне было интересно, стоят ли того спрайты. Я делаю игру с pixi.js и думал об оптимизации, начиная с загрузки ресурсов. В настоящее время у меня есть массив всех файлов и я использую PIXI.loader, но я знаю, что это не очень хорошо, потому что он будет делать веб-запрос для всех файлов, который занимает много времени, поэтому мне нужно найти способ загрузить их в одном веб-запросе. Первым делом я подумал о таблице спрайтов, но потом подумал: «А что, если бы я просто заархивировал все и загрузил что-то вроде JSZip?» Я уже знал, что это возможно (из этого проекта, который загружает текстуры pixi из zip-архива), и перечислил, что я считаю потенциально хорошими и плохими вещами:
Zip хорошие моменты:
- Сжатие означает более быструю загрузку активов
- Сжатие означает меньший размер сборки при создании сборки с электроном
Плохие точки почтового индекса:
- Требуется загрузка отдельной библиотеки, что означает увеличение времени загрузки и использование большего количества оперативной памяти.
- Требуется распаковка в памяти, что означает увеличение времени загрузки
Хорошие моменты Spritesheet:
- Не содержит заголовков всех отдельных файлов изображений
- Часто используется, так что это проверенный метод
Плохие точки таблицы спрайтов:
- Без сжатия (или, по крайней мере, не сравнимо с архивированием)
- Более одного сетевого вызова из-за телефонных ограничений, иногда предотвращающих файлы размером более 2024x2024 пикселей, что приводит к необходимости разбивать таблицы спрайтов
- Пустые отверстия, так как все изображения имеют разный размер, и в таблице спрайтов почти всегда остается немного места, что означает бесполезные пиксели, которые все еще передаются по сети
Я не очень опытный разработчик, поэтому у меня есть несколько вопросов:
- Я пропустил что-то выше?
- Стоят ли вообще спрайты?
- Какая из них того и другого стоит больше? Я мог бы сделать и то, и другое, но я хочу сосредоточиться в первую очередь на одном, а другой оставить в удобном списке.
Ответы
Во-первых, уже есть форматы изображений со сжатием. В частности, формат PNG поддерживает сжатие без потерь. Кроме того, несмотря на то, что использование кучи PNG и их сжатие может привести к увеличению размера, создание текстурного атласа (таблицы спрайтов или аналогичного) также уменьшит размер аналогичным образом, в частности, если вы повысите уровень сжатия PNG. при экспорте изображения.
Таким образом, правильно экспортированный атлас текстуры предоставит вам перечисленные вами преимущества сжатия.
Означает ли это, что вы должны объединить все в один спрайт-лист? Нет. Вы должны собрать вещи, которые должны быть загружены вместе.
Также стоит отметить, что таблицы спрайтов работают лучше, когда ваши изображения небольшие и обычного размера. Возможно, вы работаете в сценарии, для которого не подходят таблицы спрайтов.
Так ли это? Я не знаю. Проведите эксперимент. Если вы не хотите пробовать оба метода, чтобы решить, инженерный подход предлагает использовать проверенный метод, и это будет атлас текстуры.
Вас также могут заинтересовать алгоритмы упаковки, которые могут минимизировать дыры в атласе текстуры.