WebGL 紋理壓縮 crunch

1、WebGL支持將壓縮過的紋理傳入到顯卡,顯卡自帶解壓功能,這就減少了傳輸數(shù)據(jù)量,加快紋理傳輸?shù)斤@卡;

2、該功能依賴于硬件支持,WebGL本身并不限制要支持哪種格式,截止到落筆之時,這些支持都是通過擴展(extension)來實現(xiàn),如WEBGL_compressed_texture_s3tc,在使用壓縮紋理之前,要先查詢硬件支持的擴展都有哪些,這里有個網(wǎng)站可以檢測;

3、WegGL不提供壓縮和解壓方法,用戶要提前把紋理壓縮好,然后通過gl接口傳入顯卡;

4、類似于JPEG、PNG這種壓縮格式,和壓縮紋理的壓縮并不是一回事,前者在傳入顯卡之前需要完全解壓,這一步驟要在cpu里進行,因此會消耗時間,而后者是專門針對硬件做的壓縮,直接傳入硬件-顯卡;

5、手機上和PC上常見的壓縮格式不同,PC上用的最廣的格式為DXT系列,iOS上支持PVRTC;DXT有很多變種,如DXT1/DXT3/DXT5,詳見說明;

6、DXT格式的紋理常以.dds文件存儲,可以借助一些工具,比如DDS Converter將JPEG、PNG等格式處理成.dds文件,文件包含了壓縮過的紋理數(shù)據(jù)和一些圖片信息,瀏覽器原生不支持解析,要自己解析,Three.js提供了一個DDSLoader實現(xiàn)了解析加載功能;

7、使用壓縮紋理的時候要用gl.compressedTexImage2D方法了;

8、使用DXT格式進行壓縮后的數(shù)據(jù)量一般是比JPEG格式的要大一點(這里的壓縮并不是一味的減少體積,更多的是為了顯卡能更好的取樣),因此就有了crunch,這個庫是在DXT基礎之上再進行壓縮,以達到減小體積的目的,最終結(jié)果可能比JPEG格式還要小,crunch可以直接將JPEG、PNG等格式圖片壓縮處理成為.CRN文件,文件包含了壓縮過的DXT格式的數(shù)據(jù),要想在程序里使用.CRN文件,第一步需要先解壓成為DXT數(shù)據(jù),然后傳到顯卡,解壓過程crnlib(和crunch一回事)提供的代碼實現(xiàn),可以參照github上的說明,把c++代碼轉(zhuǎn)換為wasm,就可以在瀏覽器端調(diào)用;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容