Используя 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 опции:
--punchthrough-unused
— Никакой punchthrough (опция по умолчанию).--punchthrough-allowed
— Кодер может включить punchthrough на блоке блочным основанием при оптимизации для качества изображения. Эта опция обычно улучшает объективные ошибочные метрики (на пиксель), используемые алгоритмом сжатия, но может представить субъективные артефакты.--punchthrough-forced
— Punchthrough включают на каждом блоке, ограничивая цветную градацию, но позволяя любому пикселю в блоке иметь альфу 0. Когда результаты могут быть сравнены визуально с другими опциями, эта возможность предоставляется преимущественно для полноты, но может быть полезной.
Перечисление 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.