查看: 1323|回复: 6
打印 上一主题 下一主题

基于Virtools的视景系统优化技术研究

[复制链接]
Asen    

867

主题

0

听众

1万

积分

外协人员

Rank: 7Rank: 7Rank: 7

纳金币
17488
精华
1
跳转到指定楼层
楼主
发表于 2011-9-7 08:11:16 |只看该作者 |倒序浏览


摘要:提出在视景系统中实现的一种景物优化方法.根据细节层次技术原理,实时简化场景的多边形网格,将景物合理分类,对不同类型的景物相应采取了不同的优化策略.探讨了在Virtools Dev开发环境中应用基于渐进网格算法的实时连续LOD技术来解决这一问题的方法和策略,并利用开发平台软件包Virtools Dev的SDK,开发出了一种基于视距的LOD行为模块型控件,作为对Virtools Dev集成的几种L0D技术的有力补充.

关键词:Virtools;视景系统;细节层次;规则网格
       尽管图形软件和硬件在最近十几年得到了极大得发展,但三维图形的绘制速度还是远不能满足动态仿真、实时交互、科学计算可视化对图形实时绘制所提出的要求.特别是虚拟现实技术的出现,使得三维交互式图形的实时绘制问题变得更加突出D-z].如何减少被渲染地形的三角面数量便成了室外场景实时渲染的关键技术问题L3].视景系统场景的优化技术包括预生成法的L0D技术和实时生成法的I,OD技术L4j,实时生成法本质上就是渐进网格(Pregressive meshes,PM)的算法.本文采用Virtools Dev软件作为I OD技术的开发平台,集成度高,兼容性好,可与Virtools Dev开发平台中的其它建模、交互等技术达到无缝衔接.

1 基于Virtools环境的LOD 应用

1.1 Virtools中集成的I OD技术
       Virtools中的细节层次(I OD)技术是一个算法集合,它通过移除被绘制物体中的不必要细节来提高渲染速度.Virtools包含了几种I.OD 技术,可以利用I OD Manager Options这一行为模块激活或者不激活I OD算法并且和物体的I OD属性联合使用.

       本文的LOD实现,主要用到以下两种网格,分别是Progressive Mesh和Patch Mesh.Progr—essive M esh.

当在网格设置中选中渐进网格选项的时候,为了实时简化网格,Virtools立即为该对象的多边形网格建立一数据结构(建立该结构需要花费数秒钟时间。

       一旦该结构建立起来,并且为该对象添加I OD Object属性,I OD渐进网格技术便被应用到该渲染的对象.该技术可用于所有使用渐进网格的对象.

       Patch Mesh是一种特殊的网格.Patch Mesh由一些可以被镶嵌(或称为细分)的Bezier面片(三角形或者四边形)构成.在Virtools Dev中,可以通过改变其迭代(iteration)数来实现对网格细节级别的控制.在加大网格细节的同时,PatchMesh依然占用较少的存储空问.
1.2 应用方案
       在驾驶模拟器视景系统中,公路两旁的景物对象一般可分为地形模型和地表景物模型两类.地形模型包括视景中的地表的形态,如山丘、低谷等.地表景物模型包括附于地表之上的景物,如建筑,石块,车辆,树木等.应用I OD技术的具体步骤如下。

1)建模使用3dsmaxmaya等三维建模软件为某一景物建立一个网格较密的多边形模型,做到能较好满足近处视觉观察需要的细节级别即可.对于地形模型,则需要根据卫星航拍采集和处理的数字高程数据进行建模.

2)网格的渐进化处理 在Virtools Dev等交互式三维视景系统开发软件中,用渐进网格算法,将导入的多边形模型进行网格渐进化(PM 化),使其具有渐进网格要求的数据结构.

3)动态简化模型 这个动态简化的过程是与视点相关的.视点到景物对象的距离称为该对象的视距,便可根据景物的视距由近到远的变化(景物占屏幕尺寸的百分数由大变小),实时地减少该景物多边形模型的三角面片数量,反之则相应增加,实现对视景的动态优化.该方法采用Bottom—up(自底向上的)方式简化多景物多边形模型的网格。

      由于汽车驾驶模拟器中地表景物可分为上述两类,若简单地将这两类按照视距的远近进行I OD简化,动态简化时,近距离地形模型的多边形网格面片数的大幅减少可能导致模型轮廓的异常,将严重影响视觉效果的逼真性,为了弥补这一缺陷,对上述两类模型,应采用两种不同的简化策略,分别是直接简化和分块简化.

1)直接简化 对地表景物模型组中的单个地表景物,可直接根据其占屏幕百分比面积大小来调节其细节层次;或者使用下面将叙述的利用SDK 开发的I OD控件,根据其视距远近来实时重建其网格,调节其对应的细节层次。
       1)直接简化 对地表景物模型组中的单个地表景物,可直接根据其占屏幕百分比面积大小来调节其细节层次;或者使用下面将叙述的利用SDK 开发的I OD控件,根据其视距远近来实时重建其网格,调节其对应的细节次.  
        2)分块简化 对于地形模型组,为减少上述负面影响,需要在地形建模前做好规划,可将整个地形进行合理分块后再建模.这里作如下说明:如图2所示,假设已经将整个地形均匀分成大小相等的若干正方型小块

(块).其中驾驶中的虚拟汽车用黑点表示,对于视野内近处一定视距内的地形,可对其关闭LOD功能,使其对观察者展现最初PM 化后的原始网格;对于视距较远的地形模型,则可对其开启I OD功能,使它的表面网格随着视距的加大而简化,为简单起见,这里将被简化的地形块用最简单的基网格表示.并将简化掉的三角形面片数量上限控制 在合适的百分比内,使得最大简化后的地形轮廓与未简化前的原始轮廓相比,视觉上改变不大.当远方地型模型占屏幕百分比例较小时,其轮廓的跳跃现象,对整个视景的影响就小了,基本可以被

接受.此外,被简化的地块是随着车辆的移动而动态调整的,依赖视点(虚拟驾驶者)的位置,当车辆由位置A移至B时,被简化的地块随视点位置改变而改变.
2 基于SDK开发的LOD行为模块

      Virtools Dev提供了SDK,允许用户在VC++6.0编程环境中开发自己的行为模块.因此,为了进一步研究I OD技术在汽车驾驶模拟器中的应用,也开发了自己的I OD行为模块.该I OD行为模块名为“I OD for PM and Patch Mesh ac—cording    toDistance”。 在对象的脚本(Script)页面中,将该LOD行为模块拖拽下来,放到Script中。开发该行为模块时,主要使用到了SDK 中的两个类:CKMesh和CKPatchMesh.开发该控件的核心代码用伪代码表示如下.

if(当前对象网格是Patch Mesh)

{

int tesselate= Patch Mesh的最大迭代数;

float distance一计算当前视距(当前对象);

float distmin— LOD作用的最近视距;

float distmax— LOD作用的最远视距;

float index = (distance — distmin) /(distmax—

distmin);

if(index< 0)index= 0:

if(index> 1)index一1:

int mindex= (int)(tesselate*(1一index)):

按迭代数绘制PatchMesh(mindex);

)

else{

PM 化(当前对象网格);

float distmin= LOD作用的最近视距;

float distmax= LOD作用的最远视距;

float minvc—percent= PM 网格渲染顶点数的百分比

值;

float distance= 计算当前视距(当前对象);

float index = 1.0一(distance —distmin)/(distmax—

distmin);

int vtr一(int)(index*当前网格的顶点数);

int minvc一(int)(minvc—percent*当前网格的顶点

数);

if(vtr< minvc)vtr minvc:

按顶点数绘制渐进网格(vtr);

)

该控件编写思路:把视点到对象的距离称为该对象的视距,记为distance.视距中有两个特殊的点,代表I OD作用时的最远视距和最近视距,分别记为distmax和distmin.当distance(distmin时,用设定的最复杂网格表达物体,对渐进网格而言就是PM 化后的原始网格,对Patch Mesh而言就是所设置最大迭代数时表达的网格;当distance~distmax时,用最简网格表达物体,对于Patch Mesh而言就是迭代数为0时的网格,对于渐进网格来说就按设定的最小百分比值来渲染顶点;当distmax>distance>distmin时,按照一定比例因子来绘制网格,该比例因子记为index,对于不同的网格index的含意是有区别的.对于Patch Mesh,index 的值是(distance—distmin)/(dist—max—distmin);而对渐进网格则是1一(distance—distmin)/(distmax—distmin).其使用方法详见上述伪代码.

3 结束语

     笔者利用以上的优化技术开发了一个驾驶模拟器的山区视景[5].在驾驶模拟器视景系统中,让虚拟汽车反复运行于山区场景中的同一地段,在I 0D功能开启和关闭两种状态下,分别记录了5个由Virtools Dev监控系统显示的刷新率(单位:Fps),并且计算了平均帧速率,如图6所示,LOD开启时候的平均刷新率比关闭时提高了41 .刷新率明显提高,基本达到了通过简化场景的方法来提高视景系统运行速度的目的.由此可见,Vir—

tools Dev中的LOD技术有效地解决了驾驶模拟器大规模场景的实时渲染速度问题.

参考文献

[1]王汝传,张登银,辛晨昀.虚拟现实中3D 图形建模方法的研究EJ].计箅机辅助工程,2000(12):25—29.

Ezl亢祝真,陆丽娜.生成真实感图形的四大技术rJ].计算机应用研究,1994(4):57—59.

[3]Chaturvedi A K,Piegl L A.Procedural method for terrain surface interpolation [J]. Computer 8G raphics,l 996,2O(4):541—566.

[4]李勋祥,陈定方.视景系统的特效技术研究EJ].武汉理工大学学报:交通科学与工程版,2007,31(6):

1 O25—1 O28.

[5] Li Xunxiang,Chen Dingfang,Wang Le,et a1.Re—search and dexrelopment of distributed VR driving system based on virtools[C]//1)roceedings of 2006  1 0th international Conference on Computer Sup—ported Cooperative W ork in Design,IEEE Press,2006,M ay 3—5:1 1 37一l 141.


分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2012-2-13 23:18:24 |只看该作者
楼主收集的可真全哦
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2012-4-25 23:20:47 |只看该作者
先垫一块,再说鸟
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2012-6-3 23:24:03 |只看该作者
呵呵,很好,方便罗。
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2012-6-4 23:18:50 |只看该作者
呵呵,很好,方便罗。
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

6#
发表于 2012-6-8 23:23:56 |只看该作者
好可爱的字,学习了
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

7#
发表于 2012-7-31 23:20:05 |只看该作者
很经典,很实用,学习了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-22 05:23 , Processed in 0.084893 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部