其他分享
首页 > 其他分享> > 计算机图形学入门(八)-着色(插值、高级纹理映射)

计算机图形学入门(八)-着色(插值、高级纹理映射)

作者:互联网

目录

重心坐标

应用纹理

1.纹理分辨率很小

2.纹理分辨率过大

纹理的应用

颜色

环境贴图(Environment Map)

法线贴图

凹凸贴图

位移贴图

三维纹理和三维噪声

着色信息的记录


学习视频来源

GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili​

上一节解释了纹理映射中三角形与模型的映射关系,本节将继续了解三角形内部的纹理如何映射,以及插值运算和高级纹理映射。


重心坐标

三角形内部进行信息的插值计算,这会用到重心坐标

插值:很多操作都是在顶点,但想要在内部做平滑的过度,需要进行插值计算。例如纹理坐标、颜色法线向量等等。

应用纹理

1.纹理分辨率很小

纹理放大(Texture Magnification),纹理本身太小,纹理的分辨率不够,图像上的多个像素在渲染时取纹理映射上取到了同一个点,会有明显的方块状。我们将纹理上的每个像素称为-texel(纹理元素,纹素)

三种纹理放大的方法

第一种,最近相邻法

第二种,双线性

双三次插值(取16个点进行插值运算)运算量大,但效果更好。具体过程可以自行查找。

2.纹理分辨率过大

会引起更大的问题。

所以这本质上也是一个采样不足的问题,可见之前的文章关于走样部分

酷月千里:计算机图形学入门(四)-光栅化(抗锯齿)0 赞同 · 0 评论文章

如果不提高采样率的话我们能做的就是求每个像素在纹理范围的平均值。

这里有了一个方法Mipmap。它可以做范围查询,速度快,但不是准确的,而且只能做正方形范围查询

这些图加起来只是原来存储量的4/3,只多了三分之一。我们可以根据像素实际所占的大小来查询像素应该使用哪个层级的纹理。下面是过程的计算

第一步

第二步

根据L可以得到它是第几层大小,然后直接去那个层级纹理去拿值,下面的图就是个例子。但不同的层级的纹理之间的接缝很明显

但不同的层级的纹理之间的接缝很明显

但如果需要1.5层呢,两次双线性插值,再加一次插值。称为三线性插值。

现在接缝没有那么明显了

这里就有了另一个办法各向异性过滤(Anisotropic Filtering)

16x就是水平竖直方向各16层。这个基本对性能没影响,因为16x还是8x还是100x都是4倍开销,玩游戏可以尽情的开。

效果会好很多

另一种方法EWA过滤

纹理的应用

在当代GPU中,纹理=内存(储存信息)+对着部分内存进行范围查询(滤波),可以将其理解为一块数据。它可以保存在任意位置的任意信息。

颜色

最简单易懂的应用。如前一节用纹理替换Blinn-Phong模型的漫反射系数Kd(三维),也就是它的颜色。

环境贴图(Environment Map)

当你站在一个位置向四面八方看的时候,四面八方的光会进入你的眼睛,就看到了物体,这里的光不管是直射光、反射光还是散射光等等,我们把它们记录下来,就形成了环境贴图。就是说用纹理来记录光是什么样的,但这里会假设光来自无限远,不包含光的深度意义。视频位置P10-07:50。

非常经典的茶壶模型

1.球环境贴图(Spherical Environment Map)

我们假设用一个球面来记录环境光信息(一个像镜子一样反射光的球),并将球面进行二维展开(例子:世界地图)。视频位置P10-12:50

球环境贴图例子,但很明显上部和下部出现了扭曲的现象,怎么解决这一问题呢?下面就有了Cube Map(立方体贴图)

Cube Map(立方体贴图)。视频位置P10-14:24

例子

法线贴图

法线贴图就是在原物体的凹凸表面的每个点上均作法线,通过RGB颜色通道来标记法线的方向,你可以把它理解成与原凹凸表面平行的另一个不同的表面,但实际上它又只是一个光滑的平面。对于视觉效果而言,它的效率比原有的凹凸表面更高,若在特定位置上应用光源,可以让细节程度较低的表面生成高细节程度的精确光照方向和反射效果。(来自百度百科)视频位置P10-17:24

例如,这个球如果做成这种凹凸不平的可能需要模型做很多面,但如果在法线贴图或者凹凸贴图(后面介绍凹凸贴图)上修改信息,就能改变在球面上的反射信息,也就是可以“欺骗”我们的眼睛,因为它原本模型不是这样的,只是看起来凹凸。

凹凸贴图

本质与法线贴图没什么不同,它记录了每个位置的相对高度(有一个基准面)信息,从而可以计算法线信息(与邻近位置的高度差值来计算,过程见视频)。视频位置P10-22:20。3D法线,即二维贴图的视频位置P10-25:43

例子,可以设定为白色部分为凸

位移贴图

凹凸贴图的更近一步,实际上移动顶点的位置,从而在视觉效果上形成移动的效果。

缺点:如果想让模型跟的上定义的移动速度,那么需要模型的三角形足够细,也就是顶点之间的距离要比单位次数移动的距离还要短。DX有个功能(dynamic tessellation)可以当需要的时候再去细分三角形。

三维纹理和三维噪声

没有实际上生成纹理图,而是采用定义在三维空间中的噪声函数(叫噪声的原因),对于任意一点,都能得到相应的噪声值。对这些噪声值进行一些计算,可以得到我们需要的样子。视频位置P10-33:37

三维纹理广泛的应用到体积的渲染中

着色信息的记录

提前计算好部分着色信息并且记录下来(例如阴影信息),在用到的时候直接贴上去,渲染就非常的迅速。视频位置P10-35:30。

标签:贴图,法线,映射,插值,图形学,纹理,P10,凹凸
来源: https://blog.csdn.net/weixin_45314475/article/details/121845089