Cheetah Texture Packer - упаковщик атласов на основе алгоритмов, используемых в UBFG (см. http://www.gamedev.ru/projects/forum/?id=152527). Используется Qt, лицензия - LGPL. Версия beta, возможны баги.
Исходники, а также сайт проекта. Нажмите Watch - и вы будете в курсе всех событий.
Как пользоваться:
Версия командной строки
Указывается папка, в которой лежит много мелких картинок, программа рекурсивно считывает все имеющиеся в этих папках изображения, составляет из них список. Лишние изображения из списка можно удалить. После этого следует этап упаковки: можно указать максимальный размер текстуры, выбрать эвристику, алгоритм упаковки, алгоритм сортировки, методы слияния и бордюр. Все результаты работы упаковщика интерактивно отображаются на экране. Не пугайтесь: розовый цвет наглядно показывает процент заполнения текстуры, а серый - границы самих изображений. Таким образом видно неиспользуемое пространство и бордюры. Программа будет упаковывать в несколько атласов, если указанный вами размер текстуры слишком мал, дополнительно выводится процент заполнения и количество пропущенных изображений (обычно не влезают только те, что больше допустимых размеров атласа).
Управление интуитивное, кнопки снабжены подсказками.
Для того, чтобы можно было быстро заскриптовать генерацию ресурсов, было предложено ввести режим командной строки. В версии Beta этот режим появился и вот как им пользоваться:
./packer [-s size] [-o outfile] [--disable-merge] [--disable-crop] [--disable-border] [--enable-rotate] [file|directory ...]
Например:
./packer -s 1024 -o myAtlas --enable-rotate images other-images/* image-5.png
Опции командной строки можно указывать в какой угодно последовательности. Он умный, сам разберётся. Для справки укажите --help.
Экспорт древовидный: для каждого спрайта указан его полный путь. Это для того, чтобы в движке вы могли работать с упакованными ресурсами так, как будто это обычные файлы, должно быть очень удобно.
Напомню, что упаковщик в текстурный атлас не предназначен для создания тайлов, он предназначен для размещения множества разноразмерных не-POT изображений в одну большую POT текстуру, что благоприятно скажется на батче и на скорости загрузки. Также с помощью данного упаковщика будет удобно сначала работать с девелоперской версией игры, где все спрайты и анимации в виде отдельных файлов, а затем в релизе упаковать всё в атласы, при этом ничего менять в коде не потребуется. При разработке анимаций и арта в целом работать с затайленными картинками намного сложнее, чем с набором файлов, так как в любой момент времени может потребоваться заменить какой-либо спрайт.
Скачать:
Linux x86_64 Qt 4.8
Linux x86 Qt 4.6
MacOS X - внимание, версию под Mac некому обновлять!
Windows Проверено на вирусы
Сравнение с популярным Texture Packer
Опять же, традиционно разыскиваются те, кто может собрать пакет под альтернативные ОСи.
Пожелания:
1) Было бы удобно что бы атласы создавались для папок разные, например:
- scenes
-- scene1
--- texture1
--- texture2
--- texture3
-- scene2
--- texture4
--- texture5
--- texture6
и на выходе получалось 2 атласа для scene1 и scene2 соответственно.
2) Выбор выходного формата атласа (png, dxt(3,5), pvrt(2,4) обязательно)
3) Возможность автоматически добавлять продолжение цвета на полупрозрачных краях изображения, аля:
но не на весь размер, а на пару пикселей, ибо больше и не надо.
MATov
> и на выходе получалось 2 атласа для scene1 и scene2 соответственно.
В первой версии будет возможность создания атласа для папки со всеми субдиректориями. Формат выхода получится такой:
scene1/texture1 координаты... scene1/texture2 ... scene1/texture3 ... scene2/texture1 ... scene2/texture2 ...
для папки scene.
Если запустить программу два раза для папок scene1 и scene2, то получится два атласа. При экспорте папка подставляется автоматически и атлас будет находиться в правильной директории (если общий атлас - то в папке scenes, если два отдельных - атласы расположатся в scene1 и scene2). Во втором случае у вас будет два физически разных файла изображения и файла описания атласа.
MATov
> Выбор выходного формата атласа (png, dxt(3,5), pvrt(2,4) обязательно)
Для начала:
http://doc.trolltech.com/4.5/qimage.html#reading-and-writing-image-files
Выбор будет, но, извиняйте, в Qt нет поддержки DXT, а что такое pvrt я даже не знаю. DXT имеет патентные ограничения и я не могу вот так просто взять конвертер nvidia, думаю, что второй тоже не поддерживается в Qt. Программа будет OpenSource, лицензионные проблемы мне не нужны:) Думаю, в экзотические форматы лучше экспортировать "специальными" утилитами, всё равно, PNG, который стоит по умолчанию, сжимает без каких-либо потерь качества и перегонка атласа не займет много времени. Лично я храню для обратной совместимости png и для драйверов, имеющих поддержку сжатия, делаю конверт в dds утилитой от nvidia.
MATov
> Возможность автоматически добавлять продолжение цвета на полупрозрачных краях
> изображения, аля:
ЕМНИП, это фича PNG и при экспорте в PNG вы автоматом получите такую прозрачность. Посмотрю в настройках сжатия этого формата. А есть способ определить, какого цвета прозрачные пиксели? Гимп при удалении прозрачности просто подставляет фоновый цвет.
RPG
> Во втором случае у вас будет два физически разных файла изображения и файла
> описания атласа.
ну то есть нужно будет вручную собирать эти атласы, значит оно не пригодно же :)
> Думаю, в экзотические форматы лучше экспортировать "специальными" утилитами
да ничего в них экзотического нет, для фотографа какого-нибудь оно экзотическо, для геймдева - обычные хардварные форматы.
отдельными утилитами да, можно, но обычно оно все скрещено в собирателе атласов, хотя у кого как конечно.
> ЕМНИП, это фича PNG и при экспорте в PNG вы автоматом получите такую прозрачность.
Это не фича пнг, и как будет экспортировать так и будет.
> Гимп при удалении прозрачности просто подставляет фоновый цвет.
вот и фотошоп тоже, что ппц при дальнейшем использовании при масштабировании и поворотах.
MATov
> ну то есть нужно будет вручную собирать эти атласы, значит оно не пригодно же
> :)
Вручную нужно только указать папку со спрайтами, остальное всё происходит автоматически. Разделение спрайтов по папкам и размещение в большом кол-ве атласов ещё большего числа спрайтов - нетривиальная задача, так как вы не семечки в вагон грузите - важно, чтобы на одном атласе находились спрайты, которые будут внутри одного дипа, а тут без самого программиста не обойтись.
Для полностью автоматической укладки будет добавлено автоматическое увеличение корзины и, возможно, упаковка в несколько корзин сразу. Однако больше число корзин приведёт к невозможности батчинга, так что чешем тыковку...
Но идею фичи я понял, нужно будет только подумать как организовать батч и автоматическую подстройку размера атласа. В первой версии будет так, как я написал, затем - пожелания.
MATov
> для геймдева - обычные хардварные форматы.
Закрытые форматы. Патентами запрещено даже писать упаковщик по этим алгоритмам, а эффективные упаковщики есть только у производителей видеокарт, ими и следует пользоваться. Во всяком случае с DXT так, не знаю как у эппла. А вставлять патентные форматы в OpenSource проект вообще странно:) Есть какой-то плохонький dds в гимпе, вроде, обходящий патенты, но сжимает он очень убого.
MATov
> но обычно оно все скрещено в собирателе атласов
Вы лучше ссылками:) Ссылками на аналогичные проекты, хотя бы freeware, Opensource я боюсь вообще в природе не существует. У TexturePacker такой возможности нет, хотя он вообще платный:
MaxRects is the best known algorithm for packing textures. It is fast and has a high packing ratio. Enabling rotation and trimming gets the best results (depending on your target framework). This algorithm is available in TexturePackerPro/CLI.
А вы получаете такой же алгоритм бесплатно:)
MATov
> Это не фича пнг, и как будет экспортировать так и будет.
И как проверить? Что за алгоритм, который так делает?
RPG
> Вы лучше ссылками:) Ссылками на аналогичные проекты, хотя бы freeware,
> Opensource я боюсь вообще в природе не существует.
Ссылками на что? в том то и дело что просто собирателей атласов дофига и больше, а нормальных с доп.фичами, типа которых я назвал нет, и у каждой конторы свой, вот и всё.
> У TexturePacker такой возможности нет, хотя он вообще платный
У него есть экспорт в pvr, если уж на то пошло.
> а эффективные упаковщики есть только у производителей видеокарт, ими и следует пользоваться
их и вызывают банально из упаковщиков, да
> Вручную нужно только указать папку со спрайтами, остальное всё происходит автоматически.
то есть вот в игре полсотни сцен, больше 10к картинок. и предлагается вручную все это клеить постоянно указывая папки?
вот если бы ты это в своем упаковщике сделал автоматически с заданными профилями, например, было бы классно и нужно, а так получится еще один собиратель атласов обычный.
MATov
> их и вызывают банально из упаковщиков, да
Я стараюсь всё-таки не перегружать одну прогу кучей плагинов, как это свойственно разработчикам программ под Win, и даже не понимаю, в чем проблема запустить батч в nvcompress или какой-то там pvr. Форматов полно, и для решения проблемы форматов нужна другая форма утилит - конвертер.
MATov
> вот если бы ты это в своем упаковщике сделал автоматически с заданными
> профилями, например, было бы классно и нужно, а так получится еще один
> собиратель атласов обычный.
В первой версии так и будет. Потом подумаю, чтобы можно было конвертнуть массово. Поскольку это непосредственно является возможностями упаковщика - я займусь батчем в первую очередь. Остальное - вроде поддержки 100500 форматов - по желанию, исходный код я тоже открою.
что просто собирателей атласов дофига и больше
Вот проблема то в том, что даже простых нет. Я не имею ввиду студию Васи Пупкина, где везде свои велосипеды, просто общедоступных мало.
Вот проблема то в том, что даже простых нет. Я не имею ввиду студию Васи Пупкина, где везде свои велосипеды, просто общедоступных мало.
Да ну? :) По моему о Texture Packer'е знают все кто хоть как-то интересовался вопросом, и он таки многое умеет. Но в целом да, маловато подобных утилит будет, потому что все велосипедят )
Andru
Закрытый и платный:)
Закрытый и платный:)
Не фанатикам на закрытость пофиг, а платный - только для "платных" проектов. В чём проблема? Но в общем-то унылый и ожидаемый ответ от тебя, так даже неинтересно... :)
А утилитка, твоя, вообще интересно, будем посмотреть в будущем :)
RPG
> Вот проблема то в том, что даже простых нет.
Тут проблема в другом как я думаю, а именно в том, что сама склейка в атлас это только одна часть подготовки арта и делается она обычно более крупной тулзой, которая еще и в формат нужный конвертит, края продляет, шарпит через фотошоп еще и еще разные вещи. и весь этот процесс занимает не один час, по-этому делается это всё автоматически по нужному профилю (где указано в какой формат преобразовывать, что не преобразовывать и т.д) соответственно тулза с гуём для склейки атласов нужна только в совсем маленьких проектах, где можно и руками посидеть поклеить, а для более крупных нужна тулза обычная консольная, аля Texture Atlas Tools от nvidia :)
Всё ИМХО, естественно.
Andru
> а платный - только для "платных" проектов
Да нет же. Читайте внимательно офф сайт, да и не-триал у них появился лишь недавно. Я уже писал что упаковка не гильотиной там только за 30 баксов. А лицензионная чистота позволяет вставлять в свои тулкиты для движков.
MATov
> Texture Atlas Tools от nvidia
А она случаем не для других целей? По-моему там тайломапы создаются с границей 1 пиксель, причем для 3D. Нвидия как патентообладатель может хоть какой формат всовывать в свои тулкиты.
RPG
> А она случаем не для других целей?
для сборки текстурных атласов.
> Нвидия как патентообладатель может хоть какой формат всовывать в свои тулкиты.
А это тут причем? я тебе про обычную сборку атласа
MATov
> я тебе про обычную сборку атласа
А я - про упаковщик спрайтов с триммером и слиянием с использованием MaxRects. Единственный известный аналог - платный TexturePacker. Фича в сжатии текстур и их автоматической распаковке в движке. Средняя андроид-игра упакуется в один-единственный атлас.
Да нет же. Читайте внимательно офф сайт, да и не-триал у них появился лишь недавно.
Free for framework developers and bloggers
If you run your own development blog or are developer of an (open source) game framework you can get TexturePacker for free!
Please use the sign up form to request a license.
Пиши свой game framework и получай на халяву версию :D Да, что-то этот момент упустил )
Тема в архиве.