《Real-Time Rendering 4th Edition》全文翻译 - 第6章 纹理化(下)6.7 ~ 6.9

最近比较有动力,再来一篇!~

实时渲染(第四版)Real-Time Rendering (Fourth Edition)

第6章 纹理化 Chapter 6 Texturing

6.7 凹凸映射 Bump Mapping

本节描述了一大类的小型细节表示技术,我们将其统称为凹凸映射。所有这些方法通常都是通过修改每个像素的着色流程来实现的。们比起单独的纹理贴图具有更多的三维外观,但却不用添加额外的几何结构。

一个对象的细节可以分为三个等级:覆盖许多像素的宏观特征(macro-features),横跨几个像素的细观特征(meso-features),和实质上小于一个像素的微观特征(micro-features)。这些分类在某种程度上是流动的,因为在动画或交互式操作期间,观看者可能在不同距离观察到同一对象。

宏观几何由顶点和三角形或其他几何图元表示。创建三维角色时,通常以宏观尺度对肢体和头部进行建模。微观的几何结构被封装在着色模型中,该着色模型通常在像素着色器中实现,并使用纹理贴图作为参数。所用的着色模型可模拟表面微观几何结构的相互作用,例如,发光物体在微观上是光滑的,而漫射表面在微观上是粗糙的。角色的皮肤和衣服似乎具有不同的材质,因为它们使用不同的着色器,或者至少使用这些着色器中的不同参数。

细观几何结构描述了宏观与微观尺度之间的一切。它包含的细节过于复杂,无法使用单个三角形进行有效渲染,但是对于观察者来说,它足以区分表面曲率在几个像素上的变化。例如角色脸上的皱纹,肌肉结构细节以及衣服上的褶皱和接缝都是细观尺度的。细观尺度建模通常使用一类方法,它们被统称凹凸映射技术。它们在像素级别调整着色参数,以使观看者感觉到远离基本几何结构的微小干扰,而基本几何结构实际上保持平坦。不同种类的凹凸映射之间的主要区别是它们如何表示细节特征。其变量包括现实级别和细节特征的复杂性。例如,数字艺术家通常将细节雕刻到模型中,然后使用软件将这些几何元素转换为一种或多种纹理,例如凹凸纹理和缝隙变暗的纹理。

布林(Blinn)在 1978 年提出了在纹理中编码细观尺度细节的想法 [160]。他观察到,如果在着色过程中用稍微受扰动的表面法线代替真实的表面,则表面似乎具有小范围的细节。他将描述表面法线微扰动的数据存储在数组中。

这里的关键思想是,我们不使用纹理来更改照明方程式中的颜色分量,而是访问纹理来修改表面法线。模型表面的几何法线实际上保持不变。我们仅修改照明方程式中使用的法线。此操作没有物理等效项。我们在曲面法线上执行更改,但曲面本身在几何意义上保持平滑。就像每个顶点具有法线一样,它给人一种幻觉,即三角形之间的表面很光滑。修改每个像素的法线会改变三角形表面本身的视觉感知,但不会改变其几何结构。

对于凹凸映射,法线必须相对于某个参考系改变方向。为此,我们将切线框架( tangent frame,也称为切线空间基底 ,tangent-space basis)存储在每个顶点上。此参考系用于将灯光转换到表面位置的空间(反之亦然),以计算干扰法线的效果。除了顶点法线外,在多边形表面上应用了法线贴图的情况下,我们还存储了切线(tangent)和副切线向量(bitangent vectors)。双切线向量也被错误地称为副法线向量(binormal vector) [1025]

切线和副切线向量表示法线贴图本身在对象空间中的轴,因为目标是将光照转换为相对于贴图的光照。参见图 6.32。

图6.32. 展示了一个球形三角形,其切线框显示在每个角上。形状像圆球和圆环的,具有自然的切线空间基础,正如圆环上的纬度和经度线所示。

 

法线 n,切线 t 和切线 b 这三个向量形成一个基本矩阵:

这个矩阵有时缩写为TBN,它将光的方向(对于给定的顶点)从世界空间转换为切线空间 这些向量不必真正彼此垂直,因为法线贴图本身可能会变形以适合曲面。但是,非正交的基底会导致纹理倾斜,这可能意味着需要更多的存储空间,并且可能会对性能产生影响,即矩阵无法通过简单的转置来反转 [494]。节省内存的一种方法是仅在顶点存储切线和副切线,并取它们的叉积来计算法线。但是,只有在矩阵的手性(handedness)始终相同的情况下,此技术才有效 [1226]。通常,模型是对称的:飞机,人,文件柜和许多其他对象。由于纹理消耗大量内存,因此它们通常会被镜像到对称模型上。因此,虽然仅存储对象纹理的一侧,但是纹理映射将其放置在模型的两侧。在这种情况下,切线空间的旋向性在两侧会有所不同,所以无法进行假设(?)。如果在每个顶点存储了额外的信息位来指示手性,那么在这种情况下仍然可以避免存储法线。如果已经设置完毕,则此位数用于求反切线和双切线的叉积,以生成正确的法线。如果切线框架是正交的,则还可以将基础存储为四元数(第 4.3 节),这既节省空间,又可以节省每个像素的一些计算 [494、1114、1154、1381、1639]。尽管在实践中很少见,但质量可能会略有下降。

切线空间的思想对于其他算法很重要。如下一章所述,许多着色方程仅依赖于曲面的法线方向。但是,诸如拉丝铝或天鹅绒之类的材质也需要知道观察者和照明相对于表面的相对方向。切线框架可用于定义材质在表面上的方向。Lengyel [1025] 和 Mittring [1226] 的文章提供了该领域的广泛叙述。Schüler [1584] 提出了一种在像素着色器中动态计算切线空间的方法,而无需逐顶点去存储预先计算的切线帧。Mikkelsen [1209] 对这项技术进行了改进,并推导了一种不需要任何参数化方法,而是使用表面位置的导数和高度场的导数来计算扰动法线的方法。但是,与使用标准切线空间映射相比,此类技术会导致显示的细节大大减少

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值