光照模型–光源与材质的相互作用
近日在看《Introduction to 3D game programming with the Direct X 11》的光照部分,于是便决定写一个总结我的所学习的光照方面的文章。
在为物体加上光照效果时,我们不是直接地指明物体顶点的具体颜色,而是使用光源和材质这两种概念来描述物体受光照后的颜色状态。材质是一种用于描述物体的表面与怎样光源交互的一种属性。其主要包括漫反射、环境光以及镜面反射三种情况的参数。而光则同样也是分为三种:漫反射光、环境光以及镜面发射光,与材质的三种参数一一对应。而物体受到光照而呈现出的颜色LitColor
就等于这三种不同类型光的RBG颜色之和。当然,这三种光源的颜色计算方式的有所差异的。
简要的梳理一下物体受光照的真实的物理过程:
远处的光线射向球体,球体吸收了一部分的光,并放射出其他光线进入人眼,或是射向其他物体(这里是圆柱体)。圆柱体放射了来自球体的光,一部分光线进入人眼。所以人眼就能够看见球体和圆柱体了。
然而,因为考虑到真实情况中的光照十分复杂(尤其是其他物体反射出的光线射向其他物体),难以用于实时渲染。所以,目前的使用中,我们会使用一种简化的光照模型:local illumination models(本地照明模型???)。即不考虑单个物体所反射的光线对其他物体的影响,只考虑单个物体受光源的所发出的的直射光线的效果。与这种模型相对的是Global illumianation models(全局照明模型)。这种模型在计算单个物体的光照效果时,不仅仅会计算其受到的来自光源的直射光线,同时也会计算从其他物体表面反射出来的间接的光线。当然,这种模型需要大量的计算,故不适合于实时渲染。