頂點資料壓縮

2021-09-25 07:31:12 字數 1094 閱讀 6851

看過敏敏的

今年2、3月份曾經整過這玩意,做到用tangent.w來存handedness,解決了uv mirror的問題

沒想到頂點資料壓縮還有這麼深的學問,於是乎按照資料對max外掛程式進行了修改,效果超出想象

目前做到使用unsigned char x 4來存normal和tangent,short x 2來存texcoord,我們可以大致算一下

之前是normal = float x 3,tangent = float x 4,texcoord = float x 2(還要看一共有幾層uv) ,一共是12 + 16 + 8 = 36

壓縮之後變成normal = unsigned char x 4,tangent = unsigned char x 4,texcoord = short x 2,一共是4 + 4 + 4 = 12

每個頂點從36位元組減少到12位元組,少了一半多,通過觀察乙個20000多面的模型,mesh的大小從1388kb減少到552kb,壓縮後是原大小的0.39倍

還沒有像文中介紹的那樣將tangent frame壓縮到僅用8個位元組的程度

其優點是資料量大大減少,這樣vertex cache的命中率會提高,據觀察fps有約5%的提高

其缺點是vs中的計算量稍微增加了一些,另外壓縮導致精度上會有損失 

float f = 

0.1234567f;

unsigned 

char uc = (unsigned 

char)((f * 

0.5f + 

0.5f) * 

255);

short s = (

short)((f * 

0.5f + 

0.5f) * 

32767.0f);

float unpackuc = uc * 

2.0f / 

255.0f - 

1.0f;

float unpacks = s * 

2.0f / 

32767.0f - 

1.0f;

unpackuc = 

0.12156863

unpacks = 

0.12344737

法線對映基本原理和相關的頂點資料壓縮

法線對映我也是剛學會的,呵呵 輸入到固定渲染管線的頂點結構雖然可以定製,但也不是完全自由的,比如頂點位置必須是float3,紋理座標float2,法線float3等等。如果使用可程式設計管線,由於vs的輸入可以自由解析,所以相對來說就增加了很多靈活性。在使用切線空間的法線對映 normalmap 時...

ASIHTTPRequest 資料壓縮

從0.9版本開始,asihttprequest會提示伺服器它可以接收gzip壓縮過的資料。apache 2.x以上版本已經配備了mod deflate擴充套件,這使得apache可以透明地壓縮特定種類的資料。要開啟這個特性,你需要在apache的配置檔案中啟用mod deflate。並將mod de...

ASIHTTPRequest 資料壓縮

從0.9版本開始,asihttprequest會提示伺服器它可以接收gzip壓縮過的資料。apache 2.x以上版本已經配備了mod deflate擴充套件,這使得apache可以透明地壓縮特定種類的資料。要開啟這個特性,你需要在apache的配置檔案中啟用mod deflate。並將mod de...