Создание текстур в формате сжатия PVRTC
Q: Как я создаю текстуры в формате сжатия PVRTC?
A: Как я создаю текстуры в формате сжатия PVRTC?
SDK iPhone включает инструмент, позволяющий Вам создавать текстуры в формате сжатия PVRTC, точно названном texturetool. Если Вам установили XCode с iPhone OS 2.2 SDK в расположении по умолчанию (/Developer/Platforms/), тогда texturetool расположен в: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/texturetool.
texturetool позволяет Вам создавать четыре варианта данных PVRTC, главная разница, являющаяся компромиссами между качеством и размером. Необходимо будет экспериментировать с этими вариантами для определения, какая установка является лучшим компромиссом для каждого отдельного изображения текстуры.
Параметры, которые могут быть переданы texturetool и их функция представлена в остальной части этого документа.
Опции кодирования перечисления 1.
user$ texturetool -l Encoders: PVRTC --channel-weighting-linear --channel-weighting-perceptual --bits-per-pixel-2 --bits-per-pixel-4 Formats: Raw PVR |
texturetool примет значение по умолчанию к --bits-per-pixel-4, --channel-weighting-linear, и -f Сырые данные, если не предоставляются никакие другие возможности.
--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, то каждый множественно отображается, изображение будет предоставлено как отдельное изображение в архиве.
С iPhone OS 2.2, texturetool теперь дополнительные поддержки формат (-f) параметр, позволяющий Вам управлять форматом его выходного файла. В то время как этот параметр не доступен с iPhone OS 2.1 или ранее, произведенные файлы данных совместимы с теми версиями если iPhone OS.
Формат по умолчанию является Сырыми данными, которые эквивалентны формату это texturetool произведенный под iPhone SDK 2.0 и 2.1. Этот формат является сырыми данными сжатые данные текстуры, любой для единственного уровня текстуры (без -m опция), или поскольку каждый уровень текстуры конкатенировал вместе (с -m опция). Каждый уровень текстуры, сохраненный в файле, будет составлять по крайней мере 32 байта в размере и должен быть загружен на GPU полностью.
Формат PVR является тем же форматом, который PVRTexTool от Imagination Technologies PowerVR SDK производит и требует, чтобы парсинг получил фактические данные текстуры. Посмотрите выборку PVRTextureLoader для примера работы с данными текстуры в этом формате.
Высота и Ширина должны быть питанием 2.
Должно быть квадратным (высота == ширина).
Исходные изображения должны быть в формате, который Изображение принимает IO. Это включает PNG, JPG, TIFF и других.
Перечисление 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 |
Перечисление 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 |
Демонстрационные изображения, произведенные этими настройками, показаны ниже.
4 бит/пкс, Линейные | Исходный | 4 бит/пкс, Перцепционные |
|---|---|---|
|
|
|
2 бит/пкс, Линейные | Исходный | 2 бит/пкс, Перцепционные |
|---|---|---|
|
|
|
Перечисление 4 демонстрирует, как можно загрузить Необработанные данные PVRTC на GPU через texImage2DPVRTC демонстрационная функция. Обычно на iPhone OS Вы использовали бы NSBundle и методы NSData для загрузки данных из файла. Для полного примера, демонстрирующего, как загрузить данные текстуры от файла отформатированных данных PVR, посмотрите выборку PVRTextureLoader.
Пример перечисления 4 загрузки данных PVRTC к графическому процессору.
void texImage2DPVRTC(GLint level, GLsizei bpp, GLboolean hasAlpha, GLsizei width, GLsizei height, void *pvrtcData)
{
GLenum format;
GLsizei size = width * height * bpp / 8;
if(hasAlpha) {
format = (bpp == 4) ? GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG : GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;
} else {
format = (bpp == 4) ? GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG : GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG;
}
if(size < 32) {
size = 32;
}
glCompressedTexImage2D(GL_TEXTURE_2D, level, format, width, height, 0, size, data);
} |
Поскольку пример кода видит выборку PVRTextureLoader.
История версии документа
| Дата | Примечания |
|---|---|
| 14.07.2009 | Пересмотренный для указания на OpenGL на Руководство по программированию ES. См. та документация для дальнейших обновлений. |
| 27.01.2009 | Разъясненная неквадратная поддержка текстуры (это не поддерживается). Соединенный с выборкой PVRTextureLoader. |
| 24.11.2008 | Изменения для iPhone SDK 2.2, включающие новое расположение для texturetool и новые опции для его использования. |
| 13.10.2008 | Новый документ, описывающий, как создать текстуры в формате сжатия PVRTC. |