Chapter 5 – Shading Basics 着色基础

当我们在绘制一个三维物体时,模型不但应该拥有合适的几何形状,还应该拥有正常的视觉表现。根据应用类型和游戏类型的不同,视觉表现可以是,写实的——表现近似于真实的物体,也可以是其他不同的非写实类型。

本章节将会讨写实的和其他非写实的渲染模式。第十五章将主要讨论非写实的渲染模式,而第九章到第十四章将会专注于写实的渲染模式所使用的PBR(physically based rendering)技术。

5.1 着色模式

决定我们所绘制物体的外观的第一步是选择着色模式(shading model),其代表物体表面的颜色如何基于表面的朝向,视角方向和光照进行改变。

例如,我们使用的Gooch着色模式。这是一种非写实的渲染模式,也是第十五章的主题。该着色模式意在增加工程图中的细节的辨识度。

而Gooch着色模式的基本理念是比对表面的法线向量和光源的位置。如果法线指向光源,那么我们使用暖色调来对物体表面进行着色;法线与光源偏离越远,那么色调越冷。我们将使用顶点指向光源的向量与法线向量的夹角作为色调的插值。此外,一般来说着色模式会使用不同的属性值来控制物体表面的表现。与大多数着色模式相同,Gooch着色模式也会受物体表面朝向,camera朝向和光照朝向的影响。为了便于计算,这些方向向量都是单位向量。

现在我们已经定义了着色模式的所有输入,所以该模式的公式定义如下:

在上述公式中,我们也使用了以下中间计算:

上述数学公式也会经常出现在其他的着色模式中,例如使用clamp来限制范围(x±表示clamp至[0,1])。同时,点乘的运算符号出现了三次,每一次都是两个单位向量之间运算。而两个向量的点乘表示两个向量的长度与向量夹角的余玄的乘积。所以两个单位向量的点乘就是两个向量的余玄值。

另一个常用的着色操作是两个颜色之间基于一个范围0到1之间进行插值。这一操作就是tca+(1-t)cb,t的范围是0到1,而该等式的计算结果就是cacb之间的插值。而插值操作在整个着色模式中出现了两次,第一次是cwarmccool,第二次是chighlight与之前的计算结果。由于插值是着色器中的一个常用运算,所有的着色语言中都内置了lerp插值函数。

r=2(n·l)n-l”计算了光线向量的反射向量,其基于法线n对向量l进行反射。虽然这个运算并不如上述的clamp和lerp那么常用,但是大多数着色语言中也内置了reflect函数。

将上述等式以不同的数学表达式和着色参数进行组合能够实现各种各种各样的着色模式。

留下评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据