(计算机软件与理论专业论文)实时动态阴影算法的研究及实现.pdf_第1页
(计算机软件与理论专业论文)实时动态阴影算法的研究及实现.pdf_第2页
(计算机软件与理论专业论文)实时动态阴影算法的研究及实现.pdf_第3页
(计算机软件与理论专业论文)实时动态阴影算法的研究及实现.pdf_第4页
(计算机软件与理论专业论文)实时动态阴影算法的研究及实现.pdf_第5页
已阅读5页,还剩56页未读 继续免费阅读

(计算机软件与理论专业论文)实时动态阴影算法的研究及实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程剑:实时阴影算法的研究 浙江大学硕士学位论文2 0 0 5 年2 月 摘要 现代g p u 技术的发展极大的推进了计算机实时渲染技术的应用,其主要的 应用包括交互式的3 d 图形建模程序和虚拟现实系统以及游戏、计算机动画等。 而对于显示的图形质量除了对纯三角面片的显示性能要求外,也提出了更高的要 求。一些渲染效果如反锯齿,移动模糊和投射阴影等技术在不久的将来也必将越 来越常见,并且对系统的要求也会更低。正如可见面判定算法用于判断能够被眼 睛看到的表面,阴影算法用于判断光源能看到的表面,那些光源看不到的表面将 处于阴影中,而那些能被光源看到的表面将处在阴影之外。物体间相互遮挡形成 了阴影,阴影区域的形状大小和物体的形状,相互间位置,光源的位置和形状都 有密切的关系。因此,对于一个三维的场景,阴影有很强的立体表现能力。人们 通过实验发现阴影对图像质量的提高主要表现在以下几个方面:首先,阴影可以 对3 d 场景中的物体的相对位置提供视觉线索,使得整个场景更易于理解。其次, 阴影也直接提高了图像的真实感,并且使得创建复杂的光照效果成为可能。现代 图形硬件的不断发展,使得新的阴影生成算法的提出及实现成为了可能,著名的 关于阴影生成算法的最为完备的讨论一w o o ,1 9 9 0 - - 也已经在s t a r 6 0 中得到了 更新。本文主要概述了一些实时阴影生成算法,以及我们自己在这方面的一些研 究。其它的一些对硬件系统要求相对较高的,可以生成高质量阴影的技术,如基 于光线跟踪或全局光照的技术,将不在我们的讨论之列。根据应用的不同,不同 算法的重点可以是在保证实时的帧率,或是在生成高质量的阴影以及半阴影效果 这两个不同的方面。到目前为止,还没有任何一个算法可以实时的生成动态场景 中的阴影,同时还保证计算出的阴影在物理上的正确性。我们的文章对各种算法 提供了一个较为全面的概括,讨论了不同算法的优点,局限,质量和复杂度之间 的差别。通过对它们的观察,我们也扩展了其中的某一方法,并提出了其在现代 的图形硬件上的一个实现过程,包括在一个3 d 坦克对战游戏b z f l a g 中用o p e n o l 进行实现的细节。通过和其它算法进行比较,可以发现我们的算法在实时性和正 确性之间作出了较好的平衡,可以应付大多数对实时性要求较高的系统。另外, 通过本文提供的对其它实时阴影生成算法的全面分析,程序员们可以得到一个较 为全面的参考,并从中选择一个对于当前应用最为适合的算法。 关键字? 现影算法软酾影。实时动态场景。函形光源 程剑。实时阴影算法的研究浙江大学碗士学位论文2 0 0 5 年2 月 a b s t r a c t r e c e n ta d v a n c e si ng p u t e c h n o l o g y h a v e p r o d u c e d as h i f ti nf o c u sf o rr e a l - t i m e r e n d e r i n ga p p l i c a t i o n ,w h e r e b yi m p r o v e m e n t si ni m a g eq u a l 姆a r es o u g h ti na d d i t i o n t or a w p o l y g o nd i s p l a yp e r f o r m a n c e r e n d e r i n ge f f e c t ss u c ha sa n t i a l i a s i n g ,m o t i o n b l u ra n ds h a d o wc a s t i n ga r eb e c o m i n gc o m m o n p l a c ea n dw i l ll i k e l yb ec o n s i d e r e d i n d i s p e n s a b l ei nt h ed e a l f u t u r e r e c e n tq u i c ki m p r o v e m e n t si ng r a p h i c sh a r d w a r e m a k e st h e g e n e r a t i o no f n e w a l g o r i t h m sp o s s i b l e n e wa l g o r i t h m s t a k e c h a r g eo f n e w c h a r a c t e r so fr e c e n tg e n e r a t i o nh a r d w a r ew i l lp r o d u c em o r er e a l i s t i ci m a g e si nm o r e e f f i c i e n tw a y s h a d o wa l g o r i t h m sa n dv i s i b l e - s u r f a c ea l g o r i t h m sa r ee s s e n t i a l l yt h e s a n l e v i s i b l e - s u r f a c ea l g o r i t h m sd e t e r m i n ew h i c hs u r f a c e sc a r lb es e e nf r o mt h e v i e w p o i n t ;s h a d o wa l g o r i t h m sd e t e r m i n ew h i c hs u r f a c e sc a nb es e e nf r o mt h el i g h t s o u l e t h u s t h es u r f a c e st h a ta r ev i s i b l ef r o mt h el i g h ts o u r c ea r en o ti ns h a d o w ; t h o s et h a ta r en o tv i s i b l ef r o mt h el i g h ts o u r c ea r ci ns h a d o w w h e nt h e r ea r em u l t i p l e l i g h ts o u r c e s ,as u r f a c em u s tb ec l a s s i f i e dr e l a t i v et oe a c ho f t h e m ac o m p l e t ea n d f a m o u s s u r v e y o ns h a d o w a l g o r i t h m si s w o o ,1 9 9 0 - ,w h i c h h a sb e e n u p d a t e db y j - m h s s e n f r a t ze ta 1 5 9s h a d o w sa r eu s e f u lf o rav a r i e t yo f 矗强s o n s :f i r s t 。t h e yh e l p u n d e r s t a n dr e l a t i v eo b j e c tp l a c e m e n ti na3 ds c e n eb yp r o v i d i n gv i s u a lc u e s s e c o n d , t h e yd r a m a t i c a l l yi m p r o v ei m a g e r e a l i s ma n da l l o wt h ec r e a t i o no fc o m p l e xl i g h t i n g a m b i a n c e s t h ee m p h a s i si sp l a c e do nag u a r a n t e e df r a m e r a t e ,o ro nt h ev i s u a lq u a l i t y o ft h es h a d o w si n c l u d i n gp e n u m b r ae f f e c t so f “s o f ts h a d o w s 。o b v i o u s l yn os i n g l e m e t h o dc a nr e n d e rp h y s i c a l l yc o r r e c ts o ns h a d o w si nr e a l t i m ef o ra n yd y n a m i cs c e n e ! h o w e v e ro u rp a p e ra i m sa tp r o v i d i n g a l lb a s i cs t u d yo fs h a d o w a l g o r i t h m sw h i c h c a n p r o d u c e s h a d o wi ni n t e r a c t i v e w a y i np a r t i c u l a r w ed i s c u s st h e a d v a n t a g e s , l i m i t a t i o n s ,r e n d e r i n gq u a l i t y a n dc o s to fe a c ha l g o d t h m r e c o m m e n d a t i o n sa r c i n c l u d e db a s e do ns i m p l ec h a r a c t e r i s t i c so ft h ea p p l i c a t i o ns u c h 船s t a t i c m o v i n g l i g h t s ,s i n g l eo rm u l t i p l el i g h ts o u r c e s ,s t a t i c ,d y n a r n i cg e o m e t r y , g e o m e t r i cc o m p l e x i t y , d i r e c t e do ro m n i d i r e c t i o n a ll i g h t s ,c t c f i n a l l yw ep r o v i d ean e ws h a d o wa l g o r i t h m w h i c he x t e n d st h el i n e a rl i g h ta l g o r i t h mt os i m u l a t ear o u n df a c el i g h t w ea l s og i v e i 招o p e n g li m p l e m e n t a t i o nd e t a i l ,w h i c hs h o u l dg i v ep r o g r a m m e r ag o o dr e f e r e n c e f o rh i s h e rn e e d 。 k e y w o r d s :s h a d o wa l g o r i t h m ,s o f ts h a d o w s ,r e a l - t i m e ,d y n a m i cs c e n e ,s p h e r es h a p e l i g h t 程剑。实时阴影算法的研究 浙江大学硕士学位论文2 0 0 5 年2 月 1 1 引言 第一章绪论 在现实世界中,阴影无处不在。阴影提供了光源对物体的照射信息,因此阴 影对于人们理解三维场景的影响是巨大的。在计算机图形社区中,阴影的作用越 来越被各种图形团体所认识。使用阴影,我们可以创造出很多生动的,甚至是奇 异的视觉效果。没有阴影的作用,计算机图形的世界就会逊色很多。通过添加阴 影,其生成的图像无论是在真实感或质量上都会得到很大的提高。因此,也有越 来越多的商业系统开始对阴影提供了支持,并且也取得了很好的效果。可以预见, 在不久的将来,具有生成更加高质量图形的实时系统将进入人们的生活和工作 中,这也必将对阴影生成技术提出更高的挑战。在计算机图形世界中,正是阴影 和其它各种光照技术的相互结合,才使得计算机可以用来为我们塑造出各种精彩 异常的人物或场景。并且通过交互式的设计,使得参与其中的人们可以得到极其 丰富的体验。这就是计算机动画和各种3 d 游戏带来的魅力。它们使得人们沉醉 于其中而可以忘记真实的自己,穿梭于由计算机生成的虚拟世界,感受到由各种 光和影所带来的视觉冲击。更加重要的是利用现代大众化的图形硬件,人们可以 发挥各种想象力,创造出比现实更加丰富多彩的世界,而且不需要一砖一瓦! 为了让我们对阴影的作用有一个大致印象,图1 提供了一个具体的例子。不 需要仔细的察看,我们就可以强烈感受到图中两幅图片之间的巨大差异,左图的 质量要比右图好的多得多。虽然它们之间的区别仅仅只是有无添加阴影。通过在 其中增加阴影的效果。场景中物体的立体信息立刻进入了我们的大脑,而右图却 没有任何的立体感可言,其对场景的表达更是苍白无力。在某些情况下,如果我 们不给出阴影,一些特殊的物体的几何信息甚至是难以判断的。自从在f p s 游 戏q u a k e 中通过大量使用l i g h t m a p 技术给场景添加了静态阴影效果以来,越来 越多的图形研究人员加入了对阴影算法的研究。而其中又对实时阴影算法的研究 最为热门。各种硬件厂商也在图形卡中加入了对阴影生成的直接支持。如n v i d i a 公司在他们的产品中提供了o p e n g l 对阴影的扩展:s g i x _ s h a d o w 和 s g i xd e p t ht e x t u r e 用于实现s h a d o w m a p 阴影的计算。在图形应用领域,各种不 同类型的阴影生成技术更是五花八门,层出不穷。一些较新的图形引擎,如 c r y t e k 推出的c r y e n g i n e 以及i d 为d o o m 3 设计的引擎都提供了对动态阴 影的支持,以生成更为生动、逼真的场景。这些系统在极大的改善了生成图像的 程剑t 实时阴影算法的研究 浙江大学硕士学位论文2 0 0 5 年2 月 质量的同时,也提高了游戏的可玩性。其动态阴影功能也被称作是一大卖点。 匿l 左氍场景中添翻7 龋影光源位于圈帕右上方,舂强场景没有添加弱影。 任何物体被光源照亮的同时都会投射阴影及接收阴影。我们称投射阴影的物 体为遮挡物( o c c l u d e r ) ,接收阴影的物体为接收者( r e c e i v e r ) 。物体可能相互投 射阴影,也可能形成自阴影,即投射阴影在自己身上。可能最早的一个比较彻底 的研究了阴影的人是达芬奇1 ,他专注于绘制静态的图像。还有就是兰伯特2 , 描述了生成阴影的几何原理( 图2 ) ,以及最近的k n i l l 等人的文章3 。 随着计算机图形技术的突飞猛进,研究者们通过试验了解到了阴影对于人们 理解场景的各种影响。通过不同的心理学试验。他们知道了阴影对于理解以下 些方面起着重要的作用: 遮挡物的大小和位置4 , 5 , 6 , 7 , 8 遮挡物的几何形状5 接收者的几何形状5 w a n g e r 4 研究了阴影质量对于理解场景中物体相互关系的影响。h u b o n a 6 等人 则讨论了阴影对3 d 视觉所起的作用和效果。k e r s t e n 等7 , 8 , 5 研究了物体的移动和 相对深度的关系。他们发现通过调整阴影的移动方式可以大大的改变遮挡物体的 表现形式。 所有的心理学试验都表明:阴影生成技术对于现代韵计算机图形应用程序来 说是不可或缺的。在图像中加入阴影更有利用我们正确的理解三维场景,而软阴 影有助于生成真实感的场景。 自从w 0 0 9 对于阴影算法的研究以来,计算机图形技术的进展和消费级的图 形硬件的发展使得生成实时的真实感三维场景成为了可能1 0 。然而,要在一个实 时的系统中生成交互式的阴影,特别是真实的软阴影,仍然将是一项困难的工作。 人们也对其做了各种细致的研究,并且产生了很多好的算法,较好的在阴影的质 量和渲染速度之间做了权衡。典型的算法包括了在图像空间和在物体空间的算 法,以及介于两者之间的混合体。它们都有各自独到的特点,具体算法的介绍放 在后面的几章中。 程创:实时阴影算法的研究 浙江大学硕士学位论文2 0 0 5 年2 月 豳2 :左图是达芬奇对于鞠影的研究在豳是兰伯特的秘影生战示意图。 1 2 硬阴影和软阴影的基本概念 1 2 1 什么是阴影 考虑一个场景由光源l 照亮:阴影的接收者为场景中能被l 照到的物体。如 果从场景中的一点p 看出去看不到光源,p 就被认为是处于阴影中,因为光源发 出的光也不能到达p 点。如果p 只可以看到部分的光源,则p 处于半阴影中, 本影和半影形成了整个的阴影部分。所有的阴影可以分为两大部分n : 自阴影,由遮挡物的阴影被投射到自己身上形成。 投射阴影,由投射到其它物体之上的阴影形成。 这种区分是有意义的,后面后我们会发现不同的算法对于它们的处理也会有 所差异。 1 2 2 阴影的作用 阴影对于理解三维中物体的几何信息有着重要的作用。我们通过几个实际的 例子来说明这一点: 首先,阴影有助于我们理解物体间的相互位置关系和大小4 ,5 ,6 ,。7 r 。利用投 射阴影,我们可以决定物体在空间中的位置( 图3 ) 。 其次,阴影也有助于理解复杂遮挡物的几何形状5 ( 图4 ) 。 最后,阴影也有助于理解复杂接收体的几何信息5 ( 图5 ) 。 程剑;实时阴影算法的研究 浙江大学硕士学位论文2 0 0 5 年2 月 舀3 左酉中的机器a 的位置缀难羚畿右边 的两幅圈鼬是离地面越来越远, 图s 鸥彰提供t 接收者的j l 伺信基强中司 以看出地萄地形的变纯 强4 萌影提供7 遮挡物的a 伺信惑,左图中的机器入拿7 一个邵 雨右图中的机器久鼬拿t 一个茶壹, 1 2 3 硬阴影和软阴影 对阴影来说一种最简单的情况就是硬阴影,也就是说场景中的点只有在阴影 中或在阴影之外两种状态。这种阴影只有在一个点光源的照射下才可能存在,然 而在现实中却并不多见,这使得硬阴影降低了图像的真实感( 图6 ) 。然而点光 源在计算机图形中更易于实现,在下一章中我们就将介绍几个可以实时计算硬阴 影的算法。在更现实的场景中,光源是有一定的尺寸的。这使得接收者上的点可 能看到部分的光源。我们定义一个点位于本影中,如果光源射向它的光线被全部 遮挡了。否则,如果只有部分被遮挡,则这个点位于半阴影中。虽然对于现实中 的物体,判断它们形成的本影和半影非常困难。然而对于多边形的物体,其本影 和半影区域的形状却可以通过光源和遮挡物的边和点构造出来“( 图7 ) 。 软阴影比硬阴影有多得多的真实感( 图8 ) 。特别是软阴影的半影区域可以根 据光源,遮挡物,接收者之间相互的位置关系进行变化。在计算机图形中,当光 源和遮挡物的距离远远大于遮挡物和接收者之间的距离的时候,我们可以用点光 源来近似一些较小的光源。对于其它情况,使用软阴影可以带来更为真实的效果。 程剑实时阴影算法豹研究 浙江大学硬士学位论文2 0 0 5 年2 月 髑6 硬萌影 1 3 实时性 强7 软踢影右鹭中黑色部分为本影灰色 部分沲半彰 对于一个现代的实时系统来说,其演染速度在1 0 f p s 之上是一个最基本的要 求,一些系统的性能甚至可能需要加倍。所以度量一个阴影算法的性能的很重要 的一个参数就是它的显示速度,以及它对复杂场景的适应性。因为我们的文章主 要研究的是实时性的应用,所有对于那些基于复杂的预处理的技术,我们将不进 行深入的讨论,即使有些技术经过一些修改使得其在图形工作站上也可以达到实 时的效果”,例如一些已有的实时光线跟综技术,或者是使用了基于全局光照的 辐射函数的方法。典型的是将函数投射到s p h e r i c a lh a r m o n i c 基函数以简化对球 面求积的s hl i g h t i n g 方法1 4 。这些方法通过大量的预处理,可以达到动态光源 的实时效果。但它们对于场景的要求还是过于苛刻。 1 4 对场景的要求 阴影算法通常会对场景提出特殊的要求。场景中物体的模型的构造( 例如通 过纹理的方法计算阴影的算法通常需要物体是由多边形组成,或者是参数化的对 象) ,有些算法还需要可以对场景中的遮挡物和接收者进行明确的区分。后者对 于算法实时性的提高有着很大的帮助,然而对于处理自阴影的能力却尚为有限。 程剑t 实时阴影算法的研究浙江大学硕士学位论文2 0 0 5 年2 月 1 5 章节组织 本文以阴影为对象,对各种阴影生成算法作了详细深入的探讨。整篇文章的 章节组织如下: 第一章绪论中,介绍了阴影的作用和一些与阴影相关的基本概念。如本影半 影等。以及实时性阴影算法中我们对其实时性的定义等。 第二章全面分析了现有的动态硬阴影生成算法,着重对现在较为流行的基于 图像空间的算法:阴影表算法和基于对象空间的算法:阴影体算法以及对它们的 各种扩展展开了讨论。 第三章讨论了软阴影算法,并在章节的后半部分提出了一种新的软阴影生成 算法。该算法将h e i d r i c h 的基于s h a d o w m a p 的线性光源方法扩展到了圆形的面 光源。 第四章详细介绍了我们的软阴影算法使用o p e n g l 进行实现的方法。并总结 了算法的优缺点以及可能的改进方法。 最后在第五章,总结了本文所论述的工作以及主要的贡献。分析了现存的 软阴影算法存在的难点,并对该技术的发展方向作了一定的介绍和建议。 程剑:实时髓影算法的研究 浙江大学硕士学位论文- 2 0 0 5 年2 月 2 1 引言 第二章实时阴影的基本算法 本篇文章主要是讨论实时的软阴影生成算法,我们将在下一章进入软阴影技 术的讨论,从中我们可以发现,很多的实时软荫影算法都是在硬阴影算法的基础 之上进行实现的。因此在这一章中,我们着重介绍几个较为经典的硬阴影生成算 法。分别是投射法,阴影纹理,阴影表和阴影体。并且讨论了各自的特点以及存 在的扩展方法。 2 2 投射法生成阴影 投射法生成阴影技术通过把三维中的物体进行几何投影变换,将其按点光源 或线光源的方向投射到某个地面上,并对投射出来的物体用阴影的颜色绘制一 遍。来完成阴影的绘制过程1 5 , 1 6 ( 图1 1 ) 。因此,投射阴影也称为伪阴影,它的 特点是: 使用了几何投影变换的技巧。 将3 d 模型压平到了平面( 地面) 上。 阴影只能应用于平面,对于每个可能接 收到阴影的面( 地面或墙壁) ,都要对 其进行投影。 能处理点光源和有向光源。 我们知道,要完成一个从三维空间到三维空 间的投影,需要构造一个合适的4 x 4 阶的可逆 矩阵,并使用齐次坐标与其相乘来完成。但如果我们构造的是一个不可逆并且秩 为3 的矩阵的化,就可以使用它来完成从三维到二维的投影变换了。在投影法中, 我们正是使用了这样的一个矩阵,其定义如下; 假设光源处于坐标的原点,投影平面( 地面) 韵方程为a ) ( + b y + c z + d = 0 ,给 定场景中的任意一个顶点s ( s x ,s y , s z ,1 ) ,通过它和光源两点豹直线方程为as , a 为任意的实数。由此可知,在直线与投影平面的交点处需要满足方程 d ( a s x + b s y + c s z ) + d = 0 , 所以 = - d f a s x + b s y + c s z ) 将这一点代回到直线方程,我们得到了交点 程剑;实时阴影算法的研究 浙江大学硕士学位论文2 0 0 5 年2 月 一d ( s x ,s y , s z ) ( a s x + b s y + c s z ) 这样我们可以得出将任意一点沿光源方向投射到平面a x + b y + c z + d = 0 的矩阵 就是 一d0 0- d 00 a b oo 00 一d0 c0 对于光源不在原点的情况,我们可以先通过一个平移变换将光源移动到原点,进 行投影以后再通过一个反向的平移矩阵完成整个的过程。当然这三个矩阵可以先 事先进行相乘,然后用乘得的矩阵对场景中的点进行一次的变换。 对于有向的光源,假设其方向为d = ( d x ,d y , d z ) 。投影平面的方程同上,使 用上面计算点光源所采取的方法,可以得出其投影矩阵为 6 x 咖+ c x d z - b x d x - - a 幽 - a d z 0 a d x + c d z - b x d z - - c x d x c u y a d x + b 砂 - d x d x - d x a y - d d z a d x + 6 咖+ c d z 这个矩阵可以对任意方向的任意平面进行投影,并不需要事先进行任何的转换。 2 3 阴影纹理 阴影纹理就是l i g h t m a p 技术 ,最先的应用是在q u a k e 中。通过预先计算好 每个象素的光照系数,并将计算结果存储到称为l i g h t m a p 的纹理中,渲染时通 过查询l i g h t m a p 表,达到精确至象素级的光照效果。 阴影纹理的特点有: 可以实现真实的光照效果。 难以实现动态光源的阴影效果。 可以和顶点光照算法相结合实现实时的动态光照效果。 每一点的阴影计算都是在预处理阶段完成,没有运行时的开销。 运行时候的所有计算都是通过硬件来完成,所以很快。 将表面纹理的数色光强度部分分离出来。从而可以用更低精度的纹理进 行存储。 在渲染时,对于每一个三角形,先使用普通纹理进行粘贴,然后用阴影纹理 对各个点的亮度进行调整( 圈1 1 ) 。图中左边的两幅图像分别是墙壁的表面贴花 纹理和它的l i g h t m a p 。贴花纹理对于墙的不同部分都是一样的,所以可以高度重 复的将它贴到墙的不同位置。而对于j i g h t m a p 却不能重复使用,需要对墙上的 程剑:实时阴影算法的研究 新江大学硕士学位论文2 0 0 5 年2 月 每一个点都计算它的光照系数。但对于实际应用中的大多数场景,只需要很小精 度的l i g h t m a p 就可以生成不错的光照效果。图中也可以看到,墙面的l i g h t m a p 被成倍的放大了。 萤n 硝彩纹理再于调接物体颧色的蹶理。 通过观察我们可以发现,对不同场景计算出来的阴影纹理有如下几个特点: 场景中某个面的散射光通常都有较低的变化频率,因此,阴影纹理需要 的纹理空间通常都较低。 阴影纹理通常都可以被放大到多倍,而不会出现失真。因此。我们可以 把多个面的阴影纹理压缩到个纹理图像中( 图1 2 ) 。 纹理表通常只记录了亮度信息。因此,可以更加有效的压缩纹理空间。 在具体的实现时,可以用两次渲染或是多纹理单元来应用阴影纹理。两次渲 染的方法中,第一遍用贴花纹理进行绘制,第二遍用阴影纹理调整各点的亮度。 如果显卡支持多纹理单元,则可以用第一个纹理单元添加贴花纹理,在第二个纹 理单元加载阴影纹理进行调整。 图1 2 中,多个面的阴影纹理被编辑到了一个 纹理单元中,其中各个不规则的小方形都对应了 一个面的l i g h t m a p 。每个l i g h t m a p 都是通过离线 的辐射度解法器来生成的。各个面在渲染时需要 指定正确的纹理坐标来进行定位。 由于阴影纹理计算量非常的巨大,所以大多 数的l i g h t m a p 只能应用在静态的场景中。然而对 于一些特殊的场合,我们也可以使用l i g h t m a p 来 达到动态阴影的效果。例如模拟一些闪烁的光源 田t 2q 抛妇2 乒缈熙影纺羁艮 或者以一定规律进行明暗变化的光源所生成的阴影。在这类方法中,我们首先为 不同的光源指定类型,包括闪烁,脉冲等类型。然后用普通的方法为每一个光源 生成对应的阴影纹理,这样,每个面就对应了多个的阴影纹理。渲染的时候,需 程剑:实时阴影算法的研究 浙江大学硕士学位论文2 0 0 5 年2 月 要根据一定的频率对各个属于不同类型光源的l i g h t m a p 中的亮度值进行调整。 最后每个面将属于它的所有阴影纹理进行混合,通常使用的混合函数就是取较大 值。最后再将混合完成的阴影纹理渲染到各个面中,由于对各个l i g h t m a p 的调 整参数是根据其所属光源的类型而随时间变化的。所以每一帧的亮度也会变化, 从而模拟出动态的光照。 另一个特殊的情况是模拟聚光灯的效果”( 图1 3 ) 。图中所使用的聚光灯的 阴影纹理如图1 1 的左下脚的图片所示,聚光灯在墙壁上的移动可以看作是阴影 纹理在墙上的移动。因此,只需要使用纹理矩阵对纹理坐标进行平移,我们就可 以实现聚光灯移动的效果。而通过在纹理矩阵加入缩放因子,又可以实现光圈的 大小变化。 盈1 3 硝彩纹理实现聚光铂效果,第二幅第三幅国像:j ! :韵遥对前一幅霉像进行硝彩纹理坐标 昀平移和缩救最形成的。最磊一幅改变t 墙壁的蹶始光照强麦, 由于o p e n g l 支持齐次的纹理坐标,我们还可以对一个阴影纹理进行投影操 作。这样,一个阴影纹理不仅可以投影到一个面,还可以投影到空间中的任意多 个平面。打开o p e n g l 的纹理坐标自动生成功能,并设置好投影矩阵,o p e n g l 就会根据场景中每个顶点的坐标通过纹理矩阵的变换生成该点的纹理坐标。对于 一个位置在s ( s x ,s y , s z ,1 ) 的光源,在方向为d ( d x ,d y , d z ) 上的透视矩阵可 以如下计算: 通过一个平移变换将光源位置平移到原点,变换矩阵为 m 1 = l00 一麟 01 0 - s y 0 01 一龆 o o o 1 然后通过两个旋转矩阵将方向d 与视点坐标下的z 轴对齐,分别是 m 2 = c o s 口一s i n a0 0 s i n 口c o s 口00 0010 o001 m 3 = 其中s i n 口2 丽d y s a 2 丽d x , c o s9 o - s i n 卢 o 0s i n 母 1o 0 c o s 芦 0o 程剑;实时阴影算法的研究 浙江大学硕士学位论文2 0 0 5 年2 月 如2 赤,唧= 南a 最后使用原点处的投影矩阵做变换,投影矩阵为 m 4 = _ 2 no r 一, o 旦 f b 0 0 o0 型 o ,一, 坐 o f b u + m ) 一2 力 ,一nf h 一10 其中i ,r ,t ,b ,n ,f 分别到投影面的左右上下边相对原点的坐标值,和原点到近裁 减面和远裁减面的距离。经过上述一系列变换以后,空间中任意一点的x , y 坐标将被投影到区域 一1 ,1 】之间。这还不能满足我们纹理坐标的要求,需要另 外乘上一个偏移缩放矩阵,即使得: x = x 2 + 0 5 ,y = y 2 + o 5 ;将x ,y 的值变换到区间【0 ,1 】。这个矩阵为 m 5 = 三0 2 o 土 2 oo 0 0 o 1 2 o 三 2 o o 0i 这样整个变换过程就是如下面的式子所示 = m 皿 娩 2 毒 耽 其中m = m 5 m 4 m 3 m 2 x m l ,也就是我们 需要的纹理矩阵。而s q ,“q 就是我们最后需要得 到的纹理坐标。图1 4 给出了一个投射阴影纹理的 例子,阴影被正确的投射到了物体的各个面上。 这种投射阴影的技术不仅可以用于探照光,对于 任意形状的光源都可以生成正确的阴影效果。而 且,在后一章中介绍的软阴影算法中。我们也可 以看到它的应用。由于对场景中的每个面都使用 了投射阴影t 所以投射纹理办法不能处理自阴影 图1 4 投射阴影纹理 的情况。导致了场景中背向光源的面也会被照亮。 程剑:实时阴影算法的研究 浙江大学硕士学位论文2 0 0 5 年2 月 另外一种对阴影纹理的应用是作为高光区域表1 7 。使用它对物体的高光区域 进行控制。高光区域纹理用于调整高光区域,阴影纹理用于调整物体的散射光强 度。一个例子就是模拟地面上的水滩反射高光的效果( 图1 5 ) 。图中地面的高光 部分通过一张高光表进行调整,使得只在有水的区域出现高光。再将结果与散射 光进行叠加,模拟出了水面的效果。图1 5 中第一幅图是根据顶点光照生成的高 光图。该图通过第二幅高光表的过虑,去掉了水面以外的高光,最后再将它与同 样由顶点光照生成的散射光照图合并,生成了好像是任意形状的水面反射出高光 的效果。 霉ls 个甍光表靛使雨钠子, 除了用纹理来存储阴影,纹理还可以用于存储环境的光照信息,生成环境反 射等真实的效果。不同的环境反射方法包括了球面映射,双抛物面映射,立方体 环境映射等,具体的方法已经超出了我们要讨论的主题,这里就不再赘述。 2 4 阴影表算法 计算阴影的一个基本操作就是从场景中区分出从光源看过去被隐藏的部分 1 8 t 1 9 却。很巧的是,这和隐藏面区分是一样的。但是这次需要从光源的位置去看 而不是从观察者所在的视点。最初的一个计算阴影的算法就是阴影表算法 ( s h a d o wm a p ) 。阴影表是一个完全基于图像空间的算法,所以,它也继承了以 下一些图像空间算法的特点: 对于场景中物体的几何信息没有任何的要求。 能适应复杂的场景,算法的复杂度不随着场景中物体的复杂度的增加而 增加。 能生成自阴影等特殊的阴影效果,算法有较好的鲁棒性。 易于编程实现。静态场景只需要一次的渲染过程,动态场景也只需渲染 两次。 由于图像空间的精度限制,阴影表算法必须处理阴影的边界混淆现象。 阴影表算法最早由l a n c ew i l l i a m s 在1 9 7 8 年提出。由于它的快速及鲁棒性, 很快就被大家所熟识。在p i x e r 的r e n d e r m a n 中就使用了阴影表来生成阴影。 s i g g r a p h 中主要的几篇关于阴影表的文章分别是 l a n c ew i l l i a m s7 8 “,【w i l l i a m r e e v e ss 7 2 1 羊1 1 m a r ks e g a l9 2 1 1 9 。下面我们对该算法做一个简要的介绍。 程剑t 实时阴影算法的研究 浙江大学硕士学位论文2 0 0 5 年2 月 通过观察可以知道,场景中能被光源照到的点的特点就是,在光源到该点的 方向上它离光源最近,而在它之后的点都被它挡住了。所以,在视点的方向渲染 场景的时候,对于每一个帧元,可以通过判断它到光源的距离是否最近来决定其 是否处于阴影之中。整个算法需要两步或三步的渲染过程: 第一遍,从光源所在的视角,将场景渲染到深度缓存中。通过这一步,我们 从深度缓存中可以取得一个深度表,也就是通常说的阴影表( s h a d o wm a p ) ,并 将其存储到一个纹理对象中。表中的每个象素正好记录了离光源最近的帧元的深 度值( 图1 1 ) 。 强1 1 点兜源的影襄,左酉是城视点著戳的场景右蜜是从光源处计算褥勤的深度表。 有了这张阴影表,就为接下来绘制视点方向的场景以及阴影做好了准备。这 还需要经过两次的渲染过程: 只打开环境光源,将场景绘制到帧缓存,使用标准的深度缓存技术,用 于隐藏面的移除,这时候,所有的物体都绘制为处于阴影内。 场景光栅化后,对于其中的每一个帧元,取得帧元相对于光源的位置 x y z 。然后将其z 值同存在深度表中与光源的相对位置为x y 的点的深 度值进行比较。如果大于阴影表中的深度值,那么这个点就必定处在阴 影内。否则,如果约等于阴影表中的值,则这一点在阴影之外( 圈1 2 ) 。 打开所有的光源,对场景进行第二遍绘制。去除那些被判断为处于阴影 之中的帧元。 , , 光源 椿度裘阁像平面 l 糸瞍疑巾的f _ i 弘a +。 * , i 、 “。o 脚 的蹦离z = = f ; 视点啦管 视平面 即帧缓存 的距离z = l j 视点 埘 毯1 2 明影表算法二维示意豳 图1 2 中,蓝色圆点代表场景中我们当前需要判断其阴影状态的帧元。左图中绿 色的帧元挡在了蓝色的前面。所以在阴影表中记录的是绿色帧元的深度值a ,通 过比较我们发现蓝色帧元的深度值b 要比a 大,所以可以断定它是在阴影内。 程剑;实时阴影算法的研究浙江大学硕士学位论文2 0 0 5 年2 月 右图则没有帧元挡在蓝色帧元的前面,所以它的值与记录在阴影表中的值应该是 一样的,即可以判断其在阴影之外。 阴影表的 个最大的优点是现在的很多图形硬件都对它提供了直接的支持, 因此可以获得最大的性能优势。o p e n g l1 4 中加入了两个扩展用于支持阴影表。 它们分别是g l a r bd e p t h 、 。更进一步的,_ t e x t u r e g ls o i xs h a d o w 还可以使用p b u f f e r 和绘制到纹理的功能来提高性能。而对于不支持这些扩展的 硬件,我们也可以通过多纹理单元,或是多次渲染操作来完成阴影的计算。 阴影表算法不但方法上很直观,在现在的图形硬件上的实现也很容易。下面 我们介绍阴影表算法在支持多文理单元的硬件上的实现步骤。 首先需要生成深度表即阴影表。利用硬件上的深度缓存,这一步很容易实现。 设置投影矩阵,使得其对应的视域空间为光源的视域空间。然后将场景演染到深 度缓存中。完成后,将深度缓存读出并存入一个纹理对象内。这种方法存在的一 个问题是,如果光源的视域空间太大,得到的深度值范围可能超出通常纹理对象 的8 b i t 的精度值。解决办法是尽量的减小光源的视域空间,或采用更高精度的缓 存来存储深度值,如p b u f f e r 。 接下来渲染场景中阴影的时候需要访问深度纹理以进行深度的测试,但这些 复杂的操作都可以通过使用投影纹理及多个纹理单元来在硬件上完成( 在上一章 中l i g h t m a p 一节中有对于投影纹理的详细介绍) 。要访问某个帧元在深度纹理中 对应的值,可以通过打开o p e n g l 的g le y el i n e a r 纹理坐标自动生成功能。 将自动生成的纹理坐标( s ,t ,r ,q ) 作为各顶点在光源的视域空间中的( x ,y ,z w ) 坐标。当然这个纹理坐标的转换需要和生成深度表时的转换相一致,然后进一步 将其转为可以直接到深度表中进行匹配的坐标。整个转换可以加载到生成s ,t q 坐标的四个视点线性平面方程中,而不需要使用纹理矩阵。这四个平面方程刚好 可以组成一个4 x 4 的矩阵。如下式所示: 印l a n e o 】 t p l a n e o 】 r p l a n e o 】 q p l a n e o 】 s p l a n e 1 】 t p l a n e 1 r p l a n e 1 】 q p l a n e 1 】 s p l a n e 2 】s p l a n e 3 】 t p l a n e 2 】t p l a n e 3 】 r p l a n e 2 】r p l a n e 3 】 q p l a n e 2 】q p l a n e 3 】 盈 拖 z e w e 接下来就需要决定各个平面方程的参数值了。首先要知道,我们得到的最初 的顶点坐标是在视点坐标系下的坐标,它经过了模型变换以及视点的视图变换, 两个变换,也就是: 匿 e v e v z 日w ( 1 0 0 k a t ) ,竹d f r z x m o d e l i n g m a t r i x x o z o w o 程剑:实时阴影算法的研究 浙江大学硕士学位论文2 0 0 5 年2 月 因此我们需要先将顶点转换到世界坐标,然后再进一步用一个视域变换转换到光 源的视域坐标。最后调整到纹理坐标范围即【o 。l 】。如下式: 】 1 2 2 1 1 22 11 22 1 l i g h t f r t 口t u m ( p r o j e c t i o n ) m a t r i x l i g h t v i e w ( 1 0 0 k a t ) m a t r i x i n v e r s e e y e v i e l ( 1 0 0 k a t ) m a t r i x 施 抬 z e w e 需要注意的是,对于反向的视图变换,纹理坐标生成函数会自动的应用。所以我 们只需要将前面三个矩阵相乘的结果赋给四个平面方程。 接下来就是对阴影表的操作方法。顶点坐标经过上述的变换之后,o p e n g l 自动生成了纹理坐标 s ,t ,r ,q 。s q ,t q 就对应了帻元在深度纹理中的位 置坐标,而r q 就是帧元到光源的z 平面距离,通过缩放和偏移矩阵,它的值也 处于 o ,1 。取出深度表中位置为s q ,t q 处的值t e x t u r e s q ,t q ,将其 与r q 进行比较。如果t e x t u r e s q ,t t q - - 一r q ,则对应的帧元判断为阴影之 外。如果t e x t u r e s q ,t q 0 ,1 的映 射。下面是一维纹理坐标s 的产生过程: 1 11 22 1 1 22 1 i n v e r s e e y e v l e w ( 1 0 0 k a t ) 开f 口计f x x e 拖 z e w e 式中我们可以看到s 坐标就是2 d 纹理坐标的r 坐标,也就是帧元到光源z 平面 的距离缩放到区问 0 ,1 后的值。有了这两个纹理及对应的纹理坐标。对于场景中的 每个帧元,就日j 以利用纹理环境自动将其相减,并将结果保存于帧元的a l p h a 值 中。结果小于零则处于阴影中,否则在阴影外。最后打开o p e n g l 的a l p h a 测试 功能,剔除处于阴影中的帧元,将阴影外的帧元在打开了光照的情况下渲染一遍。 絮篡 磊一 程剑:实时阴影算法的w 究 浙江大学硕士学位论文,2 0 0 5 年2 月 完成攘个渲染过程。 从图1 2 中我们也可以看出,阴影表算法需要将帧元在视点的视域空间和光 源的视域空间做变换。由于这两个变换都是投影

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论