【Notes_7】现代图形学入门——纹理映射

跟着闫令琪老师的课程学习,总结自己学习到的知识点

课程网址GAMES101
B站课程地址GAMES101
课程资料百度网盘【提取码:0000】

纹理坐标

每个3D模型上的三角形如果对应到2D平面,就可以用纹理坐标 ( u , v ) (u,v) (u,v) 表示,坐标分为在[0,1]内

示例:纹理坐标 ( u , v ) (u,v) (u,v)可以通过重心坐标插值的方法得到。

纹理放大(Texture Magnification)

当纹理图片过小,就会出现多个像素点仍然对应一个 ( u , v ) (u,v) (u,v)坐标,并将该 ( u , v ) (u,v) (u,v)坐标下颜色信息复制给该像素点,这样形成的图片边界过渡就会非常不自然,形成一个个的小格子。如下图:

解决上述问题的方法就是双线性插值。

双线性插值(Bilinear Interpolation)

双线性插值就是在充分利用屏幕空间 f ( x , y ) f(x,y) f(x,y)的四周的值,求出一个方向(例如 s s s)上点 f ( x , y ) f(x,y) f(x,y)的值,利用同样的方法,直至求出所有方向的值。利用这种方法得到的结果不会出现一个个小格子的现象。

纹理缩小(Texture Minification)

引用博客计算机图形学系列笔记

当纹理图过大,近处会出现锯齿、远处出现摩尔纹的现象。
根据引入的博客进行解释:
1 根据近大远小,远处的一张完整的贴图可能在屏幕空间中仅仅是几个像素的大小,那么必然屏幕空间的一个像素对应了纹理贴图上的一片范围的点,这其实就是纹理过大所导致的,直观来说想用一个点采样的结果代替纹理空间一片范围的颜色信息,必然会导致严重失真!(从信号的角度来说就是,采样频率过低无法还原信号原貌
2 换一种想法,考虑离相机很远的一个三角形面,假设该三角形面真正在纹理贴图上对应的一片区域有10个像素点。但是由于透视的关系,距离很远的三角形面投影到近平面时可能只有1个或2个像素点的大小(远远小于10个像素的原来大小),那么这1个或2个像素采样texture的结果就要代表原来这个三角形面10个像素点的颜色信息,自然会导致失真!

解决方法就是MipMap技术。

MipMap

MipMap就是将纹理进行分层,像素应用不同层次纹理。

不同层级纹理应用的标准是

但是这里D值算出来是一个连续值,并不是一个整数,有两种对应的方法:
1 四舍五入取得最近的那个level D
2 利用D值在 向下和向上取整的两个不同level进行三线性插值
通过MipMap分层之后,进行纹理映射得到的效果,边界过渡生硬,可以通过三线性插值的方法解决

三线性插值

拓展双线性插值,分别对D层级、D+1层级的MipMap进行双线性插值、在根据实际得到的D值进行线性插值,得到最终的结果。

发现通过MipMap得到的效果远处出现了过曝现象,主要原因是MipMap不同层级的纹理都是正方形,实际纹理肯定不只是正方形。解决方法是各向异性过滤。 #### 各向异性 各向异性的纹理可以是不同方向的纹理,见下图,MipMap是下图的对角线纹理。

纹理应用

纹理对着色有影响,不仅仅是对颜色的影响,还可以改变法线的高度来影响着色。

Bump Mapping

纹理通过定义法线高度,可以实现改变模型来增加模型的表面细节。

接下来是求纹理表面的法线。

In Flatland

in 3D

Displacement mapping

Displacement Mapping比Bump Mapping的更先进,Bump的边缘部分会出现Artifacts。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值