欢迎光临散文网 会员登陆 & 注册

百人计划图形2.5——Bump Mapping

2023-08-21 16:20 作者:咽泣子  | 我要投稿

关于Bump Mapping

凹凸贴图映射技术是对物体表面贴图进行变化然后再进行光照计算的一种技术。例如给法线分量添加噪音,或者在一个保存扰动值的纹理图中进行查找。这是一种提升物体真实感的有效方法,但却不需要额外的提升物体的几何复杂度。这种方式在提升物体的表面细节或者表面的不规则性方面有显著效果。

Bump Mapping分类

Bump Mapping的种类主要有:法线映射、视差映射、浮雕映射。这几种方法或者贴图。都是广泛的被使用,来增加模型的细节效果,或者用来做特殊的画面表现效果。

最常用的是法线映射,一般的增加法线贴图后,会对局部的物体表面进行法线扰动,进而改变明暗关系,从而达到增加表面细节的效果。其中三种映射中都用到的法线贴图也是本次介绍的重点内容。

关于Normal Mapping

Normal Map是一张存有物体局部表面法线信息的一张贴图。在计算光照的时候,程序会去读取法线图,并获取到当前像素点的法线信息,结合光线信息进行光照计算。使用法线贴图计算光照,可以让物体表现出更加丰富的细节,并随着光照方向的变换实时变化。这是普通纹理贴图不能表现出的。

法线贴图一般由高模映射到对应的底模上来生成。但像金属,木头等这些细节丰富的物体,可借助程序化的软件如:Photo Shop,Substance Designer等生成对应法线贴图。

切线空间

法线的存储,一般会放到模型的切线空间中。

切线空间是以物体表面的切线,副切线和法线组成的几何空间(如右图)。

当我们计算光照时,需要把光照运算的向量放到统—坐标系下。读取切线空间法线,需要世界坐标转切线空间的转换矩阵或切线空间转世界空间的转换矩阵,将向量统一到同一坐标系后再进行光照操作。

世界和切线空间转换

将世界坐标系下的顶点法线(Normal)和切线(Tangent)以及副切线(Bitangent)作为切线空间坐标系的正交基。并用这三个向量的标准正交基来构建转换矩阵。对应关系为法线作为Z轴,切线作为X轴,副切线作为Y轴。

构建一个3*3的矩阵来做空间向量的坐标系转换。一般的叫该矩阵为TBN矩阵。其逆矩阵就是从切线空间到世界空间的转换矩阵记TBN-1,因为TBN为正交阵,所以其逆矩阵为TBN的转置矩阵。

矩阵构建完成后,接下来就是光照计算部分。

TBN矩阵

Unity中法线贴图的压缩格式

在unity中,非移动平台上,Unity会把法线贴图转换成DXRT5nm格式。这种格式只有两个有效通道GA通道,这样可以节省空间,而移动平台Unity使用传统的RGB通道。在

DXRT5nm格式中,GA存储对应法线的x、y分量,z分量需要通过一个简单的运算求得。

关于Parallax Mapping

法线映射虽然能展示较为逼真的模型表面细节,但毕竟法线映射只能改变法线进而改变光照,并不能让模型表面产生让人信服的遮挡效果。所以我们引入视差映射。

Parallax Mapping中文为视差映射,是一种类似于法线映射的技术,但是原理不同,类似法线贴图,它是用以提高模型表面细节并赋予其遮挡关系的技术。并可以和法线贴图一起使用提供令人信服的逼真的效果。

视差映射同样引进一张新的贴图,高度图,高度图一般是作为顶点位移来使用的,但模型要包含大量的三角形才能获得比较不错的效果,否则有起*不效美?这就是视差映射技术。视差映射的核心是改变纹理坐标,但如何改变?怎么改变?这时需要一张存储模型信息的高度图,利用模型表面高度信息来对纹理进行偏移。

arallax Mapping视差映射

视差映射主要是让平面看起来立体,和法线贴图一样是欺骗眼睛的做法。

我们制作的模型在一个三角面即切线空间下,所有点都位于切线和副切线组成的平面内(右图水平0.0点),但实际物体要有更多的丰富细节。如右图当计算我们当前视角的片元A时,真正应该计算的点是视线与物体表面的实际交点,即B点。

如何计算B点,计算B点,我们就需要知道A、B两点在平面上uv偏差。这个其实是不太好计算的。不过可以近似计算,根据高度图以及切线空间下的视角方向,近似的求解偏移量。视角方向(v) ,A点的高度值来近似的求解,并可以通过一个缩放值(scale)来控制。

d = v.xy * ha * scale / v.z

steepParallaxMapping陡视差映射

视差映射往往是近似值,所以计算结果并不是准确的。在此基础上想获得更加准确的结果就需要陡峭视差映射,陡峭视差也是一个近似的解,但相比于普通视差映射要精确的多,效果表现上也更好。并且会对纹理坐标偏移进行合理性检查。

陡峭视差映射的基本思想是将深度分为等距的若干层,然后从最顶端开始采样,并且每次沿着视角方向偏移一定的值,若当前层的深度大于采样出的深度,则停止检查并返回最后的结果。

关于Relief Mapping

浮雕映射,对比与视差映射.想要有更好更准确的表现效果,视差映射是不够的,使用更大的uv便宜,视差映射就会导致失真。于是引入浮雕映射,浮雕映射更容易提供更多的深度,还可以做自阴影以及闭塞效果。

Relief Mapping浮雕映射

浮雕映射一般采用射线步进,和二分查找来决定uv偏移量。

第一种使用射线步进来查找可能的交点,为什么不直接用二分查找。因为直接用二分查找可能会漏掉较薄的区域导致结果不准确。所以第一步,使用射线步进来确定交点位于那个步进内。之后在该步进内使用二分查找,快速确定交点位置。最后返回结果,偏移贴图。


作业效果后续补上

百人计划图形2.5——Bump Mapping的评论 (共 条)

分享到微博请遵守国家法律