虚拟场景中密集高精度模型优化方法研究

2018-10-22 06:09项敏敏
长春师范大学学报 2018年10期
关键词:高精度内存节点

项敏敏

(铜陵学院,安徽铜陵 244061)

随着虚拟现实应用技术的不断成熟,桌面虚拟现实系统出现在各大领域中用于物品展示。与传统的方式如图片展示、视频展示相比,交互式虚拟展示提供给用户更大的自由度和更好的体验[1]。虽然虚拟展示具有方便、对时间和空间不受限制等优势,但是也随之带来很多问题,比如为了追求虚拟场景高质量的真实度,使得虚拟场景的文件信息过大,导致即使在高性能的计算机上,用户对场景的浏览也可能会出现卡顿和模型闪烁等一系列问题[2-3],同时在网络端下载大数据量的虚拟展示场景文件时间很长,用户浏览时不顺畅。因此在追求较高的场景真实度的前提下,研究如何提高虚拟展示场景加载速度、增强实时浏览时的流畅性具有重要的意义。

1 建模优化

X3D中的造型具有几何尺寸和外观,它主要提供了4种原始几何造型:Sphere、Box、cylinder和Cone,任何复杂的物体都可以由这4种原始几何造型构成[4]。但利用几何节点无法构建特殊模型,并且X3D-EDIT并不是可视化编辑软件,建模过程过于繁琐,所以需要使用3DS MAX高级建模软件构建模型之后导出为VRML格式,再通过X3D-EDIT软件转换为X3D格式来完成。图1所示为模型构建。

为了加快文件在网络上的传输速度,方便浏览者对虚拟环境的浏览和交互,除了将模型的方位进行调整之外,还必须尽可能优化模型的视觉效果,减小其文件体积。采用压缩和优化的方式,针对场景中模型制作和后期的渲染场景优化大致可以分为三类。第一,文件压缩,利用VRML的主流编辑平台VRMLPad进行压缩,通常可以使文件的体积压缩为原来的1/3以下。第二,源码优化,也是通过VRMLPad编辑器,除了对源代码进行优化,还可以利用其它插件工具Comments.rar对源代码进行优化,这样文件体积一般会被再次压缩10%左右。第三,图形优化,主要通过使用纹理文件贴在形体上的方式,达到100∶1的压缩率,并且压缩后的图形效果不失真。通过上述优化后再通过X3D-EDIT编辑工具把vrml文件转换为X3D文件即可。图2所示为优化前后源码对比。

图1 模型构建

图2 优化前后对比

2 编程优化

2.1 USE节点

在同一文件中,可以使用USE来引用原始节点任意次,语法:USE“*”。在场景的建构过程中,某个模型可能被重复使用很多次,利用USE节点只需在文档中定义一次该模型节点就可以多次使用,这样就避免出现大量重复的代码,其关键代码如下所示:

2.2 LOD节点

X3D提供LOD节点,用来描述同一个造型不同细节层次的组织关系。一般近处造型的细节要多于远处造型的细节,所以可以利用一定的范围设定,在不同的观察距离上,让虚拟空间呈现出不同的细节,这样不仅加快客户端渲染场景的速度,同时也增加虚拟世界的真实感[5]。

使用上述两种方式对模型进行优化,在很大程度上减少了虚拟场景对系统内存的占用量,释放了系统资源,其基本原理如图3所示。

图3 代码优化原理

3 场景加载

通过上述两种方法优化之后描述模型的代码基本接近最优,目前虚拟场景的构建一般都是直接把场景内模型全部一次加载,但是当出现密集高精度模型的时候,使用一次加载的方式不仅加载时间长而且加载完成之后会严重影响场景的流畅度,所以对于场景内的密集高精度模型需要进行特殊处理。

X3D使用文本的方式描述模型,对单个高精度模型文件的加载速度很快,在场景内使用Inline节点来控制高精度模型的加载时间会在很大程度上提高场景的流畅度,表1所示为两种方式的控制方式对比。

表1 控制方式对比

(1)一次加载。不通过任何控制器控制场景内的模型加载,直接把场景内模型一次解析到内存里,并使用浏览器插件进行搭建渲染[6]。这种方式不仅需要很长时间下载模型文本信息,并且在渲染过程中受到设备限制,会严重拖慢整个场景的渲染。当出现密集高精度模型时,会大量占用系统内存,造成虚拟场景卡顿,严重时还会造成内存溢出及死机的现象。

(2)Inline节点控制加载。使用Inline节点控制场景内模型的加载时间,在密集高精度模型存在的情况下,先不加载这些模型,而是使用一个整合了所有高精度模型的贴图模型进行代替,在用户需要详细观察某个高精度模型时再控制Inline节点进行加载。关键代码如下:

rotation=‘0 1 0 -2.074’>

如上述代码所示。命名为ns2的模型的Load属性为false,表示当前不加载该模型,而当用户点击ns2模型的菜单按钮时,javascript内的cdns02被激活,模型的load属性被置为true,该模型立即加载到场景内供用户浏览。图4所示为两种方法的性能参数对比。

图4 性能对比

如图4所示,当场景内一次加入过多的高精度模型时,不仅需要大量的加载时间,而且内存占用量也会相应增加。并且由于系统内存被占用太多,导致场景运行所需内存不足,严重影响了场景的流畅性,增加了场景内事件的响应时间。使用控制器来控制模型加载,场景响应速度较快,一个高精度模型从读取模型信息到渲染结束,所需时间不超过2秒,完全可以满足用户的浏览需求。

4 结语

在使用X3D建立虚拟仿真场景时,必须要权衡虚拟现实场景的逼真性与载入和浏览速度,既不能为达到完美的虚拟仿真效果而造成浏览的困难,也不能为追求流畅性而过度优化造成效果的粗糙或严重失真。只有这样,才能使X3D的虚拟仿真给用户带来最佳浏览体验。

猜你喜欢
高精度内存节点
CM节点控制在船舶上的应用
Analysis of the characteristics of electronic equipment usage distance for common users
基于AutoCAD的门窗节点图快速构建
“春夏秋冬”的内存
高精度PWM式DAC开发与设计
高精度PWM式DAC开发与设计
高抗扰高精度无人机着舰纵向飞行控制
船载高精度星敏感器安装角的标定
基于高精度测角的多面阵航测相机几何拼接
抓住人才培养的关键节点