Сравнение с на мой взгляд лучшим на сегодня пакером текстур:
Везде параметры подбирались для получения наилучшего сжатия.
Выводы делайте сами:)
Состоялся релиз alpha для линуксов. Подробности в первом посте: http://www.gamedev.ru/projects/forum/?id=161714
RPG
Судя по посту #30
Текстур пакеры хорошего уровня просто не делают.
VanZ
Не понял немного. Единственный, который я знаю из пакеров с алгоритмом MaxRect это TexturePacker. Остальное - какая-то жесть. Поделитесь ссылкой, где такие раздают? Кстати я уже выпилил метод упаковки гильотиной и не говорю уж про упаковку грубой силой - самая левая на том скрине - не вижу смысла делать.
Пример упаковки арта для игры violetland:
Получилось 6 текстур 512х512 и одна 256х256. 13 мегабайт ужались до 2:)
RPG
Я говорю, у тебя отличный Текстур пакер.=)
VanZ
Спасибо, надеюсь, кому-то пригодится.
А вот и исходники:
https://github.com/scriptum/Cheetah-Texture-Packer
Проверил на анимациях - всё работает идеально. Упаковывает анимированные спрайты только в путь.
Убедительная просьба откликнуться пользователей Windows, Mac и Linux, имеющих на своих машинах Qt. Сборка займёт две минуты времени, но зато программой смогут пользоваться абсолютно все.
Итак, готова реализация. При тестировании атласов в движке глюков не обнаружено, при экспорте оставляет бордюр в 1 пиксель (по умолчанию, можно увеличить), в итоге - никаких проблем с резайсом. Сам упаковщик ошибок не имеет, но вот в движке придется реализовать много матана для корректного вывода таких атласов. В Cheetah уже готова поддержка этого формата, если у кого-то не получается реализация: https://github.com/scriptum/Cheetah (вращение не доделано)
Вся эта красота может быть создана примерно следующим кодом:
local data = C.resLoader('data/atlas') local tiger = C.resLoader('data/1111') E:new(screen):draw(function() data.images.anima.player.death[0][math.floor(time * 20 % 56)]:draw(0, 256, 256, 256) tiger.tiger:draw(0,0,368,512) end)
При этом один атлас, естественно, анимированный.
RPG
Ты бы описал как использовать интерфейсы, которыми пользователь мог бы заинтересоваться(я так понимаю это - ImagePacker и все, что им используется). Например я бы(в конце концов) просто завернул бы это в динамическую библиотеку для своих нужд и заменил бы свою реализацию...
Paltr
Сейчас хоть и выполнен серьёзный рерайт, но пакер от графики отделён не полностью, внешние интерфейсы - сплошь Qt и если сделать dll, оболочку без Qt всё равно не собрать. Если у вас используется Qt - то но проблемс.
Описание интерфейса нужно делать... Плюс навести порядок, а так там одни паблики и пабликами погоняют, мне например для графики почти все структуры пакера нужны и на чтение и на запись:). Время появится - попробую сделать что-то вроде класса внешнего хотя бы.
RPG
> сплошь Qt и если сделать dll, оболочку без Qt всё равно не собрать
Да если что, я от них избавлюсь и сделаю интерфейс без зависимостей. Главное - чтобы с твоей(на "ты" - круче :)) стороны был устоявшийся интерфейс.
Paltr
> был устоявшийся интерфейс.
Тут я пока ничего не обещаю. Добавилась фича - упаковка в несколько физически разных атласов, так интерфейс изменился полностью, рерайт 90%, так как старый интерфейс этого не предусматривает. Да и из-за такой фичи собственно программа-оболочка сама по себе должна по-другому думать уже.
Если вкратце - наружу смотрит список корзин (то есть список текстур), у каждой текстуры есть свой размер, так как упаковщик автоматически определяет необходимый размер текстуры. Дополнительно наружу вываливается список упакованных изображений с кучей перекрестных ссылок на дубликаты. Чтобы эти списки использовать, внешняя прога должна знать про кутэшные списки и считать их. Дополнительно есть методы добавления и удаления изображений в список, которые теперь независимы от процесса упаковки, то есть сначала происходит добавление (параллельно вычисляются дубликаты и crop-зона), а потом можно много раз запускать пакер с разными параметрами.
Для того, чтобы пользоваться этим хозяйством, нужно сделать методы-итераторы по этим спискам.
Ну главное - устаканить интерфейс, далее все станет ок :) Пусть он даже супер кривой будет, главное - стабильный
Угу, а если учесть безумную идею с перемещением изображений по атласу вручную, то что от текущего интерфейса останется?:) Я думаю что придётся зафиксировать какую-то версию, но следующая окажется полностью несовместимой.
В исходниках придется правда придется навести порядок: убрать половину фигни в приват, сделать интерфейсы, не зависящие от Qt. Если есть желание помочь - я не притов:) На гите есть механизм форков: форкаете проект себе и делаете что хотите, а потом можно сделать пулл риквест для соединения с основной ветвью.
RPG
> Если есть желание помочь - я не притов
Да если бы время было... но в обозримом будущем все равно этот вопрос поднимется и если проект будет актуален, я "за"...
Тема в архиве.