coder1cv8
@coder1cv8
Инди-разработчик

Как упаковать текстуры в libGDX?

Я пишу игру под Android на libGDX и использую TexturePacker (https://www.codeandweb.com/texturepacker) для создания атласов. Графики становится довольно много, поэтому возник вопрос как упаковать текстуры в менее ресурсозатратный формат чем PNG/RGBA4444 (который я использую сейчас).

Погуглив, я понимаю что мне нужен ETC1. TexturePacker умеет экспортировать в "PKM with ETC1" - это как раз то что нужно. Если такой файл заархивировать и переименовать в etc1, то libGDX его прочтет. НО. Сам формат, подразумевает что изображения сохраняются в один etc-файл без альфа-канала, а альфа-канал сохраняется в другой etc-файл. Как объединить эти 2 атласа в libGDX - я не представляю!

В gdx-tools (https://libgdx.badlogicgames.com/tools.html) есть собственный TexturePacker, но он, как я понял из документации, экспортирует только в PNG. Так же есть некий KTXProcessor, но ни где взять бинарник, ни как им создавать атласы - мне не понятно.

Итого, как же вы упаковываете текстуры в libGDX? Есть какое-то руководство "для чайников"?
  • Вопрос задан
  • 1019 просмотров
Пригласить эксперта
Ответы на вопрос 2
maaGames
@maaGames
Погроммирую программы
Объединять в шейдере. Без шейдера не знаю, можно ли сделать.
Ответ написан
@MarkusD
все время мелю чепуху :)
Андрей, у тебя вопрос, как видно по тексту, немного о другом. По описанию видно что ты перед собой стену видишь, а про дверь в стене даже не подозреваешь. Итак, вот дверь, даже несколько. :)

Первое - надо понять, насколько много графики у тебя в проекте. Для современного mid-end устройства на андроиде 5.0 совсем не проблема держать 2-4 RGBA текстуры с разрешением 4096 по ребру. Это не говоря о сопутствующих шейдерах, буферах растра/глубины/вершин/индексов. Минимализм в ресурсах приветствуется, но и зажимать себя в тески не стоит.

Второе - давай взглянем на параграф "Open GL Version" странички https://developer.android.com/about/dashboards/ind...
OpenGL 3.x занимает большую долю всех устройств. Эта версия OpenGL умеет работать с форматом ETC2 (благодаря заявленной поддержке от GPU), в котором уже можно сохранять альфу. А в вики ( https://en.wikipedia.org/wiki/Ericsson_Texture_Com... ) еще и написано про обратную совместимость.
Тут в моем опыте пробел, с ETC2 я еще не работал и наглядно про обратную совместимость с ETC1 ничего не знаю. Поэтому предлагаю устроить обмен знаниями в этой теме. :)

Третье - Аппаратно-поддерживаемых форматов сжатия текстур на самом деле много: S3TC, ATC, PVR-TC. ETC - не единственный. Каждый из форматов поддерживается своим производителем. ATC - Quallcomm; PVR-TC - Imagination Tec. Но вот S3TC (более известный как DXT3/DXT5) поддерживается обоими QC и ImgTec, но тайно. И только ARM Mali поддерживает один лишь формат ETC.
К чему я это. Тройка профильных форматов и альфу поддерживает, и обрабатывается быстрее того же ETC (и уж тем боле пары ETC1).
Поэтому может тебе удобнее будет использовать конвертацию в эту тройку форматов?
У меня на гитхабе есть очень быстрая библиотека для программного чтения PVR-TC.v2 в RGBA буфер, что позволит загрузить текстуры для Mali GPU.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы