用户登录  |  用户注册
首 页毕业论文毕业设计下载定做交易过程截图支付宝在线支付
当前位置:完美毕业网毕业设计下载计算机毕业设计c#

基于LOD的大规模实时地形绘制系统设计与实现

联系方式:点击这里给我发消息QQ212181988
官方主页:www.biye114.com
图片预览: ;论坛转帖
插件情况:
售后服务:请联系客服QQ:212181988
一键分享拿折扣:
  • 好的评价 如果您觉得此软件好,就请您
      0%(0)
  • 差的评价 如果您觉得此软件差,就请您
      0%(0)

软件简介

 摘要:地形绘制有着广泛的运用,室外场景的交互式渲染在可视化应用中有着重要的地位,如游戏开发、航空模拟、外景探测等。随着绘制场景越来越大,绘制的地形也就越来越复杂。在开发世界地形场景中,地形场景一般由几百万甚至更多的三角形构成。若直接暴力渲染,远远超过当前的硬件能力。要想能够实时、交互绘制,必须对大规模地形场景进行简化,必须对庞大的数据进行有效的管理。正是因为如此,一个合理高效的针对于大规模地形实时渲染系统是十分重要的。如今地形渲染系统渲染地形时都采用层次细节技术来消减三角形的数目。而针对层次细节有很多实现的方案, 如 W.H. de Boer 的
GeometryClipmap 算法,Mark Duchaineau 的 ROAM,但是这些地形层次细节技术都是依赖 CPU。然而就目前来说,因为 GPU 的绘制能力大大提高,而减少绘制三角形处理的开销甚至超过这些三角形被绘制的开销。这些算法反而增加了系统开销,而对绘制速率提升不大。所以本文主实现了一个基于 GPU 的高效的大规模地形实时绘制系统,使用GPU 加速了 Geometry Clipmap 算法并同时利用硬件化的曲面细分技术实现层次细节技术。使用曲面细分技术改变了顶点的拓扑几何结构,从而改变三角形个数,即产生了多细节。如果检测到 GPU 不支持曲面细分技术,就会退回到原先的 Geometry Clipmap方法。这时候需要处理不同层次之间的接缝问题,解决办法是进行插值,得到和稀疏层次同样的高度。这么做虽然没有在拓扑上达到无缝连接,但 GPU 的精度足以保证空洞基本都会小于一个像素的大小。所以视觉上看不到空洞了。本系统利用了以上技术,使得
CPU 从地形绘制方面解放出来,更多的进行物理模拟、AI 运算。


关键词:地形绘制;实时渲染;细节层次;曲面细分





目录
中文摘要 1
ABSTRACT II
目录 III
1绪论 6
1.1 课题背景 ............................................................ 6
1.2 现状 ............................................................. 7
1.3 论文工作 ............................................................ 8
1.4 论文组织结构 ........................................................ 8
2相关技术 9
2.1 GPU 简介 ............................................................ 9
2.1.1 GPU 发展简介 .................................................... 9
2.1.2 GPU 绘制流程 .................................................... 9
2.2 着色器 ............................................................. 11
2.3 SHADERMODEL .......................................................... 12
2.3.1 Vertex Texture Fetch ........................................... 12
2.3.2 曲面细分 ....................................................... 12
2.4 几何体实例 ......................................................... 12
2.5 DXUT ............................................................... 13
2.6 传统地形渲染技术 ................................................... 13
2.6.1 地形数据结构 ................................................... 13
2.6.2 地形细节层次技术 ............................................... 14
2.6.3 地形简化方法 ................................................... 15
2.7 简化产生的误差 ..................................................... 17
2.7.1 裂缝 ........................................................... 17
2.7.2 突跳 ........................................................... 17
2.8 本章小结 ........................................................... 18


3需求分析 19
3.1 用户定位 ........................................................... 19
3.2 需求分析概述 ....................................................... 19
3.3 系统可行性分析 ..................................................... 20
3.3.1 经济可行性分析 ................................................. 20
3.3.2 技术可行性分析 ................................................. 20
3.4 系统功能性需求分析 ................................................. 20
3.4.1 初始化模块 ..................................................... 21
3.4.2 绘制模块 ....................................................... 21
3.4.3 更新模块 ....................................................... 22
3.5 非功能性需求 ....................................................... 22
3.5.1 开发语言和平台 ................................................. 22
3.5.2 系统性能需求分析 ............................................... 23
3.6 本章小结 ........................................................... 23
4系统设计 24
4.1 系统设计原则 ....................................................... 24
4.1.1 先进性原则 ..................................................... 24
4.1.2 可复用性原则 ................................................... 24
4.1.3 可维护性原则 ................................................... 24
4.2 系统流程设计 ....................................................... 24
4.3 系统功能模块设计 ................................................... 25
4.3.1 初始化模块设计 ................................................. 26
4.3.2 更新模块设计 ................................................... 27
4.3.3 绘制模块设计 ................................................... 28
4.4 数据结构设计 ....................................................... 28
4.4.1 数据结构设计原则 ............................................... 28
4.4.2 地形数据设计 ................................................... 30
4.5 计算镶嵌因子 ....................................................... 33
4.6 裂缝和突跳处理 ..................................................... 34
4.7 本章小结 ........................................................... 35
5系统实现 36
5.1 初始化模块实现 ..................................................... 36


5.1.1D3D 设备初始化 .................................................. 36
5.1.2 消息泵初始化 ................................................... 36
5.1.3GUI 初始化 ...................................................... 37
5.1.4 地形数据初始化 ................................................. 37
5.2 更新模块实现 ....................................................... 38
5.2.1 更新摄像机的位置 ............................................... 38
5.2.2GUI 事件响应实现 ................................................ 39
5.3 绘制模块实现 ....................................................... 40
5.3.1 绘制 GUI ........................................................ 40
5.3.2 天空盒绘制 ..................................................... 40
5.3.3 地形绘制 ....................................................... 41
6系统测试 45
6.1 测试环境 ........................................................... 45
6.2 系统功能性测试 ..................................................... 45
6.3 系统性能测试 ....................................................... 45
6.4 本章小结 ........................................................... 49
7总结与展望 50
7.1 总结 ............................................................... 50
7.2 展望 ............................................................... 50
参考文献 51
致谢 52
附录 53


1绪论

本项目源于本人实习中项目,本系统基于实习中的场景编辑器中的地形系统改进而来。本章主要介绍选题背景,研究、建设目标和关键问题与技术难点,并在最后给出论文的组织结构。

1.1课题背景

超大规模地形的实时绘制一直以来都是计算机图形学领域研究的重点。而一个几何体可以细分为多个小三角形组成,所以地形一般由高程图或真实的三角形网格构建而成。若将数据以三角形网格直接保存,不利于数据的管理和组织,并且会浪费存储空间。而在目前的地形绘制系统中,通常使用高程图。所谓的高程图是用来保存地形的高度数据,接着由程序根据高程图中的数据生成三角形网格。现阶段下,例如游戏或航空模拟训练,需要用户能与地形进行实时交互,但是,现在的大规模地形绘制系统面临着两个问题:
(1)地形原始的几何模型数据量十分巨大,如适用于地理信息的地形数据就达到了
GB 级,仅仅几平方公里的地形数据多边形数目可达到千万的级别。如需要最精确的绘制则要把所有数据进行一次性绘制,如使用一张高程图生成所有细节的三角形网格,显而易见,这样会大大增加系统开销和绘制时间。从另外一方面来说,若我们使用 Windows
32 位系统,此时 CPU 寻址空间为 4GB,而除去本身操作系统的开销约 2GB,还剩下 2GB
来使用,将数据一次性加入内存并长期驻留显然是不可能的事情。
(2)目前计算机图形显示技术及其硬件飞速发展,现代的 GPU 能够在一秒内生成几千万的三角形数量,每秒像素填充率为几亿个,但是仍然无法满足如此大规模的地形数据和实时交互性的要求。一般来说一个全细节的地形通常有几万兆的多边形数,同时还要承担其他计算,如光照,即在现在的显卡技术下,无法一次性全细节绘制实时绘制这么大规模的地形。
所以一个高效且合理的地形实时绘制系统是非常有必要的。而现在的地形系统的一个最主要任务就是简化地形数据。其基本原理是在不影响视觉效果的条件下,根据地形与视点的距离,来不同程度简化地形,同时剔除了不可见的三角形。这些简化地形数据的方法可以大致归结为两类,一类是采用视点相关的层次细节技术(Levelof Detail,
LOD)。对于远距离的地形使用低精度模型,离视点近的地形使用高精度模型。这样在不影响视觉效果的前提下,减少地形数据量。另一类是采用可见性剔除技术,将看不见的三角形剔除,不进行额外的绘制工作。这些技术包括遮挡剔除,视锥体剔除,背面剔除。


1.2现状

一个高效的地形系统依赖于简化算法,而如今,在游戏中,或者其他领域中对地形的绘制一般使用层次细节( LOD)来实现地形的实时绘制。而 LOD 技术最早的
GeoMipMapping 算法是借鉴了纹理的 MipMapping 技术来进行地表处理,其原理上是根据任何一小块地形在屏幕上显示的实际尺寸来选择对应密度的网格,然后把不同密度的网格以某种方式拼接起来,即距离视点近的地形块提供充足的细节,远的减少所提供的细节。但这容易产生不同层次之间的裂缝。而 ROAM 算法是对 GeoMipMapping 的改进。这个算法实际上借鉴了当时游戏引擎所常用的二叉树进行场景管理的思路,利用二叉树这个最简洁的空间描述数据结构,把顶点(CPU 端)消减发挥到极致。这样整个地表被组织成一个巨大的二叉树,同时具有有两个队列,一个是分割队列,另一个一个是合并队列,分别用于处理摄像机移动时,增加进入视野的区域细节和消减退出视野的区域细节。而 Quadtree 算法是对 ROAM 算法的改进,使用四叉树来做场景管理,加速查找和剔除。先如今,在游戏行业中一般使用 Chunked LOD 算法,该算法结合了 Quadtree算法,只不过将地形分区块消减,地形以每个 Chunk 来组织数据。以上的 LOD 算法都是基于 CPU 端,既很大程度依赖 CPU 的计算,基本思想都是尽量使用 LOD 思想来简化地形数据,减少所需绘制的多边形数目。同时这些 LOD 算法容易产生图像跳跃
(popping)和断层(cracking/T-junction)。产生的原因都是因为插值误差导致得到的高度不一致,造成以上现象。这也意味着,以上都需要进行额外的处理层次之间的链接,以防出现裂缝或者断层现象。
在 GPU 计算能力不是很强的时代,以上算法确实是十分实用的。但是由于现 GPU的并行计算能力大大增强,以上的效果就需要另外评估了。之前介绍的都是依赖于 CPU计算,其基本思想是在 CPU 端尽量减少多边形数目,再提交给 GPU 绘制。但是如今
GPU 计算能力大大增强,绘制一个三角形的开销可能比选择一个三角形并进行绘制的开销小得多,也就是说现在的 GPU 若要发挥性能,瓶颈一般在于 CPU 到 GPU 传输的带宽上,并不在于 GPU 性能不足。这也反映了 GPU 更加适合一次性处理大数据绘制,而不是多次小数据量绘制。所以,在现代 GPU 硬件条件下,这些传统的 LOD 算法已经不能够很好的适应,因为在运行时,由于需要实时生成 LOD 模型,会产生过多的三角形传输次数,而将 CPU 的三角形数据传输到 GPU 会产生额外的开销,同时 GPU 处理速度远大于 CPU 处理速度,这样调用方法大大增加了 GPU 闲置时间,导致 GPU 并不在满负荷运行。所以减少三角形传输次数,增加每次绘制的三角形数量,才可以充分利用现在的 GPU 的计算能力,本系统基于这种思想对传统 LOD 技术进行了改进。


1.3论文工作

根据对当前地形绘制系统的实际研究和调研。本文所设计的地形实时绘制系统主要模块包括初始化模块,绘制模块,更新模块三大功能模块。并使用 DirectX 11API 进行开发,结合当前的 GPU 渲染管线,利用 DirectX Utility Library 框架对系统进行开发和设计。
在开发过程中,对具体的业务需求进行了分析,并设计系统架构,同时完成了开发工作。论文具体的工作内容如下:
(1)叙述了现如今地形系统背景,总结并分析地形实时绘制系统的优缺点。
(2)确定本系统所采用的技术,并对当前已有的地形绘制系统进行调研,对比了技术,对工作内容进行可行性分析,最后确定本系统相关的技术和设计方案。
(3)对本系统功能模块进行设计。针对需求分析设计了总体架构,同时进一步根据现有条件对子模块进行设计。
(4)本系统各个功能模块的实现。使得本系统在实际应用中满足高性能的需求,并提升了视觉效果。

1.4论文组织结构

本论文对大规模地形实时绘制系统的设计和实现进行了叙述,说明了地形绘制系统的现状,需求,设计与实现。本论文分为七个章节,有理有据的阐述了本地形绘制系统的设计与实现,具体如下:
第一章:绪论。简介了项目的研究的背景和意义,分析了本系统涉及到的关键技术。第二章:相关技术简介。介绍了本系统中涉及的各项核心技术。
第三章:需求分析。按各个模块,论述了系统的非功能性需求与功能性需求。第四章:系统设计。本地形实时绘制系统的架构说明,介绍系统的正题设计。第五章:系统实现与测试。阐述了各个模块的实现和最终的测试结果。
第六章:总结与展望。对工作内容进行总结与展望。


2相关技术

本章主要介绍本地形实时绘制系统设计与实现所需要的相关技术,包括可编程性管线绘制流程,着色模型(Shader model),绘制批次处理,DXUT 框架,层次细节(LOD)在地形系统中的使用情况。对相关技术进行分析,可以帮助开发者在开发过程中设计和选择一个合适的技术方案。

2.1GPU 简介

2.1.1GPU 发展简介

GPU 是 Graphics Processing Unit 的简写,中文名为图形处理器,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上运行绘图运算工作的微处理器。经过几十年的发展,GPU 发展成为基于多个核心的架构,相对于传统
CPU 中单处理器支持单个硬件线程的架构,基于众核架构的 GPU 采用一个处理器支持多个硬件线程,特别是计算机图形学适合单指令多数据/线程(SIMD/SIMT)的并行化,这使得 GPU 在图形及通用并行计算方面都取得了飞速的发展。所以,在如今的 GPU 绘制应用场景中,瓶颈一般在于带宽的不足,既 CPU 到 GPU 数据传输速率不够高,使得
GPU 空闲时间增多。

2.1.2GPU 绘制流程

GPU 的主要任务是将 3D 模型转到图像。在现代可编程管线中,通常将绘制过程划分为几个并行处理的阶段,由不同的单元进行处理。输入的模型数据一般为三维物体的几何描述,如顶点,法线,表面材质等,输出的是二维图像。因本系统使用 DirectX 图形 API,这里主要介绍的是是 Direct3D 11 绘制流程[1],图 2-1 是 Direct3D 11 绘制流程图:
(1)图元装配阶段(Input-Assembler Stage):给渲染管线提供数据,如点、线、三角形。
(2)顶点处理(Vertex-Shader Stage):本阶段将三维顶点映射到二维空间,同时也可进行颜色计算。这个阶段是可编程性的,而且是按每个顶点为单位处理,即输入输出是一一对应的。

图 2-1DirectX 11 渲染管线流程图

(3)壳着色器(Hull Shader Stage):这个阶段分为两个阶段,如图 2-2 所示,这也是可编程阶段。输入的是带有控制点的基本图元,称为 patch。
第一个阶段是按照每个控制点执行的, 在这个阶段对 patch 中的每个控制点,输出对应的控制点。例如一个三角形,它的三个顶点是控制点,那么这个三角形就是有 3 个控制点的 patch。
第二个阶段就是 patch 常量阶段,这时 Hull Shader 会调用一个常量函数,这个函数主要产生镶嵌因子(tessellation factor),这些因子决定了在镶嵌阶段如何细分当前的
patch。

图 2-2Hull Shader 绘制过程图

(4)镶嵌阶段(Tessellation Stage):这个是硬件化的,主要执行的是将图元细分成很多小的物体,比如三角形,四边形或者线。
(5)域着色器阶段(Domain Shader Stage):这个阶段会根据镶嵌阶段生成相应的
UV 坐标以及HullStager 阶段传入的控制点在patch 中生成细分后顶点的位置。如图所示:图 2-3 Domain Shader 绘制过程

(6)几何着色阶段(Geometry-Shade Stage):几何着色器阶段处理整个图元。其输入是一个完整的图元(即三个顶点的三角形,两个顶点的线,或为一个点的单个顶点)。此外,每个图元还可以包括用于任何边缘相邻基元的顶点数据。
(7)栅格化阶段(Rasterizer Stage):将图元进行裁剪,并进行栅格化
(8)片元处理(Pixel-Shader Stage):片元处理阶段也是可编程的,由 pixel shader完成,主要对栅格化后所产生的像素进行操作。同时也可以模拟光线和物体的交互作用,决定每个片元的透明程度或颜色等属性。
(9)像素操作(Output-Merger Stage):这个阶段根据输出像素的信息(深度值或模板信息)来决定像素的是否被绘制出来。

下载地址

点击此处→注册会员上传设计赚钱
以上是大纲和介绍,如需要完整的资料请在线购买.

软件评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

下载说明

* 本站所有资料均已审核通过,内容原创保密,标准格式,质量保证
* 无需注册,点击在线购买后即可获取该套毕业设计(论文)完整
* 支付后请联系在线客服QQ:212181988发送资料
  • 官方微信