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 рекомендуется использовать следующие опции: 

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 везде, где это возможно.

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 не ловит ^___^

 

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

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.

Spelling error report

The following text will be sent to our editors: