第五章 着色基础

当你渲染三维物体的图像时,模型不仅需要适当的几何形状,也应具有所需的视觉外表。根据应用程序的不同,其范围可以从真实感(外观与真实物体的照片几乎相同)到出于创造性原因选择的各种类型的风格化外观。 有关两者的示例,如图5.1。

本章将讨论同样适用于真实感和风格化渲染的那些着色方面。 第15章专门致力于风格化渲染,而本书的重要部分(第9章至第14章)则着重介绍通常用于照片级真实感渲染的基于物理的方法。
RealTime-Rendering 第五章 自我学习和翻译

5.1 着色模型

确定渲染对象外观的第一步是选择一个着色模型,以描述对象的颜色在表面方向,视图方向以及光照等因素下如何变化。

例如,我们将使用Gooch着色模型的变体。这是第15章讨论的非真实感渲染的一种。Gooch着色模型旨在提高技术插图中细节的可读性。

Gooch着色背后的基本思想是比较表面法线与光源的位置。如果法线指向灯光,则使用较温暖的色调为表面着色;如果指向偏移灯光,则使用较冷的音调。在这个范围内的角度的颜色则根据这些色调进行插值,这取决于用户提供的表面颜色。在此示例中,我们向模型添加了样式化的“突出显示”效果,使表面具有光泽外观。图5.2显示了实际的着色模型。

着色模型通常具有用于控制外观变化的属性。设置这些属性的值是确定对象外观的下一步。我们的示例模型只有一种属性,即表面颜色,如图5.2的底部图像所示。
RealTime-Rendering 第五章 自我学习和翻译和大多数着色模型一样,此示例受相对于视图和照明方向的表面方向的影响。 出于着色目的,这些方向通常表示为归一化(单位长度)矢量,如图5.3所示。

现在,我们已经定义了着色模型的所有输入,接下来可以看一下模型本身的数学定义:
RealTime-Rendering 第五章 自我学习和翻译RealTime-Rendering 第五章 自我学习和翻译在这个等式中,我们可以用下面的计算
RealTime-Rendering 第五章 自我学习和翻译这个定义中的几个数学表达式也会在其他的着色模型中找到。着色操作中通常会使用夹逼操作,将值限制在0到1范围内。这里我们使用 x ∓ x^\mp x符号表示法用于高光混合因子s的计算中使用的0和1之间的夹逼。 点积运算符出现3次,每次出现在两个单位长度的矢量之间; 这是一种极为常见的模式。 两个向量的点积是两个向量的长度和它们之间夹角的余弦的乘积。 因此,两个单位长度向量的点积就是夹角的余弦值,它是两个向量彼此对齐程度的有用度量。 在着色模型中,由余弦组成的简单函数通常是最准确的数学表达式,可以说明两个方向之间的关系,例如光方向和表面法线。

另一种常见的着色操作是基于0到1之间的标量值在两种颜色之间线性插值。该操作采用 t c a + ( 1 − t ) c b tc_a +(1- t)c_b tca+(1t)cb的形式,随着t的值在1和0之间移动,它会在 c a 和 c b c_a和c_b cacb之间分别进行插值。此模式在此着色模型中出现两次,第一次在 c w a r m 和 c c o o l c_{warm}和c_{cool} cwarmccool之间进行插值,第二次在先前插值的结果和 c h i g h l i g h t c_{highlight} chighlight之间进行插值。线性插值在着色器中出现的频率很高,以至于在我们已经看到的每种着色语言中,它都是一个内置函数,称为lerp或mix。

线“ r = 2 ( n ⋅ l ) n − l r = 2(n·l)n-l r=2(nl)nl”计算反射光矢量,基于n反射l。尽管不像前两个操作那么普遍,但是对于大多数着色语言来说,也具有内置的反射函数。

通过将这些操作以不同的方式与各种数学表达式和着色参数组合在一起,可以为多种风格化和逼真的外观定义着色模型。

5.2 光源

在我们的着色模型实例中光照的影响是很简单的,只提供了着色的主要方向。当然现实世界中种光照是很复杂的。

相关文章:

  • 2021-09-15
  • 2021-06-04
  • 2021-09-28
  • 2022-01-18
  • 2021-05-15
  • 2022-12-23
  • 2020-01-14
猜你喜欢
  • 2021-12-17
  • 2021-09-09
  • 2022-02-08
  • 2022-02-24
  • 2022-12-23
  • 2022-02-25
  • 2021-10-19
相关资源
相似解决方案