Используя texturetool для Сжатия Текстур

iOS SDK включает инструмент для сжатия текстур в PVR, текстурирует формат сжатия, точно названный texturetool. Если Вам установили XCode с iOS 7.0 SDK, то texturetool расположен в: /Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/texturetool.

texturetool предоставляет различные возможности сжатия, с компромиссами между качеством изображения и размером. Необходимо экспериментировать с каждой текстурой для определения, какая установка обеспечивает лучший компромисс.

Параметры texturetool

Параметры, которые могут быть переданы texturetool описаны в остальной части этого раздела.

user$ texturetool -h
 
Usage: texturetool [-hl]
       texturetool -c <reference_image> <input_image>
       texturetool [-ms] [-e <encoder>] [-p <preview_file>] -o <output> [-f <format>] <input_image>
 
first form:
    -h       Display this help menu.
    -l       List available encoders, individual encoder options, and file formats.
 
second form:
    -c       Compare <input_image> to <reference_image> and report differences.
 
third form:
    -m                Generate a complete mipmap chain from the input image.
    -s                Report numerical differences between <input_image> and the encoded image.
    -e <encoder>      Encode texture levels with <encoder>.
    -p <preview_file> Output a PNG preview of the encoded output to <preview_file>. Requires -e option
    -o <output>       Write processed image to <output>.
    -f <format>       Set file <format> for <output> image.

  Опции Кодирования перечисления c-1

user$ texturetool -l
Encoders:
 
PVRTC
 --channel-weighting-linear
 --channel-weighting-perceptual
 --bits-per-pixel-2
 --bits-per-pixel-4
 --alpha-is-independent
 --alpha-is-opacity
 --punchthrough-unused
 --punchthrough-allowed
 --punchthrough-forced
 
Formats:
 
Raw
PVR

texturetool значения по умолчанию к --bits-per-pixel-4, --channel-weighting-linear и -f Raw если не предоставляются никакие другие возможности.

--bits-per-pixel-2 и --bits-per-pixel-4 опции создают данные PVRTC, кодирующие исходные пиксели в 2 или 4 бита на пиксель. Эти опции представляют фиксированное 16:1 и 8:1 коэффициент сжатия по несжатым 32-разрядным данным изображения RGBA. Существует минимальный размер данных 32 байтов; компрессор никогда не производит файлы, меньшие, чем это, и по крайней мере что много байтов ожидаются при загрузке сжатых данных текстуры.

При сжатии, указывая --channel-weighting-linear ошибка сжатия спредов одинаково через все каналы. В отличие от этого, указание --channel-weighting-perceptual попытки сократить ошибку в зеленом канале по сравнению с линейной опцией. В целом сжатие PVRTC добивается большего успеха с фотографическими изображениями, чем со штриховой графикой.

-m опция автоматически генерирует, множественно отображают уровни для исходного изображения. Эти уровни предоставлены как дополнительные данные изображения в создаваемом архиве. Если Вы используете Необработанный формат изображения, то каждый уровень данных изображения добавляется один за другим к архиву. Если Вы используете формат архива PVR, то каждый множественно отображается, изображение предоставлено как отдельное изображение в архиве.

(-f) параметр управляет форматом своего выходного файла. Формат по умолчанию является Сырыми данными. Этот формат является сырыми данными сжатые данные текстуры, любой для единственного уровня текстуры (без -m опция), или поскольку каждый уровень текстуры конкатенировал вместе (с -m опция). Каждый уровень текстуры, сохраненный в файле, составляет по крайней мере 32 байта в размере и должен быть загружен на GPU полностью. Формат PVR соответствует формат, используемый PVRTexTool, найденным в PowerVR SDK Imagination Technologies. Для загрузки PVR-сжатой текстуры используйте GLKTextureLoader класс.

-s и -c опции распечатывают ошибочные метрики во время кодирования. -s опция выдерживает сравнение, ввод (распаковал) изображение к (закодированному) изображению вывода, и -c опция сравнивает любые два изображения. Результаты сравнения включают среднеквадратичную ошибку (rms), перцепционно взвешенный pRms, ошибка элемента текстуры худшего случая (max), и основанные на составлении композита версии каждой статистической величины (rmsC, pRmsC, и maxC). Основанные на составлении композита ошибки предполагают, что альфа-канал изображения используется для непрозрачности и что цвет в каждом элементе текстуры смешивается с целевым цветом худшего случая.

Ошибочные метрики, используемые с -s и -c опции и кодером при оптимизации сжатого изображения обрабатывают альфа-канал изображения как независимый канал по умолчанию (или при использовании --alpha-is-independent опция). --alpha-is-opacity опция изменяет ошибочную метрику на одну на основе стандартной работы смешивания, как реализовано путем вызова glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ).

Сжатие Текстуры PVR поддерживает специальный punchthrough режим, который может быть включен на на 4x4 блочное основание. Этот режим ограничивает цветные градации, которые могут использоваться в блоке, но представляют опцию принуждения альфа-значения пикселя к 0. Это может победить PVRTC гладкая цветная интерполяция, представив блочные граничные артефакты, таким образом, это должно использоваться с осторожностью. Три punchthrough опции:

Перечисление c-2  , Кодирующее изображения в формат сжатия PVRTC

Encode Image.png into PVRTC using linear weights and 4 bpp, and saving as ImageL4.pvrtc
user$ texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-4 -o ImageL4.pvrtc Image.png

Encode Image.png into PVRTC using perceptual weights and 4 bpp, and saving as ImageP4.pvrtc
user$ texturetool -e PVRTC --channel-weighting-perceptual --bits-per-pixel-4 -o ImageP4.pvrtc Image.png

Encode Image.png into PVRTC using linear weights and 2 bpp, and saving as ImageL2.pvrtc
user$ texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-2 -o ImageL2.pvrtc Image.png

Encode Image.png into PVRTC using perceptual weights and 2 bpp, and saving as ImageP2.pvrtc
user$ texturetool -e PVRTC --channel-weighting-perceptual --bits-per-pixel-2 -o ImageP2.pvrtc Image.png

Перечисление c-3  , Кодирующее изображения в формат сжатия PVRTC при создании предварительного просмотра

Encode Image.png into PVRTC using linear weights and 4 bpp, and saving the output as ImageL4.pvrtc and a PNG preview as ImageL4.png
user$ texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-4 -o ImageL4.pvrtc -p ImageL4.png Image.png

Encode Image.png into PVRTC using perceptual weights and 4 bpp, and saving the output as ImageP4.pvrtc and a PNG preview as ImageP4.png
user$ texturetool -e PVRTC --channel-weighting-perceptual --bits-per-pixel-4 -o ImageP4.pvrtc -p ImageP4.png Image.png

Encode Image.png into PVRTC using linear weights and 2 bpp, and saving the output as ImageL2.pvrtc and a PNG preview as ImageL2.png
user$ texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-2 -o ImageL2.pvrtc -p ImageL2.png Image.png

Encode Image.png into PVRTC using perceptual weights and 2 bpp, and saving the output as ImageP2.pvrtc and a PNG preview as ImageP2.png
user$ texturetool -e PVRTC --channel-weighting-perceptual --bits-per-pixel-2 -o ImageP2.pvrtc -p ImageP2.png Image.png

Для загрузки PVR-сжатой текстуры используйте GLKTextureLoader класс.

Для примера работы с PVR-сжатыми данными непосредственно, посмотрите выборку PVRTextureLoader.