LINUX.ORG.RU

Формат для хранения текстур

 , ,


0

1

Почитал, что хорошо использовать форматы со сжатием, поддерживаемым видеокартами на аппаратном уровне (DXT1/2/3/4/5).
Использую libsoil, он умеет загружать майкросовтовский DDS. А есть ли аналогичные форматы не от майкросовта?
В git удобнее хранить изображения в текстовом виде (ppm, xpm), чтобы легко было смотреть диффы. Какой формат посоветуете для RGBA (8 бит на канал) изображений?
Потом нужно превращать изображения из текстового формата в бинарный формат с DXT1/2/3/4/5. Нужна консольная утилита для конвертирования, чтобы просто добавить строчку в Makefile.
Ещё хорошо было бы собрать все текстуры, карты, скрипты и прочие игровые ресурсы и упаковать в файл с файловой системой внутри. Какой формат для этого использовать? Говорят, tar громоздкий, может cpio? Кажется, эти форматы немного для другого.

Итак посоветуйте три формата: для загрузки текстур в игру на OpenGL, для хранения изображений в Git и для упаковки большого количества игровых ресурсов.

★★★★★

Последнее исправление: CYB3R (всего исправлений: 2)

Ответ на: комментарий от CYB3R

Топик читать надо.

И что же там написано?

CYB3ER> В git удобнее хранить изображения в текстовом виде (ppm, xpm), чтобы легко было смотреть диффы.

Видишь ли, во всех VCS общего назначения удобнее хранить текст, чтобы легко смотреть диффы. А у тебя git головного мозга, лечись.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Хорошо, не гит, а абстрактная система контроля версий. Но соответствующий формат я всё равно хочу найти.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от EXL

И он грузиться должен быстро.

Предлагаешь его использовать не только для гита, но и для загрузки текстур? Сомневаюсь, что считывание очень большого файла будет быстрее считывания маленького файла, раскукоживаемого аппаратно. Да и хочется RGBA (32bit), а ppm/pbm не умеют такого. Есть какой-то PAM, но инфы о нём мало.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Тогда проще не париться и хранить сразу формат, который раскукоживается. Текстовое версионирование для PPM/PBM всё равно выглядит убого. Уж лучше хранить нормальные изображения, посмотреть различия между которыми можно с помощью какого-нибудь фильтра в атрибутах Git.

EXL ★★★★★
()

В git удобнее хранить изображения в текстовом виде (ppm, xpm), чтобы легко было смотреть диффы.

При использовании этих форматов ты накладываешь сильные ограничения на возможные изображения, в частности на использование альфа-канала. Лучше использовать смотрелку диффов с поддержкой картинок + человеческий формат (PNG, например)

annulen ★★★★★
()
Ответ на: комментарий от CYB3R

Какой язык?

На С++ есть такая либа http://msharov.github.io/iff/, причем любопытно, что автор писал ее в расчете на геймдев (а не для разбора wav/avi). В деле не пробовал. Использует вместо нормального STL авторский велосипед uSTL.

Гугл в принципе еще много чего выдает, но все либо мертвое, либо GPL, либо то и другое.

Вообще формат простой, навелоспидить свой парсер/упаковщик несложно (простой пример кода: http://www.johnloomis.org/cpe102/asgn/asgn1/riff.zip)

annulen ★★★★★
()
Ответ на: комментарий от annulen

Ресурсы можно в RIFF упаковать, например

Но зачем? Есть квейковский pak, есть wad.

tailgunner ★★★★★
()
Ответ на: комментарий от annulen

Лучше всего библиотеку на Си и под LGPL, BSD или Public Domain.

CYB3R ★★★★★
() автор топика

DDS сойдет, правда оно умеет только форматы d3d. Загрузчик пишется за пол часа. Есть еще KTX http://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/ но для него нету конверторов. В гите хранить TIFF. Оно умеет все нужные битности (8/16/32 int/uint/float), открывается любым редактором и может жаться deflate/lzw. Из консольных утилит есть NVidia Texture Tools жмет все распространенные форматы в DDS, умеет: raw rgba, s3tc, rgtc и недавно вроде появилось bptc, есть нормал мапы и мипмапы. Для домашних поделок nvtt хватит за глаза.

У меня витает идея написать на OpenCL конвертор tiff->ktx для OpenGL/GLES форматов, но пока некогда этим заниматься.

oh-la-la
()
Ответ на: комментарий от oh-la-la

Есть еще KTX

Мне нравится. Хороший, годный формат. Я правильно понимаю, что он довольно молодой и не сильно поддерживается? Нужно ли, чтобы оборудование его поддерживало?

У меня витает идея написать на OpenCL конвертор tiff->ktx для OpenGL/GLES форматов

Хорошая затея. Я бы пользовался.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Я правильно понимаю, что он довольно молодой и не сильно поддерживается?

Да, он не распространен.

Нужно ли, чтобы оборудование его поддерживало?

Нет. DDS и KTX это просто контейнеры. Оборудование должно поддерживать непосредственно алгоитм сжатия, который находится внутри файла. Но там не обязательно будут сжатые текстуры, там может быть и raw rgba. Как-то так.

oh-la-la
()
Ответ на: комментарий от oh-la-la

Нет. DDS и KTX это просто контейнеры.

А, ну да, это логично. Просто меня в заблуждение ввёл этот пост.
Итак, для чтения KTX нужен только libktx, так что остальное я могу допилить, как сам захочу.

CYB3R ★★★★★
() автор топика

В git удобнее хранить изображения в текстовом виде (ppm, xpm), чтобы легко было смотреть диффы

Забудь про это. Смотреть diff изображений в текстовом виде - бред само по себе, github (например) умеет графический diff, diff в любом случае скорее всего будет составлять почти всё изображение (изменил контрастность -> изменились все строки; изменил цвет фона - изменились все строки) и ценности представлять не будет, и, разумеется, текст - это наименее эффективный способ хранения текстур. Ну и на тебя будут смотреть как на идиота.

Учти что хранение на диске != хранение в памяти, а профит, насколько я знаю, получается именно благодаря последнему, поэтому в репозитории текстуры можно хранить в человеческом PNG, и пережимать в DXT либо при сборке твоего приложения, либо в runtime (с соответствующими плюсами и минусами, типа скорости загрузки в одном случае и возможностьи откатиться на простой RGBA если карточка не поддерживает DXT в другом).

На тему DXT смотри libsquish и nvidia-texture-tools.

slovazap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.