曾令菊
(桂林航天工业学院 传媒与艺术设计学院,广西 桂林 541004)
虚拟现实技术是20世纪发展起来的一项实用技术,融合了动态建模、三维图像生成、立体显示、多维传感等技术,它利用计算机生成与真实世界一样的虚拟环境,操作者使用VR头显、数据手套等设备,通过身体自然动作、声音、注视等行为与虚拟对象进行实时交互,获得视觉、听觉甚至触觉等多感官的及时反馈,产生身临其境的沉浸式体验[1]。随着虚拟现实和人工智能等新一代互联网技术的快速发展,进一步推动了三维虚拟交互产品的开发和应用。本文基于Virtools平台设计并开发三维虚拟实验系统,从系统框架设计、虚拟场景建构和交互功能设计实现等层面研究系统设计与开发的关键技术,研究一种交互功能强、可移植性好、编程难度低、可视化的三维虚拟实验设计与开发方案。
Virtools是一款可视化的实时3D环境虚拟实景编辑软件[2],可以让没有编程基础的开发人员利用Building Blocks(互动行为模块)快速制作虚拟现实交互产品,互动行为模块包括交互设备控制、程序逻辑控制、对象运动控制、视音频控制等功能,通过组合能实现丰富的交互效果,具有兼容性好、扩展性高、可移植性强等特点[3]。
摄像机操作虚拟实验系统的设计主要包括:系统框架设计、实验功能设计和人机交互界面设计。系统框架设计主要基于实验内容、实验目的,对虚拟实验系统进行整体结构设计;实验功能设计是对虚拟实验所能完成的实验内容、交互效果、实验反馈进行设计,为使用者提供良好的交互体验;人机交互界面设计是对虚拟实验视觉元素进行设计,让使用者与虚拟实验系统之间的信息交互更加自然、合理、智能化。
1.2.1 虚拟实验系统框架设计
三维虚拟仿真实验是对真实实验过程的模拟与仿真,在对总体框架进行设计时,不仅要确定实验内容、实验要求、实验操作的仿真性、实验流程管理和操作反馈等几个关键问题,还要考虑线上、线下不同的学习使用需求。摄像机操作虚拟实验的系统框架如图1所示,主要包括虚拟实验室场景、虚拟仪器设备、虚拟漫游角色三个主要部分,虚拟实验系统由实验学习模块、实验操作模块、交互反馈与帮助模块组成,其中实验操作模块是整个虚拟实验系统的核心部分[4]。
图1 摄像机操作虚拟实验系统框架
1.2.2 虚拟实验系统功能设计
实验功能的完整性是保证虚拟实验仿真性的重要要求,摄像机操作虚拟实验设计了设备结构及部件功能展示、设备连接、摄像基本操作、操作反馈等主要功能。使用者在三维虚拟情境中,可以对摄像机进行旋转、拆解,了解其内部结构、工作原理;把鼠标放置在设备部件上就能学习其功能说明及操作方法;通过鼠标点击完成摄像机与三脚架、电池等附件的连接,进行推、拉、摇、移等运动镜头拍摄练习;通过回放功能的模拟检验拍摄效果,使用者的每一步操作都会有实时反馈。通过设计实验过程演示、虚拟角色漫游、视角切换等辅助功能,将游戏模式与学习相结合,增强虚拟实验的趣味性和体验感,降低使用者的认知负荷。
1.2.3 虚拟实验系统交互界面设计
摄像机操作虚拟实验是一个桌面式的虚拟实验系统,交互界面的设计采用网页界面的导航形式,人机交互主要运用导航条、交互按钮实现。一级导航位于整个系统界面的底部,主要用于实验内容提示及模块切换,因此始终显示;二级导航及工具栏位于界面右侧,根据实验模块的功能需求显示内容有所不同。整个界面采用浅色色调,当鼠标滑动到交互按钮上,按钮颜色会发生改变,从而提示操作者该按钮具有交互行为,通过单击鼠标左键可以触发对应的交互动作,交互界面设计效果如图2所示。
图2 虚拟实验交互界面
为使体验者在虚拟实验中获得与真实实验一样的使用体验,降低认知负荷,在虚拟实验设计时参考真实实验环境进行三维模型、场景的构建。根据设计好的虚拟实验框架及交互功能,将模型分为实验环境、实验设备和虚拟角色三类,使用三维建模软件3D Studio Max进行模型构建及灯光、材质设置。
2.1.1 实验场景、设备模型建构
3D Studio Max是一款功能比较强大的三维动画制作和渲染软件,提供了基本体建模、复合建模、网格建模、多边形建模、面片建模和NURBS建模等多种建模方法。在三维模型建构时需要注意几个问题:(1)模型的尺寸,模型可以按照摄像实验室、摄像机、三脚架等物体的实际大小或者等比例进行创建,这样既能有效保证虚拟场景、对象的真实性,也能避免由于在Virtools中对模型进行大小缩放而发生的不正常碰撞现象;(2)有旋转行为的对象,要注意调整好pivot旋转轴心的位置,如液晶取景器,要将轴心点调整到转轴,而不是几何中心,否则旋转打开动作就会不正常;(3)可使用低模贴图、区域LOD、组合等方法对场景模型进行优化,以降低系统的对象数量和面数;(4)对三维对象进行正确、规范的命名,避免无法正常调用。
2.1.2 材质渲染设置
Virtools能兼容的3ds Max材质较少,只有standard(标准)材质、Multi/Sub-Object(多维/子对象)材质、Mix(混合)材质等常见基本材质。这些材质在表现三维模型的质感、纹理上效果不佳,而且Virtools不能很好地表现3ds Max灯光的光影效果,因此在材质设置和渲染输出时采用贴图烘焙技术。将虚拟场景、对象的材质及光影信息全部渲染在一张贴图上,在Vritools中再将贴图贴回到虚拟对象上,这样不仅可以降低渲染引擎计算材质、光影信息的时间,提高实时渲染更新的速度,还能确保虚拟场景的真实感,提高三维虚拟实验的仿真性。
2.1.3 场景、模型的导出
在3ds Max中使用输出插件Virtools Exporters,将三维模型、角色、动画导出成.NMO或者.COM格式的文件,Virtools才能调用。在导出时,要根据对象在虚拟实验中具有的交互行为及功能,分类别导出:(1)实验室场景、环境等静止或没有交互行为的对象,导出时以Objects(物体)的形式导出;(2)摄像机、三脚架等交互行为较多的对象,以Character(角色)的形式导出;(3)有多个动作的虚拟角色,要先将角色导出,再将每一个动作单独导出。
交互功能的设计与实现是三维虚拟实验开发的关键技术。在Virtools平台中,首先要新建一个数据资源库(Data Resources),在将三维场景、模型、角色、动画及交互界面的视觉元素等对象分类放入Data Resources相应的文件夹,然后添加到3D Layout中,才能进行具体的交互程序的设计与制作。
2.2.1 摄像机结构展示功能的实现
摄像机结构及内部构造展示模块,使用鼠标点击交互按钮对摄像机进行旋转、缩放控制。Push Button(按钮)行为模块不仅提供了鼠标单击、双击、划入等多个输出端口,还可以设置按钮在弹起、滑过、点击时呈现不同的状态,能满足虚拟实验按钮交互控制的所有功能。当交互按钮的PushButton模块检测到鼠标的交互行为信息后,输出端口Pressed激活Send Message行为模块向摄像机接收信息的Wait Message模块发送旋转信息,从而激发Rotate模块控制摄像机产生旋转行为,脚本如图3、图4所示。
图3 交互按钮脚本
图4 摄像机旋转脚本
摄像机结构展示视角的变化通过点击交互按钮激发,场景视角的变化使用Bezier Progression和Set Zoom行为模块控制场景摄像机的焦距(Zoom)来实现,在程序设计时还要定义两个参数,分别用于控制运算和存储数据。以虚拟实验场景视图放大为例,当Wait Message行为模块接收到交互按钮发出的消息后,Bezier Progression行为模块向运算控制参数Addition传输数据,不断变化的Zoom参数传递给Set Zoom行为模块,引发场景视角焦距改变,数据存储参数存储实时变化的焦距值,场景视图放大效果的交互脚本如图5所示。
图5 视图放大功能交互脚本
2.2.2摄像机部件打开效果的实现方法
摄像机的液晶显示器、卡槽盖等部件能够打开,其内部按钮、配件的使用方法是摄像机操作实验的重要内容,因此虚拟实验需要在鼠标点击这些按钮、部件时能激发对象的开启、旋转打开动作。以LCD显示器旋转打开为例,当鼠标在显示器上单击一下,显示器旋转并打开,再单击一次,显示器旋转关闭。这部分交互控制程序包含鼠标动作检测及显示器旋转两个部分。鼠标动作检测程序如下:Mouse Waiter行为模块一直处于激活状态,用于检测鼠标行为,当鼠标发生单击动作,2D Picking行为模块检测被点击对象的名称,并把名称信息传输给OP行为模块,OP模块检测对象名称与其存储的对象名称是否一致,如果名称相同输出参数Ture,否则输出False,当Test行为模块接收到Ture参数后激活后面的显示器旋转程序,接收到False参数时程序继续等待鼠标动作。显示器的旋转打开行为通过Bezier Progression、Interpolator、Rotate三个行为模块进行控制,Bezier Progression、Interpolator控制整个旋转过程,Rotate触发旋转行为,在Rotate行为模块中要将参考对象Referential设置为显示器,确保摄像机在任何角度下显示器都能保持正常旋转状态,显示器旋转交互脚本如图6所示。
图6 显示器控制交互脚本
2.2.3 部件功能及使用方法展示功能的实现
摄像机结构、功能按键的功能和使用方法通过图文、动画展示,当使用者将鼠标移动到部件或按键上,其颜色改变呈高亮显示,功能或使用说明在屏幕右上角的位置显示,展示效果如图7所示。
图7 功能及使用方法展示效果
鼠标动作的获取使用2D Picking、OP、Test行为模块,程序设置跟显示器旋转控制相似。鼠标移动到对象上其高亮显示,运用Set Material行为模块改变材质颜色来实现;功能和使用说明显示与隐藏通过Show和Hide来控制。由于2D Picking是单次执行模块,为保证该段程序能反复运行,在程序开始端添加Keep Active行为模块,保证程序处于运行状态,交互程序如图8所示。
图8 功能及使用方法展示功能交互脚本
2.2.4 摄像机基本操作交互行为的实现方法
摄像机基本操作包括电源开关、录制及推拉摇移等运动镜头拍摄练习,摄像机只有执行打开电源动作后才能进行拍摄操作练习,使用Show、Hide行为模块对交互按钮、对象进行显示、隐藏,交互脚本如图9所示。
图9 电源开关交互脚本
摄像机镜头焦距变化等拍摄技巧操作练习,主要运用Cameras镜头焦距的交互控制来实现。首先定义一个数据存储参数和一个运算控制参数,当操作者单击推镜头控制按钮时,Send Message行为模块发送交互信息,当Wait Message行为模块接收到消息后,激活Bezier Progression行为模块向Addition运算控制参数传输数据,Set Zoom行为模块获得不断改变的数据,从而控制摄像机的焦距变大;拉焦距的交互实现方法与推焦距相似,只是将运算控制参数Addition换成Subtraction,实现摄像机镜头焦距变小,程序交互脚本如图10所示。
图10 推镜头交互脚本
摄像机摇、移拍摄技巧操作练习,可将摄像机模型以及在Virtools中添加的视图Cameras作为三脚架云台模型的子对象,通过云台的摇、移运动控制视图Cameras摇移的拍摄效果。在层次管理面板中将视图摄像机和摄像机模型设置为云台的子对象,当云台运动时,其子对象视图Cameras及摄像机模型会跟随它的运动状态,而子对象的运动状态对其没有任何影响,通过父子对象的设置可以有效简化程序。云台运动控制交互程序与显示器旋转功能相似,摄像机操作实践的模拟效果如图11所示。
图11 摄像机基本拍摄技能操作练习效果
2.2.5 虚拟角色漫游功能的实现
在虚拟实验系统中引入虚拟角色,能够提高实验系统的沉浸性,激发参与者的实验兴趣。虚拟角色是操作者在虚拟实验中的化身,通过鼠标、键盘、手柄等输入设备控制角色,完成各种练习动作。虚拟角色通常具有多个动作,在设置运动控制程序之前,导出的所有动作全部赋予实验角色,然后通过Keyboard Mapper、Unlimited Controller模块控制角色的实际动作。其中,Keyboard Mapper模块的功能主要是将键盘输入的信息发送出去,本实验借鉴游戏中常见的角色控制操作方法,设定键盘W键向前、S键后退、A键左转、D键右转,定义空格键为奔跑。Unlimited Controller主要实现系统信息与角色动作之间的关系映射,当该行为模块接收到Keyboard Mapper发出的信息后就会激发对应的角色动作。
虚拟实验系统开发完成后,下一步就是对系统程序进行功能测试和单元测试,排查程序流程及脚本错误,优化程序流程。如果交互功能框架设计不合理,流程逻辑不清晰,会给测试阶段带来很大麻烦,甚至影响整个程序的正确运行[5]。利用Virtools提供的程序调试功能,能够方便直观完成系统程序的调试工作。具体操作是在Schematic管理器中打开Trace功能,调试时运行程序已经执行的行为模块边框会变成红色,还未执行的行为模块保持灰色边框状态,方便在程序调试时判断程序的流向及对错,程序测试功能的运用状态如图12所示。
图12 程序测试
摄像机操作三维虚拟实验系统,是在对实验系统框架进行整体设计的基础上,运用3ds Max对实验环境、实验设备和虚拟角色进行建模,以Virtools作为开发平台,运用运动控制、逻辑控制、输入设备控制、摄像机控制、碰撞检测、界面设计等Building Blocks(行为模块),开发实现了摄像机结构展示、部件功能及使用方法展示、摄像机基本操作、虚拟角色漫游等交互功能,界面美观、实用大方,将虚拟角色引入虚拟实验,增加了虚拟实验的沉浸感和趣味性。随着Oculus Rift、VR眼镜等消费级虚拟现实产品进入市场,三维虚拟实验将会与真实实验常态化并用,三维虚拟实验室平台的开发具有较大的社会价值和研究意义。本文通过研究基于Virtools平台的三维虚拟实验系统的设计与实现流程,并对系统开发各阶段的关键技术进行详细分析,提出一套编程难度低、交互性强、移植性好、灵活易用的三维虚拟实验设计与开发方案,给三维虚拟实验系统开发人员提供一定思路与借鉴。