虚拟场景漫游(共7篇)
虚拟场景漫游 篇1
摘要:Virtools是一套整合软件, 可以整合现有常用的档案格式, 如2D图形、3D模型或者音效等。它是一套具有海量的互动行为模块的实时3D环境虚拟现实编辑软件, 可以让没有程序基础的美术人员利用内置的行为模块制作出不同用途的3D产品, 如网际网络、电脑和手机游戏、建筑设计、交互式电视、教育训练、仿真与产品展示等。本文重点讲述虚拟场景漫游的原理和方法, 以及一些关键技术问题的解决。
关键词:虚拟现实,漫游系统,Virtools
虚拟漫游技术在多种行业发展迅速, 在石油行业中也得到了广泛的应用, 主要用于员工培训和技术展示。随着各企事业单位对虚拟现实的逐步认识, 虚拟漫游技术得到相当的重视。
法国拥有许多技术上尖端的小型三维引擎或平台公司, Virtools公司所开发的三维引擎是微软XBox认可的系统, 其特点是方便易用应用领域广。自2004年Virtools推出了Virtoos Dev 2.1实时三维互动媒介创建工具, 随即被引进中国台湾地区, 并在台湾地区得到迅速发展, 并引进到中国大陆, 越来越多的多媒体技术公司开始应用Virtools开发其产品。下面分几个方面讲解利用Virtools实现虚拟漫游技术的设计思路、原理以及部分关键技术。
一、虚拟场景漫游的功能设计
Virtools制作具有沉浸感的虚拟环境, 它对参与者生成诸如视觉、听觉、触觉等各种感官信息, 给参与者一种身临其境的感觉。因此在对虚拟场景漫游进行功能设计时, 在结合实际功能需求的同时还需要重点关注角色的人称选择、角色的运动路径的控制、视觉模式的选择、门的控制、重力效果、阴影效果等。
功能设计图如下:
二、虚拟场景漫游的原理
虚拟场景漫游的原理是通过给虚拟环境中的每个对象添加交互或行为方式, 通过一系列的组合达到预期目标。Virtools在此方面为用户提供了“行为模块 (Building Blocks) ”, 通过对它操作能图形化的实现这些交互关系和行为控制。行为模块示意图如下:
如图, 可大概了解行为模块的运行原理: (1) 这里是行为模块的流程起点; (2) 发现“流程输入”, 行为模块开始运行; (3) 行为模块获取“参数连接”的内容, 对参数进行处理; (4) 行为模块产生“参数输出”和“流程输出”, 同时行为模块停止动作; (5) 部分行为模块停止运行返回 (1) 的状态;部分行为模块会自动运行, 进入 (3) 的状态。
要使整个漫游系统能够流畅地按预设方案运行, 对漫游系统中的各个行为模块之间还需进行连接, 简称“行为连接”。在漫游系统运行的过程中经常会出现某个行为模块的参数输出是另一个行为模块的参数输入的现象, 这时需要进行“参数连接”来实现和维持数据的传递, 如图3所示:
三、虚拟场景漫游的关键技术和方法
3.1角色动作控制。在虚拟场景漫游, 一般是通过角色控制来达到虚拟视觉效果的。要想控制角色的基本动作需要使用两类行为模块:“角色控制 (Character Controller) ”和“键盘控制 (Keyboard Controller) ”, 通过对这两个模块进行参数设置, 即可用键盘、鼠标来操作角色的行进和运动轨迹。
3.2角色重力设置。在虚拟场景进行漫游时, 正常情况下需要使角色在地面上运动, 不能浮在空中或沉入地下, 这时需要将虚拟场景中的地面对象设置为“Floor”。同时, 为了让角色正确认识到“Floor”并在地面上走动, 还要添加一个行为模块“Enhangce Character Keep On Floor”在角色之上。通过这个两项设置即可实现角色在虚拟场景漫游时的重力控制。
3.3角色碰撞设置。在虚拟场景中漫游时, 角色经常会和一些对象如墙面、物体等发生碰撞。如果没有设置碰撞效果, 角色会穿过墙面或物体。
碰撞效果的实现有3种方法:建立对象的碰撞属性 (Obstacle attribute) 、建立组合对象 (Group) 、绘制碰撞范围 (Grid与Layer) , 一般情况下针对各个不可碰撞的对象使用建立组合对象的方法比较简单易用, 建立对象碰撞的属性侧重与单独碰撞的效果, 绘制碰撞范围则适用于大面积的管控。
Virtools是以“障碍物”或障碍物的范围来确定是否碰撞的, 所以如果要避免碰撞需要将不可碰撞的对象增加“Prevent Conllision”行为模块、“Object Slider”行为模块或“Layer Slider”行为模块。模块图如下:
3.4角色阴影设置。在虚拟场景中漫游时, 阴影设置主要包含两类对象, 即角色的影子或各类对象的阴影。要想实现阴影效果的控制, 必须对产生阴影的对象添加“Shadow Caster”行为模块, 并且为此类对象的“Attribute”设置添加“Shadow Caster Receiver”属性。
3.5门 (portal) 的开关控制。在虚拟场景中漫游时, 门的主要作用是显示摄像机当前面对的对象模型而不显示背面的场景模型, 减少漫游系统的负担。门按照类型可划分为自动门和手动门两种。
自动门的控制是通过判断门和进门角色之间的距离来实现的, 通常给门使用“Preximity”行为模块, 假定设置“Preximity”的距离参数为5, 当角色和门的距离小于5时门会自动打开, 大于5的时候门会自动关闭。
手动门的设置则是门对象添加行为模块“Wa i t Massage”, 在设置好参数后, 当角色碰到门时该行为模块会按照参数设置的时间被打开。
3.6摄影机设置。在虚拟场景漫游时, 观众们的视觉效果就像很多游戏一样, 采用的是第一人称摄像机或跟随摄像机。
第一人称摄像机的效果就像大家熟知的游戏反恐精英CS一样, 展示给大家的是角色眼睛看到的画面, 这是将摄像机放置在角色人物的头部产生的效果。
跟随摄像机是使用“Keep at Constant Distance”行为模块, 将摄像机放置在角色身后保持一定的距离, 随后用“Look At”行为模块来让摄像机始终跟随角色。跟随摄像机, 也需要首先调整好角色的位置和需要摄像机跟随的角度再添加一个摄像机。要让这个摄像机具有跟随的效果还需要设置如下图所示的脚本:
设置“Keep At Constant Distance”的“Referential”参数为角色本身, “Distance”参数为120个单位。
设置“Look At”的“Referential”参数为角色本身, “Following Speed”参数为80%。
若需要在第一人称摄像机和跟随摄像机之间切换, 可以在“Level”设置脚本如图7所示。“Switch On Key”用来设置控制摄像机切换的按键为“1”、“2” (按键可以根据需要添加或减少, 并可以设置任意键) , “Set As Active Camera”用来设置当前摄像机。用户在操作过程中按“1”可以用第一人称摄像机的视觉效果浏览虚拟场景, 按“2”则切换到跟随摄像机的视觉效果浏览虚拟场景。
四、总结
通过学习和使用Virtools, 我们可以制作一些简单的漫游系统, 当然虚拟场景漫游的基础建立在3D模型上, 模型制作的好坏直接影响漫游系统的视觉效果。在虚拟场景漫游的基础上, Virtools还能进一步的实现模型间的互动和计算, 角色与模型的互动等, 采用Virtools SDK (二次开发包) 还能开发更强大的功能。
虚拟场景漫游 篇2
关键词 大学校园??WEB漫游及场景???搜索分析
基于WEB的虚拟漫游系统可以使人真实自如的观察某一地点和某一场景,同时地图搜索功能可以使漫游者准确找到所要到达的位置。通过建筑物内外的切换,可以使得观察者身临其境,更细致地体验建筑物内的场景,这是一种全新的技术和发展趋势,本文以比较熟悉的大学校园为依托,构建了基于大学校园漫游及场景搜索,对其进行综合评定和分析。
一、WEB校园漫游及场景搜索的项目背景
随着信息技术和市场经济的不断发展,基于传统2D模式的地图已经远远不能够满足大众的需求,3D漫游技术己广泛应用到科技创新和生产生活的许多领域。2010年的上海世博会上,基于WEB的3D漫游技术更是展现出了新兴的技术强大魅力,凸显出了巨大的市场潜力。在众多的3D适用行业中,尤以筑行业最能体现三维建筑模型的真实感、立体感和艺术感,使人身临其境,不断提升客户的体验度。大学校园作为最为熟悉的地点和场景,以此为依托,打造基于校园的WEB的校园漫游及场景搜索功能,使其充分服务于大众,展现信息网络的便捷与魅力,具有十分重要的意义和市场前景。
二、WEB校园漫游及场景搜索的技术支持
基于对校园的实地勘察调查以及数据采集和图片采集,通过各种方法和技术,以实现校园漫游及场景搜索的技术支持,主要包括以下几方面的技术。
(一)Flash基础技术的应用
Flash本身是一个二维动画软件,通过光影效果、遮罩和Actionscript的使用使其达到在Flash中实现3D效果。通过Actionscript将校园三维坐标转换为校园二维坐标。首先将校园的三维坐标值保存在数组里,根据一定规则对这些数组进行计算转换为校园二维坐标,并对这些二维坐标渲染,以实现模拟三维的效果,并建立模型,相对精确地确定每个顶点的空间位置;接着完成正确的贴图,相对精确地确定模型每个顶点对应的贴图位置。
(二)Unity3D技术的升华
Unity3D可理解为一个成像的东西。把校园的三维数据变成图像,放映给在校的师生,犹如一个电视机一样,把接收到的数据信息变成图像。其目的就是减少编写程序的工作,缩短庞大工程量,避免每次重复开发。
(三)RIA技术技术的推动
富互联网应用,Rich Internet Applications,缩写为RIA。传统网络程序的开发模式是基于页面的、服务器端的数据传递,把网络程序的表现层建立于HTML页面之上,而HTML是适合于文本的。随着技术的发展,传统的基于页面的系统已经渐渐不能满足网络浏览者的更高的、全方位的体验要求了。而RIA就能良好地解决这个问题。在设计基于校园WEB的虚拟漫游系统时,充分发挥了富互联网应用程序的功能,结合了声音、视频和实时对话的综合通信技术,强化了设计端和开发端的整合,提供了一种安全、可升级、具有良好适应性的新的网上用户体验。
三、WEB校园漫游及场景搜索设计的主要内容
运用先进的网络信息及软件技术,完成了基础的信息采集及加工之后就是整体模块的运行和体现,基于WEB的校园漫游及场景搜索系统设计分析设计了几大模块,分别是校园漫游模块,人物操作模块,搜索操作模块,场景展示模块。几大模块相互配合,可谓结合了实用性和客观性,实现了场景人物漫游,同时结合地图搜索功能和場景搜索功能,使得漫游功能更加有意义,同时又不显得单调。
校园漫游模块:在人物行走时,如要走到某些有意义的场景,会自动跳出该场景的背景。比如当人物走到校园的人工湖时,会跳出该湖的设计的初衷,设计的背景,蕴含的文化,同时会有湖的美丽图片链接,使人充分了解湖的全面信息。
人物操作模块:在该模块中,系统提供了一个人物模型。浏览者只要在规定的网页提示里,通过鼠标或键盘方向键操作,走到自己想要的地方即可。在浏览校园时,在一些固定的场景会有提示,引导浏览者进一步了解该场景的作用,比如当人物模型走到宣传栏时,会有叹号提示,浏览者只要点击叹号,就会跳出一个界面来说明宣传栏的作用,宣传栏的分类,以及宣传展示的具体信息内容。
搜索操作模块:在校园漫游模块中,可以通过附加的地址搜索栏等方式来进行需要地点的搜索。点击要去的地点,人物就会直接漫游到该地点。比如浏览者想去图书馆,那么网页就显示图书馆的具体位置和行进方向以及引导事宜。
场景展示模块:当人物模型进入校园某个建筑物时,系统就会有建筑物内的3D场景出现,通过方向键可以实现在建筑物内的走动,让人身临其境体验,同时弹跳出与场景相关的信息出现。比如该建筑物是教学楼,就会有一系列对该教学楼的介绍,与学校的网站介绍相连接,显示教学信息以及自习教育开放时间和注意事项等内容。
四、WEB校园漫游及场景搜索的意义
WEB校园漫游及场景搜索作为有利的实践探索,具有较重大的意义:
第一,使校园更具人文气息和信息科技气息。通过基于WEB平台,充分利用Flash,unity3D来实大学校园漫游系统,不仅可以通过建筑虚拟漫游系统漫游校园,还可以通过场景虚拟漫游系统漫游建筑物内景。使大学这个充满活力的场所更加的活跃起来,使人们在搜索大学校园的时候能及时了解渴望获得的信息,对大学校园有一个更加具体、直观、深刻的认识和感悟。
虚拟场景漫游 篇3
随着信息技术的发展, 人们已经不满足于从外部观察信息处理的结果, 而是希望能通过视觉、听觉、手势等参与到信息处理的环境中, 获得身临其境的体验。全景虚拟漫游技术就提供了这样一种既能创建又能体验虚拟世界的沉浸式交互环境, 使用户可以以自然的方式与虚拟环境中的对象交互, 从而产生好像就在真实环境中的感受和体验。近几年, 全景虚拟漫游技术已广泛应用在军事、教育、科研、影视、娱乐等方面。它最大的优势在于图片资源的整合与贴近用户的增值服务, 令创意表现呈现完美。
虚拟现实技术是一项投资大、具有高难度的科技领域, 和一些发达国家相比, 我国虚拟现实行业企业普遍年轻, 新技术知识产权保护力度不够, 行业产业链不成熟, 企业缺乏竞争力。这些已引起政府有关部门和科学家们的高度重视。“九五”攻关计划、国家863计划、国家自然科学基金会等都把虚拟现实列入了资助范围, 并且支持研究开发的力度也越来越大。
虚拟全景漫游技术作为虚拟现实技术的重要分支。随着该领域技术的发展, 目前, 该技术已经逐步得到应用, 但目前还存在一些不足的地方, 如不支持智能化自动演示、不支持场景中插入动态视频、制作过程可视化程度不高、交互形式较少[1]。本文通过研究虚拟全景相关技术, 对全景图制作、虚拟漫游场景制作等提供支持, 降低虚拟漫游项目制作门槛、提高制作效率, 增强企业自主创新能力。
二﹑系统的总体设计
2.1系统设计总体目标。本文针对在制作大型场景的虚拟全景漫游项目过程时遇到的各种技术问题展开研究, 最终开发出适应于大型场景制作的虚拟全景漫游制作系统, 解决以往漫游制作软件不支持智能化自动演示、不支持场景中插入动态视频、制作过程可视化程度不高、交互形式等问题。该制作系统将从全景图制作、虚拟漫游场景中的交互设计、项目发布等漫游项目制作各阶段予以全程支持。
2.2项目主要研究内容。本文主要是对虚拟全景漫游关键技术进行研究 (包括全景模型研究、全景图合成技术、虚拟全景漫游交互技术、全景图显示技术、虚拟场景的动画贴图技术、快捷简便的全景漫游场景制作流程研究等) [2]。最终研发适应大型场景的虚拟全景漫游制作系统, 形成全景图制作工具及虚拟漫游场景制作工具, 如图1所示。
2.2.1虚拟全景漫游技术研究
(1) 全景模型研究。根据全景图投影展示方式的不同, 主要把全景模型分为3种模式:立方体模式、圆柱模式和球面模式。这三种模式就是分别把已经拼接好的全景图投影到立方体、圆柱体、球体的内表面, 在展示时, 根据视域的方向将全景图像中相应部分进行反投影, 就能够获得视域处的视图。
(2) 研究全景图合成技术。全景图技术是虚拟现实技术的一种, 是近来出现在Internet上的另一种新的交互式虚拟场景表示方式, 它基于图像绘制IBR (ImageBased Render) 的方式再现了三维场景, 可用浏览器实现虚拟场景的漫游。本项目将重点研究一下三种类型的全景图, 即立方体全景图 (图2) 、柱型全景图 (图3) 、球型全景图 (图4) 。
●适合全景图的图像拼接技术。这里的图像拼接指的是把针对同一场景的相互有部分重叠的一系列图片合成一张大的宽视角的图像。图像拼接要求两幅图像保证一定比例的重叠区域。所以, 拼接的首要问题就是找到相邻图像的重合部分, 即图像对齐问题, 它的实质是寻找两幅图像之间的内在联系, 找出两组对应数据之间的关系。不同全景图形式的拼接方法是不同的, 如球型模型所需的序列图片采用大广角拍摄或者使用超大广角的鱼眼镜头, 所以图片的畸变发生在水平和竖直两个方向上, 若采用按行扫描获得图片重合区域的办法将行不通, 如图5所示。
●适合全景图的图像融合技术。景物重合部分也可能不完全一致, 如有亮度和色彩差异, 造成拼接处有不连贯的痕迹, 图像融合技术就是使拼接处连贯一致, 如图6所示。
(3) 虚拟全景漫游交互技术。虚拟全景漫游需要构造某个特定场景的逼真的虚拟现实空间, 这个虚拟空间可以是一个真实的空间, 也可以是假象空间的实时仿真虚拟, 用户通过借助特定的装备可以自然地在这个虚拟空间中漫游, 从各个不同的角度对空间中的虚拟对象进行观察, 以及进一步地规划和操作, 从而产生身临其境般的感受[3]。在这个过程中, 用户应能够与虚拟场景进行一定形式的交互, 如场景中的热点。热点分动态热点和静态热点, 静态热点不随全景图像的移动而移动, 是一直静止不动的, 一般静态热点适合做一些操作按钮。动态热点则是随视角的改变而变动的, 它实现不同场景间的切换。在浏览大型复杂场景时, 地图导航直观简明地表达了用户的浏览位置和全局地图信息, 给人们获取更清晰的全景概念。
(4) 全景图显示技术。在进行虚拟漫游时, 需要把全景图根据视角等参数动态生成显示在屏幕上的视平面图像, 这一过程性能或效果不够好将直接影响用户体验。我们将采用全景图数据预调、视点空间缓冲预调、视图变形、视图插值、加强场景透视感、图像平滑过渡等一系列技术使得用户视点转移时场景能够平滑过渡, 保证用户视觉的一致性, 使用户产生在实景空间中行走的感觉[4]。
(5) 虚拟场景的动画贴图技术。为了使虚拟漫游时场景更加逼真, 可以在场景的某区域加载一段视频, 提供浏览者感兴趣的信息。可以把全景图作为场景的背景, 把flash动画作为贴图, 使漫游时某区域可播放动态视频[5]。
(6) 快速简便的全景漫游场景制作支持。利用制作好的全景图图片制作虚拟漫游场景, 可在各场景中添加各种热点、标识、控制条、声音、视频、LOGO等, 支持交互体验, 整合地图导航和索引图导航。最终可输出swf格式的全景漫游项目, 可控制的文件尺寸满足网络发布的需求。
2.2.2适应大型场景的虚拟全景漫游制作系统研究
(1) 研制全景图制作工具。基于本项目研究的全景图合成技术研制全景图制作工具。通过实拍或者三维软件得到某视点周围空间的图像, 然后使用该全景图制作工具将我们得到的图像快速合成360度的全景图, 最终把合成的全景图用于后期的虚拟现实软件的应用。
●功能模块。全景图制作工具主要功能模块包括:平面或鱼眼图片输入功能、获取图片参数功能、设置全景图参数功能、合成效果预览功能、图片格式转换功能、全景图的矩形化保存功能等, 如图7所示。
●制作流程。全景图制作流程包括全景模型选择、图像采集、图像拼接与融合以及全景图像投影四个步骤, 如图8所示。
(2) 虚拟漫游场景制作工具。虚拟全景漫游场景制作工具可以将立方体全景、球型全景、柱型全景、平面照片、地图或户型图、场景音乐和解说、文字信息等各种多媒体元素, 通过添加场景间热点、包含雷达扫描效果的交互地图、设置虚拟漫游路线以及定制皮肤等方式, 创建出专业的交互式虚拟漫游效果场景。
●功能模块。虚拟全景漫游场景制作功能模块包括:定制功能 (漫游路线、分块下载、组件外观、显示/隐藏热点、场景切换效果) 、资源管理功能[皮肤面板、库面板 (图片、声音及组件) ]、交互功能 (通过使用热点、雷达及导航组件, 可以使制作的虚拟漫游更具有交互性) 、多媒体功能 (该工具将支持多种多媒体音视频格式的虚拟漫游场景动态插入功能) , 如图9所示。
●制作流程。虚拟全景漫游场景制作流程包括虚拟漫游界面编辑、场景设置、交互热点设置、漫游路线设置、添加地图、以及发布虚拟漫游六个步骤:如图10所示。
三﹑系统平台实现的关键技术
3.1多种形式的全景图生成问题。全景图制作是虚拟全景漫游场景制作的关键内容之一, 全景图包含了比人眼视野更宽广的信息, 要采用特殊的制作方式生成。根据不同的全景模型, 全景图有对应的形式, 一般先采集视点四周的景物图像, 再用适当的算法拼接成全景图。
3.2提供更丰富的用户体验交互方式, 解决与虚拟全景漫游场景交互的问题。虚拟场景是利用电脑绘制图像产生的一个三维空间的虚拟世界, 提供使用者关于视觉、听觉等感官的模拟。如何形成具有交互效能多维化的信息环境是虚拟全景漫游需要解决的问题, 它使用户可按自己的意愿, 真实自然地与虚拟场景交互, 从多方面获取感兴趣的信息[6]。
3.3解决全景图实时显示的问题, 使画面失真小, 过渡自然, 流畅, 提高用户漫游虚拟场景的真实感。用户在进行虚拟漫游时, 显示画面是实时绘制的, 给用户最直接最直观的视觉感受, 如果在绘制时实时性太差就会使用户无法接受, 而绘制得越流畅, 画面越精细, 则吸引用户进一步体验。
3.4动态视频数据与静态虚拟漫游场景无缝融合的问题。全景图是静态的, 经漫游子系统的处理可还原部分的三维信息, 实现前后、左右、上下方向的漫游, 如何在这样的场景的某指定区域中播放一段视频画面, 无疑增加了场景的表达能力, 更加真实地模拟现实情景。
3.5快速简便的全景漫游场景制作工具支持。围绕全景漫游大型场景制作中各个环节遇到的问题展开研究, 分析制作者制作流程, 开发工具给予从全景图制作、漫游场景制作、全景发布等各阶段以全面支持。
四﹑技术路线
本研究的技术路线如图11所示, 共包括项目预研、系统设计与构建和市场推广与销售三个阶段。其中, 项目预研包括需求调研、技术调研以及全景模型研究、全景图合成技术、全景漫游交互技术、全景图显示技术、虚拟场景制作支持和虚拟场景的动画贴图技术等技术预研工作;系统构建包括全景图合成、虚拟漫游场景制作和全景展示等三部分内容;最后是对系统进行测试、包装, 以做好系统推向市场前的技术准备工作。
五﹑结束语
本项目设计的适应于大型场景制作的虚拟全景漫游技术及制作平台可应用于:高清晰度虚拟展示景区的优美环境;远程虚拟浏览宾馆的外形、大厅、客房、会议厅等各项服务场所;房屋开发销售公司利用虚拟现实技术, 展示楼盘的外观、房屋的结构、布局、室内设计;在线虚拟公司产品陈列厅、专卖店、旗舰店等相关空间的展示;美容会所、健身会所、咖啡、酒吧、餐饮等环境的展示;汽车内景、外部的虚拟展示, 实现汽车的网上完美展现;博物馆的宣传展示, 观众只需轻轻点击鼠标就可以全方位参观浏览[7];在学校的宣传介绍中, 可以实现随时随地的参观优美的校园环境, 展示学校的实力, 吸引更多的生源;政府开发区投资环境, 做成虚拟导览展示, 向客商介绍变得一目了然, 说服力强, 可信度高, 因此设计实现的本系统有现实的应用价值。H
摘要:针对在制作大型场景的虚拟全景漫游项目过程时遇到的不支持智能化自动演示、不支持场景中插入动态视频、制作过程可视化程度不高、交互形式等各种技术问题, 本文设计并实现适应于大型场景制作的虚拟全景漫游制作系统, 该制作系统平台将从全景图制作、虚拟漫游场景中的交互设计、项目发布等漫游项目制作各阶段予以全程支持, 可以为应用制作者提供丰富的交互设计方式、可视化的场景制作过程和先进的场景视频支持模式, 使制作的虚拟全景漫游场景更逼真, 拥有更好的交互性, 让用户拥有良好的个性化体验。
关键词:虚拟现实,全景漫游,插值技术,全景图
参考文献
[1]王健美, 张旭, 王勇, 等.美国虚拟现实技术发展现状、政策及对我国的启示[J].科技管理研究, 2010 (14) .
[2]邬厚民.利用鱼眼技术构建全景漫游系统的方法探索[J].电脑知识与技术, 2009, 5 (18) .
[3]杨琳, 赵建民, 朱信忠, 等.虚拟校园三维全景漫游技术研究[J].计算机工程与科学, 2007, 29 (10) .
[4]陈家新, 王伟静.基于小波分析的图像插值技术研究[J].系统仿真学报, 2007, 19 (1) .
[5]刘畅.虚拟现实技术的关键技术研究[J].数字技术与应用, 2011 (1) .
[6]张萌, 肖小祥, 唐斌, 等.基于虚拟现实技术的校园场景构建[J].计算机与信息技术, 2010.
虚拟场景漫游 篇4
1 碰撞检测
在现实生活中,两个不可穿透的物体不能拥有一个相同的空间区域,而碰撞检测的任务就是判断在某时刻两个物体是否发生碰撞。通常碰撞检测系统的输入模型是构成几何对象的基本几何元素的集合,碰撞检测就是判断它们的交集是否为空,如不为空,即发生碰撞,还需计算碰撞点(碰撞发生的位置)。碰撞检测涉及到3D空间,几何模型表示、分层数据结构、测试方法等[2],它实质上是通过判断两个物体之间的距离(即距离检测)或重叠与相交(即碰撞检测)情况来实现的。
国内外学者在碰撞检测领域中做了很多有意义的工作,并提出了一些高效的碰撞检测算法,主要可以分为两类,空间分解法(Space Decomposition)和层次包围盒法(Hierarchical Bounding Volumes)。层次包围盒法是利用体积略大而形状简单的包围盒把复杂的几何对象包裹起来,在进行碰撞检测时首先进行包围盒之间的相交测试,计算两个待测对象中心点的距离与它们半径之和的关系,以此来判定两物体是否可能碰撞。如果包围盒相交,再进行几何对象之间精确的碰撞检测。它是一种最简单和最常用的分层数据结构,这种结构表示易于构造和移植,同时它不取决于任何模型的拓扑特性[3,4]。因此,根据实际需要,本文针对层次包围盒方法进行研究,并在全景虚拟校园中应用。
2 层次包围盒分析与比较
包围盒法的基本思想是使用简单的几何体来代替复杂的千奇百怪的几何体,在虚拟场景中对物体的碰撞检测可看作对包围盒进行检测,当包围盒相交时其包围的物体才有可能碰撞;当包围盒不相交时其包围的物体一定不碰撞;这样可以排除大量不可能碰撞的物体,并能够快速地得到碰撞的物体部位,具体层次包围盒类型有包围球、轴一致包围盒、有向包围盒、固定方向凸包包围盒、离散多面体包围盒等[5]。
2.1 包围球
包围球(sphere)是用球形来近似地表示物体或物体的一部分,再判断这些包围球是否相交,它是一种最简单的碰撞检测方法,这样仅需要测试两个球体中心的距离是否小于它们的半径和(表示发生了碰撞)。有时人们为了进一步提高碰撞精度,把将包围球分割成一系列小的球体,检查与各小球体是否发生碰撞。通过不断地分割检查,最终得到满意的近似值。包围球相交测试很简单,但是它的紧密性太差,因此较少使用。
2.2 有向包围盒
有向包围盒(Oriented Bounding Box:简称OBB)是任意方向的多面体,它不仅对位置和大小进行编码,而且对方向进行编码,因此,它具有很高的紧密性,可以根据被包围的物体的形状特点尽可能的紧密的包围物体。并成倍地减少相交测试包围盒的数目和基本几何元素的数目。在碰撞检测过程中,寻找包围盒的方向并确定包围盒的大小是定义和计算OBB的关键问题。
2.3 固定方向凸包包围盒
固定方向凸包包围盒(Fixed Direction Hull:简称FDH)是一种特殊的凸包,是由Kay和Kajiya于1986年在他们的光线跟踪算法中提出来的。FDH是用超过三对的平行平面对来逼近物体,所有物体的包围盒的面的法向量来自固定方向向量集合。FDH继承了凸包紧密性好的优点,具有AABB简单性的特点,但检测的速度相对比较慢。
2.4 离散多面体包围盒
离散多面体包围盒(Discrete Orientation Polytopes:简称K-DOPs)用由k/2对平行平面包围而成的凸多面体来包围对象物体。k为法向量的个数。通过判断k/2个法向量方向上是否有重叠的情况来判定两个包围体是否相交。法向量的个数越多,包围盒包围的物体就越紧密,求交集计算相对就越复杂,需合理地选取k的大小和平行平面对的方向,来保证碰撞检测的简单性和包裹物体的紧密性之间取得较好的折中,保证比较好的碰撞检测速度。
2.5 轴一致包围盒
轴一致包围盒(Axis-Aligned Bounding Boxes:简称AABB)是指包含物体且平行于坐标轴的最小六面体,该六面体沿着碰撞体局部坐标系统的轴向(x,y,z)构造,所有的包围盒具有方向一致性、易于确定包围盒相交状况和构建相关层次结构树。在碰撞检测初期,为快速的排除相距较远的物体时,AABB检测效率比较高,它适用于碰撞的物体个数和即将发生碰撞的物体个数远小于存在的物体个数的情况。由于AABB构建简单快速、相交测试的简单性和较好的紧密性,因此得到了广泛的应用。
3 基于AABB的碰撞检测
3.1 模型定义
AABB模型可以采用沿空间坐标轴上的最大最小值、角点或重心点来定义,其每种定义方式如下:
定义1:设沿轴线方向包围盒大小为:xmin,xmax,ymin,ymax,zmin,zmax,则对包围盒内任一点具有:
定义2:如果定义O(x0,y0,z0)为包围盒的一个角点坐标,包围盒长度分别为Dx,Dy,Dz,则有:
定义3:如果定义C(xc,yc,zc)为包围盒的重心点坐标,包围盒长度分别为Rx,Ry,Rz,则有:
3.2 AABB间的相交测试
在空间中,AABB检测主要是判断检测物体的位置状态(分离或重叠),即判断物体是否发生重叠。要判断物体是否重叠,只需判断在空间坐标轴上的投影是否重叠。因此可得到以下推论:
推论1:三维场景中两个轴一致包围盒发生碰撞(重叠)的充要条件是他们在空间坐标轴上的投影都重叠。
在三维场景中,大多数情况下物体并没有发生碰撞(重叠)。因此,不需要花太多时间建立层次结构,更不需要检查所有包围盒在空间坐标轴上的投影。在实际应用中通常采用降维的方法来提高检测的效率,满足实时快速检测和动态检测的需要。所谓降维法是指首先将所有包围盒向空间某一坐标轴进行投影;其次,将投影线段进行排序,挑选出发生重叠的包围盒对;再次,进一步检查这些包围盒对在另外两个轴上的投影是否仍然重叠。如果没有重叠,则说明两个物体没发生碰撞,无须进一步检测;如果重叠,包围盒中的物体发生碰撞的可能性较大,则进行下一层的碰撞检测(如图1所示)。这样可以省去在空间其它两个坐标轴上投影线段排序的时间,同时省去了在空间坐标轴的投影线段的比较、查找的时间。
3.3 基于AABB碰撞检测算法
基于AABB树碰撞检测算法思想是是通过建立基于AABB树,并遍历这两棵树,以确定在当前位置下两个碰撞体是否发生碰撞,这是一个双重递归遍历的过程。具体描述如下:
步骤1:构造三维场景中人(或动态对象)和碰撞体的AABB树。
步骤2:在某一时刻,使用人的AABB树的根结点遍历碰撞体的AABB树。如果发现人的AABB树的根结点的包围盒与碰撞体AABB树内部结点的包围盒不相交,则中止遍历;如果能够遍历到碰撞体AABB树的叶节点,再用该碰撞体AABB树的叶节点遍历人的AABB树。如果能到达人的AABB树的叶节点,执行步骤3。
步骤3:检测基本几何元素间是否相交测试。
3.4 算法应用
在算法实现过程中,首先建立AABB树来包围碰撞体,该树是按照由上至下的递归细分方式构建的二叉树。在每一次递归过程中取最小的AABB,沿所选择的剖分面将碰撞体分为正负两半,并将所对应的原始几何元素(如三角面)分别归属正、负两边,递归进行到每一个叶子节点只包容一个原始几何元素为止,其中对于剖分面的选择,可选择垂直AABB的最长轴,且平分该轴的平面。在南京信息职业技术学院三维场景模拟显示系统的开发过程中,选用3DMAX制作学院所有建筑的3D模型、Open GL实现一些纹理贴图、Visual C++6.0作为开发工具。在系统实现三维场景漫游过程中,利用上文算法实现碰撞检测,取得良好的效果,整体效果如图2、图3所示。
4 结束语
由于碰撞检测问题由来已久,在不同领域涌现出许多碰撞检测算法,但在实际应用过程中,可以根据实际检测的精确度和系统的实时性等需求进行选择哪种算法进行碰撞检测,也可以选择多种算法综合应用来满足虚拟现实系统的需要,进而实现完整的、实时、更具沉浸感强的虚拟世界。
参考文献
[1]彭群生,鲍虎军.计算机真实感图形的算法基础[M].北京:科学出版社,1999.
[2]高春晓,刘玉树.碰撞检测技术综述[J].计算机工程与应用,2002,38(5):9-11.
[3]马登武,叶文.基于包围盒的碰撞检测算法综述[J].系统仿真学报,2006,18(4):1058-1061.
[4]高玉琴,何云峰等.改进的基于AABB包围盒的碰撞检测算法[J].计算机工程与设计,2007,16(28):3815-3817.
虚拟场景漫游 篇5
近年来随着虚拟现实技术的发展,大规模场景越来越多地出现在游戏、城市漫游等应用中。由于场景规模的激增,其所具有的三角面片数量达到上千万甚至更多,导致在实时交互应用中, 实时绘制变得更加困难。于是如何做到实时渲染大规模场景中的可见部分,越来越受到人们的关注。
可见性计算是图形学中的一个基本问题,其主要目的是对于给定的场景和观察点,通过判断场景中物体的可见性,快速拒绝那些显然不可见的绘制元素,从而减少送入图形绘制管线的几何单元数量。根据可见性评估依据,可以分为视锥体剔除、背面剔除和遮挡剔除三种类型,如图1所示,其中前两种的判断方法比较简单,已有较为成熟的算法,而遮挡剔除方法由于要考虑同一场景中绘制单元之间的相互关系[1],所以更加复杂,成为可见性研究的重点。遮挡剔除根据视点区域可分为两类:针对视点的遮挡剔除和针对视点单元区域的遮挡剔除。前者判断两个物体之间相对于一个视点而言的遮挡关系;后者则判断两者间相对于一个连通区域(即所谓视点单元区域)的遮挡关系。而根据实时性可分为离线遮挡剔除和在线遮挡剔除两大类[2],其中离线算法的实时计算量较小,有利于提高绘制效率,但需要大量的预处理计算和额外的存储开销,而且不能处理动态场景。在线遮挡剔除算法不需要复杂的预处理计算,可以在漫游场景时动态计算可见性,但绘制过程的计算量较大,难以满足实时要求,因此硬件遮挡查询是长期以来人们最热切期待的图形硬件特性。该特性使应用程序可以询问3D API(OpenGL或Direct3D)如果渲染某个特定的物体,是否会画出像素。通过这个特性应用程序可以检查复杂对象的边界框是否可见;如果边界框被遮挡,那么应用程序就可以跳过那些物体的绘制,并且可以在完全动态的场景中工作。
文献[3]中提出了一种基于场景的四叉树组织的遮挡剔除相结合算法,能够根据成像需求选取不同分辨率的场景结点,并有效地剔除大量不可见部分以加快成像速度。文献[4]中提出了一种根据层次一致性的方式进行遮挡测试,每一帧从上一帧终止的节点开始进行从而避免查询先前可见的节点。文献[5]中利用可见性的时间一致性,通过统计物体前几帧的查询结果,对最近较少被遮挡的部分不进行查询测试,从而减少总的查询次数。文献[6]中提出一种复杂的基于启发式算法来减少查询队列的长度。另外还有一些文献在遮挡剔除中结合了LOD技术[7,8,9]。文献[3]的方法只是简单假设之前可见的叶结点在当前帧中仍然可见,因此立即渲染,而查询结果在下一帧中才更新;不可见的节点假设为仍不可见,但是算法在当前帧找回查询结果来显示其可见性变化。文献[4]的方法需要硬件校正来测量硬件参数,然后根据启发式的统计方法计算。针对以上问题,我们的新方法不依靠硬件校正并且将对外界参数的依赖性降到最低,它通过一种自适应的可见性预测,同时减少了查询次数和渲染状态的改变;同时使用一种新的排序方法,解决同类方法中出现的遮挡错误的问题。
1基于硬件的一致性遮挡查询
在OpenGL中,ARB_occlusion_query扩展执行GPU遮挡查询的命令,它的查询过程就是由GPU告诉我们最终在屏幕上可见像素的数量,像素在流水线中经过各种检测,例如视锥体可见检测、裁剪检测、alpha检测、模板和深度检测等,最终通过各种检测的像素是实际可见像素。D3D的遮挡查询命令D3DQUERYTYPE_OCCLUSION允许查询由任意序列的渲染命令所光栅化的片段数目。测试一个复杂场景或物体的遮挡的步骤如下:
(1) 初始化一个遮挡查询;
(2) 关闭写入帧和深度缓冲区并禁用任何多余的状态;
(3) 渲染复杂物体的一个简单近似——通常是包围盒,GPU计算实际通过深度测试的片段数目;
(4) 结束遮挡查询;
(5) 获取查询结果,即近似几何体的可见像素数目;
(6) 启用屏幕渲染和深度写入,如果查询的可见像素数目大于某个阈值(通常取0),则渲染整个物体。
第(3)步使用的近似应该简单才能加速整个过程,它必须覆盖至少和原物体一样大小的屏幕空间面积,以使遮挡测试不会把本来可见的物体变为不可见。因此近似应该渲染得很快,而且不以任何方式修改帧缓冲区。
这个方法利用了硬件加速渲染过程,但是第(5)步需要等待,直到查询的结果实际上变为有效,而等待一个查询可能导致长时间的延迟。因此,一种层次化一致性的遮挡查询被提出,它的核心思想在于,减少查询量并减少CPU空转和GPU的饥饿时间。只查询上次查询结果中的关闭结点(即可见叶子结点和不可见内部结点)。这么做的根据在于一个结点往往会保持上一帧的可见性,即所谓的时间相关性,对于可见叶子结点,直接渲染并且进行查询,对于不可见内部结点,进行遍历查询。每一帧中的查询结果保存下来提供给下一帧作为查询和渲染的依据。而以某种空间层次组织起来的场景又可以保证其空间相关性,一个不可见内部结点的所有子结点必然不可见,所以没必要继续遍历查询下去。这就减少了查询数量。在没有结果到来的时候,CPU可以继续遍历结点,利用这段时间或者把一个物体送往渲染管线渲染,或者发出一个查询。这就减少了CPU等待和GPU空闲期。
2改进的遮挡查询算法
2.1批量查询
为了解决以上算法中出现的问题,首先,我们采用批量查询的方法来减少因为改变渲染状态而带来的效率低下,这主要是关闭和开启深度缓冲和颜色缓冲带来的消耗。在数据结构上,采用双向查询队列,将查询过程用上一帧的可见性来组成两条队列,进行并行查询。在CPU空转且可见队列不空时,取出可见队列中的查询并执行。当不可见队列的数量到达某个阈值时执行不可见队列的合并查询。这样就大大减少了提交查询的次数和中间过程中渲染状态的改变如图2所示。
2.2遮挡物的选取
其次,在遮挡物体的选择上,我们采用了更简单的方法。快速选择几个最近、最大的物体或几何体,将其作为潜在遮挡物;然后将它们投影到屏幕空间中,并从中选择一组可能遮挡很大视野的遮挡物。然而,创建遮挡物时,不使用复杂的几何形状,而是使用完全位于每个遮挡物内的内接矩形。这样就可以使任何比遮挡物平面远且位于遮挡体内的物体都不予考虑,在使用层次存储结构表示大量物体时,这种方法的效率很高,因为这样可以一次性判断出大量物体被遮挡而不予考虑它们。其步骤如下:
(1) 遍历完全位于视锥体内且可能可见的所有物体,选择n个最近最大的物体;
(2) 将物体投影到屏幕空间中,并计算投影区域的面积。从中选择m个(m≤n)投影面积最大的物体。然后计算每个遮挡物的内接矩形;
(3) 将遮挡矩形加入到遮挡体中,然后根据遮挡体对所有物体和多边形进行检测,剔除所有被遮挡的几何体。
2.3遮挡错误结果的校正
基本方法的问题是包围盒不能写入深度缓冲区,因为存在一些特殊情况,这时候某个包围盒完全地遮挡另外一个包围盒,但是在遮挡包围盒里的物体事实上并没有挡住被遮挡包围盒里的物体,如图4所示。这样需要把某些几何体在前面渲染,不进行遮挡消除。
这些几何体起的作用是遮挡物,因此在最终屏幕上应该是大物体。在渲染这些物体后,可以开始进行较小物体的遮挡查询。但是这样反而使问题复杂化,并使遮挡查询变得无效,例如一个大物体本身有时可能完全被遮挡。因此需要另外的办法。
从某观察点看,一个物体被遮挡,而它的包围盒可见,当包围盒比物体大很多时,这时,物体每隔一帧就会被渲染一次,由于在这帧包围盒可见,因此需要在下一帧渲染其物体。然而在下一帧渲染的物体检测结果是不可见,又意味着需要在再下一帧渲染包围盒等等。
可以采用将物体排序:这个方法免去从被遮挡物中分出遮挡物的需要,因为作为遮挡物的每个可见物体,在渲染时已经被写入深度缓冲区。因此,在被遮挡物之前不需要渲染遮挡物(未经过遮挡测试的物体)。但是根据算法的要求,需要按距离把物体排序。
一旦有了在目前场景中需要渲染的全部物体(即通过视锥剪裁检测的物体),就应该把它们分成不透明物和透明物两组。因为我们能看穿透明物体(而且它们不能写到深度缓冲区),它们只能是被遮挡物而不可能是遮挡物。另一方面,不透明物既可能是遮挡物又可能是被遮挡物,这意味着应该将它们从前到后排序,并且在透明物之前渲染。然后,再将透明物从后到前排序,也在屏幕上渲染。
这个方法很好地利用了遮挡查询的功能,因为遮挡物首先被渲染,这使得许多其它物体变成潜在被遮挡物,其中一些渲染就可能由遮挡测试消除。所有不透明物一经被渲染,它们就自动成为所有透明物的潜在遮挡物。
3实验结果与结论
本文的实验平台的机器配置为Intel Core2 2.67GHz CPU,2GB内存,GeForce 9600 GT图形显卡,开发平台为MS-Visual C++ 2008,采用OpenGL作为3D API,漫游测试系统的窗口分辨率为800×600。图5为实验程序在两种模型场景下实时漫游的截屏效果。
表1是图5(b)中的城市场景模型应用不同渲染算法的实验结果比较,此场景的面片数量为3609702个。表2测试场景深度复杂性不断增加时算法的性能及动态物体对绘制效率的影响。虽然Cow模型的形状并不规则,不能成为很好的遮挡体,但由于场景总体以纵深方向放置,由绘制比率可以看出,实际绘制的面片数量还是比较少的,当场景的数量级不断增加时,深度复杂度变大,但是视点可见的物体数目变化不大,帧数基本保持在40 帧/s 左右, 表明算法的性能与绘制的数据量相关,而不与场景的数据量相关;同时大量动态物体的更新操作并不会对绘制帧数有较大的影响。
通过与相关算法的比较可以看出,本文的算法明显降低了渲染状态的改变次数和不必要的查询次数,有效地减少了遮挡查询中的等待时间,从而提高了整个场景的渲染速度。
4结语
在对一般的室外场景进行漫游时,还会遇到两个问题:一是结构无关,由于是按照从视点向远处的渲染顺序,这要求以某种形式对场景结构遍历并形成由近及远的队列,但是场景结构类型繁多,所以必须做成与场景结构无关的形式。二是动态切换,遮挡裁减算法对存在大量遮挡物,尤其是城市场景的效率提升比较显见,但是空旷场景往往得不偿失,所以必须有手动或者自动的切换机制来关闭裁减。在后续工作中,我们将进一步对本文算法进行扩展以满足以上两方面的要求,从而进一步提高复杂场景绘制的效率。
摘要:场景漫游中存在大量复杂模型时,由于其巨大的几何与纹理数据量,渲染速度会随之显著变慢。提出一种改进的大规模场景实时漫游技术,有效地利用了GPU的硬件遮挡查询技术。与以往的方法相比,通过一种改进的可见性分类查询队列,能同时减少遮挡查询次数和渲染状态的改变;并使用一种简单有效的排序方法,解决了同类方法中出现的遮挡错误的问题。实验证明该方法能有效提高复杂场景下漫游的渲染速度。
关键词:实时漫游,遮挡查询,复杂场景
参考文献
[1]张荣华.基于多分辨率遮挡剔除的复杂地形绘制框架的研究[J].系统仿真学报,2009,21(17):5462-5466.
[2]Staneker D,Bartz D,Strafler W.Occlusion-Driven Scene Sorting for Ef-ficient Culling[C]//Proceedings of the 4 th international conferenceon Computer graphics,virtual reality,visualization and interaction,2006:99-106.
[3]Zaugg B,Egbert P.Voxel Column Culling:Occlusion Culling for LargeTerrain Models[C]//Proceeding of Eurographics/IEEE Symposiumon Visualization 2001.Ascona:Springer,2001:85-93.
[4]Bittner J,Wimmer M,Piringer H,et al.Coherent hierarchical culling:hardware occlusion queries made useful[J].ComputerGraphics Forum,2004,23(3):615-62.
[5]Kovalcik V,Sochor J.Occlusion culling with statistically optimized oc-clusion queries[C]//Proceedings of the 13th Intemationa1 Conferencein Central Europe on Computer Graphics,Visualization and ComputerVision’2005,Plzen,Czech Republic,2005:109-112.
[6]Guthe M,Balázs A,Klein R.Near optimal hierarchical culling:Per-formance driven use of hardware occlusion queries[C]//EurographicsSymposium on Rendering 2006(June 2006).Akenine-Mller T,Heid-richW.The Eurographics Association.
[7]许云杰,胡事民.基于层次细节模型的遮挡裁剪算法[J].中国图象图形学报,2002,7(9):962-967.
[8]Andujar C,Saona-Vazquez C,Navazo I.Lod visibility culling and oc-clude synthesis[J].Computer Aided Design(S0010-4485),2000,32(13):773-783.
虚拟场景漫游 篇6
虚拟现实技术是以计算机图形学、多媒体技术、虚拟仿真、人机接口传感技术、社会心理学、人工智能、工程力学及计算机辅助设计为基础发展而成的交叉学科。
虚拟漫游技术大体上分为三类:室外场景漫游、室内场景漫游、大规模地形漫游[1,2]。其中室外场景漫游技术主要使用八叉树[3]场景组织算法, 室内场景漫游主要采用二元空间分割算法 (Binary Space Partition, BSP) 场景组织算法, 大规模地形漫游主要采用自适应四叉树、ROAM及LOD算法。随着计算机硬件的更新换代, GPU可编程图形硬件的飞速发展, 许多本来只能用来处理某一特定场景的算法也可以稍加修改甚至不修改就用于渲染其他场景, 甚至于比这些场景本来的漫游算法更加高效、简洁, 三类虚拟漫游技术之间的界限逐渐消失。
1 BSP空间划分算法介绍
BSP (Binary Space Partitioning, BSP) 空间划分算法最早是Shumacker于1969年在《Study for Applying Computer-Generated Images to Visual Simulation》中提出的。直到目前为止, 它仍然是公认的效率较高的室内空间划分算法之一。
BSP树空间划分算法的本质是基于物体的空间几何约束对场景空间进行划分的预处理算法。它以几何图元为作为输入, 通过递归调用算法, 创建一棵二叉树数据结构。通过BSP树能够正确的按照场景中从前到后或者从后到前的顺序遍历整个场景, 从而快速的进行诸如大规模视景体剔除、碰撞检测等操作。
2 PVS潜在可视集介绍
潜在可视集 (Potential Visible Set, PVS) 也是一种预处理算法, 它可以与BSP空间划分算法完美的结合起来, 加速场景的渲染速度。PVS的算法主要分为两大类, 一是基于工具的PVS, 另一种是基于视点的PVS。
其中, 基于工具的PVS算法在渲染整个室内场景前要先进行预处理, 手动绘制每个房间的潜在可视集列表, 用来指出在某个房间内, 所能看到的所有的房间。基于工具的PVS算法是目前最为流行的PVS算法, 论文的室内场景漫游系统也将采用基于工具的PVS算法来实现。
2.1 使用PVS潜在可视集减少重绘。
以图1所示的场景为例, 当创建好PVS集后, 可以很方便的使用PVS来减少重复绘制。当创建好BSP树后, 各个房间就被作为BSP树的叶子节点, 然后使用BSP树进行视景体剔除操作, 得到的可视范围如图中灰色三角部分所示, 可以看出, 根据BSP树剔除得到的视景体范围仍然包含房间1~6, 许多其实不在可视范围内的物体仍然被渲染, 这样物体将被重绘许多次。
由图1可知, 当使用PVS进行简单的视景体剔除时, 因为视点处于房间6中, 查找该房间的可视集列表, 则可以迅速判断只需考虑房间3、4、6。这样仅采用不是很精确的PVS即可迅速剔除大量的物体, 如果使用基于入口的PVS则可以得到更为精确的视景体范围, 这种方法在大规模室内场景漫游系统中十分有效。
2.2 基于入口的PVS算法与BSP树结合实现视景体剔除。
单独使用BSP空间划分算法实现视景体剔除会造成大量的重绘, 使许多不在视野范围内的物体被渲染出来 (如图1所示) 。
使用PVS潜在可视集进行简单的视景体剔除渲染的步骤如下:a.根据BSP树查找到视点所在房间叶子节点;b.渲染该房间叶子节点;c.查找该叶子节点的潜在可视集列表, 渲染每个列表中的房间叶子节点。
采用这种渲染方式, 难免存在重复绘制的问题, 但是由于该方法简单便捷, 而一般情况下重复绘制不在视景体范围内的物体的比例比较小, 不失为不错的算法。在室内场景日益复杂的情况下, 这种简单的PVS算法仍然有需要修改的必要, 从而更快的提升系统的性能, 这就是下面采用的基于入口的PVS算法。
这里更为细化一下之前提出的入口的概念, 在室内场景中一般一个房间不止会存在一个入口, 除了房门可以看做入口外, 其他一切像窗户之类的能够透过它看到外面视野的物体都被视为入口, 这样一来要修改一下房间的PVS列表了, 在论文室内漫游系统的实现中, PVS列表不是基于房间对房间的, 而是基于房间的入口对房间的, 如图2所示。
由图2可知, 场景中存在4个房间, 假设视点位于房间2中。在BSP树中, 这些房间都是树的叶子节点。房间2中存在三个入口, 一个为房门, 另两个为窗户。那么基于入口对房间2建立PVS潜在可视集就需要分别计算每一个入口的PVS列表, 然后把它们全部挂在房间2的叶子节点中以方便各种查询操作。
2.3 基于入口的PVS算法与BSP树结合实现碰撞检测。
场景中的碰撞事件可以分为两类:处于视野内的碰撞、处于视野外的碰撞。处于视野外的碰撞比如喷泉的喷射、场景中人工智能物体的移动等, 而视野内的碰撞主要包括用户操纵的角色与处于视景体中的物体、移动物体、其他用户等之间的交互事件。视野内碰撞远比视野外碰撞的数量多, 并且更加被用户所注意。
由于场景中处于视野外的物体彼此间一般不会发生交互, 故产生碰撞现象的主要是场景中视野内的可移动物体 (尤其是用户操纵的角色, 这中现象在FPS游戏中占到了95%以上) , 这也是本室内场景漫游系统所要解决的问题。使用BSP树的碰撞检测需要针对每个可移动的物体遍历BSP树, 判断同其他场景中的静态和动态的物体是否发生碰撞。而基于入口的PVS算法与BSP树结合可以快速的实现碰撞检测。
3 结果及分析
3.1硬件环境。实验硬件平台为:CPU Pentium Dual-Core E52002.5GHz, 内存2GB, 显卡Ge Force G210 (512MB显存) , 硬盘希捷320GB。
3.2软件环境。操作系统Windows XP-sp2, 开发工具VS.net2005, 3D图形开发库为Open GL 2.0, CG库为GLSL。
3.3 系统流程图。论文的室内场景漫游系统的流程设计如图3所示。
3.4 实验对比分析。场景漫游算法改进前后算法性能的对比数据见表1。
由表1可知, 原始室内场景漫游算法不使用BSP及PVS, 直接将场景加载渲染。从中可以看出, 随着场景中三角图元的增加, 渲染场景中的三角形图元对整个场景绘制帧速率的影响减小, 这是因为即使场景中没有三角形图元要渲染, 系统中的其他功能模块仍然需要系统资源来运行。影响帧速率的主要因素是场景中待渲染的三角图元个数。采用本文的改进算法随着场景中三角图元的增加优势更为突出。
在模拟小规模的室内场景漫游时, 虽然三种算法在速度上有很大差异, 但基本都可以保证实时流畅运行, 这种情况下论文采用的改进的PVS结合BSP室内场景漫游算法的优势不明显;在中等规模的的室内场景漫游模拟时, 不采用加速算法的原始场景模拟系统已无法胜任, 基于BSP空间划分算法的室内场景漫游系统也是较好的模拟算法, 基于PVS的室内场景漫游系统的速率最快;在较大规模室内场景漫游模拟时, 仅有论文采用的基于PVS的BSP室内场景漫游算法可以保证实时、流畅运行。
4 结论
室内场景漫游模拟是计算机图形学和虚拟现实领域研究的热点, 使用BSP空间划分算法渲染室内场景是当前业界的工业标准, 但是随着电脑硬件水平的进步及用户需求的不断变化, 传统的BSP空间划分算法渐渐不能满足用户的需求。论文使用PVS潜在可视集, 通过基于房间入口的PVS集合结合BSP树来实现了有效防止重复绘制、大规模视景体剔除、碰撞检测等关键操作, 在不过大增加系统负担的情况下实现了流畅的室内场景漫游系统;对传统的BSP空间划分算法算法进行了改进研究, 结合PVS提出了基于潜在可视集的室内BSP场景漫游算法, 实验表明该方法在室内场景漫游系统绘制的真实感和实时性上取得了较满意的优化效果, 较好的解决了室内场景漫游系统实时绘制问题。
摘要:室内场景漫游模拟是计算机图形学和虚拟现实领域研究的热点。在此提出了基于潜在可视集的室内BSP场景漫游算法, 该算法预先计算室内房间的可视范围, 不需要对比查找BSP树就能够确定几何图元是否处于视景体范围内, 能够大大减轻系统的负担, 加速了系统的速率、减少了重复绘制率并解决了室内漫游系统中无法渲染动态物体的问题, 加速系统性能。
关键词:室内场景漫游,潜在可视集,视景体剔除,碰撞检测
参考文献
[1]王竹, 等.基于场景结合的大规模动态群体可见性计算方法[J].计算机辅助设计与图形学报, 2009 (8) :25-27.
[2]梁晓辉, 等.基于概率计算模型改进的相关性层次遮挡裁剪算法[J].软件学报, 2009 (10) :35-38.
虚拟场景漫游 篇7
关键词:场景漫游,粒子函数库,粒子系统
粒子系统在描述自然景物中(如水流、喷泉、爆炸效果等)具有很大的优势,是由W.T.Reeves在1983年提出的,最早用于模拟火焰、烟雾等,以后被逐渐用于生成真实感的自然景物(如雨、雪、树木[1]等)以及动画[2,3]中。近十多年,粒子系统已广泛应用于虚拟场景、游戏娱乐及物理仿真等场合。
本文在分析北卡罗来纳大学开发的粒子系统API函数库(API for Particle Systems)[4]功能以及接口基础上构造了几种常见的粒子系统。
1 粒子系统 API特征
目前粒子系统的构造主要是通过构造特殊的模型即数据结构来实现[5,6],编程复杂,开发周期长,代码重复利用率低,且较难掌握。若能在函数库基础上构造出需要的粒子系统,将使效率大大提高。
由于粒子系统的设计会大大增加系统每帧绘制的可见多面体数量,要达到较好的真实感效果与实时性,对数据结构的构造及内存的管理都提出了较高要求。同OpenGL及Direct3D一样,函数应独立于硬件系统,可移植、实现重用。粒子系统API设计被具体的目标和条件所限制,要构造较好的粒子系统,API函数至少应具备以下几个特征:
(1)运行效率。这是粒子系统追求的主要目标之一,对于提高系统的实时性至关重要。
(2)灵活性。用户可灵活构造多种粒子效果,并非局限于某种特殊现象。
(3)参数的独立性。由于粒子构造的灵活性,实现一种特殊效果的设计空间可能十分大,函数参数要独立、明确,对函数是透明的。
(4)模拟质量可调。不同场合需要的模拟质量不同,有的强调质量而有些则对速度有较高要求。
(5)独立于硬件及应用程序,接口简单、易于移植及重复利用。
2 粒子系统 API库相关概念
(1)粒子组
粒子组中所有粒子的行为模式相同。系统中可以同时存在几个粒子组,但函数只作用于当前粒子组。
(2)行为
行为指当前粒子组粒子的属性。该库共拥有27种行为函数,用户可以根据需要进行修改或扩展加入新的行为函数。绝大多数特殊效果拥有3—8个行为,每个行为函数都要遍历粒子组所有粒子才能赋予这种行为。这种特征使行为的组合较为灵活。
(3)行为列表
产生某种效果的多种行为封装后即称为行为列表。这些行为列表给出了粒子效果的抽象,并提供了接口。这种机制有两个好处:
a.减少应用程序与计算粒子动态特性的硬件系统之间的通信。
b.行为列表可以用于识别和优化特定的行为组合。
(4)属性及域
粒子必须被赋予颜色、速度、大小及初始生命周期等特征。为了避免仅用一个单独的命令就将所有的特征赋给粒子,增加API的灵活性,可以存储粒子当前的颜色、速度、大小等数据作为当前API的状态。这种做法同在OpenGL中用glVertex产生一个顶点之前,需要glNormal,glColor或glTexcoord等函数相类似。
许多粒子效果要求粒子的初始特性值富于变化,而上面的状态设置不具备这样的特性。为了解决这个难题,函数库引入了域的概念,域能准确说明色彩空间的区域,这个区域能随机选择每个粒子的颜色;或空间向量的范围;或粒子的速度等。
一个域使用最多九个浮点数来定义,如pDTriangle有三个三维数据点;pDCylinder有一个轴矢量,一个轴点和内外部半径。所有的API调用都使用拥有一个上限与下限的可计量定义域,根据九个带缺省值的浮点数,使简单定义更加具体化。
pDBlob域通过由具体的点和高斯概率密度规定的标准偏差量定义一个模糊区间。概率密度用于选择域中一个随机的点,或确定给出的点是否在域中。pDBlob域对于API的模拟质量是非常重要的,因为很多自然现象的随机特征都呈正态分布。为使粒子运动速度具有更好的随机特征,初始速度选择通过PPDisc域按正态分布随机选取;pStartingAge有一个随机的标准偏移变量,通过这种方法,避免由于粒子的初始值相同,死亡时刻是正态分布而非同时死亡。
该函数库对粒子的构造主要通过粒子类型、颜色、速度或运动特征等来获得真实感效果。
3 粒子系统 API功能及接口
此函数库函数具备四种功能:
(1)用于粒子组操作和管理;(2)作用于粒子组的行为;(3)设置库当前状态;(4)创建及操作行为列表。例如:
函数接口同OpenGL相似,独立于硬件系统、操作系统,具有广泛的可移植性和可扩展性。API使用C函数形式,函数名采用pFunctionName格式,如“voidpColor(float red, float green, float blue, float alpha =1.0)”。在一般事件中,大多数调用通过缺省值来定义,当然也可根据具体需要自己设定。
4 粒子系统的构造
粒子系统的基本思想是采用许多形状简单的微小粒子(例如点、小立方体、小球等)作为基本元素来表示自然界的不规则景物,粒子的创建、消失和运动轨迹由所造型物体的特性控制,从而形成景物的动态变化。由粒子系统表示的物体,要么是给定时刻粒子的位置,如瀑布、焰火、喷泉或鸟群等,要么是粒子的一部分运动轨迹,如草和树等。
a)瀑布b)雨景
根据这种思想,在该函数库基础上,用简单的几何图元来构造合适的粒子系统来模拟不规则景物。本文基于该函数库建立的两个粒子系统(基于线条绘制,未进行纹理贴图):a为12000多个粒子,绘制速率达到10fps以上;b为6000多个粒子,绘制速率达到20 fps以上。实验结果如图1所示。
瀑布生成关键代码如下:
5 结论