GameDev Utils

tt

Оказывается, не все знают про замечательную утилиту 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).

optimizer-comparison-2

Как видите, триангуляция в unity не самая оптимальная и на этом конкретном примере, помимо выигрыша в количестве треугольников (более чем в 3 раза) еще и ощутимый выигрыш в значительно меньшем количестве альфы на спрайте. При этом баланс между этими двумя параметрами настраивается разработчиком в самой утилите:

polygon-tracer-tolerance-2

2016-09-15_21-04-38

Другим важным плюсом является плотность упаковки спрайтов в атлас. Это позволяет уменьшить количество потребляемой памяти достигается такая оптимизация благодаря тому, что учитывается геометрия мешей. На хабре есть отличная статья о том, как разработчики из компании Playrix используют подобные оптимизации у себя в движке. Но у них свой движок и свои утилиты, а texture packer предлагает те же подходы без особых трудозатрат, а это для инди очен ьважно.

Для простоты импортирования готовых атласов в Assets Store есть специальный плагин: TexturePacker Importer. Все делается в немколько кликов.

Стоит обратить внимание, что Unity UI не поддерживает полигональные спрайты, поэтому при создании атласа с UI рекомендуется использовать следующие опции: 

Антон Карлов использует 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 везде, где это возможно.

2016-09-15_22-00-32

Основные функции:

  • создание тайловых слоев — рисование по сетке с помощью тайлов;
  • создание слоев с картинкой — к примеру, фон;
  • создание произвольных слоев — возможность размещать заглушки и добавлять им произвольные поля;
  • добавление произвольных полей для слоев.

Вполне вероятно, что я что-то забыл. Но уже этих возможностей достаточно. Есть экспорт во все популярные форматы: json, lua, csv и так далее. А так же возможность писать свои плагины экспорта, так, например, стараниями сообщества появился плагин для Defold.

Саша — геймдизайнер, с которым я работаю, над текущей игрой, остался очень доволен простотой, функциональностью и легкостью Tiled (очень маленький и быстрый редактор).

Программа полностью бесплатная и кроссплатформенная.

Audacity

Я не разбираюсь в звуке, от слова «совсем». Но тем не менее, иногда приходится этим заниматься. Самостоятельно озвучку я подбираю только для очень маленьких своих игр, для которых затраты на звук никогда не окупятся. Часами приходится перебирать сайты с бесплатными звуками вроде FreeSound . И как не крути, возникает необходимость что-то подрезать, конвертировать или сделать плавное затухание. Вот тут и приходит на помощь Audacity. Я не могу сказать обладает ли он богатыми функциями т.к. все что я с его помощью делаю, я описал в предыдущем предложении. Но главное что он бесплатный, быстрый, простой и прекрасно справляется с тем, что мне от него нужно.

Чаще всего, с помощью Audacity,  мне приходится конвертировать и сохранять звуки в формат ogg и mp3 для небольших игр в Phaser (оба формата нужны для совместимости со всеми платформами). Я очень доволен этой программой.

Dash и Zeal

dash-256-2xЭто уже не совсем геймдев, но тоже весьма полезные утилиты. Буквально сегодня был спор «для чего может понадобиться оффлайн документация?». Тут у каждого свои аргументы, а мой основной аргумент состоит в том, что в разъездах не всегда есть стабильный интернет, а писать код нужно/хочется.

Именно для удобного доступа к оффлайн документации и используются эти программы:

Dash — оффлайн документация под macos (платная).

Zeal — оффлайн документация для windows и linux (бесплатная).

Использовать достаточно просто: устанавливаете программу, выбираете интересующие пакеты, ждете пока они скачаются и все. Документация по всем интересующим вас языкам, движкам и технологиям всегда с вами.

Не знаю как с этим обстоит у Zeal, но Dash так же умеет скачивать интересующие ветки со Stack Overflow. Очень удобно, знаете ли, писать код под яблоней на даче, когда даже 3G не ловит ^___^

 

А какие утилиты вы используете при разработке игр?

  • Спасибо за подборку!
    Я тоже использую TexturePacker, а звуки конвертю удобным онлайн сервисом online-audio-converter.com.

    • Тебе спасибо, что читаешь и за ссылочку, буду знать.

  • Мирошниченко Дмитрий

    Shoebox (http://renderhjs.net/shoebox/) еще. Tiled офигенский.

    • С Shoebox я не подружился. Уж очень много проблем было с ним.

      • Мирошниченко Дмитрий

        Согласен, он мягко говоря «нервный», но содержит очень полезный набор.

  • Александр Гунько

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

  • Lampogolovii

    Отлично! Спасибо за пост!

    Audacity реально крутой. Быстрый, кроссплатформенный, но есть и свои заморочки с интерфейсом, иногда подбешивает.
    TexturePacker очень распространен, да. Есть минус — что он не пересобирает атлас при изменении файлов. Нужно кнопку жать. Это вообще не айс. И это, если автору кинуть ссылку на свой dev-блог, то он высылает ключ бесплатно 🙂

    Еще Kanbanflow для тасков и помидоров. Еще Araxis Merge для просмотра dif’ов (в том числе не из репо).

    • Супер! Тебе спасибо что читаешь!