天行健 君子当自强而不息

3D图形数学(3)

 

光照与雾化

标准光照模型是局部模型中的一种----即当处理一个物体时,不考虑其他物体的影响。物体也不向别的物体投下影子,实际上,物体自身无法生成影子,影子是使用全局光照模型生成的。

 

色彩的数学

计算机中的色彩常用RGB色彩模型表示,这里R表示红,G表示绿,B表示蓝,其精度因平台与渲染状态而异。我们视RGB为0至1间的值,并且也不考虑其中各分量到底占用多少二进制位。在计算机图形学中,色彩常被视为数学实体。我们用黑体的小写罗马字母表示色彩符号,如c,与向量符号相同,但由于二者上下文不同,所以不会混淆。

可以认为色彩存在于一个3D单位立方体"色彩空间"中,如图15.7所示:

黑、白两色十分重要,分别由RGB(0, 0, 0)和(1, 1, 1)表示,并且用特殊的符号0、1分别标识,灰色都在黑白色之间的那条连线上。

色彩可以加、减、乘以标量,和向量运算一样。两个色彩也可以作"按位乘"运算,运算记作

色彩运算有时会使一个或多个RGB分量超出[0, 1]的界限(比如,计算光照时,出现极强的光亮),此时简单地加以截断。根据情况,也许在计算中每一步都进行截断,也许中间允许超界,而在最后截断。

如果只有一个分量超界,截断运算可能会引起色彩混乱。比如,色彩(1, 2, 1)其实是(0.5, 1, 0.5)的一个更亮的表示,类似某种绿色。简单地加以截断后,绿色消失只剩余白色。更聪明的办法是除以最大色彩值以单位化。此例中,均除以最大分量值2。当然,开始时就防止越界(比如,调整光强以使越界不发生)才是最好的办法。

 

光源

为进行渲染,必须向图形API描述场景中的光。下面是一个光源类型的简单列表:

点光源,平行光,聚光灯,环境光。

我们将讨论大多数渲染API都支持的常见光源。

点光源是向四面八方发射光线的单点,又称全向光或球状光。点光源有方向和色彩,此色彩同时表示色调与亮度,点光源还有一个辐射衰减半径,控制照亮的范围。图15.8展示了3DS如何表示点光源。

光强通常由光源中心向辐射前进方向不断衰减,最终为0。点光源可代表许多常见发光物,如灯泡、电灯、火把等。

平行光是从无限远处射来的点光源的光线,场景中所有光线皆为平行的。平行光源没有位置的概念,也无衰减。太阳是平行光的典型代表(目前还不考虑太阳的位置来渲染场景)。

聚光灯指从特定光源向特定方向射出的光,比如信号灯、车头灯等。它们有位置、方向、甚至还有辐射距离的概念,其照亮区域为圆锥形或金字塔形。

圆形聚光灯有一个圆形的"底",其宽度由辐射衰减角给出(注意与辐射衰减距离的区别)。并且,有一个描述高亮区的内角度,如图15.9:

方形聚光灯形成金字塔形状,而不是圆锥形。方形聚光灯非常有趣,因为常被用来投影图像,比如电影放映。

最后,环境光指不属于任何光源而照亮整个场景的光。不考虑环境光,则物体的影子将完全是黑的,因为它们不被任何光源照亮。现实中,这类物体常被间接照亮,环境光是积累这种间接光照最根本的方法。

 

标准光照方程----概述

光照方程定义了标准光照模型,用于计算单个像素的色彩。标准方程可简写为公式15.7:

Clit = Cspec + Cdiff + Camb

公式15.7   标准光照方程

其中,

(1)Clit是打开光照情况下计算颜色值的结果,这与关闭光照(注意:相当于用最强光照照射)情况下计算的结果不同。和我们日常生活中的"光照"一词不同,计算机图形学中的"光照"是指取关闭光照情况下的纹理颜色值进行计算,一般情况下得到的结果比原纹理颜色值暗。

(2)Cspec是镜面反射分量。

(3)Cdiff是散射分量。

(4)Camb是环境分量。

物体外观主要取决于以下四点因素:

(1)物体表面的性质,即材质属性。

(2)表面的方位与朝向,朝向常用单位法向量表示。

(3)照射来的各光源性质。

(4)观察者位置。

方程中的三个组成部分,分别考虑了上述因子的不同组合。


posted on 2008-03-05 13:36 lovedday 阅读(1146) 评论(1)  编辑 收藏 引用

评论

# re: 3D图形数学(3) 2008-03-09 14:40 wsj

赞~ 收藏  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

导航

统计

常用链接

随笔分类(178)

3D游戏编程相关链接

搜索

最新评论