Войти
ПроектыФорумУтилиты

[beta] Упаковщик атласов - Cheetah Texture Packer (auto-size ver.) (17 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 116 17 18 1921 Следующая »
#240
21:18, 2 авг. 2013

Лет пять назад написал свой упаковщик атласов, под свой же движок (поддержка движка заключается в генерации файла с описанием атласа). Утилита консольная, только под линукс, поддерживается только Linux. Алгоритм простой - сортировака спрайтов по размеру и последовательная укладка в минимальный атлас. Размер атласа выбирается автоматически в пределах допустимых значений.


#241
21:27, 2 авг. 2013

мул
> Можно зареквестить фичу? Очень уж нужна.
> Было бы здорово, если бы можно было собирать спрайтшиты на основе уже
> существующего атласа.
> То есть, помимо каталога со спрайтами задаёшь ещё и файл .atlas, который был
> сгенерирован ранее.
> И программа составляет спрайтшит, читая оттуда данные, т.е. пытается брать
> спрайты по указанным в атласе путям, обрезать их до указанных в атласе размеров
> и помещать в координаты спрайтшита, указанные в атласе.
>
> Выходной .atlas-файл всегда будет прежним, причём:
> 1) при одинаковых наборах спрайтов получаются полностью идентичные спрайтшиты.
> 2) при разных наборах спрайтов получаются спрайтшиты одного размера, но,
> возможно, содержащие пустые места или подрезанные изображения.
>
> Зачем это нужно?
> Главным образом, чтобы получать спрайтшиты, которые могли бы корректно
> накладываться друг на друга. Например, спрайтшит юнита и спрайтшит его масок
> для процедурной перекраски юнита в цвета игроков. Перекрасить сразу весь
> спрайтшит гораздо проще и быстрее, чем перекрашивать покадрово. Мы сейчас
> делаем игру на HTML5 и тут это критически важно.
Если честно, я не очень понял, что вам нужно. Вы можете сгенерировать атлас и потом его красить. Если размеры спрайтов идентичны, они лягут одинаково при повторной упаковке. По поводу наложения я думаю этим движок должен заниматься уже непосредственно рисуя один спрайт поверх другого, причём маска может быть гораздо компактнее ужата.

В общем, лучше пример.

#242
21:28, 2 авг. 2013

andreyu
> Лет пять назад написал свой упаковщик атласов, под свой же движок (поддержка
> движка заключается в генерации файла с описанием атласа). Утилита консольная,
> только под линукс, поддерживается только Linux. Алгоритм простой - сортировака
> спрайтов по размеру и последовательная укладка в минимальный атлас. Размер
> атласа выбирается автоматически в пределах допустимых значений.
Есть примеры? Исходники открыты? Чем ваш алгоритм лучше этого?

Linux это хорошо. Мне не хватает интеграции с ImageMagick, и сложно объяснять разработчикам, почему ImageMagick иногда лучше чем фотошоп:) Все хотят чтобы я добавил конвертер во все существующие форматы, фильтры т. п., что обычно делается на постпроцессинге.

#243
22:10, 2 авг. 2013

> Есть примеры?

Примеры работы алгоритма? Давайте набор входных спрайтов, а я сделаю атлас своей утилитой.

> Исходники открыты?

Нет, но там пару строк кода :)

> Чем ваш алгоритм лучше этого?

Я не знаю, какой алгоритм используете вы. Отметился в теме для того, что бы разобраться, какой алгоритм лучше и имплементить его в своей утилите. Мне не для соервнования, а для работы это нужно :)

#244
22:10, 2 авг. 2013

RPG
> Вы можете сгенерировать атлас и потом его красить.
Под атласом я понимал текстовый файл .atlas, а не саму картинку с упакованными спрайтами. )

> По поводу наложения я думаю этим движок должен заниматься уже непосредственно рисуя один спрайт поверх другого, причём маска может быть гораздо компактнее ужата.
Я делаю игру на html5. Не хочу вдаваться в тонкости js, но суть такова, что:
1) слишком затратно перекрашивать спрайты в реальном времени, поэтому я создаю перекрашенную копию всего спрайтшита заранее;
2) перекрашивать спрайты по отдельности опять же слишком затратно - объём вычислений возрастает практически квадратично, поэтому я использую сразу спрайтшит масок для перекраски всего спрайтшита юнита.

> Если размеры спрайтов идентичны, они лягут одинаково при повторной упаковке.
Не совсем так. При нажатии на кнопку "Update" или изменении размеров спрайтшита (даже просто урезании пустого места) некоторые спрайты меняются местами. Впрочем, как я заметил, там всего два-три варианта их расположения как правило. Так что частично проблема решена.

p.s. И, кстати, во вкладке Export не хватает галочки для удаления пустого места справа и снизу. Не всем нужны размеры в степенях двойки.

#245
22:13, 2 авг. 2013

> Linux это хорошо.

Ага, уже очень давно это моя единственная и основная система (ну изредка окрываю крышку макбука, что бы собрать проект под ios и osx).

> Мне не хватает интеграции с ImageMagick,

Конвеер не подойдет?

> и сложно объяснять разработчикам, почему ImageMagick иногда лучше чем фотошоп:) Все хотят чтобы я добавил конвертер во все существующие форматы, фильтры т. п., что обычно делается на постпроцессинге.

Вообще я в последний год плотнее стал пользоваться imagemagick потому, что "там уже все есть" - не нужно городить велосипеды. Единственное, что пока разберешься, как это сделать оптимально, проходит несколько часов :)

#246
23:10, 2 авг. 2013

andreyu
> Конвеер не подойдет?
То в линуксе, в винде то как это делать, непонятно. Более того если на всех линуксах IM есть, но на винду надо ставить или таскать его с собой везде.

мул
> перекрашивать спрайты по отдельности опять же слишком затратно - объём
> вычислений возрастает практически квадратично, поэтому я использую сразу
> спрайтшит масок для перекраски всего спрайтшита юнита.
Я так понял, это этап постпроцессинга игровых ресурсов? Вот кстати где вам ImageMagick и нужен:) Лучше покажите с чем вы работаете, если это секрет - в личку. Я просто на словах не совсем вникаю на ночь глядя.

Остальные хотелки - знаю, жёсткий POT будет убран в релизе и заменён на дихотомию по размеру текстуры.

#247
23:29, 2 авг. 2013

> жёсткий POT будет убран в релизе и заменён на дихотомию по размеру текстуры.

Есть мнение, что POT полезен и там, где есть поддержка NPOT. Типа POT все же быстрее, чем NPOT.

#248
9:43, 15 авг. 2013

Все же я не очень понимаю как использовать файл с координатами.
Я сделал атлас из текстур одинакового размера, но с кропом по альфе. Далее смотрю файл атласа и там есть вот такая строка:

M_Barrel_Gunpowder_big.png  0  0  84  128  4  1  92  129
Я никак не могу понять, что надо использовать для получения этого элемента с его реальным (после кропа) размером. Вот беру я координату (0;0) и размер (84;128). Выглядит это так (ореол вокруг - это альфа):
Atlas | [beta] Упаковщик атласов - Cheetah Texture Packer (auto-size ver.)
Все отлично, на вид похоже, что это именно тот рект, который нужен. Далее зачем мне нужен "Xoffset" и "Yoffset"? Я могу понять зачем мне нужен "OrigW" и "OrigH", но для чего оффсеты? Если тупо прибавить этот оффсет к начальной координате, то получается вот так:
Atlas | [beta] Упаковщик атласов - Cheetah Texture Packer (auto-size ver.)
Очевидно я не правильно понимаю их назначение.
Вот здесь нарисовано, что это начало реальных пикселей:
Изображение
Но как-то не похоже на то, что получается у меня.
Помогите понять плиз.

#249
10:00, 15 авг. 2013

DeadMeat, всё очень просто - если тебе надо вывести твой (не кропнутый по альфе) спрайт в координатах (X,Y), то это значит, что кропнутый надо вывести по координатам (X+Xoffset, Y+Yoffset).

Т.е. эти два значения служят для того, что бы правильно сдвинуть спрайт на экране, не надо пытаться сдвигать координаты в атласе.

Например, конкретно в приведённом тобой случае - спрайт был обрезан по ширине и высоте. Из-за этого он сдвинулся вверх и влево. Если ты захочешь нарисовать спрайт (который типа исходный) в координатах (0,0), то у тебя получится будто он сдвинут немного вверх и влево (из-за того, что он был обрезан слева и верху). А если ты подвинешь его на указанные оффеты - он будет именно в той поизиции, как если бы ты нарисовал в (0,0) исходный спрайт.

#250
10:06, 15 авг. 2013

slava_mib
Благодарствую! А я все пытался в атласе координаты сместить... и к размерам оффсеты добавлял и отнимал. А вот оно оказывается как.

#251
23:40, 17 авг. 2013

Когда-то при запуске проекта, меня спрашивали, в чём преимущество открытого пакера перед закрытым TexturePacker-ом:
Andru
> Не фанатикам на закрытость пофиг, а платный - только для "платных" проектов. В
> чём проблема? Но в общем-то унылый и ожидаемый ответ от тебя, так даже
> неинтересно... :)

В общем-то преимущество на мой взгляд очевидно, а для тех, кому не очевидно, то оно напрямую следует из текущего небольшого объявления.

Новые возможности

Разрешите вам представить патч от одного из пользователей программы. Он вносит несколько корректировок в алгоритм упаковки:

- улучшен алгоритм разбиения на несколько атласов - рекурсивный автоматический выбор размера атласа c регулируемой плотностью заполнения
- режим гарантированного создания только квадратных текстур (для pvr)
- новый алгоритм поворота - только при необходимости
- новый алгоритм сортировки - MAX(Width, Height)
- новые параметры командной строки:

--disable-recursion                        обрабатывает только указанный каталог (без рекурсивного спуска)
--square                                   квадратные атласы(нужно например для последующей упаковки в pvr) 
--autosize-threshold value                 использование автоматической подгонки последнего атласа 0-100 порог (0 - выключен) 
--min-texture-size WidthxHeight            минимальный размер атласа для автоподгонки
--crop-threshold value                     порог обрезки по альфа (0-255) 
--sortorder value                          указать алгоритм сортировки (0-4)

Спасибо пользователю newnon

#252
22:38, 15 сен. 2013

Написал скрипт для блендера, который автоматически пакует отрендеренную анимацию в атласы используя командную строку Cheetah texture packer.
Simple, Free Image and File Hosting at MediaFire

Пока версия только для win. Скачать

Ещё не нашёл как можно запаковать текстуры с сортировкой по алфавиту. Например, рендер блендера выдаёт последовательность картинок (render_0000, render_0001, render_0002 ...). Надо чтобы в атласе они шли
в таком же порядке.

#253
0:03, 16 сен. 2013

lorik
По идее можно выключить сортировку вообще, тогда файлы пойдут в порядке, как они идут в файловой системе, но я, каюсь, этого просто не предусмотрел. Правда, сортировка на атласе с в экспортируемом файле - вещи разные. Мне вообще казалось что в файле без особой разницы в каком порядке они идут.

#254
1:47, 16 сен. 2013

RPG
> Правда, сортировка на атласе с в экспортируемом файле - вещи разные
Я имел ввиду порядок спрайтов в текстуре.

Если отключить сортировку, то в атласе и текстуре спрайты всё равно идут в разнобой (причём логика непонятная - сначала числа уменьшаются, а последние, например, 0003...0004). Проблема в том, что в движке polycode отсутствует поддержка атласов, а анимация задаётся пофреймово (idle 0-4 и т.д.) с фреймами фиксированного размера. Впрочем если поддержка атласов там будет, то всё ок.
Ещё, если задать текстуре минимальный размер 512 - она всё равно рендерится в 256 (хотя это может мой кривой скрипт:)

Страницы: 116 17 18 1921 Следующая »
ПроектыФорумУтилиты

Тема в архиве.