簡單的說,就是貼圖影射到模型表面的依據。
UV是一個坐標系統,U和V分別代表圖片在Screen的水平和垂直方向上的坐標,這些坐標通常位於(0,0)和(1,1)之間。
- U: 水平方向的第U個像素/圖片寬度
- V: 垂直方向的第V個像素/圖片高度
最常見的UV用法是UV貼圖
多邊形除了具有三維的空間坐標外還有一個二維的UV坐標( (它和空間模型的X, Y, Z軸是類似的),以便把多邊形的頂點和圖片上的像素對應起來。這個UV紋理貼圖定義了圖片上每個點的位置的信息(即可以拿到任意一個像素的信息),這些點與3D模型是相互聯系的,以決定表面紋理貼圖的位置.。也就是將圖像上每一個點精確對應到模型物體的表面,在點與點之間的間隙位置由軟件進行圖像光滑插值處理。
紋理映射
步驟:
-
- 投影映射:將3D空間坐標轉換成2D uv坐標
- Projector:比如地球儀,將矩形地圖紋理均勻貼到球表面的投影函數成為sphere形式;還有cubic,plane etc.
- UV Mapping:用於將 3 維模型中的每個頂點與 2 維紋理坐標一一對應。通常是將 uv 坐標保存在頂點信息中,在三角形內使用時,通過插值的方式得到每個片元具體的 uv 坐標,再從紋理中采樣獲得對應的值
- 變換函數:將 uv 坐標經過處理變換后,根據實際的紋理尺寸,轉化為紋理空間坐標
- 坐標范圍的處理:此時得到的有可能是 [0.25,0.3] 這種在 [0,1] 范圍內的值,但也有可能超出了 [0,1] 范圍,那么需要對范圍外的值進行處理。可以選擇Repeat, Mirror, Clamp etc.
- 坐標的自由轉換:比如旋轉平移縮放,uv就像一個窗口,如果你需要紋理往右移,則你需要把窗口向左移,用u – 0.5 而不是 u + 0.5
- 轉到紋理空間:用uv坐標再分別乘以紋理實際的寬高。比如 uv 坐標為 [0.25,0.3],紋理的寬高為 [256,256],那么相乘可得到 [64,76.8]。
- 紋理采樣:依據紋理空間坐標,對紋理進行采樣,要處理放大和縮小兩個情況。
- 放大:比如我們只有 40*40 的紋理,卻要貼到 256*256 大小的畫布上去,這就是一個上采樣的過程
- 最鄰近采樣,雙線性采樣,三次卷積采樣
- 縮小:將高分辨率的紋理貼到低分辨率的畫布
- mipmapping, SAT, 各項異性過濾
- 放大:比如我們只有 40*40 的紋理,卻要貼到 256*256 大小的畫布上去,這就是一個上采樣的過程
- 紋理轉換:在通過紋理采樣獲取紋理值后,並不一定直接將紋理值作為顏色使用,還有其他用途,如在 Normal Mapping 中當作法向量使用,在 Bump Mapping 中當作高度偏移使用,所以還需要對紋理值進行相應的轉換
- 投影映射:將3D空間坐標轉換成2D uv坐標
Reference:
- https://cloud.tencent.com/developer/article/1684243
- https://blog.csdn.net/u011484013/article/details/53308529
- https://zhuanlan.zhihu.com/p/369977849