Direct X 12 – Lighting 光照

各位老铁观察下图中的两个球体。左边的球体不带光照效果,而右边的则带有光照效果。就像我们所看到的,左边的球体看上去十分扁平,或者说它根本就不是一个球体而是一个扁平的圆!但是,右边的球体看上去就是一个3D的物体,很明显,光照以及阴影效果将帮助我们了解物体的形状以及体积。事实上,我们的视觉系统依赖于光照和光线与物体材质的交互,因此,如何生成照片级的场景就是如何精确模拟物理光照模型。

显然,如果光照模型越精确,那么计算的开销也就越大;因此我们需要找到他们的平衡点。例如,电影的3D特效相比于游戏会使用更为复杂的光照模型也会运用更为真实的光照模型,因为电影的每一帧画面都是预渲染的,所以他们可以花数小时甚至几天来处理一帧画面。但是,游戏是实时渲染的,绘制每一帧所花费的时间不能超过0.03秒。

本书中的光照模型基本上基于Real Time Rendering,Third Edition

目标:

1. 了解光线与材质交互的基本理念。

2. 了解全局光照和局部光照模型的却别。

3. 了解数学上平面上一点的朝向的意义,以此来确定光线照射到平面后的入射角。

4. 学习如何转换法线向量。

5. 能够区分环境光(ambient light),漫反射光(diffuse light)和镜面光(specular light)。

6. 学习如何实现方向光源(directional light),点光源(point light)和聚光源(spot light)。

7. 理解如何使用函数,通过控制衰减参数来改变光照强度。

8.1 光线与材质的交互

当我们运用光照时便不再声明指定顶点的颜色;而是声明材质和光闸,之后在运用光照的运算式基于光线和材质的交互来计算顶点的颜色。这也将使物体的颜色更为真实。

材质可以被认为是一种属性,其决定了光线如何与物体的表面进行交互。例如,物体的表面反射或者吸收光线的颜色,材质的折射率,表面的光滑程度或者表面的透明程度。通过确定材质属性,我们可以构建真实世界中不同的表面材质,如木头,石头,玻璃,金属和水。

在我们的光照模型中,光源可以发射出不同强度的红色光,绿色光和蓝色光;通过这种方法,我们可以模拟许多种光线颜色。当光线从光源射出并与物体发生碰撞时,光线的一部分可能会被吸收而另一部分可能被反射(对于透明物体,如玻璃,一部分光线将穿透该物体,但是本书中我们并不考虑这种情况)。被反射得到光线将朝着新的方向运动,之后可能会与其他物体再一次碰撞,而此时又会有一部分光线被吸收以及反射。所以光线在被完全吸收前可能会与多个物体相碰撞。最终,一部分光线将进入我们的眼球(请看下图),并撞击到视网膜上的受光细胞。

上图中,(a)射入的白色光线。(b)光线撞击到了圆柱体,一部分被吸收,而另一部分散射向球体与眼睛。(c)射向球体的光线也有一部分被吸收,一部分反射入眼睛。(d)眼睛收到的入射光决定了眼睛将“看到”什么。

根据三原色原理,视网膜含有三种受光细胞,每一种对于红色,绿色和蓝色光有反应。而入射的RGB光线模拟了相应的受光细胞。由于模拟了受光细胞,神经冲动将被传输至大脑的神经元,而大脑将基于受光细胞的刺激在你的脑海中生成突变。

以上图为例,假设圆柱体的表面材质反射了75%的红光,75%的蓝光,其余则被其吸收,球体表面材质则反射了25%的红光,其余则被其吸收。同时假设纯白光由光源射出。由于光线撞击到了圆柱体,所有的蓝光都被吸收,只有75%的红光和绿光被反反射(例如,一个中等强度的黄色光)。之后光线将被散射,一部分进入了眼睛,另一部分则继续射向球体。而射向眼睛的光线将模拟出黄色;因此,观察者看到的圆柱体是泛着黄色光的。现在剩余的光线将撞击到球体。球体反射了25%的红光并吸收了剩余的光线;也就是说观察者看到的球体是泛着暗红色光的。

本书中所采用的光照模型被称为局部光照模型。在局部光照模型下,每一个物体的光照都是独立于其他物体的,也就是是说只有直接从光源射出的光线在我们的考虑范围内,并被用作计算光照(例如,由场景中其他物体反射的光线会被忽略)。下图展示了局部光照模型的推论。

上图中,一面墙壁阻隔了灯泡射出的光线,球体应该处于墙壁的阴影中。但是,在局部光照模型中,无论墙壁是不是存在,球体都是发光的。

另一方面来说,全局光照模型不单单考虑由光源直接射出的光线,同时也考虑场景中其他物体反射的间接光。由于在计算一个物体的光照时其将场景中所有的光照都纳入考虑范围,我们称其为全局光照模型。对于实时渲染的游戏来说,全局光照的开销是很大的,但它能提供照片级的真实画面。而如何找到在实时渲染领域找到一种方法来模拟全局光照模型正是现在广大厂商正在研究的;例如,立体像素全局光照[Voxel Based Global Illumination]。其他应用全局光照的方法如,预先计算静态物体的间接光照,之后使用该结果来模拟动态物体的间接光照。

留下评论

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