张春明 杨天鸿 郑东纯
摘要:阐述了相较于主动立体技术,被动立体虚拟现实应用系统在立体展现方面的独到优势,并针对构建基于被动立体技术的多通道虚拟现实应用系统过程中的各种问题进行研究,最后给出了相应的解决方案,包括多通道被动立体虚拟现实应用软件的开发要点与需要特别注意的事项。
关键词:虚拟现实;被动立体;应用系统;开发
中图分类号:G642 文献标识码:A
1 虚拟现实应用系统开发方法综述
虚拟现实(VR)是指将现实和虚拟相互结合,把现实中真实存在的物体和现实中不存在或肉眼看不到的物体(虚拟)用三维模型表现出来,再通过计算机仿真系统模拟出来一个虚拟的世界,人通过显示设备或带有头部跟踪器的立体显示器(HMD头盔)可在其中漫游,并与之互动,使人有一种身临其境的感觉。虚拟现实应用系统是指将虚拟现实技术应用到各个行业领域所构成的应用系统。目前市面上有专为开发虚拟现实、科学仿真、计算可视化等高性能图形应用程序而设计的虚拟现实软件开发平台,能够方便快速地创建跨平台的高性能交互式虚拟现实应用程序(系统),如OSG、Vizard和U3D等可视化虚拟现实开发平台。利用此类可视化开发平台可减少在编写源代码上花费的时间,以便集中精力解决专业问题。笔者最终采用传统编程语言与中视典数字科技有限公司的VRP虚拟现实软件开发平台相结合的方法,发挥其各自优势,是虚拟现实应用系统开发的一次有益尝试。
2 虚拟现实应用系统采用被动立体技术的优势
虚拟现实开发平台支持主动立体技术和被动立体技术,两种立体显示技术比各有优缺点。偏光式被动立体是电影院放映3D电影普遍采用的技术,除了要求特制的金属幕外,只需普通投影机加上偏振片即可。而之所以最终采用被动立体显示模式,一个重要因素就是在二次开发等特殊场合,被动立体技术也有着主动立体技术无法匹敌的一些优势,比如:现阶段主动立体显示模式仍存在一些固有的弊端,如Windows对话框和其他界面元素被信号刷新频率达120Hz的立体视频画面所遮挡而无法正常显示,也就无法实现人机交互等。尽管立体模式下可以正常使用VRP平台本身的界面元素,但VRP平台除立体功能以外,在数据库和报表等功能上十分有限。因此,笔者采用C#等通用程序设计语言实现VRP平台本身不具备的与行业应用有关的软件功能,再通过VRP-SDK二次开发包提供的C#开发接口,在C#语言程序中调用VRP功能,以实现更为逼真的立体效果(目前只支持被动立体模式)。正是考虑上面谈到的几个因素,才促使笔者采用一种变通方法,即采用被动立体技术实现虚拟现实应用软件的立体显示,而且所有Windows对话框和界面元素均可正常显示。
3 关于基于被动立体技术开发多通道虚拟现实应用系统的研究
不失一般性,本文以双通道为例介绍了多通道被动立体虚拟现实应用系统的开发过程。
3.1 多通道被动立体虚拟现实系统硬件构成及配置方法
硬件组成:架设的被动立体系统硬件包括一块金属大屏幕、两台VRP工作站 (配置完全相同的主机)、一台视频矩阵、两台融合机和四台被动立体投影机和两台监视器,并通过交换机连接成一个内部网络。矩阵切换器的输入与VRP工作站相连,輸出与融合机相连,最后将经融合机融合后的立体信号输出到对应的投影机。
融合机设置:融合机采用上海交大的Media Master融合机产品,左右通道画面在融合机内部融合后分别输出到相应的投影机上,供左眼或右眼观看。两台融合机的IP地址分别为192.168.0.160/161(分别用于控制上方/下方的2台投影机),其上运行的Media Master播放端软件显示的内容即是两台VRP工作站输出的画面经过融合后的结果。厂家约定从IP地址为192.168.0.100/101的任一电脑上启动Media Master融合机控制端软件可以设置和控制IP地址为192.168.0.160/161的融合机上运行的Media Master融合机播放端软件。
多通道设置:把运行VRP 多通道管理器netmanserver程序的一台VRP工作站(IP地址设为192.168.20.1)作为多通道被动立体系统的服务器端,而把运行netmanclient程序的另一台VRP工作站(IP地址设为192.168.20.2)作为多通道被动立体系统的客户端。在VRP工作站上启动VRP编辑器或播放器后,按F4键进入多通道设置,如图2所示。注:工作站上必须插入VRP立体加密狗才会显示出多通道设置对话框。服务器端多通道设置对话框中的客户机列表将显示所有正在运行服务端程序和客户端程序的工作站IP地址列表,其中标注(S)的客户机为多通道服务端,余下的为客户端;M和S分别表示主屏和副屏。选择相应的客户机后,“融合系数”区将分别会显示出其对应的融合系数设置,如192.168.20.1(S) M对应的融合宽度为224和128,192.168.20.1(S) S 对应的融合宽度为224和224,以此类推。将设置好的参数保存到指定的多通道配置文件中,供用户在自己的虚拟现实应用程序中通过代码调用。Netman客户端的VRP多通道设置对话框仅用于建立与服务端的连接。
3.2多通道被动立体虚拟现实应用软件开发要点与注意事项
在VRP-SDK 12.0虚拟现实二次开发平台的基础上,使用C#语言开发了井下定位和微震监测等多通道被动立体虚拟现实应用软件。所开发的程序可以根据传入参数自动适应各种不同的场合,如立体和非立体(常规)环境,以及分别作为服务端和客户端运行等。被动立体软件的制作不同于普通程序,特别要注意生成左右眼图像都必须使用全屏模式,而且要重点考虑左右眼同一帧画面的同步问题。经过手工同步后,进入偏光眼镜的左右眼图像才能在大脑中形成正确的立体视觉。这也是制作被动立体虚拟现实应用软件的难点所在。
开发多通道被动立体虚拟现实系统时,要求所有通道的交互操作必须使用同步鼠标完成,以便各VRP工作站可以同步工作。这就要求所有通道的屏幕设置完全相同,如1号显示器和2号显示器分辨率分别为2048 * 768和 1920 * 1080。Windows底部任务栏设置也必须完全相同,如自动隐藏等。否则,当用同步鼠标选择同一控件时由于屏幕设置存在差异而导致完全不同的操作结果,如不同的工作站选择了不同的记录等。
为避免出现上述问题,可以对虚拟现实应用软件进行特殊处理,即通过在程序中禁止在客户端程序里显示交互界面(包括鼠标键盘操作)来解决这一问题。
此外,在多通道方案中服务端和客户端软件之间不可避免存在同步差异,导致服务端角色的动作与客户端角色的步调相差很大。這些都需要在软件中采取一定的措施和技巧加以避免,如先让客户端执行一个动作,然后服务器端再执行同一个动作,这是因为向客户端发出指令以及客户端执行指令都需要一定的时间可能会造成一些延迟,通过这样处理以后便可以最大限度地保持同步。所有单步动作都要参照上述步骤进行处理。
3.3多通道被动立体虚拟现实应用软件的安装和调用方法
由于开发的虚拟现实应用软件是作为多通道管理器NetMan程序的子进程使用,因此,程序的启动调用及参数设置均需要通过NetMan读写位于服务器端config子目录中的脚本文件Command.txt实现。该文件中包括用[]分隔的很多节,例如:[0-0]表示其后为位于第一行第一列(行和列均从0开始计算)按钮所对应的VRP应用程序的参数。
假设已完成虚拟现实应用系统“基于被动立体技术的井下人员定位软件”的开发,下面分别在两台VRP工作站上安装该软件,即拷贝到两台主机的相同文件夹当中,如D:\demo文件夹。然后在服务器端VRP工作站上设置各项参数,并将结果也保存在上述脚本文件中。要将NetMan程序第二行第一列的按钮设为井下人员定位软件的快捷按钮,需要在command.txt文件中增加[1-0]一节。先将caption设置为“井下人员定位”,即显示在该按钮上的文本,再设置分别在两台工作站上运行的动作act1和act2。由于用VRP开发出的虚拟现实应用软件为可执行文件,因此需要对两行命令做大幅度的修改。修改前,需分别将事先拷贝到两台VRP工作站“D:\demo文件夹\人员定位”文件夹下的VRP二次开发程序可执行文件gp.exe重命名为VRP-Player.EXE,这样做的好处是netman服务端程序在最大化、关闭本软件的窗口时会与其管理其他VRP程序的方法一视同仁,省去了额外编写程序的麻烦。下一步是设置动作act1和act2的命令行及参数,用该软件自己的命令行参数/S和/C(分别代表作为多通道被动立体系统服务端程序运行和作为客户端程序运行)替换掉原来的VRP播放器命令行参数/server和/client。另外,命令行参数后面的带路径文件名(如:D:\VRP\aaa.多通道配置)为上述调试好的多通道配置文件。
设置完后,点击多通道管理器NetMan服务端程序的“井下人员定位”快捷程序图标,将分别在两台VRP工作站上自动启动井下人员定位程序的服务端和客户端程序。
参考文献:
[1] 张春明,杨天鸿,王青,等.主被动立体混合式虚拟现实实验教学系统的设计与实现[J].微型电脑应用,2015,31(9):60-62,65.
[2] 张春明,杨天鸿,顾晓薇,等.多通道大屏幕主动立体VR中控系统的设计与实现[J].实验室科学,2015,18(5):97-100,104.
[3] 刘小江.探究立体显示系统在虚拟现实中的运用[J].计算机仿真,2011,28(9):313-317.
[4] 崔新友.多通道虚拟现实系统研究与应用[D].武汉:中国地质大学,2009.
[5] 卢信文.虚拟现实平台的开发及其应用领域的研究[D].成都:电子科技大学,2008.
【通联编辑:唐一东】