Monthly Archives: July 2019

Оптимизация текстур

Когда текстуры модели полностью готовы, самое время заняться их оптимизацией. Дело это важное и серьёзное, подходить к нему надо со всей ответственностью. Не хранить же текстуры как попало. Надо хорошо оптимизировать текстуры, чтобы максимально их ужать без потерь. На что следует обратить внимание? Continue reading

PNG vs TIFF vs TGA. Что лучше? Особенности и отличия.

Преамбула

PNG, TGA, TIFF, в чём разница, что лучше? Все эти растровые графические форматы поддерживают различную глубину цвета (биты на пиксель), альфа-каналы, разные цветовые модели, и могут использовать сжатие без потерь. Но, что выбрать? В каком формате хранить, например, текстуры?

Фабула

PNG

PNG (portable network graphics) рассмотрим первым т. к. он наиболее популярен.

В отличие от TGA и TIF, PNG не может хранить данные в несжатом виде, PNG всегда использует сжатие без потерь по алгоритму Deflate (ZIP). Сжатие ZIP очень мощное, лучшее сжатие без потерь – сжимает более чем в 7.8 раз. E.g., несжатый файл имеет размер 20.2 мб, сжатый без потерь с помощью Deflate (ZIP) – 2.5 мб.

Поддержка альфа-канала в Photoshop в PNG – ужас, она удалит информацию в областях, где альфа прозрачна на 100%, а это не то, что вам нужно для упаковки текстур. Однако, Photoshop не обрабатывает альфа-каналы для TGA, как это происходит с PNG.

Поддержка 16 бит (биты на пиксель) в PNG различна и не универсальна.

Т.о. можно использовать PNG для всего, кроме 16-битных текстур и текстур с альфа-каналом.

TGA

TGA (Truevision TGA) может хранить данные в несжатом виде, а может использовать сжатие без потерь по алгоритму RLE. Сжатие RLE слабое – сжимает в ~1.76 раз. E.g., несжатый файл имеет размер 20.2 мб, сжатый без потерь с помощью RLE – 11.5 мб. Использовать TGA со сжатием RLE нет смысла т. к. есть куда лучшее сжатие – ZIP, но TGA его не поддерживает. Вывод: в TGA можно хранить разве, что только данные в несжатом виде.

TIFF

TIFF/TIF (Tagged Image File Format) рассматриваем последним т. к. в нём больше всего функционала.

TIFF может хранить данные в несжатом виде, а может использовать следующие сжатия с потерями и без:

  • LZW – мощное сжатие без потерь, сжимает в ~6.14 раз. E.g., несжатый TIF файл 20.3 мб, TIF сжатый с LZW – 3.3 мб.
  • ZIP – очень мощное сжатие без потерь, сжимает в ~8.86 раз. E.g., несжатый TIF файл 20.3 мб, TIF сжатый с ZIP – 2.2 мб. ZIP сжатие не поддерживается в старых TIF просмоторщиках.
  • JPEG – очень мощное сжатие с потерями, сжимает в зависимости от выбора, на качестве 10/12 сжимает в ~25.87 раз. E.g., несжатый TIF файл 20.3 мб, TIF сжатый с JPEG на качестве 10/12 – 0.7 мб. JPEG сжатие не поддерживается в старых TIF просмоторщиках.

Интересно то, что TIF сжатый с алгоритмом ZIP в Photoshop имеет заметно меньший размер, чем PNG сжатый с этим же алгоритмом ZIP в Photoshop, при одинаковых остальных параметрах (разрешение, пиксел на дюйм, бит на плоскость, кол-во плоскостей, бит на пиксел, исходная точка, цветовая модель). TIF сжатый с ZIP сжимает в ~8.86 раз, а PNG сжатый с тем же ZIP сжимает в ~7.8 раз. Можно подумать, это связано с тем, что помимо данных самого изображения у PNG хранится ещё много лишнего, по сравнению с TIF, но это не так. Просто у алгоритма сжатия без потерь ZIP можно выставлять степень сжатия, и для TIF с ZIP Photoshop почему-то выставляет большую степень сжатия в сравнении с PNG с ZIP. Т.о., если сохранять через Photoshop, который не даёт вручную выставить степень сжатия для алгоритма ZIP, вместо PNG лучше использовать TIF сжатый с алгоритмом ZIP. При сохранении PNG файла Adobe Photoshop не позволяет выставить вручную степень сжатия метода ZIP, но зато это позволяют сделать программы IrfanView и XnView. Compression level ZIP выставляется от 0 (none) до 9 (best). Default level 6.

TIFF полностью перекрывает PNG и TGA т. к. в нём есть всё: отсутствие сжатия, сжатие без потерь методом ZIP, и много чего другого. TIFF перекрывает даже формат JPEG, т. к. в TIFF также есть сжатие с потерями методом JPEG. Такой вот универсальный и мощный формат TIFF.

Резюме

Всё зависит от требуемого типа сжатия, с потерями или без потерь. После этого выбираем соответствующий алгоритм сжатия.

  • Если нужны данные в несжатом виде, то выбираем TGA без сжатия или TIFF без сжатия.
  • Если нужно сжатие без потерь, то однозначно выбираем формат поддерживающий лучший алгоритм сжатия без потерь – ZIP. ZIP – самое долгое и наиболее мощное сжатие без потерь. Можно использовать как PNG, который всегда использует ZIP сжатие, так и TIF сжатый с алгоритмом ZIP, что может быть даже лучше.
  • Если нужно сжатие с потерями, то выбираем лучший алгоритм сжатия с потерями – JPEG. JPEG – наиболее мощное сжатие с потерями. Можно использовать как формат TIF сжатый с алгоритмом JPEG, так и сам формат JPEG.

Растровые графические форматы во многом схожи с медиа контейнерами – важно то, что внутри, какие алгоритмы сжатия. Честно говоря, я лично не знаю зачем кому-то вообще может понадобиться хранить данные в несжатом виде, поэтому у меня выбор стоит между форматами PNG (всегда ZIP сжатие), и TIF сжатый с алгоритмом ZIP, либо алгоритм JPEG, когда допустимо сжатие с потерями.