免费预览已结束,剩余41页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于 GPU 的 3D 场景真实特效模拟 - -1 本科毕业论文本科毕业论文 (科研训练、毕业设计) 题题 目:目:基于 GPU 的 3D 场景真实特效模拟 姓 名: 学 院:软件学院 系: 专 业:软件工程 年 级: 学 号: 指导教师(校内): 职称: 指导教师(校外): 职称: 年 月 基于 GPU 的 3D 场景真实特效模拟 - -2 基于 GPU 的 3D 场景真实特效模拟 摘要 目前图形硬件中的图形处理器(GPU)计算能力的增长速度已经超过了中央处理器 (CPU)计算能力的增长速度。图形硬件技术一个最主要的突破就是在图形硬件中引入了可 编程功能,此功能允许用户编制自定义的着色器程序(Shader program)来替换原来固定流水 线中的某些功能模块,使得 GPU 在功能上更像一个通用处理器. 虽然 GPU 具有非常高 的计算速度,但并不能直接将以前在 CPU 中实现的算法照搬到 GPU 中来执行, 这是因 为 GPU 的指令执行方式和 CPU 不一样,GPU 的体系结构是一种高度并行的单指令多 数据(SIMD)指令执行体系。所以要基于可编程图形硬件实现一些在 CPU 中效率较低的算 法,就必须重新组织算法实现的数据结构和步骤,以充分利用 GPU 并行处理体系结构带 来的性能优势。 通过利用 GPU 的运算能力和可编程能力,在增强场景真实感同时,保证了绘制速度, 从而为虚拟场景的绘制增添更多的特性。本文旨在利用最新的图形渲染技术,开发一个三 维场景系统,动态地模拟真实的自然环境特效,实现了利用 GPU 加速图像空间的阴影算 法,而更为耗时的物体空间的阴影算法也能通过这一途径得到性能改进和提升。 关键词 可编程图形硬件 OGRE 引擎 实时阴影映射 动画轨迹 基于 GPU 的 3D 场景真实特效模拟 - -3 3D Scene Simulation Based on GPU Abstract: The computation power of the Graphics Processing Unit (GPU) in current commodity graphics hardware is increasing at a much faster rate than that of the Central Processing Unit (CPU) in computer systems. The projected time to double in efficiency for the GPU is quoted to be roughly 12 months by the leading graphics card manufacturers. A recent major breakthrough in graphics hardware technology has been the introduction of programmability; this allows the user to replace portions of the fixed graphics pipeline with customized shader programs exposing the ability of GPU to function more like a general processing unit. In spite of all the rendering power, it is not possible or meaningful to use algorithms designed with CPU in mind on graphics hardware. The essential difference is that GPU provides a highly parallel Single Instruction Multiple Data Set (SIMD) architecture. The key to harnessing this resource is reengineering the computationally expensive algorithms to take advantage of this architecture as well as making use of rendering optimizations built into the programmable graphics pipeline. The computational and programmable capabilities not only make the scenes more realistic but also ensure the rendering speed,which would add more features to the rendering of virtual scenes. This paper aims to use the latest graphics rendering technology to develop a 3D scene, simulate the real effects of the natural environment dynamically and realize the shadow algorithm by using GPU to accelerate the image space. And the more time-consuming object space shadow algorithm can also improve its performance in this way. Keywords: Programmable Graphics Hardware ORGE engine Real-time shadow mapping animation track 基于 GPU 的 3D 场景真实特效模拟 - -4 目录目录 第第 1 1 章章 引言引言 1 1 1.1 设计目标 1 1.2 项目开发背景GPU 的飞速发展.2 1.2.1 GPU 的介绍 2 1.2.2 GPU 可编程技术的发展2 1.2.3 本项目国内外发展概况和趋势3 1.3 可编程图形流水线功能介绍 3 1.4 系统功能 4 1.5 本文主要研究工作介绍及章节安排 5 第二章第二章 系统总体设计系统总体设计6 6 2.1 系统的总体结构 .6 2.2 系统设计概述 .7 2.2.1 SHADER技术 7 2.2.2 OGRE 的介绍.8 2.3 开发环境 11 第三章第三章 系统的软件开发系统的软件开发.1212 3.1 阴影系统的设计 12 3.1.1 概述 12 3.1.2 SHADOW VOLUME算法 .12 3.1.3 SHADOW MAPPING算法.13 3.1.4 软阴影 16 3.1.5 高斯模糊 17 3.1.6 阴影程序的实现 18 3.2 天体系统的设计 18 3.2.1 OGRE 框架下的动画 18 3.2.2 日升日落一个轨迹动画.20 基于 GPU 的 3D 场景真实特效模拟 - -5 3.3 界面系统的设计 21 第四章第四章 系统的展示系统的展示.23 总结26 致谢语27 参考文献28 附录30 基于 GPU 的 3D 场景真实特效模拟 - -6 Contents CHAPTER 1 INTRODUCTION1 1.1 OBJECTIVES.1 1.2 BACKGROUNDRAPID DEVELOPMENT OF GPU 2 1.2.1 INTRODUCTION TO GPU .2 1.2.2 DEVELOPMENT OF PROGRAMMABLE GPU TECHNOLOGY.2 1.2.3 THE DEVELOPMENT OF THE PROJECT AT HOME AND ABROAD3 1.3 INTRODUCTION TO PROGRAMMABLE GRAPHICS PIPELINE FUNCTION3 1.4 SYSTEM FUNCTION.4 1.5 STUCTURE AND NOTES.5 CHAPTER 2 SYSTEM DESIGN.6 2.1 SYSTEM ARCHITECTURE.6 2.2 SYSTEM DESIGN OVERVIEW7 2.2.1 SHADER TECHNOLOGY7 2.2.2 INTRODUCTION TO OGRE 8 2.3 DEVELOPMENT ENVIRONMENT.11 CHAPTER 3 SOFTWARE DEVELOPMENT12 3.1 SHADOW SYSTEM DESIGN12 3.1.1 OVERVIEW.12 3.1.2 SHADOW VOLUME ALGORITHM12 3.1.3 SHADOW MAPPING ALGORITHM.13 3.1.4 SOFT SHADOW16 3.1.5 GAUSSIAN BLUR.17 3.1.6 SHADOW SYSTEM REALIZATION.17 3.2 CELESTIAL SYSTEM DESIGN.18 3.2.1 ANIMATION IN OGRE FRAMEWORK18 3.2.2 SUN RISE AND SUN SETA ANIMATION.20 基于 GPU 的 3D 场景真实特效模拟 - -7 3.3 GUI DESIGN.21 CHAPTER 4 SYSTEM DEMONSTRATION.23 SUMMARIZATION.26 ACKNOWLEDGEMENT27 REFERENCES28 SUPPLEMENT30 基于 GPU 的 3D 场景真实特效模拟 - -8 第第 1 1 章章 引言引言 1.11.1 设计目标设计目标 多年来计算机图形处理器(Graphics Processor Unit, GPU)以大大超过摩尔定律的速度高 速发展,极大地提高了计算机图形处理的速度和图形质量,并促进了计算机图形相关应用 领域的发展。图形处理器技术的迅速发展带来的并不只是处理速度的提高,还产生了很多 全新的图形硬件技术,其中最引人注目的便是在图形硬件处理管道的顶点处理和象素处理 模块中引入了可编程性,使得用户可以通过程序方式控制图形流水线的执行,极大地扩展 了图形处理器的能力和应用范围1。图 1-1 为一个最基本的可编程图形硬件的框架,其中 阴影模块代表可编程模块。 图图 1-1 可编程图形硬件框架可编程图形硬件框架 大型三维场景广泛应用在虚拟现实、GIS 系统、模拟战场、游戏娱乐等领域。传统的 色调单一,光阴效果极差的固化的三维场景已经不能满足人们的视觉效果需求。硬件的飞 速提升,特别的 GPU 处理能力的提高和管道渲染可编程的出现,实时渲染的三维效果越 来越逼近于电影级的水平。从而促进了新的图像引擎的开发以及基于不同引擎的图像软件 的生成。 本项目以 VS2005 为平台,利用新一代的图像开发引擎 OGRE 和最新的图形渲染技术, ,采用 CG 语言,开发一个三维场景系统,动态地模拟真实的自然环境特效。本项目在三 维场景中模拟动态的特效,实现模拟光影系统,加入可运动天体,以及阴影的实现,使得 实时渲染的三维场景更加接近真实水平。令 3D 画面更逼真,就像人的眼睛在三维场景现 场中的视觉效果,大幅提升真实感。 通过本项目的开发学习,进一步的加深了对于计算机图形学的理解,同时了解了 3D 开发领域的最新发展技术。 基于 GPU 的 3D 场景真实特效模拟 - -9 1.21.2 项目开发背景项目开发背景GPUGPU 的飞速发展的飞速发展 1.2.11.2.1 GPUGPU 的介绍的介绍 GPU 即图形处理芯片,它能够从硬件上支持 T&L(Transform and Lighting,多边形转换 与光源处理)的显示芯片2。因为 T&L 是 3D 渲染中的一个重要部分,其作用是计算多边形 的 3D 位置和处理动态光线效果,也可以称为“几何处理”。一个好的 T&L 单元,可以提供细 致的 3D 物体和高级的光线特效;只大多数 PC 中,T&L 的大部分运算是交由 CPU 处理的 (这就也就是所谓的软件 T&L),由于 CPU 的任务繁多,除了 T&L 之外,还要做内存管理、 输入响应等非 3D 图形处理工作,因此在实际运算的时候性能会大打折扣,常常出现显卡等 待 CPU 数据的情况,其运算速度远跟不上今天复杂三维游戏的要求。即使 CPU 的工作频率 超过 1GHz 或更高,对它的帮助也不大,由于这是 PC 本身设计造成的问题,与 CPU 的速度 无太大关系。 PC 图形(如照片、视频和游戏等)需要大量的处理能力。在没有任何帮助的情况下, CPU 必须执行所有系统处理和图形处理任务。结果是降低系统性能。添加专用 GPU 可卸载 CPU 的图形处理负荷。CPU 就可以有更多资源用于执行更主要的系统处理任务。 1.2.21.2.2 GPUGPU 可编程技术的发展可编程技术的发展 显卡技术的进步使得人们在视觉上的要求越来越高。传统的 3D 硬件的两大 API,OpenGL 和 Direct3D 都通过它们固定的渲染管线,即 pipeline,计算简单的雾、光线等 来渲染三维场景3。渲染的纹理效果都是平坦的单一的,光影效果也是很简单粗糙的。 从 DX8 和 OpenGL 扩展开始将可编程特性引入到渲染管线中来,这样使开发者通过自 己编写一段小程序运行于显卡硬件来自己控制具体的渲染过程,在微软的 DirectX 中就称这 段程序代码 Shader,在 OpenGL 中就叫 Program4。Shader 现一般翻译为着色器,它表现了 一种基于显卡 GPU 的可编程控制的概念。简单地说,着色器是渲染像素和顶点的小程序, 分为像素着色器和顶点着色器两种类型。这些程序能够向基本的几何图形添加效果,例如, 向蓝色纹理平面添加水纹使其具有反射效果,也可向多边形纹理添加玻璃效果使其具有透明 的视觉特性。 目前最新的可编程图形硬件已经具备了下列功能: (1) 在顶点级和像素级提供了灵活的可编程特性。 基于 GPU 的 3D 场景真实特效模拟 - -10 (2) 在顶点级和像素级运算上都支持 IEEE 32 位浮点运算,可进行高精度的绘制。 (3) 完全支持 4 元向量的数据格式 (齐次坐标,法向等),方便了图形程序的设计与开发。 (4) 具有高带宽的内存传输能力(27.1GB/s),具备强大的数据吞吐能力。 (5) 支持绘制到纹理的功能(Render to texture),从而避免将中间绘制结果拷贝到纹理这个费 时的过程; (6) 支持依赖性纹理访问功能,以方便数据的索引访问,可以将纹理作为内存来使用。 1.2.31.2.3 本项目国内外发展概况和趋势本项目国内外发展概况和趋势 国外虚拟城市的已经发展了许多个年头,而随着我国第一个三维虚拟数字化城市在杭州 的建立,越来越的多城市开始为自己量身打造的数字化模型。建立运行高效,渲染逼真的三 维虚拟场景是关键性的技术之一。显卡可编程技术使得优秀的算法能更好更快应用在图形渲 染上来。在游戏产业上,次世代游戏更是融入了“容积云” 、 “实时环境地图” 、 “柔和阴影” 等先进的图象技术使得画面几乎与真实场景无异。 显卡技术的飞速进步给予实时渲染技术的发展更宽阔的空间,在虚拟场景在给予人们 更真实、更可靠、更震撼的视觉效果。 1.31.3 可编程图形流水线功能介绍可编程图形流水线功能介绍 可编程图形流水线的总体框架如图 1-2 所示,左边用实线表示的流程就是传统的图形 流水线的流程;在这种通用的流水线中,首先经过顶点级的光照计算和坐标变换,求出每 个顶点的光照颜色值,同时还将顶点坐标从物体坐标系转换到裁剪空间(Clip Space)。然后, 对每个三角形进行光栅化处理并将对三角形顶点的颜色进行双线性插值,得到了三角形中 每一个象素的颜色值。接着进行纹理映射,即根据每一个象素的纹理坐标值将纹理图颜色 分配到每个象素上。最后进行颜色混合计算(Blending)和雾化效果计算,得到的结果将会 放进帧缓存(Frame buffer)并显示到屏幕上5。目前的可编程的图形硬件中,除了光栅化这 一部分依然保持固化的硬件实现不变以外,其他部分都引入了可编程性。也就是图 1- 2 中 的虚线部分 。 顶点着色器(Vertex Shader)的功能正是为了实现顶点的光照计算和坐标变换,在过去 的硬件中,人们只能实现一些固定的光照模型和坐标系转换计算,但是在现在的可编程的 基于 GPU 的 3D 场景真实特效模拟 - -11 图形硬件中,用户可以通过编写代码自由地设计自己所需要的光照模型和坐标系转换计算 公式,只要不超出硬件的功能即可。 至于象素着色器(Pixel Shader),功能相对比较复杂,同时限制较多。它几乎包括了所 有光栅化以后的操作:采样纹理,颜色混合计算(Blending)和雾化效果计算等,传统图形 硬件中每个顶点的纹理坐标值需要人工指定或者根据空间坐标来计算,而在象素着色器中, 允许采用多种纹理访问方式;每个象素的绘制信息(例如,象素颜色值、纹理坐标等)均保 存在寄存器中,象素着色器通过完成这些寄存器之间的加法,乘法或者点积等运算操作, 从而在象素级别上实现光照明模型的计算。 图图 1-2 可编程图形流水线的总体框架可编程图形流水线的总体框架 1.41.4 系统功能系统功能 基于 GPU 的 3D 场景真实特效模拟 - -12 系统实现了自然界中最基本的场景元素,包括天体系统以及阴影系统,完成后具有以下 几个功能: (1)实现太阳的基本状态日升日落; (2)实现阴影系统的基本功能; (3)通过不同条件的选择,实现阴影材质的改变,阴影类型的替换。并实现不同种类的阴影; (4)通过参数的调节,可以实现光线以及阴影的对比; (5)实现鼠标,键盘对场景界面的控制,包括画面的移动以及物体的旋转。 (6)系统具有友好的人机界面,方便设定和调节各种参数。 1.51.5 本文工作的主要研究工作介绍及章节安排本文工作的主要研究工作介绍及章节安排 本文以可编程图形硬件技术作为文章的主线,介绍了作者毕业设计期间的主要工作。 第 1 章、引言部分,初步介绍了目前 3D 图像研究领域的国内外发展状况和本项目的主要 目标及实现的功能。 第 2 章、系统总体设计的详细介绍,包括系统的总体结构及系统特点,简要介绍了系统所 采用的部分技术,以及系统的开发环境; 第 3 章、系统的详细开发过程,包括下属子系统阴影系统、天体系统、界面系统的设 计。简单介绍了实时阴影技术以及动画技术。 第 4 章、系统的成果展示,通过简要的介绍以及截图的说明,展示系统所实现功能。 最后是结论与展望。总结现有工作,简单介绍了未来可能的研究方向。 基于 GPU 的 3D 场景真实特效模拟 - -13 第第 2 2 章章 系统总体设计系统总体设计 2.12.1 系统的总体结构系统的总体结构 ExampleApplication.h 和 ExampleFrameListener.h 定义了简单 OGRE 程序的应用框架 (FrameWork) ,它们封装了 OGRE 程序的基本要素和运行过程。 ExampleApplication.h 确定了一个 OGRE 应用程序的运行和开发方式。它创建了系统的 入口点 ROOT,场景管理器,摄像机以及场景的各要素。 ExampleFrameListener.h。监听最终用户的控制信息(鼠标、键盘、遥控杆等) ,对摄 像机、场景物体等进行控制。 OGRE FrameWork 与实际应用的关系如图 2-1 所示: ExampleFrameListenerExampleApplication 1111 mFrameListener myApplication myFrameListener 图图 2-1 OGREOGRE FrameWorkFrameWork 类图类图 在 OGRE 引擎中具有虚拟文件系统的概念,引擎内部载入资源文件都是通过虚拟文件 系统来进行的,引擎并不关心资源文件来自一个普通文件夹、zip 压缩包甚至网络映射。 关系图如图 2-2 所示: ArchiveEx FileSystemZip 图图 2-2 文件关系图文件关系图 基于 GPU 的 3D 场景真实特效模拟 - -14 2.22.2 系统设计概述系统设计概述 2.2.12.2.1 ShaderShader 技术技术 Shader 是 Microsoft DirectX API 的重要组成部分,在 Vertex Processing 和 Pixel Processing 实现可编程,分别为 Vertex Shader 和 Pixel Shader。这些程序能够向基本的 几何图形添加效果,例如向多边形纹理添加玻璃效果使其具有透明的视觉特性。从而使设计 师能够比过去更加高速地实现各种复杂的超现实 3D 效果。它有着很强的可编程能力,可以 用更少的绘图指令批量处理大量复杂的数据,从而大大减轻 GPU 及 CPU 的负担,让整个系 统更有效率地工作。 Shader Model 版本的不断更新,在 PC 图像的发展历史上起到了非常关键的作用。因此 显卡的图形核心所支持的 Shader Model 版本高低,长期以来一直被人们当作衡量芯片价值 的重要指标之一。特别是微软发布支持 Shader Model 3.0 标准的 DirectX 9.0c 之后,更是 在显卡图形芯片领域掀起了新一轮的更新换代大潮。 系统采用了 Shader 技术 Shader Model 被很好的应用到很多环境表面和混合的镜面光源 中,很大程度上丰富了研发时的编程模型,极大提高了三维模拟的效果,能实现更多更复杂 的光影算法。 图形管道流水线如下所示: 图图 2-3 图形管道流水线图形管道流水线 特效实现关键在于 GPU 编程,即 shader(着色器)编程,使用 HLSL 编写,这是微软 基于 GPU 的 3D 场景真实特效模拟 - -15 与 nVidia 共同开发的 GPU 编程语言,nVidia 称之为 CG(C for Graphic)语言。 2.2.22.2.2 OGREOGRE 的介绍的介绍 OGRE(Object-Oriented Graphics Rendering Engine)是一个由 C+编写设计,具有 面向对象的抽象、封装、多态特性,扩展性很强的开源图像引擎。它的目的是让开发者能更 方便和直接地开发基于 3D 硬件设备的应用程序或游戏。引擎中的类库对更底层的系统库 (如:Direct3D 和 OpenGL)的全部使用细节进行了抽象,并提供了基于现实世界对象的接 口和其它类。 它有以下几个特点 (1)拥有高效率和高度可配置性的资源管理器,并且支持多种场景类型。使用系统默认的场 景组织方法,或通过亲自编写插件使用自己的场景组织方法。 (2)通过绑定体(如绑定盒)实现的场景体系视锥拣选。 (3)提供的 BspSceneManager 插件是快速的室内渲染器,它支持加载 Quake3 关卡和 shader 脚本分析。 (4)优秀的场景组织体系;场景结点支持物体的附属(attach) ,并带动附属物体一起运动, 实现了类似于关节的运动继承体系。 (5)可扩展的程序框架(framework)能更快的编写出更好的程序。 (6)OGRE 会自动处理常见的需求,如渲染状态管理,hierarchical culling,半透物体排序 等等。 (7)调试用的内存管理器负责检查内存溢出。 系统基本框架采用 OGRE 作为主要工具是出于以下两点考虑: 第一,它是由一个核心小组开发并维护,由于它是一款开源引擎,所以它也像 Linux 一 样,被各种不同的团体和组织改造和扩充,并使它能够适应不同的应用领域和拥有更强大的 功能。 第二,OGRE 除了可调用所有 Direct3D 和 OpenGL 的接口外,还可方便扩展使用其他类库 的接口。 为提高效率和质量,系统基本架构搭建参考用开源图象引擎 OGRE(v1.4.5) 。 图 2-4 为 OGRE 中核心对象的关系,最顶部是根(Root)对象,它是 OGRE 系统的“入口” 。 基于 GPU 的 3D 场景真实特效模拟 - -16 图图 2-42-4 OGREOGRE 对象关系图对象关系图 OGRE 中由很多模块组成,每个模块互相配合,共同实现 OGRE 的强大功能和优秀特性。 OGRE 的模块大致可表现为如下结构,这也基本上是 OGRE 工程文件的结构: OgreMain Platform Managers SDL Win32 Plugins BspSceneManager FileSystem OctreeSceneManager ParticleFX Render Systems 基于 GPU 的 3D 场景真实特效模拟 - -17 Direct3D8 SDL Tools 3dsMaxExport BitmapFontBuilderTool MilkshapeExport XMLConverter 主要模块: OgreMain,如表 2-1 所示: 表表 2-12-1 OgreMainOgreMain 相关类相关类 特性相关类 场景组织体系 Node, SceneNode, SceneManager, Camera, MovableObject Material 管理 MaterialManager, Material, Material:TextureLayer 插件动态加载系统 Root, DynLibManager, DynLib 数学支持库 Math, Vector3, Matrix3, Matrix4, Quaternion 渲染器和几何管道 RenderSystem, RenderQueue, Renderable 网格/几何实体管理 MeshManager, Mesh, SubMesh, MeshSerializer, PatchSurface 资源管理 ResourceManager, Resource, ArchiveManager, ArchiveEx 天空/背景渲染 SceneManager 公告板系统和粒子系统 BillboardSet, Billboard, ParticleSystemManager, ParticleSystem, ParticleEmitter, ParticleAffector 日志和异常处理 Exception, LogManager, Log 事件监听器 FrameListener, RenderTargetListener 编解码器和图像加载器 Codec, JPGCodec, TGACodec, PNGCodec 自定义内存管理器 MemoryManager 基本动画 Animation, AnimationTrack, KeyFrame 骨骼动画 Skeleton, Bone, Animation, AnimationTrack, KeyFrame 字体渲染/字体加载 FontManager, Font 覆盖(Overlay)表面,二维元素 Overlaymanager, Overlay, GuiElement, GuiContainer BSP 场景管理 基于 GPU 的 3D 场景真实特效模拟 - -18 该插件用 BSP 树和 clusters 提供了室内场景的管理。它可以导入 Quake3 的关卡,如表 2-2 所示: 表表 2 -2 BSP 场景管理相关类场景管理相关类 特性相关类 BSP 树BspSceneManager, BspLevel, BspNode 关卡导入Quake3Level Shader 支持Quake3Shadermanager, Quake3Shader 2.32.3 开发环境开发环境 硬件: PC 机 Pentumn500 以上,硬盘 10G 以上,可支持第二代管道渲染技术 软件: OGRE1.4.0,VS2005, DirectX 9.0 SDK 基于 GPU 的 3D 场景真实特效模拟 - -19 第第 3 3 章章 系统的软件开发系统的软件开发 3.13.1 阴影系统的设计阴影系统的设计 3.1.13.1.1 概述概述 阴影是计算机生成的虚拟场景中重要的一部分 ,它有利于场景的真实感 ,并且提供重 要的深度信息和场景中物体相对位置的信息6。实际上 ,与其它可视化的信息如高度、纹 理、透视、移动相比 ,阴影更能有力地表达场景中物体的精确位置、尺寸。但是阴影的生 成需要进行大量的计算 ,具有阴影的场景在渲染时会造成时间上的很大牺牲 ,特别是当碰 到复杂场景和多边形数量增加时渲染速度会大大降低 ,以至于场景的渲染满足不了最基本 的视觉要求 (低于 25 帧 /秒 )。因而一直以来阴影的生成在虚拟现实领域中都是一个比较 有挑战性的问题。 虚拟环境中阴影的作用不仅在于能够增强场景的真实感,同时也能帮助判断场景中物 体的空间相对位置关系。实时阴影生成算法是计算机图形学研究中一个基本问题,同时也 是一个难点7。复杂场景的阴影计算耗费很大,传统的实现方法中,无论是图像空间算法 还是物体空间算法,都由 CPU 完成所有的变换操作计算,因而算法的性能受到约束。 GPU 近年来逐步应用于复杂场景的顶点和片元相关的计算8。GPU 对 3D 向量和矩 阵操作,以及基于像素和图像数据的帧缓冲区操作等复杂计算做了很好的优化。GPU 集 成了对三角形顶点进行几何变换和光照计算的顶点处理单元(Vertex Processor) 和对像素进 行着色的片元处理单元( Fragment Processor)。可编程着色器并没有完全替代传统处理器中 的顶点管道和像素管道的固定处理单元,它们构成了图形处理器中不同的顶点和像素管道。 很多情况下,基于 GPU 的算法比常规的物体空间的方法实时性能更好。 随着 GPU 的快速发展,已经出现了多种产生阴影的算法 ,当前最常用的阴影生成算法 是阴影图(Shadow Maps) 和阴影体 (Shadow Volumes) 2 种算法9。 3.1.23.1.2 ShadowShadow VolumeVolume 算法算法 Shadow Volume 算法是当前流行的产生实时阴影的一种方法, 它有非常理想的效果。 一个物体之所以会处在阴影当中, 是由于在它和光源之间存在着遮蔽物10。它的基本原 基于 GPU 的 3D 场景真实特效模拟 - -20 理就是根据光源和遮蔽物的位置关系计算出场景中会产生阴影的区域, 这个区域就是所 谓的 Shadow Volume, 然后对所有物体进行检测, 以确定其会不会受阴影的影响, 所 而在受到影响的物体上产生阴影。在 Shadow Volume 技术中需要根据光源的位置来实时的 产生 Shadow Volume, 并根据 Depth-Fail 算法来检测场景中的物体是否处于遮蔽物产生 的 Shadow Volume 中。 Shadow Volume 根据遮蔽物产生,其有三部分组成: 上盖, 下盖和侧面。上盖来自 遮蔽物面向光源的部分,下盖来自遮蔽物背向光源的部分。并且, 下盖应沿着光照方向 延伸足够远,以包括可能被影响的所有物体11。我们首先根据遮蔽物的形状生成一个没有 沿着光线方向延伸的 Shadow Volume 网格, 等到 Shadow Volume 渲染的时候利用 HLSL 中的顶点渲染技术对相应的点进行延伸。也就是说把遮蔽物面中向光源的三角片, 原封 不动地作为 Shadow Volume 的上盖, 背向光源的三角片的各个顶点沿着光线方向延伸足 够远, 以作为下盖。然而, 这样的做法在轮廓边存在问题。因为有两个三角片共享一条 轮廓边, 一个三角片面向光源的, 另一个三角片背向光源。而这两种三角片对其顶点进 行的操作是不同的, 面向光源三角片的顶点就原封不动, 而背向光源三角片的顶点却应 沿着光线方向延伸足够远。这就产生了矛盾。为了解决这个问题, 我们通过复制共享的 顶点将这两个三片分裂。当共享边成为轮廓边时, 一个三角片原地不动, 而另一个三角 片沿着光照方向延伸。但是, 这样又出现另外一个问题,那就是两三角片之间产生了裂 缝,Shadow Volume 不再是封闭的了。解决的办法是, 在这两个三角片之间通过共享边 的四个顶点, 生成一个四边形嵌块, 它由两个三角片组成。当三角片被延伸时, 四边 形嵌块也随之伸展, 从而形成了 Shadow Volume 的侧面。在生成遮蔽物网格的 Shadow Volume 时, 我们对网格中的每一共享条边都做上述的处理, 不管这条边是否是轮廓边。 缺省的情况下, 非轮廓边产生的四边形嵌块会退化, 因为这四点不会沿光线延伸, 从 而四点共线。 这项技术是像素精确的,不会产生任何的锯齿现象,但是与其他的技术一样,它也有 缺点。最主要的两个问题一是极度依赖几何形体,二是需要非常高的填充率。由于这些缺 点,使得 shadow mapping 技术渐渐地变得更为流行。 3.1.33.1.3 ShadowShadow MappingMapping 算法算法 Shadow Mapping 算法是一种图像空间的阴影算法,对阴影的处理过程完全是基于屏 基于 GPU 的 3D 场景真实特效模拟 - -21 幕像素的,不依赖于场景的复杂度以及其它额外信息12。其基本思想十分直观:一个物体 之所以会处在阴影当中,是由于在它和光源之间存在着遮蔽物,或者说遮蔽物离光源的距 离比物体要近,因此只要在绘制时能快速判断出场景中物体和光源之间的远近关系即可获 得实时的阴影13。它的算法流程分为两个步骤: 步骤 1:以光源作为视点,或者说在光源坐标系下面对整个场景进行绘制,目的是要 得到一张场景中所有物体相对于光源的深度表(depth map,即通常所说的 shadow map), 深度表中每个象素的值记录了沿该光源入射方向场景中距离光源最近的景物采样点的深度 值(z-buffer 的作用)。在这个步骤中我们感兴趣的只是每个象素上记录的深度值,所以不 需要做任何光照计算,只要打开深度测试(z-test)和写深度值(z-write)的绘制状态即可。 步骤 2:将视点恢复到原来的正常位置,绘制整个场景,对每个象素在 pixel shader 中计算其可见点和光源之间的距离,然后将距离值和深度表中对应的值比较,以确定这个 可见点是否处在阴影当中,接着根据比较的结果,对阴影区象素和非阴影区象素分别进行 不同的光照计算,完成阴影效果的绘制。 从以上算法步骤可以看出,步骤 1 以光源为视点绘制整个场景其实是对光源视域四 棱锥进行了一次光源可见性的预计算,所生成的深度表为步骤 2 的深度判断做好准备14。 因为深度表的生成只和光源的位置以及场景中物体的位置有关,无论视点怎么运动,只要 光源和物体的相互位置关系不变,深度表就可以被重复使用。步骤 2 中的核心任务是完 成阴影判断,确定当前视域范围内的阴影区和非阴影区,如果当前象素上的可见点距离光 源的距离比从深度表中采样得到的值大时,说明当前象素上可见点在光源坐标系中被其前 面的景物采样点所遮挡,应该在阴影区中,判断过程如图 3-1(a)所示,反之如果当前象素 距离光源的距离小于等于从深度表中采样得到的值时,则应该在非阴影区,判断过程如图 3-1(b)所示。 图图 3-1(a) 当当 A 以光源中心作为视点,绘制场景,将深度信息存储在一幅深度纹理(即 Shadow map) 中; 在第二遍绘制中,从真实视点角度,以常规方式绘制场景。对于每一个绘制的片元 (fragment),计算其在光源裁剪空间中的深度值 D2,并将此深度值与第一遍绘制后生成 的纹理中相应的深度值 D1 做比较。如果 D2 D1,则表示该片元与光源之间还有其它片 元,片元位于阴影中;否则,当前片元不在阴影中,被光源照明. 时间进度安排: 第一阶段:(2007 年 2 月 26 日-3 月 31 日)阅读有关文献,熟悉开发工具,完成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备交易买卖合同范本
- 赠送车辆抵押合同范本
- 药品推广服务协议合同
- 眉山项目保安合同范本
- 社区光伏租赁合同范本
- 进口丙烷销售合同范本
- 违约租赁合同解除协议
- Unit 1 School Subjects Let's Spell(教学设计)-2023-2024学年人教新起点版英语三年级下册
- 2025年绵阳中考填空试卷及答案
- 声音的高与低(教学设计)四年级上册科学教科版
- 知道智慧树品牌管理:思维引导与案例解析满分测试答案
- 医院管路护理新发展课件
- 数字营销与社交媒体广告的跨文化本地化策略-洞察及研究
- 学堂在线 军事历史-第二次世界大战史 章节测试答案
- 区税务局落实税费征管强基工程工作情况汇报
- 村干部日常管理办法
- ALD工艺温度对性能影响-洞察及研究
- 城市轨道交通系统设备综合联调规范
- 汽车保养常识app课件
- 主板维修标准化流程
- 2025-2030中国智慧城市建设现状与未来投资机会分析报告
评论
0/150
提交评论