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
posted @ 2021-05-13 22:37  cancantrbl  阅读(5176)  评论(0编辑  收藏  举报