- 1 -
中国科技论文在线
Phong 明暗处理算法的改进
李丽丹*
作者简介:李丽丹,(1980-),女,讲师,图形. E-mail: lilidan2000@
(辽宁工程技术大学经济管理学院基础部,辽宁 阜新 123000)
摘要:本文基于现在普遍应用的 Phong 光照模型而对曲面体表面离散成小多边形后进行明暗
处理的方法进行了简单的陈述和比较,提出了改进的 Phong 明暗处理方法,本研究基于最佳
平方逼近的思想,采用勒让德多项式来逼近 Phong 光照模型。同时采用 visual c++实现
程序,对一个光源在无穷远处的球体进行了几种不同方法的模拟,比较结果表明改进的方法
不仅保证了着色效果,同时又使 Phong明暗处理的效率提高了近 1/3。
关键词:Phong 光照模型;Flat 明暗处理;Gouraud 明暗处理;Phong 明暗处理;双线性插
值
中图分类号:
The improved algorithm of Phong shading
Li Lidan
(Liaoning Technical University, Department of Economics and Management College Foundation,
LiaoNing FuXin 123000)
Abstract: The paper makes simple statement and comparing towards the shading handling method
after the surface of the curvy object is discreted into small polygons,base on popular Phong shading
handling method. It puts forth the improving handling method----Phong shading handling method. this
research idea based on the best square approximation using Legendre polynomials to approximate the
Phong illumination model. At the same time using visual c + + implementation process of a light
sphere at infinity for the simulation of several different methods to compare the results show that the
improved method not only guarantees the coloring effect, while also allowing the Phong shading
efficiency by approximately 1 / 3.
Keywords:Phong illumination mode; Flat shading handle; Gourand shading handle; Phong shading
handle; bilinear interpolation
0 引言
真实感图形绘制是计算机图形学的一个重要组成部分,需要综合利用数学、物理学、计
算机科学和其他科学知识在计算机图形设备上生成彩色照片那样的真实感图形。它为 CAD/
CAM 系统用户和工程师进行交互式产品设计,制造和加工过程以及网络游戏的动态仿真提
供了强有力的技术后盾。
物体表面的光亮度可通过光照模型进行计算,因而真实感图形的输出质量取决于所采用
的光照模型。自从计算机图形学诞生以来,已提出了许多光照模型,Phong 因能较好的在局
部范围内模拟表面弯曲性,镜面高光比较真实和计算量相对较小而得到广泛采用[1]。为了进
一步减少计算量,真实实现图形绘制的实时性,许多学者对 Phong 模型的计算公式进行了研
究,探索 Phong 模型的快速明暗处理算法,以提高图形的绘制速度。
1 Phong 模型及其明暗处理
Phong 模型是一种在实验基础上推导出的光照模型,于 1975 年被首次提出,后来由布
莱加以修正,此模型由环境光,漫反射光和镜面反射光三项分量组成。具体形式如下:[2]
- 2 -
中国科技论文在线
])())(,,()[,,(),,(),,(),,( nsdpaa NHKNLbgrKbgrIbgrKbgrIbgrI ⋅+⋅+= 式(1)
公式表明,空间中一点的光亮度由以下因素决定:
aI , pI (分别为环境光的强度,入射光的强度)
aK , dK , sK (分别为物体表面对环境光的反射系数,,漫反射系数,为镜面反射系
数。)
以及物体表面的单位法矢量 N,单位光源矢量 L,表示最大镜面反射方向的单位平分矢
量 H;
以及物体表面光泽度 n(范围从 1 到无穷大),大部分情况下范围被限制为从 1~100 左
右。公式中的第一项为由物体所处环境决定的环境反射光强度;第二项为漫反射光强度;第
三项用以表示镜面反射光强度。
Flat,Gouraud 和 Phong 明暗处理是计算机图形学中采用这种光照模型常用的明暗处理方
法。通常先要将三维图形的表面用一系列的网格小多边形来代替,这样为后续工作提供了很
大的便利,对 Flat 明暗处理我们可以计算出每个多边形的法向量,假定光源在无穷远处,那
么每个多边形上所有点都具有相同的明暗度,故对于每一个多边形,只需计算一次明暗度,多
边形上每个可见点均按这个明暗度进行显示。模型本身是多边形或多面体时,可以采用 Flat
方法生成明暗效果,但是,如果它是作为曲面体的近似表示时,采用Flat明暗处理时在两个相邻
区域之间的明暗度不连续,很难生成令人满意的光滑图形。
Gouraud 明暗模型具有计算速度快,相邻多边形之间的颜色突变问题也得以解决,产生
的图像颜色过渡均匀,图形显得非常光滑等优点,但由于采用光强插值,它的镜面反射效果
不理想,而且相邻多边形的边界处的过渡有时不是很光滑。Phong 提出的双线性法向量插值
很大程度上改善了以上情况。仍假设光源和视点在无穷远处,它区别于 Gouraud 的是不是对
每一点的光亮度进行插值,而是对每一点的法向量进行插值,然后再用 Phong 光照模型计算
每点的亮点值。法向量插值可以产生正确的高光区域,效果要比 Gouraud 要好,但是它的计
算量也比 Gouraud 要大得多,影响了它在实时系统中的应用[3]。Bishop 和 Weimar 提出加速
的 Phong 明暗处理,利用泰勒级数来近似两个矢量的点乘[4]。
具体如下,物体表面由三角型表示时,设 O(x,y)是屏幕坐标系, ),( 111 yxP , ),( 222 yxP ,
),( 333 yxP 是三角形的三个顶点在屏幕上的投影坐标,,建立三角形仿射坐标系( βα , )。
从屏幕坐标至三角形仿射坐标的变换为
222
111
cybxa
cybxa
++=
++=
β
α
321 ,, NNN 分别是三角形三个顶点处的法向量,则三角形内部任意一点的法向量可以
写成 CByAxNNNyxN ++=++−−= 321)1(),( βαβα
其中
1213221
1213221
1213221
)1(
)(
)(
NccNcNcC
NbbNbNbB
NaaNaNaA
−−++=
+−+=
+−+=
设光源来自无穷远处,则漫反射因子 NL ⋅ =
ihygxfyexydx
cbyax
+++++
++
22
- 3 -
中国科技论文在线
其中
L
ALa ⋅= ,
L
BLb ⋅= ,
L
CLc ⋅= , AAd ⋅= , )(2 BAe ⋅= ,
BBf ⋅= , )(2 CAg ⋅= , )(2 CBh ⋅= , CCi ⋅=
将上式在三角形中心处进行二元泰勒展开,取其前三项得到运算式求漫反射因子[5] 。
但是泰勒展开式收敛速度慢,对大块的曲面片在远离中心点处的逼近效果不好,再加上
曲面分块逼近本身不保证边界连续,因此很容易引起曲面交界处的光亮度突变。针对泰勒展
开式的缺点,本文采用了切比雪夫多项式进行逼近。
2 算法改进
本研究基于最佳平方逼近的思想,采用勒让德多项式逼近 Phong 模型。
定义 1 设 ],[)( baxfy 在= 连续,函数类 )}(),(),({ 10 xxx nϕϕϕ "=Φ ,函数
)0],[)((0)( 至多有限个点上为在 baxx ωω ≥ ,若存在 * * * *0 0 1 1( ) ( ) ( ) ( )n nx a x a x a xϕ ϕ ϕ ϕ= + + +"
使得 ∫∫ −=− Φ∈ baxba dxxxfdxxxfx 2)(2* )]()([min)]()()[( ϕϕω ϕ ,
这里 )()()()( 1100 xaxaxax nnϕϕϕϕ +++= " 是函数类Φ中任意的函数,那么就称
)(],[)()(* xbaxfx ωϕ 上关于权函数在区间是 的最佳平方逼近函数。
当所讨论的区间为[-1,1],权函数为 1)( =xω 式时,勒让德多项式系
",1,0,)1(
!2
1)( 2 =−= nx
dx
d
n
xP nn
n
nn 作为函数系,得 )(xf 的最佳平方逼近多项式的
系数 nkdxxPxfka kk ",1,0,)()(2
12 1
1
* =+= ∫−
由于 Phong 模型比较复杂,对上式求系数中的积分值直接求比较难,利用如下求积公式
求得。
高斯-勒让德求积公式:
∫ ∑− =≈
1
1
0
)()(
n
k
kk xfAdxxf
)(
])!22)[(32(
2)( )22(3
])!1[(32 4
ξ+
++
++=
n
nn
f
nn
fR , 11 <<− ξ
其中 ),1,0( nkxk "= 是勒让德多项式 )(1 xPn+ 的零点,
而
)()()1(
2
1 knkn
k xPxPn
A
+′+
= , nk ,,1,0 "=
由于对于每条扫描线 y 来说,它所对应的 x 取值区间为[x1,x2],而勒让德多项式中的
变量在[-1,1]上取值,所以进行变量代换,令 x= +Δ tx
2
*x ,( ]1,1[−∈t , xΔ =x2-x1,
*x =
2
21 xx + )。
函数整理为:
- 4 -
中国科技论文在线
ihygxfyyexdxtxgxyexxdtxd
cbyaxtxa
tf
++++++Δ+Δ+Δ+Δ
+++Δ
=
*2*2**2
2
*
)
22
(
4
2)(
由于 Phong 光照模型中环境光是一定的,所以只需考虑漫反射光和镜面反射光,为了克
服 Gouraud 方法中高光不明显的缺点,我们将分别对漫反射光中的 NL ⋅ 和镜面反射光中
HN ⋅ 进行插值,这样由镜面反射作用的高光区域能够体现出来,同时提高了运算速度。因
为在每一个顶点都必定要计算光亮度,此过程中要计算 NL ⋅ 和 HN ⋅ ,所以并没有进行额
外的计算,对于每一个多边形的扫描先对这两项进行插值,插值公式还是按照式(2)(3)
(4)进行,只是将亮度 I换成 NL ⋅ 或 HN ⋅ ,然后根据 Phong 光照模型求出每点的亮点值。
用此插值方法使 NL ⋅ 和 HN ⋅ 的计算分别由 3 次乘法和 1 次加法减少到 1 次加法,所
以改进的算法要比传统的 Phong 方法效率要高。同时此方法对光源和视点不再无穷远的地方
时同样适用,只要求出各个顶点的 L,N,H,后续工作都是一样的。
3 三、实验结果:
以下是将球体表面按照 20条经线 20条纬线划分成 382个小平面在 visual C++上运
行的程序结果[6]:
图 1 Flat 图 2 Gouraud
Flat Gouraud
图 3 Phong 图 4 改进的 Phong
Phong Fig4. The improved of Phong
从图上很明显可以看出 Flat 方法对于曲面体光照的模拟很不真实,而 Gouraud 方法已经
使球体表面很光滑的过度,但它与Phong方法比较可发现高光处表现不明显,在改进的Phong
中可发现它与 Phong 方法处理的结果几乎没有区别,说明改进的方法效果很好。
- 5 -
中国科技论文在线
下面再来比较一下这几种方法运行的时间:
表一 运行结果对照
Tab. 1 Compared with the results of the operation
明暗处理方法 运行时间(ms)
Flat 16
Gouraud 32
Phong 108
改进的 Phong 78
从运行时间上发现改进的 Phong 方法比传统的 Phong 方法在效率上提高了近 1/3,只比
Gouraud 方法多一倍多一点的时间,这就使 Phong 方法更易于实时系统中的应用。
4 结论
本文提出来的改进的 Phong 明暗处理法,对漫反射项中 NL ⋅ 和镜面反射中 HN ⋅ 进行
了双线性插值,既减少了计算量,又保证了着色效果。实验表明,改进的算法的效率比传统
的 Phong 方法提高了近 1/3,而两者的显示效果相差无几。这使得 Phong 明暗处理技术在实时
图形系统中的应用又进一步。
[参考文献] (References)
[1] 唐泽圣,周嘉玉,李新友,计算机图形学基础[M] 北京清华大学出版社, 1995 . 260-268
[2]彭群生,鲍虎军.计算机真实感图形的算法基础[M].北京:科学出版社,-84.
[3]Brian Overland ,C++ IN PLAIN ENGLISH[M].北京电子工业出版社,
[4]邹耀斌, Gouraud 明暗处理的探索 图形图像处理与游戏编程[J] 2006 年 9月
[5]刘冬志,郭立, Fast Phong 明暗处理算法FPGA实现,计算机工程与应用[J]-108
[6]和青芳,计算机图形学原理及算法教程[M],北京,清华大学出版社 -321