Я использую .png
s для своих текстур и использую виртуальную файловую систему в .zip
файле для моего игрового проекта. Это означает, что мои текстуры сжимаются и распаковываются дважды. Каковы решения этой проблемы двойного сжатия? Одно из решений, о котором я слышал, - использовать .tga
s для текстур, но, кажется, давным-давно, с тех пор как я это слышал. Другое решение заключается в реализации декомпрессии GPU
и, поскольку это быстро, забудьте о накладных расходах.
textures
assets
compression
user1095108
источник
источник
Ответы:
Zip-формат поддерживает несколько различных алгоритмов сжатия. Вы можете использовать разные алгоритмы для каждого файла в архиве. Если вы хотите сохранить уже сжатые файлы, которые не получают дополнительного сжатия (например, PNG), в zip-архиве, вы можете закодировать эти файлы с помощью «хранимого» алгоритма, который вообще не сжимается. Диалоговое окно «Добавить в архив» для 7-zip позволяет вам выбрать это в разделе «Сила сжатия».
Но если в ваших архивах есть не только изображения, но и другие, более сжимаемые ресурсы, выбор алгоритма для каждого отдельного файла может быть довольно утомительным. В этом случае вы можете предпочесть формат несжатого изображения в архиве сжатия.
Формат TGA знает много разных режимов, некоторые из которых сжимаются, а некоторые нет. Если вы не хотите использовать сжатие, убедитесь, что вы выбрали правильный вариант в настройках экспорта графического редактора, который вы используете. Другой несжатый формат изображения - BMP (Windows Bitmap).
Вот тест, который я сделал. Я добавлял одно и то же изображение (актив из моего текущего проекта) в разных форматах несколько раз в zip-архив, некоторые с алгоритмом "deflate" в обычном режиме и одно с "store". Извините за немецкий графический интерфейс. 2-й столбец - несжатый размер, 3-й столбец - алгоритм сжатия, а 4-й столбец - сжатый размер.
Как вы можете видеть, PNG-кодирование с дефляцией сохранило только скудные 0,3%, тогда как BMP с кодированным дефлатом уменьшилось до одной десятой исходного файла, что даже меньше, чем у PNG-версии. Это меня довольно удивило. Я ожидал бы, что PNG будет меньше, потому что метод сжатия PNG должен быть оптимизирован для данных изображения, а ZIP - нет. Вероятное объяснение состоит в том, что мой редактор изображений (GIMP) добавил довольно много метаинформации в файлы PNG, чего не делает для BMP.
Несжатый TGA вел себя подобно BMP в отношении размера файлов до и после архивирования, в то время как сжатие сжатого файла TGA было дополнительно улучшено ZIP, хотя и не так сильно, как несжатые версии.
Возможно, стоит поэкспериментировать с другими алгоритмами, кроме deflate, и с другими настройками силы сжатия. Какая комбинация будет иметь наилучшие результаты, будет зависеть от стиля ваших текстур. Но вы также можете попробовать оценить загрузку ресурсов в вашей игре и повлиять на производительность декомпрессии, чтобы решить, какие настройки вы используете.
Нижняя линия: Если вы хотите , чтобы избежать двойного сжатия и при этом иметь низкий размер файла, либо использовать
PNG
сStore
алгоритмом почтовый илиBMP
с сжимающего алгоритма ZIP.источник
Не беспокойся об этом.
Когда алгоритм «deflate», используемый в файлах .zip, обнаруживает блок данных, который уже хорошо сжат, например, данные пикселей изображения .png, он обнаруживает, что не может эффективно сжать его, и сохраняет его как литерал несжатые данные. На распаковке это занимает очень мало времени на распаковке.
http://en.wikipedia.org/wiki/DEFLATE
источник
store
вместо того,deflate
чтобы экономить время, а затемdeflate
все для релизных сборок.Похоже, некоторые очень хорошие ответы уже были даны, но я решил дать еще один:
Решение: ничего не делать
Обоснование: не было заявлено никаких проблем - да, вы сжимаете информацию дважды, но почему вы беспокоитесь об этом? Размер данных слишком велик? Слишком медленная декомпрессия? Это более или менее важно, чем десятки функций, которые вы могли бы добавлять, дорабатывать, тестировать и / или отлаживать в данный момент времени?
источник
Если вы используете специализированные форматы, такие как PNG и OGG, вам не понадобится сжатие ZIP.
PNG, OGG и другие уже сжатые форматы не станут намного меньше, если снова сжать их в ZIP. 100 МБ сжатых файлов PNG по-прежнему составляют ~ 100 МБ.
Сценарии, файлы конфигурации и другие текстовые форматы значительно выигрывают от сжатия, однако, как правило, они крошечные по сравнению, они не хранят столько данных. Если ваша игра занимает 100 МБ, то текстовые файлы могут составлять 1 МБ всей игры, даже если вы можете сделать их 100 КБ путем сжатия, тогда вы выиграли только 900 КБ, менее 1%, вряд ли стоит усилий.
Возможно, вы даже захотите использовать файловую систему напрямую, а не виртуальную файловую систему на основе zip. Это сделает исправление очень простым: вы можете просто поменять любые файлы, которые вы изменили.
источник
.zip
файл или нет. Например, на платформе Android,.apk
это.zip
файл, который может содержать ресурсы.