(计算机软件与理论专业论文)3d图形引擎中阴影算法的研究.pdf_第1页
(计算机软件与理论专业论文)3d图形引擎中阴影算法的研究.pdf_第2页
(计算机软件与理论专业论文)3d图形引擎中阴影算法的研究.pdf_第3页
(计算机软件与理论专业论文)3d图形引擎中阴影算法的研究.pdf_第4页
(计算机软件与理论专业论文)3d图形引擎中阴影算法的研究.pdf_第5页
已阅读5页,还剩62页未读 继续免费阅读

(计算机软件与理论专业论文)3d图形引擎中阴影算法的研究.pdf.pdf 免费下载

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

文档简介

t j 伽 0 i i i i 1 1 :! :1 1 2 2 硬阴影和软阴影3 1 2 3 交互性和实时性3 1 3 本论文的研究重点4 1 4 本论文的结构安排4 第2 章与阴影相关的技术5 2 1 概述5 2 2 可编程g p u 5 2 2 1g p u 5 2 2 2 图形渲染流水线6 2 2 3 可编程g p u 介绍7 2 2 4 着色语言介绍8 2 3 三维坐标变换9 2 3 1 基本坐标变换9 2 3 2 顶点坐标变换。11 第3 章硬阴影算法一1 3 3 1 概述1 3 3 2 投射法1 3 3 2 1 基本原理1 3 3 2 2 性能分析1 4 3 3 阴影纹理15 3 3 1 基本原理1 5 3 3 2 性能分析1 6 3 4 阴影图算法1 6 3 4 1 基本原理1 6 3 4 2 性能分析。17 3 5 阴影体算法 3 5 1 基本原理 3 5 2 性能分析 第4 章软阴影算法 4 1 概述2 l 4 2 基于图像精确的软阴影算法一2 1 4 2 1 组合多个采样点的阴影图2 2 4 2 2 多层阴影图算法2 3 4 2 3 线性光源的软阴影算法2 3 4 2 4 单个采样点阴影图算法2 5 4 2 5 方差阴影图算法( v a r i a n c es h a d o wm a p ) 2 6 4 3 基于对象空间的软阴影算法2 8 4 3 1 组合多个采样点阴影体算法2 8 4 3 2 光滑翼算法2 8 第5 章一种改进的基于阴影图的软阴影算法3 1 5 1 概述3 1 5 2 阴影算法的分析3 l 5 3 一种实时的伪软阴影算法3 2 5 3 1 算法介绍3 3 5 3 2 寻找轮廓边3 4 5 3 3 多边形扩充技术3 6 5 3 4 阴影的绘制3 7 5 3 5 算法的特点总结。3 9 5 3 6a l p h a 纹理重计算4 0 5 3 7 本影的反走样4 1 5 3 8 实验结果及分析4 5 结束语51 参考文献5 3 致谢5 7 发表论文及参加课题一览表5 9 叫卅1叫_ 用,例如虚拟现实技术,军事模拟,产品的体验展示,3 d 游戏方面,等等。而阴影技术在3 d 图形引擎中,作为体现模拟真实感程度的重要指标,已经在国外进行了相当长的研究和应用, 而在国内,这方面的研究和应用还比较少。 众所周知,阴影作为体现物体与物体之间遮挡关系的重要信息,在3 d 的真实感显示方面 起着非常重要的作用。当今比较流行的阴影算法,大都存在着很多问题,比如有的达不到实 时渲染的效果,即与用户的交互感很差,有的太依赖场景的物体的轮廓,对物体的要求比较 苛刻等等。本文基于图形显示卡的可编程性出发,研究了当今的各大引擎中的阴影算法,并 对他们的优点和缺点进行的详尽的分析,在此基础上提出了自己的一套基于图形卡可编程性 的阴影算法。本算法是基于阴影图的伪软阴影算法,由于本算法本身存在着数化误差,阴影 走样和半影宽度一致等问题,因此本文的算法特从以下几方面入手: 第一:设计和实现了一种新的算法,从改善阴影图的精度出发,提升图形的真实感;第 二:引进了p c f 算法和w o o 的平均深度值原理思想来解决本影的走样问题:第三:本文使用光 源单个采样点的方法去提高阴影渲染的效率,同时该算法是基于图形卡的可编程性的,提高 了算法的执行效率。 该算法实现后,本文从阴影渲染质量和帧率两个标准出发,通过实验证明了改进后的算 法从渲染同样多模型来观察其渲染的帧率和阴影的显示质量,都比阴影图算法( s h a d o w m a p ) ,阴影体算法( s h a d o wv o l u m e ) 和方差阴影图算法有一定提高。 最后,本文使用o p e n g l 作为此算法实现的图形a p i ,并使用g l s l 语言作为着色语言对程 序进行硬件加速计算,并最终实现了此算法。 关键字:软阴影;硬阴影;阴影图;实时性;伪软阴影 一 气 。“ j i m p o r t a n tr o l ei nt h e3 dc o m p u t e rd i s p l a y ,s u c ha sv i r t u a lr e a l i t yt e c h n o l o g y ,m i l i t a r ys i m u l a t i o n ,t o e x p e r i e n c et h ep r o d u c td i s p l a y ,3 dg a m e s ,a n ds oo n t h es h a d o w si n3 dg r a p h i c se n g i n e ,r e a l i s t i c s i m u l a t i o n s ,a sr e f l e c t e da ni m p o r t a n ti n d i c a t o ro ft h ed e g r e e ,h a sb e e nr e s e a r c h e no na b r o a df o r q u i t eal o n gt i m e ,b u ti no u rc o u n t r y ,t h er e s e a r c hi nt h i sa r e ai ss t i l lr e l a t i v e l yp o o r a sw ek n o w n ,t h ee m b o d i m e n to ft h es h a d o wo fo c c l u s i o nr e l a t i o n s h i p sb e t w e e no b j e c t sa n d o b j e c t sw h i c hp l a y sav e r yi m p o r t a n tr o l ei nt h ei m p o r t a n ti n f o r m a t i o nd i s p l a y e di nt h e3 dr e a l i s m t h es h a d o wa l g o r i t h m st h a tm o r ep o p u l a rt o d a y ,m o s to ft h ee x i s t e n c eo fm a n yp r o b l e m s 。s u c h 笛 r e a l - t i m er e n d e r i n g ,w h i c hi sav e r yg o o ds e n s eo fi n t e r a c t i o nw i t ht h eu s e r ,a n ds o m ea r et o o d e p e n d e n to nt h eo u t l i n eo fo b j e c t s ,m o r ed e m a n d i n gr e q u i r e m e n t so fs u c ho b j e c t sa n ds oo n b a s e d o np r o g r a m m a b l eg r a p h i c sc a r d ,t h i sp a p e rs t u d i e st h em a j o rs h a d o wa l g o r i t h m si ng r a p h i ce n g i n e , w h i c hi n c l u d et h e i rs t r e n g t h sa n dw e a k n e s s e so ft h ed e t a i l e da n a l y s i s ,b a s eo nt h es t r e n g t h sa n d w e a k n e s s e s ,w ep u tf o r w a r dan e ws h a d o wa l g o r i t h mw h i c hu s et h ep r o g r a m m i n go fg r a p h i c sc a r d s t h ea l g o r i t h mi sb a s e do np s e u d o - s o f ts h a d o w ss h a d o wm a pa l g o r i t h m ,t h es h a d o wm a p p i n g a l g o r i t h mi t s e l fe x i s ts o m ep r o b l e m s ,s u c ha st h es a m ew i d t ho ft h eh a l fs h a d o w ,a n dp e n u m b r a w i d t hc o n s i s t e n ta l i a s i n ga n do t h e rp r o b l e m s ,s ot h i sa l g o r i t h mi nt h ef o l l o w i n gs p e c i a l a s p e c t s : f i r s t :d e s i g na n di m p l e m e n tan e wa l g o r i t h m ,f r o ms t a r tt oi m p r o v et h ea c c u r a c yo ft h es h a d o w m a p t oe n h a n c et h eg r a p h i c sr e a l i s m ;t h es e c o n d :t h ei n t r o d u c t i o no ft h ep c fa l g o r i t h ma n dw o ot h e a v e r a g ed e p t hv a l u eo ft h ep r i n c i p l e so ft h i n k i n gt os o l v et h eu m b r ao ft h ea l i a s i n gp r o b l e m ;t h i r d : t h i sa r t i c l eu s e sas i n g l el i g h ts o u r c es a m p l i n gm e t h o d st oi m p r o v et h ee f f i c i e n c yo fs h a d e d i i i 两南大学硕十学位论文 r e n d e r i n g , w h i l et h ea l g o r i t h mi sb a s e do np r o g r a m m a b l eg r a p h i c sc a r d ,a n di m p r o v et h ee f f i c i e n c y o ft h ea l g o r i t h m i nt h ea l g o r i t h m ,t h i sp a p e rf r o mt h es h a d o w st or e n d e rq u a l i 妙a n df r a m er a t et w os t a n d a r d s t a r t i n gt h ee x p e r i m e n tp r o v e dt h a tt h ei m p r o v e da l g o r i t h ma sm u c hf r o mt h er e n d e r i n gm o d e lt o o b s e r v et h es h a d o wr e n d e r i n gf r a m er a t ea n dd i s p l a yq u a l i t y ,t h a nt h es h a d o wm a pa l g o r i t h m ( s h a d o wm a p ) ,t h es h a d o wo ft h eb o d ya l g o r i t h m ( s h a d o wv o l u m e ) a n dt h ev a r i a n c es h a d o wm a p s h a v eac e r t a i ni n c r e a s e f i n a l l y ,a st h i sa l g o r i t h mu s e so p e n g lg r a p h i c sa p i ,a n du s el a n g u a g ea sas h a d i n gl a n g u a g e g l s lh a r d w a r ea c c e l e r a t e dc o m p u t a t i o no f t h ep r o g r a m m e ,a n de v e n t u a l l yi m p l e m e n tt h i s a l g o r i t h m i v k e y w o r d s :s o f ts h a d o w s ;h a r ds h a d o w s ;s h a d o wm a p ;r e a lt i m e ; p s e u d o - s o f ts h a d o w s -_1_1ll , 阴影还可以提供给用户更精确的物体的角度信息,从而使用户可以通过 阴影去做出与图像显示交互性的判断。 阴影可以营造出更真实的模拟世界,从而使用户能够在使用此图像系统 时,能够有身临其境的感觉,从而更能表现出图像之间的层次感和对比 度。 心理暗示。在有些特殊的图像显示应用中,例如3 d 网络游戏中,为了营 造出一些特殊的场景,可以使用各种类型的阴影,使用户在进入一定的 区域之后能够产生一种特殊的情感。 为了能够更好的说明阴影在3 d 图形学显示中的作用,特用下图做出了更形象 的例证,图l 一1 是一幅没有阴影的3 d 图像,可以看出,整个的画面给人一种2 d 的 感觉,没有层次感,没有灯光的感受,更没有一种用户身临其境的感觉,而图1 - 2 仅仅添加了阴影,从而可以给用户提供更为详尽的信息,例如可以判断灯光的大 致位置,可以判断用户在实际场景中的观察角度,还可以判断出此物体与光源之 间的大致的间隔距离和物体的层次关系。从这一例子可以看出阴影在3 d 显示中的 显著作用。 图1 - 1无阴影图卜2 有阴影 行很多的尝试。这其中的大部分算法都是有局限性的。有的算法是基于图像空间 的,有的是基于对象精确的,还有一些光线跟踪算法和辐射度算法。由于现实生 活中的光照的阴影形成相当的复杂,想在计算机真实的模拟出现实生活的光照效 果和阴影效果,并且达到实时性和交互性,那是当今3 d 图形图像显示方面的一个 难点,更是一个热点。其中的光线跟踪算法和辐射度算法是基于静态场景的,也 就是说他们需要非常大的计算量,想在当今的硬件条件下利用这两种算法做出实 时性的3 d 交互界面,那是非常困难的,所以现在各大图形引擎中的阴影算法,都 是基于图像空间和对象精确的。这其中最有名的两种算法就是阴影图算法和阴影 体算法,而且后人在这两种算法的基础上又进行的更为深度的研究,可以在渲染 速度和显示质量两方面做出让人感觉美好的显示方式,即在一定程度上达到了实 时阴影的显示n ,到。但是仅仅是硬阴影的实时显示。现在市面上还没有哪一款游戏 可以达到软阴影的实时显示。因此阴影算法的研究就显得尤为重要了。 随着当今计算机运行速度的提升,特别是g p u 运行速度的提升,必将对阴影的 实时绘制提供强大的动力。 1 2 关于阴影 1 2 1 阴影的定义 众所周知,阴影是由于遮挡体,光照不到遮挡体后面的部分,从而在接受体 形成的影子。下面先介绍一下遮挡体和接受体: 有图1 - 3 所示可知,最顶端是一个球型灯光,中间的黑色部分是一遮挡物, 从图中可知,从p 2 点向灯光看的话,是完全看不到的,这时我们说p 2 所在的点就 在阴影中,我们称完全看不到光源的点形成的面便是本影,而p 2 点所在的面就是 我们定义的接受面。从图中的p 1 向光源看去,可以看到光源上的一部分,这样p 1 点的亮度就会比p 2 点的亮度高一些,但是会比本影上的点又暗一些,我们称类似 p 1 所在的点形成的面区域叫半影瞻3 1 。 根据阴影投射对象的不同,又分为自阴影和投射阴影,自阴影就是遮挡体形 成的阴影又投射到自己身上;投射阴影就是把阴影投射到其他物体之上。 2 1 2 2 硬阴影和软阴影 图1 - 3阴影示意图 硬阴影是3 d 图像显示对阴影的简单模拟,即只考虑两种情况,即判断一个点 要么落在阴影内,要么在阴影外,它实现阴影只适用于灯光是一个点或者是灯光 在无穷远处两种情况,所以这种对阴影的模拟是粗糙的,不真实的。 软阴影是相对于硬阴影而言的,它考虑更为真实的情况,即它更加真实的模 拟了光照中的影子,即影子是有本影和半影组成的,从图卜3 可以明显的看出, p 2 点处在本影中,而p 1 处在半影中。有p l 和p 2 所在点组成的区域才是真正的阴影 区域,在软阴影算法中,就是要如何计算出p 1 点所在的光照强度,从而实现半影 到本影的渐变过程h 引。 1 2 3 交互性和实时性 三维图像在计算机中显示速度是以帧每秒( f r a m ep e rs e c o n d ,f p s ) 来量 化的,即计算机在1 秒内所能在屏幕上显示的画面数。帧率可以反映出一个系统 的交互性和实时性,如果一个系统可以实现1 秒1 5 帧的速度,我们就说此系统是 具有实时性的,如果在此系统上再加入一些可以与用户交互的功能,我们就说此 系统是具有交互性的,我们熟知的3 d 游戏系统就是一个最具代表性的具有交互性 和实时性的系统。由于人眼自身的对图像显示速度的认知度,当计算机的帧率达 到7 2 以后,仅凭肉眼已经感觉不到计算机帧率的提升了,所以我们在设计图像显 示系统时,在保证显示质量的前提下,这个帧率应该越接近7 2 越好7 1 。由于绘 制在计算机屏幕上的阴影也是一副图片,所以帧率对阴影的绘制也是至关重要 两南大学硕十学何论文 的。 1 3 本论文的研究重点 本文首先讨论现在比较常见的3 种硬阴影算法,并对他们的优缺点进行分析。 针对以上的硬阴影算法,讨论由他们发展而来的各种软阴影的算法。对图形卡的 可编程性进行研究,并利用其可编程性,提高阴影算法的显示帧率。针对以上方 法的研究,本文提出了一种基于阴影图的实时的伪软阴影算法,前面我们提到, 基于阴影图的阴影算法存在着阴影走样,数化误差等问题,基于阴影图的软阴影 算法都存在着软阴影显示质量和算法效率之间矛盾的问题。鉴于以上问题,本文 特从以上3 个方面出发,对软阴影的实时绘制在显示速率和显示真实感方面都做 出了令人满意的改进。利用可编程的图形卡技术对所改进的算法进行实现。 1 4 本论文的结构安排 第一章绪论,主要介绍了阴影算法在3 d 图像显示方面的重要性和国内外的研 究现状,还额外的介绍了一些关于阴影方面的概念。 第二章阴影算法中用到的相关技术,主要介绍了图形卡的可编程性,图形卡 的渲染流水线和空间变换技术以及比较流行的着色语言。 第三章主要介绍了几种硬阴影的算法,以及他们的优缺点,主要是阴影图算 法( s h a d o wm a p ) 和阴影体算法( s h a d o wv o l u m e ) 嘲。 第四章主要介绍了几种在硬阴影基础上改进的几种软阴影算法,其中最为有 名的两种算法是基于图像空间的算法和基于对象精确的算法,并分析他们的优缺 点。 第五章为本论文的重点所在,主要介绍了和实现了基于阴影图的实时伪软阴 影算法,并通过实验,验证此算法的正确性和与其它软阴影算法的改进性。 4 第2 章与l j 月影相关的技术 第2 章与阴影相关的技术 2 1 概述 3 d 图形显示中的阴影是通过人们不断的对现实生活的阴影进行观察,通过计 算机图形学的技术和可编程图形卡的技术相结合并不断的进行模拟形成的。其 中,特别是近几年出现的可编程图形卡技术,可以更加有效的提高阴影的渲染速 度,同时可以兼顾到渲染的质量。这其中的图形卡可编程技术最为重要的就是着 色语言了,着色语言有多种,本文采用g l s l 着色语言进行算法实现。所以本章主 要是介绍可编程图形卡技术和g l s l 着色语言,然后讲解了计算机图形学中必备的 技术一一空间变换技术。通过本章的学习,可以大概了解计算机图形卡对图形的 渲染流程和渲染过程中需用到的技术。 2 2 可编程g p u 2 2 1g p u g p u 的全称是g r a p h i cp r o c e s s s i n gu n i t ,即图形处理单元田m 3 ,它是图形卡 的核心部件,是专用来进行图形显示计算的,而且这些计算都是直接通过硬件加 速的。这使得图形卡能够在极短的时间内计算并绘制出大量的图像,这一过程主 要包括了顶点计算,模型变换,光照计算,贴图,插值,绘制等一系列的运算。 近年来,g p u 在运算能力方面得到了前所未有的发展。在计算机图形卡这个领域 内,大部分人认为有3 种力量推动着图形卡的发展。第一,就是近年来半导体技 术的发展,按照摩尔定律,图形卡的芯片在1 8 个月内就可以增加一倍,这也就意 味着图形卡的价格将会大幅度的下降,而它的性能将会有大幅度的提升。第二, 近年来,随着计算机的普及和人们对计算机显示视觉的迫切要求,使得计算机图 形卡的厂商在这方面投入了大量的研究精力。第三便是计算机图形卡自身的问 题,因为我们知道计算机图形的渲染都是以图元为单位进行渲染,而由于人们对 视觉冲击感的强烈要求,使得图形卡在渲染时要绘制大量的图元,这样使得仅仅 靠软件渲染是办不到,这时的图形硬件加速技术便应运而生了1 1 2 1 副。正是由于 以上三个原因,使得图形卡技术不断的向前发展。 g p u 大致经历了五代的发展,这其中最为代表性的就是n v i d i ag e f o r c e 的 6 8 0 0 7 8 0 0 7 9 0 0 系列。当今在市面上的还是以第四代的g p u 为主流。第四代包括 g e f o r c ef x 系列和a t i 的r a d e o m 9 7 0 0 系列。g p u 的发展使得在计算机图形渲染的速 度和质量得到了极大的发展。可以这样说,g p u 的发展程度标志着计算机图形渲 染技术的发展。 5 两南大学硕十学位论文 g p u 的发展最为世人惊叹的莫过于他的可编程性。这使得以前需要在c p u 进行 的运算,可以移植盈j g p u ,这样在图形显示方面,c p u 就可以大大的减轻运算压 力,从而可以胜任更大,更快的图形计算。而且用户还可以编写自己的渲染程序 去取代原来的固定的渲染流水线,这将意味着g p u 可以根据人们的实际需要,去 生成各种各样的视觉特效n 朝,从而推动了整个计算机图形渲染技术的发展。 2 2 2 图形渲染流水线 图形渲染流水线是一个运算流程的简称,它是一个分层管理运算的一个典型 应用,就是说在一个阶段他只负责他做的工作,至于前一阶段和后一阶段的工作 他完全不需要去知道。即前一阶段运算的结果是后一阶段运算的输入,就这样一 直的工作下去,直到整个运算过程结束。 下图展示的一个完成图形流水线,它分为四个阶段:包括顶点处理阶段,图 元装配和光栅化阶段,片段处理阶段,光栅化操作阶段。顶点处理阶段的处理对 象是多边形网格,它对多边形网格的各个定点进行颜色值和纹理坐标值的计算, 并对基本图元的位置进行转换,从模型位置转换到屏幕位置。第二阶段是图元装 配和光栅化阶段,它的处理对象是第一阶段处理后的顶点流结果,主要任务是是 对这些顶点进行装配,把这些顶点装配成图形处理单元能够处理的图元,并对这 些图元进行拣选和裁剪等操作,然后在经过光栅化,对这些图元进行设置,并对 这些图元抽样为片元,同时对这些片元进行颜色和纹理坐标的插值。在片段处理 阶段,它的处理对象就是由第二阶段形成的片元,它通过纹理取样和纹理操作来 计算每个片段的最终颜色值,确定片段的深度值,光栅化阶段首先会对每个片段 进行一系列的测试,这些测试包括剪切测试,a l p h a 钡l j 试,蒙版测试,深度测试 等等,通过这些测试判断这些片段哪些被丢弃,哪些被绘制,最后通过颜色混合 技术,把这些颜色值送入帧缓冲进行更新n 3 h 1 。 图2 1传统图形渲染流水线 通过以上的介绍我们可知,传统的图形渲染流水线式固定的,是不可编程的, 用户只能通过c p u 把数据处理后送入显卡,然后就是一直等待,直到显卡把图形 通过各种变换显示在屏幕上,也就是说在数据进入显卡后,用户是无法干预这些 数据的。随着显卡技术的发展,很显然这种固定的渲染流水线是不能满足当前需 第2 章吲j 月影相关的技术 求的,这时可编程的图形卡技术应运而生了。下图是一个可编程的图形渲染流水 线图,其中我们可以看出,与传统的渲染流水线相比,它多了可编程组件,其中 一个为可编程顶点处理器,另外一个为可编程片断处理器,在可编程定点处理器 上运行的程序叫定点着色程序,它的主要功能是进行几何变换和光照计算等操 作;而在片段处理器上运行的程序叫片断着色程序,它的主要工作是进行纹理混 合着色等操作。从图中可以看出,再顶点流经过定点着色程序后,再经过固定的 图元装配和光栅化模块,将生成的片元交给片断着色程序处理,片段处理程序会 对这些片断进行纹理混合,纹理访问等操作,计算出最终的颜色值,然后再将这 些片段传送给光栅化操作阶段,进行固定的深度测试,模板测试,雾化和透明等 操作。通常,一个g p u 有多个可编程顶点处理器和可编程片断处理器。由于g p u 执行的命令是并行的,所以处理器越多,执行的速度就越快n 3 1 钔。 2 2 3 可编程g p u 介绍 图2 2可编程渲染流水线 鉴于g p u 的新特性,下面对可编程g p u 的特点进行一下简要的总结: 由于它是可编程的,所以程序员可以根据自己的实际需要,去编写自己 的渲染程序,充分发挥程序员的主观能动性。 他还支持多遍绘制,这样就可以大大减少c p u 和g p u 之间的数据交换,从 而提高整个运算的效率。 支持四元向量的数据格式 上文我们提到,由于现在的g p u 是可编程的,他有顶点处理器和片元处理器两个 部件。所以我们要编写能够在上面运行的程序,这两种程序分别叫顶点着色程序 和片元着色程序,而编写这些程序就是我们将要介绍的着色语言。 着色语言也有低级语言和高级语言之分,在过去,用户想要在g p u 上编写自 己需求的程序,需要用到类似于汇编语言这样的低级的着色语言,这种语言晦涩 难懂,而且出现问题极易不被发现,还不方便调试。鉴于这种现象,高级着色语 言就产生了。近些年来,各大图形卡厂商和国际大型软件公司在这方面投入了大 量的人力物力,也取得了让人满意的成绩,这里面最为著名的是:h l s l ( h i g h l e v e ls h a d i n gl a n g u a g e ) ,g l s l ( o p e n g ls h a d i n gl a n g u a g e ) ,和c g ( cf o r g r a p h i c ) 1 7 , x s 。 c g 是有n v i d i a 公司和微软公司共同开发的,是一种增加了向量和矩阵处理能 力的类c 语言,c g 的设计目标是成为一种通用的面向硬件的语言。它既可以用来 开发用于渲染的着色程序,也可以用来开发在图形处理器上运行的科学计算程 序。c g 是一个跨平台的高级着色语言,通过定义不同的配置( p r o f i l e ) ,c g 编译 器可以为不同的低级着色语言后端生成代码,既支持d i r e c t x 的所有版本的低级 着色语言,也支持o p e n g l 的所有版本的低级着色语言,同时还支持n v i d i a 专有的 所有版本的低级着色语言。g l s l 它是o p e n g l2 o 规范的一部分,是o p e n g l 平台上 的高级着色语言。g l s l 的设计目标是能够体现当前和未来图形硬件能力,易于使 用,功能强大,可以明显减少日渐增加的o p e n g l 扩展数目。并且他有极强的跨平 台特性,使算法一次编写可以到处运行。d i r e c t e x 的h l s l 语言是有微软开发的, 虽然他起步e e o p e n g l 要晚,但是凭借着它出色的w i n d o w s 操作系统的平台,很快 就在图形库领域取得了很大的市场,而且有着强大的资金和技术支持,d x 这几年 的性能也都有大幅度的提升,甚至有超越o p e n g l 的趋势但是它没有跨平台的特 8 第2 章与阴影相关的技术 性,使其的推广和应用受到一定的限制。鉴于本人的学习经历和o p e n g l 的跨平台 特性,本文就采用o p e n g l 作为图形a p i ,所以所有的着色程序e 自g l s l 编写。 2 3 三维坐标变换 三维坐标变换是3 d 渲染技术的基础数学知识,它的主要作用就是确定空间中 的一个点在屏幕上什么坐标显示出来或者说这个点要不要显示出来,它一般包括 以下几种变换,即平移变换,缩放变换和旋转变换。有了这些基本的变换之后, 可以用这些基本的变换组合成比较复杂的变换,例如世界变换,视角变换和投射 变换等。 经过多年的研究,空间立体几何的数学家们发现,空间中的任何一个点,都 可以乘以一个变换矩阵,得出变换后空间中的对应的点,公式如下: r t 、1f ,m ,。m ,2 m ,3 m 。4 、f ,j 、 i i = l 肜2 ,肜2 2 m 2 3 肜2 4 l 拳i o l l | jl _ m 矿3 4 ,l m 矿4 3 2 2 m 矿4 3 3 3 4 m 矿3 钳4jl :j 其中( t x ,t y ,t z ) 为空间中的任意一点,( t x ,t y ,t z ) 为变换后 的空间中的一点,而它前面相乘的矩阵就是变换矩阵,这个矩阵可能是有几个不 同的变换矩阵相乘得到的n9 1 。所以下面将介绍这几种基本变换。 2 3 1 基本坐标变换 1 ) 平移变换 平移变换是空间变换种作为基本的变换,它可以描述为一个点移动到另外一 个点的变换, 9 1 0 0s i n0 10 0c o s 秒 00 绕y 轴旋转公式 世界变换 世界变换就是将物体顶点坐标从物体的模型转换到世界坐标下的过程,如图 所示,在模型空间中,物体的顶点坐标是按照自身的坐标系建立的,它有属于自 己的坐标系,而世界变换就是把所以的模型放到另外一个空间中去,他们使用同 一个空间坐标系。事实上,世界变换的过程就是对模型进行平移,缩放,和旋转 组合的过程呦1 。 世界空问 空间 + x 图2 3世界变换图 观察变换 观察变换就是说,在世界空间中放一个摄像机,即观察点位置,把世界空间 上的各点转换到摄影空间。在摄影空问中,观察点位于原点,方向向着z 轴正方 向。因为o p e n g l 使用右手坐标系,所以z 轴的正方向是朝着屏幕外的。我们假设 在世界坐标中的一点为p w o r l d ,摄影空间中的一点为p v i e w ,则 p v i e w = p w o r l d 木m v i e w 嘲 公式2 7观察变换公式 两南大学硕十学何论文 投影变换 投影变换就是将投影空间中的点转换到屏幕空间中去,分为正交投影和透视 投影两种,工程设计中的前视图,后视图和侧视图都是典型的正交投影,由于正 交投影不适用于图形引擎的显示,所以本文正讨论透视投影。设三维物体在观察 空间中的点为p v i e w ,投影矩阵为m p r o j ,则这点在屏幕空间上的坐标为 p p r o j2p v i e w 木m p r o j 公式2 - 8投影变换公式 因为透视投影有近大远小的特点,所以在图形引擎中非常适合。 下图画出了一张取景截头体示意图: 1 2 第3 章硬阴影算法 第3 章硬阴影算法 3 1 概述 前文已经提到,硬阴影是只对遮挡体形成的阴影,他没有考虑到半影区域的 情况,所以由它生成的阴影看上去比较死板,不逼真。但是由于它是软阴影阴影 生成算法的基础,所以本章主要对几种比较流行的硬阴影算法进行讲解,他们分 别是:投射法,阴影纹理,阴影图( s h a d o wm a p ) 和阴影体算法( s h a d o wv o l u m e ) 。 通过对他们基本原理的讲解,我们可以比较客观了解他们的性能和实用性方面的 一些知识。 3 2 投射法 3 2 1 基本原理 投射法顾名思义就是遮挡体从光源的位置观察,投射到接受面的一种简单的 阴影生成算法,他也是人们最容易理解,最直观的阴影生成算法。它用到的基本 理论就是空间几何的知识,通过各种平面方程和直线方程,找到遮挡体上点在接 受平面上的投影点。然后利用这些投影点勾勒出阴影的轮廓,在进行阴影区域的 着色。如下图所示: 光源l 图3 - 1投射法阴影原理图 u 场景中有一光源l ,设它的坐标为( l x ,l y ,l z ) ,三维物体上,即遮挡体上一点为 西南大学硕十学位论文 j i , 一 i 舅曼曼曼曼皇曼皇舅曼曼曼曼寰曼! 曼曼曼曼曼曼曼曼舅量曼 s ( s x ,s y ,s z ) ,投影平面r 的平面方程为a x + b y + c z + d = o ,根据已知光源坐标l 和遮挡 体点的坐标s ,可以计算出过光源和遮挡体上点的直线方程乜3 2 钔,如下公式所示: 其中 x s x v s v z s z 一= 一= = 一 聊 p 以 公式3 - 1投射法直线方程公式 s x l x m = = = = = = = = = = := := = := = = = = = = := := := = = = := = = = = = = = = 4 ( s x i x ) 2 + ( s y l y ) 2 + ( s z l z ) 2 跏一三1 , p 2 x 2 ( s 2 x 2 - 2 l 2 x 2 ) 2 2 + 2 ( 兰s y 2 - = 兰l y 2 ) 2 22 + 2 ( s 2 2 2 - 2 l 2 z ) 一2 s z l z , ( s x 一厶) 2 + ( 妙一砂) 2 + ( s z 一乜) 2 如果经过光源和遮挡体的直线与平面的交点为u ( u x ,u y ,u z ) ,那么就可以 计算出交点u 的坐标: u x :s x 1 1 1 ) 【垡望:竺垒:墅! :望 a 丰z + b 木p + c ,z 公式3 - 2u x 坐标公式 妒旷p x 等案等 公式3 - 3 u y 坐标公式 u z :s z - n x d + a * s x + b * s y + c * s z a 宰7 竹+ b 拳p + c 车甩 公式3 qu z 坐标公式 3 2 2 性能分析 从以上投射法的基本原理可以得出它的基本性能,共有以下几点: 它需要计算出经过光源和遮挡体上点的直线方程以及此直线方程与投影 平面的交点,这也就限制了这个遮挡体是一个线性的,即由有限个定点 组成的平面。只有这样才能经过有限次的计算才能计算出在投影平面上 的阴影的轮廓。所以此种算法对遮挡体的限制比较高。 投影平面上的最终形成的阴影会使人感觉是遮挡体被压平了最终以阴影 阴影纹理算法即我们熟知的l i g h t m a p 算法乜5 1 ,此算法就是有一张包含了场景 中物体表面光照强度信息的阴影纹理图,然后再与物体表面的真实纹理进行混合 来模拟实际场景中的阴影效果。如下图所示: 图3 - 2 真实物体纹理图3 3 阴影纹理图3 - 4最终效果 此图中我们可以看出,最终的效果是通过真实的物体纹理和阴影纹理的混合 叠加生成的,而这个阴影纹理就是预先存储了此像素的纹理光照系数得到的。如 果场景复杂就需要考虑到阴影纹理的大小问题,然后在计算此像素的光照系数, 最后在存储在此阴影纹理中,并在程序预处理时生成阴影纹理。在实际渲染过程 中,要先用物体的真实纹理绘制物体,然后再用阴影纹理对物体的表明进行光照 的调节,以此来模拟真实的阴影效果。在静态的场景中,运用此算法,即使用很 小精度的阴影纹理就可以模拟效果逼真的阴影。 两南大学硕十学位论文 3 3 2 性能分析 从阴影纹理的原理中,我们不难总结出它有以下的特点: 阴影贴图技术是程序预处理的,即在程序运行以前他就要计算出每个像 素的光照系数,这在实际的三维空间应用中,其运行开销是相当大的。 因为是预处理的,所以它只适用静态的场景。 当阴影纹理生成之后,他可以和实际的物体纹理进行混合,能很好的模 拟出阴影的效果。 正是由于他的预处理,在程序运行时是没有运行开销的,所以在渲染时, 阴影的渲染速度很快,效率很高。 由于阴影纹理只记录了此像素的光照信息,所以阴影纹理的空间占有很 小。 基于以上特点的分析,我们可知,在大型的静态场景中,此算法是最好的, 效率最高的,它能够快速的,真实的计算出逼真的阴影效果,反过来说,由于它 仅仅适用于静态的场景,所以它不适合具有交互性的场景中去,既没有实时性。 3 4 阴影图算法 3 4 1 基本原理 阴影图算法就是我们熟知的s h a d o wm a p 算法,该算法是有l a n c ew i l l l i a m s 与1 9 7 8 年提出来的,由于该算法的执行效率高,并且具有很强的鲁棒性,所以一 直被认为是3 d 图形学中阴影算法的典范。该算法的基本思想就是从场景的光源处 去区分场景中的可见部分,即以光源所在的点为视点去观察整个场景,那么能被 光源照射到的点就是在光源处和此点连线上最近的点,则在此点之后的都是不可 见的。根据这个基本特点,那么就可以在计算阴影时,用一张阴影图存储整个被 此光源照射到点的深度值,然后在计算出其他点的深度值,让这两个深度值作比 较,若此点的深度值大于阴影图中的深度值,则此点在阴影中,否则在阴影外乜6 i 。 根据阴影图的这个基本特点,我们实现此算法大概有两个步骤,如下: 首先从光源出渲染整个场景,将场景渲染到深度缓冲区中去,因为这一步只 记录深度值,所以此步骤的颜色值并不重要,可以将颜色缓冲关掉,以便提高这 一步的执行效率。在场景被渲染到深度缓冲区之后,可以将深度值存储到纹理对 象中,这样,纹理中的每个像素就记录了离光源最近的片元的深度值。 从视点处渲染整个场景,这一步的渲染加入了深度测试的功能,主要是为了 判定场景的中的某点是否在阴影中。首先,它将在视点坐标下的点( x v ,y v ,z v ) 第3 章硬阴影算法 转换到光源坐标下( x c ,y c ,z c ) ,然后比较z c 的值与存储在阴影图中( x c ,y c ) 出对应的z 值,如果z c 大于z ,则此

温馨提示

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

最新文档

评论

0/150

提交评论