纹理压缩

Using texturetool to Compress Textures - 使用纹理工具压缩纹理

iOS SDK包括一个将纹理压缩为PVRTC或ASTC格式的工具,恰当地命名为texturetool。 如果您安装了iOS 7.0 SDK或更高版本的Xcode,那么texturetool位于:/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/texturetool。

纹理工具提供了各种压缩选项,在图像质量和尺寸之间进行权衡。 您需要对每个纹理进行实验,以确定哪个设置提供最佳折中。

注意:纹理工具可用的编码器,格式和选项可能会更改。 本文档介绍了从iOS 7开始可用的选项。

texturetool Parameters - texturetool参数

可以传递给纹理工具的参数在本节的其余部分进行了描述。

user$ texturetool -h Usage: texturetool [-hl]      texturetool -ctexturetool [-ms] [-e] [-p] -o[-f]first form:    -h      Display this help menu.    -l      List available encoders, individual encoder options, and file formats. second form:    -c      Comparetoand report differences. third form:    -m                Generate a complete mipmap chain from the input image.    -s                Report numerical differences betweenand the encoded image.    -eEncode texture levels with.    -pOutput a PNG preview of the encoded output to. Requires -e option    -oWrite processed image to.    -fSet fileforimage.

注意:-p选项表示需要-e选项。 它还需要-o选项。

// Listing C-1Encoding optionsuser$ texturetool -lEncoders: 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-forcedASTC --block-width-4--block-width-5--block-width-6--block-width-8--block-width-10--block-width-12--compression-mode-veryfast --compression-mode-fast --compression-mode-medium --compression-mode-thorough --compression-mode-exhaustive --srgb-yes --srgb-no --block-height-4--block-height-5--block-height-6--block-height-8--block-height-10--block-height-12Formats: RawPVRKTX

texturetool如果不提供其他选项的话,默认为--bits-per-pixel-4, --channel-weighting-linear和-f Raw。

--bits-per-pixel-2和--bits-per-pixel-4选项创建PVRTC数据,将源像素编码为每像素2或4位。 与未压缩的32位RGBA图像数据相比,这些选项代表固定的16:1和8:1压缩率。 最小数据大小为32字节; 压缩器从不产生比此更小的文件,并且至少在上传压缩纹理数据时预计会有许多字节。

当压缩时,指定--channel-weighting-linear所有通道的平均压缩误差。 相反,与线性选项相比,指定--channel-weighting-perceptual尝试减少绿色通道中的错误。 一般来说,PVRTC压缩比摄影图像比线条艺术更好。

-m选项会自动为源图像生成mipmap级别。 这些级别作为创建的存档中的附加映像数据提供。 如果您使用原始图像格式,则每个级别的图像数据将一个接一个地附加到存档。 如果使用PVR归档格式,则每个mipmap图像都将作为存档中的单独图像提供。

(-f)参数控制其输出文件的格式。 默认格式为Raw。 此格式是原始压缩纹理数据,无论是单个纹理级别(不使用-m选项)还是连接在一起的每个纹理级别(使用-m选项)。 存储在文件中的每个纹理级别的大小至少为32字节,并且必须将其全部上传到GPU。 PVR格式与Imagination Technologies的PowerVR SDK中找到的PVRTexTool所使用的格式相匹配。 要加载PVR压缩纹理,请使用GLKTextureLoader类。

-s和-c选项在编码期间打印错误指标。 -s选项将输入(未压缩)图像与输出(编码)图像进行比较,-c选项可以比较任何两个图像。 比较结果包括均方根误差(rms),感知加权pRms,最坏情况纹理错误(max)和每个统计量(rmsC,pRmsC和maxC)的基于合成的版本。 基于合成的错误假定图像的Alpha通道用于不透明度,并且每个纹素的颜色与最坏情况的目标颜色混合。

在优化压缩图像时,与-s和-c选项以及编码器一起使用的错误指标默认情况下将图像的Alpha通道视为独立通道(或使用--alpha-is-independent选项时)。--alpha-is-opacity选项根据标准混合操作将错误度量值更改为一个,如通过调用glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)来实现的。

PVR纹理压缩支持特殊的穿透模式,可以在每个4x4块的基础上启用。 该模式限制了块内可以使用的颜色渐变,但是引入了将像素的Alpha值强制为0的选项。它可以打败PVRTC平滑色彩插值,引入块边界伪像,因此应谨慎使用。 三个突破性选项是:

--punchthrough-unused。没有穿透(默认选项)。

--punchthrough-allowed。当优化图像质量时,编码器可以逐块地实现穿透。 该选项通常改进了压缩算法使用的目标(每像素)误差度量,但可能会引入主观的伪像。

--punchthrough-forced。 每个块都启用Punchthrough,限制颜色渐变,但是可以让块中的任何像素的alpha为0。此选项主要用于完整性,但是当结果在视觉上与其他选项进行比较时还是有用的。

重要信息:编码器的源图像必须满足以下要求:

高度和宽度必须至少为8。

高度和宽度必须是2的幂。

必须是正方形(height == width)。

源图像必须采用Image IO在OS X中接受的格式。为获得最佳效果,原始纹理应以未压缩的数据格式开始。

重要提示:如果您使用PVRTexTool来压缩纹理,那么您必须创建张方形的并且是2的次幂长度的纹理。 如果您的应用程序尝试在iOS中加载非平方或非2的次幂长度的纹理,则会返回错误。

// Listing C-2  Encoding images into the PVRTC compression formatEncode Image.png into PVRTCusinglinear weightsand4bpp,andsaving as ImageL4.pvrtcuser$ texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-4-o ImageL4.pvrtc Image.pngEncode Image.png into PVRTCusingperceptual weightsand4bpp,andsaving as ImageP4.pvrtcuser$ texturetool -e PVRTC --channel-weighting-perceptual --bits-per-pixel-4-o ImageP4.pvrtc Image.pngEncode Image.png into PVRTCusinglinear weightsand2bpp,andsaving as ImageL2.pvrtcuser$ texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-2-o ImageL2.pvrtc Image.pngEncode Image.png into PVRTCusingperceptual weightsand2bpp,andsaving as ImageP2.pvrtcuser$ texturetool -e PVRTC --channel-weighting-perceptual --bits-per-pixel-2-o ImageP2.pvrtc Image.png

// Listing C-3  Encoding images into the PVRTC compression format while creating a previewEncode Image.png into PVRTC using linear weightsand4bpp,andsaving the outputasImageL4.pvrtcanda PNG previewasImageL4.pnguser$ texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-4-o ImageL4.pvrtc -p ImageL4.png Image.pngEncode Image.png into PVRTC using perceptual weightsand4bpp,andsaving the outputasImageP4.pvrtcanda PNG previewasImageP4.pnguser$ texturetool -e PVRTC --channel-weighting-perceptual --bits-per-pixel-4-o ImageP4.pvrtc -p ImageP4.png Image.pngEncode Image.png into PVRTC using linear weightsand2bpp,andsaving the outputasImageL2.pvrtcanda PNG previewasImageL2.pnguser$ texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-2-o ImageL2.pvrtc -p ImageL2.png Image.pngEncode Image.png into PVRTC using perceptual weightsand2bpp,andsaving the outputasImageP2.pvrtcanda PNG previewasImageP2.pnguser$ texturetool -e PVRTC --channel-weighting-perceptual --bits-per-pixel-2-o ImageP2.pvrtc -p ImageP2.png Image.png

注意:无需创建预览也不能指定-o参数和有效的输出文件。 预览图像始终为PNG格式。

要加载PVR压缩纹理,请使用GLKTextureLoader类。

有关直接使用PVR压缩数据的示例,请参阅PVRTextureLoader示例。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容