Unity里的UV到底是什么


簡單的說,就是貼圖影射到模型表面的依據。

UV是一個坐標系統,U和V分別代表圖片在Screen的水平垂直方向上的坐標,這些坐標通常位於(0,0)和(1,1)之間。

  • U: 水平方向的第U個像素/圖片寬度
  • V: 垂直方向的第V個像素/圖片高度

最常見的UV用法是UV貼圖

多邊形除了具有三維的空間坐標外還有一個二維的UV坐標( (它和空間模型的X, Y, Z軸是類似的),以便把多邊形的頂點和圖片上的像素對應起來。這個UV紋理貼圖定義了圖片上每個點的位置的信息(即可以拿到任意一個像素的信息),這些點與3D模型是相互聯系的,以決定表面紋理貼圖的位置.。也就是將圖像上每一個點精確對應到模型物體的表面,在點與點之間的間隙位置由軟件進行圖像光滑插值處理。

 

 

紋理映射

步驟:

    1. 投影映射:將3D空間坐標轉換成2D uv坐標
      1. Projector:比如地球儀,將矩形地圖紋理均勻貼到球表面的投影函數成為sphere形式;還有cubic,plane etc.
      2. UV Mapping:用於將 3 維模型中的每個頂點與 2 維紋理坐標一一對應。通常是將 uv 坐標保存在頂點信息中,在三角形內使用時,通過插值的方式得到每個片元具體的 uv 坐標,再從紋理中采樣獲得對應的值
    2. 變換函數:將 uv 坐標經過處理變換后,根據實際的紋理尺寸,轉化為紋理空間坐標 
      1. 坐標范圍的處理:此時得到的有可能是 [0.25,0.3] 這種在 [0,1] 范圍內的值,但也有可能超出了 [0,1] 范圍,那么需要對范圍外的值進行處理。可以選擇Repeat, Mirror, Clamp etc.
      2. 坐標的自由轉換:比如旋轉平移縮放,uv就像一個窗口,如果你需要紋理往右移,則你需要把窗口向左移,用u – 0.5 而不是 u + 0.5
      3. 轉到紋理空間:用uv坐標再分別乘以紋理實際的寬高。比如 uv 坐標為 [0.25,0.3],紋理的寬高為 [256,256],那么相乘可得到 [64,76.8]。
    3. 紋理采樣:依據紋理空間坐標,對紋理進行采樣,要處理放大和縮小兩個情況。
      1. 放大:比如我們只有 40*40 的紋理,卻要貼到 256*256 大小的畫布上去,這就是一個上采樣的過程
        • 最鄰近采樣,雙線性采樣,三次卷積采樣
        •  
      2. 縮小:將高分辨率的紋理貼到低分辨率的畫布
        • mipmapping, SAT, 各項異性過濾
    4. 紋理轉換:在通過紋理采樣獲取紋理值后,並不一定直接將紋理值作為顏色使用,還有其他用途,如在 Normal Mapping 中當作法向量使用,在 Bump Mapping 中當作高度偏移使用,所以還需要對紋理值進行相應的轉換

 

Reference:

  1. https://cloud.tencent.com/developer/article/1684243 
  2. https://blog.csdn.net/u011484013/article/details/53308529
  3. https://zhuanlan.zhihu.com/p/369977849


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM