欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

计算机图形学基础》,第五版,第 5 章:曲面着色

最编程 2024-07-03 15:32:37
...

基于物体形状以及物体间关系对表面着色,是呈现 3D 视觉效果的关键因素之一。在真实的物理世界中,光的反射强烈地依赖于物体几何,光反射所产生的信息会帮助人眼视觉系统充分地理解物体的形状。计算机图形学中的着色就是为视觉系统提供这些信息,尽管具体目标因应用而异。计算机辅助设计(computer-aided design)和科学可视化(scientific visualization)更加关注成像的清晰度(clarity)。视觉效果(visual effects)和广告(advertising)更关注与真实物体的相似度(resemblance)。在动画、虚拟环境(virtual environments)和游戏中,成像目标介于两者之间,着色是为了实现艺术设计,而不必与真实世界完全一样。

用于计算着色的方程称为着色模型(shading model)。不同的应用需要不同的着色模型。通常从简单模型开始,为光反射提供一个有用的近似,然后增加、修改或移除部分功能以满足设计。

着色模型一般独立于整个渲染系统的其它部分。本章所要介绍的是表面不透明的物体在点光源照射下的基础着色模型。

点状光源(point-like light sources)

真实世界中打在物体表面上的光来自各个方向。但是,作为一种理想模型,当光源尺寸相对于到物体的距离足够小时,可以近似认为光线来自同一个方向。这可能是因为光源本身比较小,如 LED 灯;也可能是因为离物体比较远,如太阳。点状光源有两种类型:一种是点光源(point source),它本身足够小,但又离场景较近,可以沿不同方向发出光线;另一种是平行光源(directional source),它离场景足够远,可以看作是点状的,但只能沿一个方向发出光线。LED 灯和太阳分别是这两种类型光源中的典型。

点源光照

点光源由光源位置和光强(intensity)决定。可以是各向同性的(isotropic),也可以是像聚光灯(spot light)这样各向异性的。

辐射源/光源在单位时间内发射出的总能量称为辐射功率(radiant power)。点辐射源/点光源在单位立体角内的辐射功率称为辐射强度/光强(intensity)。被照射物体表面上单位面积、单位时间所接收到的能量称为辐(射)照度(irradiance)。面辐射源在垂直出射方向的单位面积上、沿出射方向单位立体角内的辐射功率称为辐(射)亮度(radiance)。辐照度可以很好地描述物体表面所接收到的光亮度;辐亮度可以很好地描述物体表面反射出的光亮度。

由能量守恒和点光源的球对称性可知,以点光源为球心、半径为 rr 的球面上的辐照度为:

E=P4πr2=Ir2E = \frac{P}{4\pi r^{2}} = \frac{I}{r^{2}}

其中,PP 是光源辐射功率,I=P/4πI=P/4\pi 是点光源的光强,平方反比项(inverse square term)r2r^{-2} 刻画了辐照度随距离 rr 的衰减规律。

inverse-square.png

除了距离之外,辐照度还依赖于入射角(angle of incidence)θ\theta,即光传播方向与表面法向之间的夹角。根据定义容易知道,辐照度正比于入射角的余弦 cosθ\cos\theta。由于这条规律最早在约翰·海因里希·兰伯特(Johann Heinrich Lambert)1760 年的书籍《Photometria》中出现,因此被称为兰伯特余弦律(Lambert's cosine law)。

incident-angle.png

将距离和角度结合起来可以知道,点光源辐照度的一般公式为:

E=Icosθr2E = I\frac{\cos\theta}{r^{2}}

其中,cosθ/r2\cos\theta/r^{2} 是点光源的几何因子(geometry factor),它只依赖于光源和被照物体表面之间的几何关系,而与两者的特性无关。

使用点乘来计算入射角的余弦更简单高效:

cosθ=nl\cos\theta = \vec{n}\cdot\vec{l}

其中,n\vec{n} 是表面法向单位向量,l\vec{l} 是着色点指向光源的光线方向单位向量。

平行光照

平行光源是点光源离场景非常远、又足够亮的极限情形。此时,I/r2I/r^{2} 变化缓慢可看作常数,平行光源辐照度:

E=HcosθE = H\cos\theta

其中 HH法向辐照度(normal irradiance)。

平行光源由光线方向和法向辐照度决定。平行光照是均匀的,不会随距离增加而衰减。

基础反射模型

物体如何反光取决于它自身的材质。本章给出一个基础模型,用于描述可带有光泽表面的彩色材质。材质的基底决定了整个物体的颜色,材质的表面提供了光泽的、类镜面的反射(shiny, mirror-like reflection)。

reflection.png

上图为镜面反射(specular reflection)和漫反射(diffuse reflection)的模型示意图。

兰伯特反射(Lambertian reflection)

最简单的光反射是理想漫反射(ideal diffuse reflection),即各方向的反射光亮度(辐亮度)均相同。此时物体颜色是视角无关的(view independent),完全由反射率(reflectance)RR 决定,它描述了物体总共反射多少比重的光。

根据物理量定义和兰伯特余弦律,易知:

Lr=RπEL_{r} = \frac{R}{\pi}E

其中,LrL_{r} 是反射光的辐亮度,EE 是入射光的辐照度。考虑到对光的颜色的依赖性,RGB 颜色系统需要红、绿、蓝三种颜色的光反射率。

由于理想漫反射着色中最主要的效应就是兰伯特余弦律,因此也称为兰伯特着色(Lambertian shading)。兰伯特着色可以为物体提供色彩单调的、粉质的外观,它可以很好地描述纸张、平光漆(flat paint)、泥土、树皮、石头和其它粗糙材料。

镜面反射(specular reflection)

许多材料自身有一定的光泽度(shininess),如:金属、塑料、有光漆(gloss paint)或半光漆(semi-gloss paint)、还有许多植物的叶子等。这些物体的颜色是依赖视角的(view-dependent)。依赖视角的那部分反射被称为镜面反射

完全光滑表面上的反射称为理想镜面反射(ideal specular reflection),此时只有服从反射定律的那一个方向上才有反射光。然而许多物体表面都不是完全光滑的,计算机图形学中将这种更一般的反射称为光泽反射(glossy reflection),而理想镜面反射则需要作为一种特殊情形来处理。修正的 Blinn–Phong(布林-风)模型是一个简单而知名的光泽反射模型,最初由 Phong(裴祥风,越南人,美国犹他大学博士)在 1975 年首次提出,后经 James F. Blinn 等人发展,最终形成了现在最常用的形式。

Blinn-Phong.png

Blinn–Phong 着色模型的基本思想是,使用半向量(half vector)h\vec{h} 和表面法向量 n\vec{n} 的接近程度来决定反射光的亮度。半向量 h\vec{h} 是平分了光的方向 l\vec{l}视向量(view vector)v\vec{v} 的单位向量,l\vec{l} 是着色点指向光源的单位向量,v\vec{v} 是着色点指向观察者的单位向量。

h=l+vl+v\vec{h} = \frac{\vec{l} + \vec{v}}{\|\vec{l} + \vec{v}\|}

h\vec{h}n\vec{n} 的接近程度可以用点乘来衡量,最终镜面反射部分的光亮度正比于:

(nh)p(\vec{n}\cdot\vec{h})^{p}

其中,Phong 指数 p (>1)p\ (>1) 刻画了物体表面的光泽度。典型的 pp 值有:

  • 10 “蛋壳”
  • 100 稍有光泽
  • 1000 有光泽
  • 10000 近乎镜面

把 Blinn–Phong 镜面反射和兰伯特漫反射同时考虑进来,反射光的辐亮度:

Lr=(Rπ+ksmax(0,nh)p)EL_{r} = \left(\frac{R}{\pi} + k_{s}\max(0, \vec{n}\cdot\vec{h})^{p}\right)E