[unity3d] Упаковка текстур в атласы


Собственно начну с того, что мне любезно предоставили бесплатную лицензию для TexturePacker. Программа упаковывает текстурки в атлас, и позволяет экспортировать в нужном формате. И ниже я расскажу вам, какую роль она сыграла в проекте.

Для подготовки текстур к атласам текстуры были уменьшены на 2 пикселя, ради бордюров. Например 256px оригинального фрейма 1px + 254px + 1px.

Опции которые я использовал :

  • Data Format : JSON (Array)
  • Texture Format : TGA (RGBA8888)
  • Size constraints : POT (Power of 2)
  • Scale : 1 (для PC), 0.5 (тест)
  • Algorithm : MaxRects
  • Multipack : TRUE
  • Allow rotation : TRUE
  • Detect identical srites : TRUE
  • Extrude : 1
  • Clean transparent pixels : FALSE

Получились вот такие атласы.





Как потом выяснилось, 1 пикселя мало для выдавливания защитных бордюров по краям фреймов. И вообще тут подошла бы другая функция. Подробности [тут].

Теперь [ложка дегтя в бочке мёда]
Я очень благодарен за предоставленную блоггерскую лицензию, но есть несколько пунктов если не перечеркивающие все преимущества халявы, то здорово портящие всё впечатление . И я их сейчас перечислю:
  • отсутствие возможности ручного перетаскивания спрайтов между атласами. Нет возможности менять положение фреймов и т.д. а было бы очень удобно
  • отсутствие возможности адекватно дробить атласы. Допустим у нас получается 5 атласов 1024х1024 и один 512x512, логично было бы скомпоновать их в набор 2048х2048, 1024х1024 и аппендикс 512х512. Получили бы максимальный выигрыш в drawCall/memory
  • нет возможности группировать спрайты "по папкам". Если добавлена smart folder с некоторым количеством подпапок всё их содержимое перемешается.
  • нет возможности залочить положение спрайтов в атласах (или весь атлас), если нужно внести изменения только в одном (например добавить спрайт) - придется делать реимпорт всего проекта (атласа) в фреймворк.
  • нет возможности исключить файл/папку из атласа при использовании smart folder. Собственно весь "smart" заключается в рекурсивном обходе папок и автообновлении.
  • нет ни отображения % заполненности атласа, ни % свободного места
  • нельзя начать нумерацию атласов с произвольной цифры, только 0 или 1
  • баги! В некоторых проектах тулл падает. Собственно атлас он создает, но вот описание к нему.. приходилось переносить руками из gui, или пользоваться консольной версией. Какой-то конфликт с родительским QT. (Собственно надо отдать должное, на письма отвечают весьма оперативно!)
  • Не хватает функции ручной разметки тайлов для готового атласа (функция здорово помогла бы при портировании).
В принципе пользоваться и так. Хотя.. чего таить, продукт за свои деньги очень качественный, я думаю купить после того как истечет год блоггерской лицензии.

Некоторые модели содержат до 45! различных текстур, при том что используют всего 1-2 материала (всетаки шейдера.. немного тавтологии). Внедрение атласов позволило ощутимо снизить количество Draw Call : cpu реже дергает видеокарту, gpu отрисовывает картинку за меньшее количество проходов. Побочным эффектом является overhead по видеопамяти, когда при худшем сценарии у нас в памяти несколько атласов, в которых на потенциально видимой сцене используется только по одному фрейму.

Комментарии

  1. Привет, текстурирование всей статики в ручную в анриале 4 хроники с4 у меня занято 9 дней, статики около 8-9 тысяч.
    Конечно твоя информация полезная, но если ты берёшь готовое, то нужно создавать нормал мапы\спекуляры(если этого нету) да и саму статику нужно править и детализировать если на то пошло.

    ОтветитьУдалить
    Ответы
    1. Нужно? Кому? Для чего? Я такими человекоресурсами не обладаю, да и целей у меня таких не стоит.

      Удалить

Отправить комментарий