(一)基本光照
光照 —— 即根据场景中光源的分布及物体的形状、朝向等信息,为物体"涂"上阴影、高光等一系列增加真实感的色彩。
?
为了给物体着色,我们需要一个"模型"—— 根据光源的情况和当前表面的参数,得到一个这个表面该有的颜色。
?
这么说可能不太好理解,那么来看一个最基本的光照模型:Phong光照模型。这种光照模型更像是一种"经验模型",由于它在复杂场景中的真实性远不足,在现在已经鲜有人使用,但是它仍然是一种非常重要的计算方法。(而且应该仍是各大学图形学课程的必修内容)
?
我们知道,我们能看见一个自身不发光的物体是因为它反射了从其他地方的光。Phong光照模型把不发光物体所反射的光分成三种分别计算(如下图):
下文中"表面"的解释:
类似"dS"的感觉。把一个曲面分成一个个一个个细小的平面(多边形),这些小平面足够小,以致于在有限分辨率的屏幕前我们分辨不出它们。而它作为一个平面,自然有一个法向量代表它的朝向,也有它中心点的位置及一系列数据。而着色就是为这一个个小平面分别决定它们该有的颜色,最后组合成具有真实感的整个物体。
?
1) 环境光
?
在一个场景中,确定的光源并不是光唯一的来源。正如上面所讲,不发光的物体会反射光源所发出的光,而这种反射大多是漫反射,这就导致了场景中有着无数"乱七八糟""横冲直撞"的漫反射光。如果考虑这些光的存在,以当时计算机的计算能力,最顶级的计算机渲染出一帧(为了完成实时渲染,至少要在1/20秒内完成)可能都要花出比一天还多的运算时间;为了大幅度简化计算,Phong光照模型把这些光视为各个方向上强度都相等的光,导致物体的各个表面都具有一个相同的,比较暗的"底色"。
?
2) 漫反射
?
它模拟了物体表面对光源发出的光产生的漫反射。它根据物体表面的朝向与光源相对于这个表面的位置给表面染上不同的颜色。当光源相对于该表面的位置与该表面的法向量夹角比较小时 —— 此时这个面朝向光源 —— 这个面就会被赋予一个比较亮的颜色。反之,这个面就会被赋予阴影的颜色。
?
3) 高光
?
它模拟了物体表面"规则"的部分,这部分遵循镜面反射原则,进而可以在物体上产生光斑。由表面位置和光源位置可以确定出一道入射光;以这个平面的法线为反射平面的法线,可以求出对应的出射光。当这个出射光的朝向与观察点相对于表面的朝向非常接近时,就给这个表面一个非常亮的颜色,进而在整个物体表面产生高光反射。
?
Phong模型把上述三种方式产生的颜色值按一定比例混合起来,就产生了最后的图像。具体的计算方式限于篇幅原因不再叙述,这方面的网上应该有一大堆。
(Phong光照模型的参考图。P:小平面;V:观察点;L:光源;N:法线;R:出射光)
?
(本来还想写点shadowmap的东西,好像这已经快1000字了…残念w)