当前位置:文档之家› 在虚拟现实中还原真实地形的方法

在虚拟现实中还原真实地形的方法

第35卷 第3期 福 建 电 脑 Vol. 35 No.3
2019年3月
Journal of Fujian Computer
Mar. 2019
———————————————
张子晔(通信作者),男,1998年生,主要研究领域为虚拟现实开发支撑平台与系统。

E-mail: 984065762@ 。

罗旭(通信作者),男,1981年生,主要研究领域为虚拟现实技术。

E-mail: 18349995@ 。

在虚拟现实中还原真实地形的方法
张子晔 罗旭
(湖南农业大学信息科学技术学院 长沙 410128)
摘 要 本文以渲染效率为衡量标准,通过运用Perlin 噪声、分块调度算法和着色器优化等技术,实现了在较短时间内将数字高程图转换为虚拟现实系统中的地形。

经过仿真实验验证,地形还原度较真实,地形数据较为准确。

关键词 Perlin 噪声;分块调度;着色器
中图法分类号 TP391.9 DOI:10.16707/ki.fjpc.2019.03.028
A Method of Recreating Real Terrain in Virtual Reality
ZHANG Ziye, LUO Xu
(College of Information Sciences and Technology, Hunan Agriculture University, Changsha, China, 410128)
1 引言
地形是虚拟现实可视化作品中的一个构成因素,在虚拟环境中真实的还原地貌能增强用户的沉浸式体验,在军事、教育、工程应用上作用尤为突出。

但传统制作虚拟地形的方式资源消耗大,开发周期长。

因此近年来不少学者提出了改进的方法,有优化的视点相关地形生成算法[1],优点是兼顾了视点相关算法的精度与效率,但是在处理大规模三维地形中仍然不能取得良好的帧率;也有支持大规模地形可视化组织与调度的技术[2],将调度的范围扩大至动态地貌;还有有将地形数据与噪声技术实时生成相结合的方法[3],充分利用了CPU 和GPU 各自的优势,在较短的时间内快速随机生成Perlin 噪声值,并以此来生成地形。

为了加强虚拟现实中仿真的效果以及保证在预览时的流畅度,提出了基于着色器 LOD 的模型间平滑过渡技术[4],运用着色器(Shader )技术,根据与视点的距离动态切换模型的精度,实现在任意位置、任意角度上保留可察觉的细节,使虚拟场景具备更好的真实感。

本文根据以上方法的优缺点,结合虚拟现实中沉浸式的需求特点,提出了一种在虚拟现实中实时生成与渲染地形的方法。

首先在原始高程图的基础上,通过噪声填充技术,得到超大地形高度图;其
次采用动态调度算法,对高度图按照坐标进行分块处理。

根据视点位置的移动,采用多线程队列方式动态生成区块地形,删除视点范围以外的地形,保证在运行时刻内存中仅驻留与当前视点可见数据块相关联的数据。

最后运用预定义的纹理根据地形信息铺设纹理,通过Shader 渲染优化后投射到虚拟现实设备,提高真实感。

2 地形生成算法
本方法采用的地形测试数据为DEM 类型,数字高程模型(DEM, Digital Elevation Model )是表示区域D 上的三维向量有限序列,用函数的形式描述为:
()() ,,1,2,3,,i i i i V x y z i n ==
模型采用了等距采样网格,即只存储高度数据。

其中,,i i x y D ∈()是平面坐标,i z 是,i i x y ()对应的高程值。

高程数据中包含了地形的高度信息,但原始高程模型的精度往往不高。

在此基础上,为了加强地形场景在虚拟现实中的还原度,显示出更多细节地形,可采用相干噪声进行填充。

相干噪声是一种平滑的伪随机噪声,具有如下特征:
(1)传入相同的输入值将始终返回相同的输出
96 福 建 电 脑 2019年
值。

(2)输入值的微小变化将使输出值产生微小变化。

(3)输入值的较大变化可能会在输出值中产生较大的随机变化。

我们利用相干噪声中的Perlin 噪声,可以仿真地形的特点来填充高程模型,自动化生成与现实地形数据分布极为相似的数值。

Step1 定义一个大型矩阵,每个晶格的顶点产生伪随机的梯度向量。

Step2 输入一个二维坐标,找到与其相邻的4个元素,计算从该点到每个格点的距离向量,并将顶点上的梯度向量分别乘以该点,得到22n n ×个点乘结果。

Step3 采用Perlin 算法改进[5]后的缓和曲线,代入高程值来计算它们的权重和:
()53461510S x x x x =−+
函数将输出平滑的且符合分形几何的浮点值,将其存储到大型矩阵中。

将矩阵中每一浮点值绘制成一个像素点,最大值为max ,最小值为min ,则各像素点的灰度值为
()
()
255float min n max min ×−=
− 即对浮点值进行变换处理,按比例缩放到
0-255范围内,然后把矩阵的行列值直接转换为平面上的x 、y 坐标,输送到渲染管道,生成带有灰度信息的高分辨率高度图。

3 动态调度算法
噪声填充后的高度图体积较大(一般将增长到数千个像素),难以直接使用,否则将会在计算机中占用大量内存空间,频繁触发页面置换,极大地影响帧率。

因此可以将其拆分成若干个片段,每个片段称为块,块之间互相衔接,所有的块构成了完整的地形。

将整张高度图分割为多个块,该块可视为二维
()/X Z 坐标的方形图块[6],为了满足 ROAM 算法
的要求,需确保每个块的大小都是()()
2121n n +×+,并且相邻的块之间边缘有重复数据。

每个块分别创建一个相对较小的地形,多个相邻的块可以无缝地融合到一个更大的地形。

初始时,在视点周围创建处于中央区域的m m ×个地形块,随着视点位置的
移动不断调整地形块的分布,例如视点向前移动,到块的边界时触发调度程序,动态生成位于其上部分的地形块,载入对应高度图数据,同时一段时间后释放其下部分的地形块。

此操作可以保证在视点周围始终为可视区域,在主观上造成无限大地形的假象,从而实现了大规模地形的调度。

为了进一步优化性能,提高效率,我们采用多线程调度[6] ,把同一时刻每一块的加载放在独立于主线程的单独线程中,通过在创建的线程上加载块来提高计算的效率,并且使用视椎体裁剪,进一步减少计算量来降低负载。

4 铺设纹理与着色器优化
在生成地形模型后,由于高程数据和噪声填充的高度图中仅包含地表的高度值,需要在模型表面铺设预定义的纹理,为了加强真实感,可以选择高分辨率纹理,同时为了保持流畅性,对Shader 着色器进行编程,从而在LOD 的基础上实现模型间平滑过渡,保证了精度与流畅度。

5 验证
基于以上的方法,本文选取的 DEM 数据为华南某地区典型的丘陵地形数据,数据的大小为40974097×。

测试环境如表 1 所示。

表1 测试环境
硬件环境
CPU
Intel® Core™ i7-6700 显卡 GeForce GTX 1070
内存 8GB 虚拟现实设备 HTC Vive 软件环境
开发引擎
Unity 2018.1.5f1 图形API OpenGL 操作系统
Windows 10
在Unity 平台下,通过导入测试数据到使用本文算法构建的模型能够程序化绘制山地地形,并通过第一人称视角观察,图 1 为帧率随时间的变化(取三次运行平均值),图 2 为内存占用随时间的变化,图3为仿真前后地形高度对比(等距取30个坐标点)。

第3期张子晔等:在虚拟现实中还原真实地形的方法97
图1 帧数
图2内存
图3仿真前后地形高度对比6结束语
本文通过分析多种方法的优缺点,结合虚拟现实中沉浸式的需求特点,提出了一种在虚拟现实中实时生成与渲染地形的方法。

此方法主要从基于数字高程模型和相干噪声的地形生成算法、动态调度算法以及铺设纹理与着色器优化这3个方面做出了阐述。

除此之外,以帧数、内存和准确度为衡量标准,通过地形可视化的实验得出结果,实验结果表明,该方法能在虚拟现实平台中较好的应用,被绘制场景的每秒平均帧数超过120FPS,仿真后地形高度值准确度超过99%,因此本文方法能流畅的还原真实地形。

但目前仍存在前期处理时间较长,占用内存空间较大等不足,往后可以继续改进处理算法,同时运用更多有效方法,减小空间复杂度,改善自动处理过程。

参 考 文 献
[1] 袁凌,李丹,陶飞. 三维场景实时建模中地形生成算法优化. 武汉大学
学报(信息科学版),2017,42(10):1387-1393
[2] 高勇,刘家骏,郭潇,邬伦. 面向大规模动态地形可视化的LOD组织与
调度技术. 地理与地理信息科学,2016,32(01):6-11
[3] 刘瑶,庹先国,李怀良,蒋鑫. Perlin噪声生成地形的一种高效率并行方
法. 科技通报,2016,32, 211(03):200-204
[4] 叶迎萍,吴文江,胡毅,朴美燕,刘劲松.基于着色器LOD的模型间平滑
过渡技术.组合机床与自动化加工技术,2018(11):1-3,7
[5] Perlin Ken. Improving Noise.ACM transactions on graphics (TOG),
2002,21(3):681-682
[6] 雷鸣,米剑,刘玉海,张锡恩.视景仿真中大地形显示的一种视相关分层
处理方法.系统仿真学报,2001(S2):241-242,246。

相关主题