现在的位置: 首页 > 综合 > 正文

Game Programming with DirectX — 05[3D中的太阳]

2013年08月19日 ⁄ 综合 ⁄ 共 2999字 ⁄ 字号 评论关闭

 

第五集 3D中的太阳

 

    3D虚拟世界是尽可能的模拟现实的, 所以在3D中没有光照是不行的. 前面的例子都是在没有光照的环境里直接由计算机给出物体表面不同点的光亮度和颜色的, 这是不现实的模拟.

 

    光的数学模型非常多, 我们只能讲解比较实用的模型, 其他模型大家可参考相关的文献.

 

5.1 光照明模型

 

5.1.1 光照明模型的由来

 

    现实世界中, 来自光源或环境的光照射到物体时, 一般会出现的情况为,

(1). 光从物体表面反射.

(2). 如果物体材质透明, 则光线穿过物体形成透射.

(3). 光能被物体吸收 .

容易发现我们能看到(1)和(2)的光.

 

    现实中如果没有光, 我们不能看到任何物体;  而且在有光的照射下, 不同物体的颜色是不同的. 现实中的光是白光, 实际是由不同波长的光组成的(按不同比例组成的光的颜色是不一样的), 我们可以通过光谱分析来得到光的组成. 物体的颜色是由它吸收的光的波长决定的.

 

    海水可以作为理想的物体来表示---它只吸收蓝光, 所以当白光(由不同波长的光组成)照射到海水时, 海水呈现蓝色; 反过来, 用红光或绿光照射海水, 海水是黑的.

 

    由上面对现实的光的分析, 我们要建立光的数学模型, 引入到3D虚拟世界中. 我们从光照射到物体时的情况可以得到以下几点,

 

(1). 反射光和投射光的强弱决定被照物体的明暗程度.

(2). 被物体吸收后的反射光和投射光的光谱分布决定物体呈现的颜色.

(3). 反射光和投射光的强弱由入射光的强弱决定; 反射光和投射光的光谱分布由入射光的光谱分布和被照物体吸收不同波长的光的程度决定.

 

    就由上面的结论建立的光数学模型计算量非常庞大, 如光谱的采样和光谱到颜色的转换就是大问题. 考虑到计算机中的颜色都由RED-红, GREEN-绿, BLUE-蓝三基础颜色组成, 所以把光的光谱组成简化为红-绿-蓝三色的组成, 这样整个模型就简化了.

 

    简化的模型中, 只要知道光的方向, 红-绿-蓝三色的组成, 还有物体的对红-绿-蓝三色的吸收率和透射率---也就是知道光源的属性和物体表面的材质属性, 我们就可以模拟现实中的光照了.

 

5.1.2 光照明模型的分类

 

    上面的分析只是在数学的基础上得到的, 实际的光照明模型还结合了光学物理中的定律, 结合了光源, 环境, 物体表面的几何-吸收-反射-辐射等特性.

 

    光照明模型可分为局部光照明模型和整体光照明模型.

 

    我们需要根据实际的情况使用不同的光照明模型.

 

5.1.2.1 局部光照明模型

 

    局部光照明模型只考虑光源直接照射到物体表面产生的光照效果, 物体基本不透明且各表面的反射率是常数.

 

    局部光照明模型中, 物体表面的反射光分为漫反射光和镜面反射光; 漫反射光可以认为是光穿过物体表面被吸收后, 余下的重新向外各各方向均匀发射的光, 所以在任何方向的漫反射光强度都相同. 镜面反射光由入射光在物体的表面的直接反射, 镜面反射光沿镜面反射主方向最强, 主方向周围逐渐衰减, 形成一定的可观察区域.

 

优点 : 能真实的模拟现实中光源直接照射在物体上的连续明暗变化, 镜面效果, 物体间的阴影.

 

缺点 : 无法实现相邻物体之间的色彩映射等光照效果.

 

5.1.2.2 整体光照明模型

 

    整体光照明模型在局部光照明模型的基础上, 还考虑了物体周围环境对物体的影响, 如镜面上的映象等.

 

优点 : 比局部光照明模型更精确的模拟现实中的光照效果.

 

缺点 : 计算复杂度显著提高.

 

5.1.3 Lambert(朗伯漫)反射模型

 

    朗伯漫余弦定律在高中的光学中有简单的学习, 是理想漫反射物体在点光源照射下的光反射定律. 根据定律, 一个理想漫反射物体表面上反射的漫反射光的强度同入射光和物体表面的法向量之间的余弦成正比,

I = k d * I l * (N . L) = k d * I l * cosa   (I)

                 Light o                             

                       L /      N      /

                        _/|   /|/   -/|

                          /    |    /

                           /   |   /

                            / a|  /

                             /-| /

                      ________/|/________

                               P

I是物体表面被照点P处的漫反射光的光的强度, I l 是点光源的入射光的光强度, k d 是物体表面的漫发射率, a是入射光L同物体表面法向量N之间的夹角.

 

    考虑到物体还可能受环境光的影响, 为简化, 假设环境光是均匀的直线漫反射光, 这样上面的公式(I)变成,

I = k a * I a + k d * I l * (N . L)   (II)

    I a 是入射的环境光的强度,  k a 是物体表面对环境光的漫反射率(0<= k a <=1).

 

   其实(II)公式没有表示出光随距离衰减的效果, 两个完全相同的物体和光源的方向一致, 但距离不同, 它们的反射光的强度相同, 这不符合实际. 一般光在传播中以距离的平方衰减的, 我们要把光的衰减加入公式(II)中,

I = k a * I a + k d * (I l / (D ^ s) ) * (N . L)   (III)

D是光源到被照射点的距离, s是衰减指数(0 <= s <= 2), 用来模拟光的距离衰减效果.

 

    当物体被N个点光源照射, 我们可看作N个漫反射光强度的加,

I = k a * I a + (连加号)k d * (I li / ( Di ^ s)) * (N . Li)   (i = 1, 2, ... n)(IV)

I li 是第i个点光源的光强度, Di 是第i个点光源到被照射点的距离, Li第i个点光源的光线入射的单位向量.

 

优点 : 我们把入射光分解为红-绿-蓝三色光强度的组成, 把物体的漫反射率分解 为对红-绿-蓝三色的光强度的漫反射率, 再由(IV)进行求解, 可快速的得到物体表面某点的漫反射光强度.

 

缺点 : 对接近理想漫反射的物体模拟是可行的, 但对如金属物体的模拟不现实, 模拟的金属物体没有特有的金属光泽, 主要是缺乏对镜面反射的模拟.

 

5.1.4 Phong模型

 

    金属物体表面的highlight区域其实是镜面反射的结果, 与漫反射不同, 镜面反射光的空间分布有一定的方向性, 只有在可观察区域能看到.

 

    1973年, Phong提出一个用于计算镜面反射光的强度的经验模型, 模型将物体表面的镜面反射区域近似为一个圆锥, 光强度从圆锥中心开始以指数形式衰减,

I s = k s * I l * (V . R)^n =  k s * I l * (cosa)^n   (V)

k s 是物体表面的镜面反射率(0<= k s <= 1), 通常对同一物体k s 可取常数;  I l 是入射光强度; n为镜面高光指数, 用来模拟镜面反射在空间中的会聚程度; a是视线向量V同镜面反射光线向量R之间的夹角; I s 是物体表面投向视线方向的镜面反射光强度.

图5.1

从(V)公式可得, (a). 投向视线方向的镜面反射光强度不仅由入射光的强度决定, 而且也由视线方向决定. (b). n值越大, 镜面反射光的会聚程度越高; n越小, 镜面反射光越趋于发散状态.

    将镜面反射光的强度的经验模型和Lambert(朗伯漫)反射模型组合, 就得到Phong模型,

I = k a * I a

抱歉!评论已关闭.