Оказывается, не все знают про замечательную утилиту TexturePacker. Мне всегда казалось, что это программа “по умолчанию” для всех разработчиков игр и я очень к этому привык.
Но поколения меняются, появляется много различных программ, а многие пишут свои велосипеды. Поэтому я решил рассказать про Texture Packer и другие утилиты, которые я использую очень и очень часто.
TexturePacker
Использование отдельных графических файлов в игре не очень хорошо сказывается на производительности, именно поэтому отдельные файлы собираются в атласы. Часть движков делают это самостоятельно, другие требуют предварительной подготовки текстурного атласа и файла описывающего “как?” и “что?” в этом атласе упаковано.
TexturePacker поддерживает очень много движков: Unity, Cocos2D-X, Cocos2D, SpriteKit, Starling, LibGDX, Corona(TM) SDK, Phaser, Monogame и это далеко не полный список. А еще есть возможность дописывать свои плагины, поэтому этим списком все не ограничивается.
Я использовал его со Starling, Phaser, Pixi, Unity. Ну если с первыми тремя все понятно – там нет своего упаковщика атласов, то зачем он нужен в Unity? Тут все как всегда…
Unity + TexturePacker
Unity универсальный движок и умеет он очень и очень многое. И как известно всем, кто с ним работает, многое, из того что он умеет из коробки не всегда самое оптимальное. Так и с упаковщиком текстур. Там есть недочеты, которые в TexturePacker, ввиду его узкой специализации, сделаны гораздо более оптимально. Например, Unity, с целью увеличения филлрейта, ортисовывает спрайты не на обыном кваде, а на меше. Я не буду вдаваться в плюсы и минус этого подхода, вместо этого давайте рассмотрим пример того, как Unity строит эти меши (пример взят с сайта texture packer).
Как видите, триангуляция в unity не самая оптимальная и на этом конкретном примере, помимо выигрыша в количестве треугольников (более чем в 3 раза) еще и ощутимый выигрыш в значительно меньшем количестве альфы на спрайте. При этом баланс между этими двумя параметрами настраивается разработчиком в самой утилите:
Другим важным плюсом является плотность упаковки спрайтов в атлас. Это позволяет уменьшить количество потребляемой памяти достигается такая оптимизация благодаря тому, что учитывается геометрия мешей. На хабре есть отличная статья о том, как разработчики из компании Playrix используют подобные оптимизации у себя в движке. Но у них свой движок и свои утилиты, а texture packer предлагает те же подходы без особых трудозатрат, а это для инди очен ьважно.
Для простоты импортирования готовых атласов в Assets Store есть специальный плагин: TexturePacker Importer. Все делается в немколько кликов.
Стоит обратить внимание, что Unity UI не поддерживает полигональные спрайты, поэтому при создании атласа с UI рекомендуется использовать следующие опции:
Algorithm = MaxRects Trim mode = None
Антон Карлов использует Texture Packer в связке с Unity для нового Zombotron, о впечатлениях и опыте использования рекомендую прочитать у него в блоге.
Phaser/Starling/Pixi + TexturePacker
Это не Unity, тут своих утилит нет и нужно либо писать с нуля, либо использовать что-то готовое. Texture Packer зарекомендовал себя как простое средство для работы с этими движками (как и с другими). Работая с Phaser упираешься в ограничения самого движка: не поддерживаются повороты спрайтов, trim и другие приятные вещи, которые очень хочется сделать. Других нареканий не было.
Я поднимал вопрос добавления поддержки полигональных спрайтов и texture packera в движок Defold, надеюсь в будущем разработчики добавят эту поддержку. Если вы тоже в этом заинтересованы, то пожалйста перейдите по ссылке и поставьте лайк и отпишитесь, что вы считаете этот функционал важным и полезным для вас.
Важным плюсом программы является возможность работы из командной строки, что позволяет встраивать утилиту в continuous integration решения.
Да, TexturePacker платная утилита, но своих денег она однозначно стоит. Есть альтернативы и я даже пробовал их, когда заканчивалась лицензия на пакер, но пока достойной замены не нашел.
Еще хочется упомянуть про программы от того же автора:
SpriteIlluminator – программа для генирации карт нормалей используемых для освещения в 2d играх.
PhysicsEditor – программа для создания физических объектов по изображения.
В “бою” я пробовал только Physics Editor, одну из ранних версий, для небольшой игры с физикой на nape. Программа показала себя хорошо. Я не могу рассказать про них подробнее и дать советы, но возможно это именно то, что вам нужно и поможет сэкономить время.
Tiled
Еще одна замечательная узкоспециализированная утилита, основная задача которой создание тайловых карт. Писать свои редакторы крайне увлекательно, но затратно. Гораздо проще и быстрее взять что-то готовое и использовать у себя в игре. Я стараюсь использовать Tiled везде, где это возможно.
Основные функции:
- создание тайловых слоев – рисование по сетке с помощью тайлов;
- создание слоев с картинкой – к примеру, фон;
- создание произвольных слоев – возможность размещать заглушки и добавлять им произвольные поля;
- добавление произвольных полей для слоев.
Вполне вероятно, что я что-то забыл. Но уже этих возможностей достаточно. Есть экспорт во все популярные форматы: json, lua, csv и так далее. А так же возможность писать свои плагины экспорта, так, например, стараниями сообщества появился плагин для Defold.
Саша – геймдизайнер, с которым я работаю, над текущей игрой, остался очень доволен простотой, функциональностью и легкостью Tiled (очень маленький и быстрый редактор).
Программа полностью бесплатная и кроссплатформенная.
Audacity
Я не разбираюсь в звуке, от слова “совсем”. Но тем не менее, иногда приходится этим заниматься. Самостоятельно озвучку я подбираю только для очень маленьких своих игр, для которых затраты на звук никогда не окупятся. Часами приходится перебирать сайты с бесплатными звуками вроде FreeSound . И как не крути, возникает необходимость что-то подрезать, конвертировать или сделать плавное затухание. Вот тут и приходит на помощь Audacity. Я не могу сказать обладает ли он богатыми функциями т.к. все что я с его помощью делаю, я описал в предыдущем предложении. Но главное что он бесплатный, быстрый, простой и прекрасно справляется с тем, что мне от него нужно.
Чаще всего, с помощью Audacity, мне приходится конвертировать и сохранять звуки в формат ogg и mp3 для небольших игр в Phaser (оба формата нужны для совместимости со всеми платформами). Я очень доволен этой программой.
Dash и Zeal
Это уже не совсем геймдев, но тоже весьма полезные утилиты. Буквально сегодня был спор “для чего может понадобиться оффлайн документация?”. Тут у каждого свои аргументы, а мой основной аргумент состоит в том, что в разъездах не всегда есть стабильный интернет, а писать код нужно/хочется.
Именно для удобного доступа к оффлайн документации и используются эти программы:
Dash – оффлайн документация под macos (платная).
Zeal – оффлайн документация для windows и linux (бесплатная).
Использовать достаточно просто: устанавливаете программу, выбираете интересующие пакеты, ждете пока они скачаются и все. Документация по всем интересующим вас языкам, движкам и технологиям всегда с вами.
Не знаю как с этим обстоит у Zeal, но Dash так же умеет скачивать интересующие ветки со Stack Overflow. Очень удобно, знаете ли, писать код под яблоней на даче, когда даже 3G не ловит ^___^
А какие утилиты вы используете при разработке игр?