版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2017.10.05 |
前言
OpenGL ES是一個強(qiáng)大的圖形庫圾另,是跨平臺的圖形API蘸吓,屬于OpenGL的一個簡化版本车海。iOS系統(tǒng)可以利用OpenGL ES將圖像數(shù)據(jù)直接送入到GPU進(jìn)行渲染枢舶,這樣避免了從CPU進(jìn)行計算再送到顯卡渲染帶來的性能的高消耗赶么,能帶來來更好的視頻效果和用戶體驗肩豁。接下來幾篇就介紹下iOS 系統(tǒng)的 OpenGL ES框架。感興趣的可以看上面幾篇。
1. OpenGL ES 框架詳細(xì)解析(一) —— 基本概覽
2. OpenGL ES 框架詳細(xì)解析(二) —— 關(guān)于OpenGL ES
3. OpenGL ES 框架詳細(xì)解析(三) —— 構(gòu)建用于iOS的OpenGL ES應(yīng)用程序的清單
4. OpenGL ES 框架詳細(xì)解析(四) —— 配置OpenGL ES的上下文
5. OpenGL ES 框架詳細(xì)解析(五) —— 使用OpenGL ES和GLKit進(jìn)行繪制
6. OpenGL ES 框架詳細(xì)解析(六) —— 繪制到其他渲染目的地
7. OpenGL ES 框架詳細(xì)解析(七) —— 多任務(wù)清钥,高分辨率和其他iOS功能
8. OpenGL ES 框架詳細(xì)解析(八) —— OpenGL ES 設(shè)計指南
9. OpenGL ES 框架詳細(xì)解析(九) —— 調(diào)整您的OpenGL ES應(yīng)用程序
10. OpenGL ES 框架詳細(xì)解析(十) —— 使用頂點(diǎn)數(shù)據(jù)的最佳做法
11. OpenGL ES 框架詳細(xì)解析(十一) —— 并發(fā)和OpenGL ES
12. OpenGL ES 框架詳細(xì)解析(十二) —— 采用OpenGL ES 3.0
13. OpenGL ES 框架詳細(xì)解析(十三) —— Xcode OpenGL ES工具概述
Using texturetool to Compress Textures - 使用紋理工具壓縮紋理
iOS SDK包括一個將紋理壓縮為PVRTC或ASTC格式的工具琼锋,恰當(dāng)?shù)孛麨?code>texturetool。 如果您安裝了iOS 7.0 SDK或更高版本的Xcode祟昭,那么texturetool位于:/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/texturetool
缕坎。
紋理工具提供了各種壓縮選項,在圖像質(zhì)量和尺寸之間進(jìn)行權(quán)衡从橘。 您需要對每個紋理進(jìn)行實驗念赶,以確定哪個設(shè)置提供最佳折中。
注意:紋理工具可用的編碼器恰力,格式和選項可能會更改叉谜。 本文檔介紹了從iOS 7開始可用的選項。
texturetool Parameters - texturetool參數(shù)
可以傳遞給紋理工具的參數(shù)在本節(jié)的其余部分進(jìn)行了描述踩萎。
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.
注意:-p
選項表示需要-e
選項停局。 它還需要-o
選項。
// Listing C-1 Encoding options
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
ASTC
--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-12
Formats:
Raw
PVR
KTX
texturetool
如果不提供其他選項的話香府,默認(rèn)為--bits-per-pixel-4, --channel-weighting-linear
和-f Raw
董栽。
--bits-per-pixel-2
和 --bits-per-pixel-4
選項創(chuàng)建PVRTC
數(shù)據(jù),將源像素編碼為每像素2或4位企孩。 與未壓縮的32位RGBA圖像數(shù)據(jù)相比锭碳,這些選項代表固定的16:1和8:1壓縮率。 最小數(shù)據(jù)大小為32字節(jié); 壓縮器從不產(chǎn)生比此更小的文件勿璃,并且至少在上傳壓縮紋理數(shù)據(jù)時預(yù)計會有許多字節(jié)擒抛。
當(dāng)壓縮時,指定 --channel-weighting-linear
所有通道的平均壓縮誤差补疑。 相反歧沪,與線性選項相比,指定--channel-weighting-perceptual
嘗試減少綠色通道中的錯誤莲组。 一般來說诊胞,PVRTC
壓縮比攝影圖像比線條藝術(shù)更好。
-m
選項會自動為源圖像生成mipmap
級別锹杈。 這些級別作為創(chuàng)建的存檔中的附加映像數(shù)據(jù)提供撵孤。 如果您使用原始圖像格式,則每個級別的圖像數(shù)據(jù)將一個接一個地附加到存檔竭望。 如果使用PVR
歸檔格式早直,則每個mipmap圖像都將作為存檔中的單獨(dú)圖像提供。
(-f)
參數(shù)控制其輸出文件的格式市框。 默認(rèn)格式為Raw
霞扬。 此格式是原始壓縮紋理數(shù)據(jù),無論是單個紋理級別(不使用-m
選項)還是連接在一起的每個紋理級別(使用-m選項)。 存儲在文件中的每個紋理級別的大小至少為32字節(jié)喻圃,并且必須將其全部上傳到GPU萤彩。 PVR格式與Imagination Technologies
的PowerVR SDK
中找到的PVRTexTool
所使用的格式相匹配。 要加載PVR壓縮紋理斧拍,請使用 GLKTextureLoader類雀扶。
-s
和-c
選項在編碼期間打印錯誤指標(biāo)。 -s選項將輸入(未壓縮)圖像與輸出(編碼)圖像進(jìn)行比較肆汹,-c選項可以比較任何兩個圖像愚墓。 比較結(jié)果包括均方根誤差(rms)
,感知加權(quán)pRms
昂勉,最壞情況紋理錯誤(max)
和每個統(tǒng)計量(rmsC浪册,pRmsC和maxC)
的基于合成的版本。 基于合成的錯誤假定圖像的Alpha
通道用于不透明度岗照,并且每個紋素的顏色與最壞情況的目標(biāo)顏色混合村象。
在優(yōu)化壓縮圖像時,與-s
和-c
選項以及編碼器一起使用的錯誤指標(biāo)默認(rèn)情況下將圖像的Alpha通道視為獨(dú)立通道(或使用--alpha-is-independent
選項時)攒至。--alpha-is-opacity
選項根據(jù)標(biāo)準(zhǔn)混合操作將錯誤度量值更改為一個厚者,如通過調(diào)用glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)
來實現(xiàn)的迫吐。
PVR
紋理壓縮支持特殊的穿透模式库菲,可以在每個4x4塊的基礎(chǔ)上啟用。 該模式限制了塊內(nèi)可以使用的顏色漸變志膀,但是引入了將像素的Alpha值強(qiáng)制為0的選項蝙昙。它可以打敗PVRTC
平滑色彩插值,引入塊邊界偽像梧却,因此應(yīng)謹(jǐn)慎使用。 三個突破性選項是:
-
--punchthrough-unused
败去。沒有穿透(默認(rèn)選項)放航。 -
--punchthrough-allowed
。當(dāng)優(yōu)化圖像質(zhì)量時圆裕,編碼器可以逐塊地實現(xiàn)穿透广鳍。 該選項通常改進(jìn)了壓縮算法使用的目標(biāo)(每像素)誤差度量,但可能會引入主觀的偽像吓妆。 -
--punchthrough-forced
赊时。 每個塊都啟用Punchthrough
,限制顏色漸變行拢,但是可以讓塊中的任何像素的alpha為0祖秒。此選項主要用于完整性,但是當(dāng)結(jié)果在視覺上與其他選項進(jìn)行比較時還是有用的。
重要信息:編碼器的源圖像必須滿足以下要求:
- 高度和寬度必須至少為8竭缝。
- 高度和寬度必須是2的冪房维。
- 必須是正方形
(height == width)
。 - 源圖像必須采用Image IO在OS X中接受的格式抬纸。為獲得最佳效果咙俩,原始紋理應(yīng)以未壓縮的數(shù)據(jù)格式開始。
重要提示:如果您使用PVRTexTool
來壓縮紋理湿故,那么您必須創(chuàng)建張方形的并且是2的次冪長度的紋理阿趁。 如果您的應(yīng)用程序嘗試在iOS中加載非平方或非2的次冪長度的紋理,則會返回錯誤坛猪。
// Listing C-2 Encoding images into the PVRTC compression format
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
// Listing C-3 Encoding images into the PVRTC compression format while creating a preview
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
注意:無需創(chuàng)建預(yù)覽也不能指定-o
參數(shù)和有效的輸出文件脖阵。 預(yù)覽圖像始終為PNG
格式。
要加載PVR壓縮紋理砚哆,請使用GLKTextureLoader類独撇。
有關(guān)直接使用PVR壓縮數(shù)據(jù)的示例,請參閱PVRTextureLoader 示例躁锁。
后記
未完纷铣,待續(xù)~~~