Как сжать спрайт листы?
Я делаю игру с большим количеством листов спрайтов в cocos2d-x. Слишком много персонажей и эффектов, и каждый из них использует последовательность кадров. Файл apk больше 400 МБ. Поэтому я должен сжать эти изображения.
Фактически, каждый кадр в последовательности имеет лишь небольшую разницу по сравнению с другими. Поэтому мне интересно, есть ли инструмент для сжатия последовательности кадров вместо простого помещения их в спрайт-лист? (Анимация арматуры может помочь, но эффекты не могут рассматриваться как арматура.)
Например, существует эффект, включающий 10 файлов PNG, а размер каждого файла составляет 1 МБ. Если я использую TexturePacker, чтобы превратить их в лист спрайтов, у меня будет большой png-файл размером 8 МБ и файл plist размером 100 КБ. Общий размер 8.1mb. Но если я смогу сжать их, используя различия между кадрами, возможно, я получу png-файл размером 1 Мб и 9 файлов размером 100 Кбайт для воспроизведения остальных 9-ти файлов png во время загрузки. Этот метод требует только 1,9 МБ на диске. И если я смогу преобразовать их в формат pvrtc, объем памяти, необходимый во время выполнения, также может быть уменьшен.
Кстати, сейчас я пытаюсь конвертировать.bmp в.pvr во время загрузки игры. Есть ли lib для преобразования в pvr?
Спасибо!:)
1 ответ
Если у вас много текстур для конвертации в pvr, я советую вам приобрести инструменты PowerVR на сайте www.imgtec.com. Это идет с вариантами GUI и CLI. PVRTexToolCLI сделал всю работу за меня, я написал большую конвертационную работу. Бесплатно скачать, бесплатно использовать, вы должны зарегистрироваться на своем сайте.
Я только что проверил, он конвертирует много форматов в pvr (включая bmp и png).
Прежде чем вы отправитесь туда (масштабная пакетная работа), я предлагаю вам поэкспериментировать с некоторыми вариантами. PVR (как правило) толстый на диске, быстро загружается и эквивалентен другим форматам в ОЗУ... Требования к ОЗУ в основном определяются количеством пикселей и количеством битов, которые вы кодируете для каждого пикселя. Вы можете получить интересный размер диска с помощью pvr, в зависимости от формата вывода и количества используемых вами битов... но это может привести к потерям, и вы можете получить видимые артефакты. Поэтому поэкспериментируйте с ограниченным образцом, прежде чем принять решение, чтобы получить полный проход
Первое место, на которое я смотрю, даже перед любым преобразованием, это ваши анимации. Поскольку вы используете TP, он может обнаружить дублирующиеся кадры и псевдонимы N кадров для одного кадра на текстуре. Например, моя команда дизайнеров предоставляет мне все анимации "ходьбы / стойки" с 5 картинками, но с 8 кадрами! Plist содержит псевдонимы кадров для отсутствующих текстур. Во всех моих позициях, кадр 8 такой же, как кадр 2, поэтому текстура содержит только кадр 2, но в листе данных искусственно создается кадр 8, который обрезает изображение кадра 2.
Другое место, на которое я бы посмотрел, - это использование 16 битов. Это будет благоприятствовать размеру пакета, требованию к памяти во время выполнения и скорости загрузки. Используйте RGBA565 для текстур без прозрачности или RGBA5551 для анимации, например. Еще раз, попробуйте несколько, чтобы убедиться, что вы получите приемлемый рендеринг.
повеселись:)