陈昭喜,许爱军
(1.广州中医药大学医学信息工程学院,广州510006;2.广州铁路职业技术学院创新创业学院,广州510430)
虚拟现实(Virtual Reality)是一种可以创建和体验虚拟世界的计算机仿真系统,它利用计算机生成模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,带给用户沉浸式体验。虚拟仿真实验是虚拟现实系统的一种,通过对实验仪器和实验过程进行仿真,使用者可以利用计算机完成实验,获取实验结果,熟练技能,掌握相关知识。
分光计的调整和使用是大学物理的基础实验,实验仪器的结构复杂,仪器的调整难度较大,学生不易掌握。为满足学生课前预习、课后复习的实验需求,本文采用3D Max 2018 作为建模工具,VRay 作为模型渲染软件,Unity3D 作为场景漫游和交互操作引擎,实现了分光计虚拟实验系统,在实验教学中取得良好应用效果,为大学实验教学改革提供了借鉴和案例。
作为真实物理实验的有效补充,分光计虚拟实验系统要求能为用户提供分光计的三维展示和拆装功能。具体而言,需要满足以下需求:
(2)能按照流程自动进行三维演示;
(3)具备简单交互功能,点击相应部件能呈现该部件的三维模型和结构讲解声音等;
(4)能提供拆装功能,满足用户自由拆装的意愿。
文献[1-2]详细阐述了VRML 虚拟实验系统的设计流程,大体思路是:首先在三维建模软件中进行物体模型设计;其次用可视化编辑软件将单个模型进行合成;再次在VRML 文本编辑工具中添加交互节点;最后对模型文件进行压缩和优化,并进行发布,具体流程如图1 所示。
本文采用的三维建模工具是3D Max 2018、渲染工具是VRay(VRay 是由Chaosgroup 和Asgvis 公司出品,中国由曼恒公司负责推广的一款高质量渲染软件)、模型组合和交互脚本设计工具是Unity3D、预览浏览器是Cortona VRML。
模型的设计需要遵循通用的设计流程。以下按照分光计粗描模型、分光计零部件建模、模型整合、添加材质和贴图等流程进行建模。
资料收集是建模的第一步。收集的资料主要是分光计相关图片,包括前视图、结构图、实拍图等。进行粗描模型前需要用分光计的前视图作为参考。具体就是在3D Max 前视图画一个平面,长和宽与图片大小一致,把贴图通过材质导入平面。然后用模糊数据把分光计模型的样子大致画出来,必要时利用放大缩小工具调整到适宜的大小。这样能大大降低建模的难度。
在建模过程中,结构可根据前视图来做,细节部分根据实拍图来调节。具体模型可以分为分光计上半部分建模、载物台和刻度盘以及游标盘的建模、分光计下半部分建模三个部分。
质谱条件:离子源为电喷雾离子源(ESI),采用正离子检测方式;毛细管电压为3.60 kV;离子源温度为150℃,去溶剂化温度为500℃;喷雾气为氮气,碰撞气为氩气;ATV和盐酸噻氯匹定(内标)的锥孔电压分别为44、30 V,碰撞能分别为22、26 eV;采用多反应离子监测(MRM)模式,质荷比(m/z)分别为 559.20→440.20(ATV)、264.20→154.05(内标)。
分光计上半部分模型大体是对称的,对左侧部分建模后可以采用镜像方式对右侧部分建模。建模内容包括镜筒部分、Y 型支架和三角支架。对镜筒建模时,先在模板画一条样条线,然后画一个圆环最后进行放样操作。Y 型支架可以通过圆环、长方体、圆柱体等基本标准体通过布尔运算组合形成。对于三脚架建模,可以直接构建一个圆角长方体,然后采用FFD 命令改变它的形状来完成。望远镜的目镜结构相对比较复杂,本文将它拆成三部分,然后通过布尔命令组合起来。为了与实物图更加契合,还应对其一些部分进行倒角处理,使得边缘更圆润。其他部分包括螺丝钉的制作不再赘述。
载物台和刻度盘以及游标盘的建模。载物台建模相对简单,由几个圆柱体拼接而成,顶层载物台本身的圆形纹路可以通过布尔命令切割实现。刻度盘的制作需要用到阵列工具,阵列可以与规律的复制出多个物体。刻度盘盘一圈360 度,共有720 小格,每一小格对应0.5 度。所以在制作时可以先设计一个长方体,通过阵列旋转360 度,数量设为720。因为有三种不同长度的指针,中等长度指针数量设为360,最长的指针设为36。游标盘的制作和刻度盘一样,用阵列工具做。做完后和刻度盘的对比效果如图2 所示。
图2 分光计游标盘与刻度盘对比图
分光计整个下半部分建模。分光计下半部分都是一些支架,首先用线段描绘它的样子,然后进行放样操作就能完成,这里不再重复叙述。
对分光计各零部件建模完成后,就可以把各个部件组合在一起。为使结构更加精确,需要用到对齐工具使各个零件对齐。在对齐过程中可能还需要对部分零件的大小和方位进行调整,从而优化模型。整个过程只需要用到移动、放大缩小、旋转操作。组装完成后,就可以删除掉之前的模板,这样使整个分光计界面更加清晰,不受其他视线干扰,易于操作。
为使分光计模型更加接近实物,使用VRay 渲染软件对分光计添加材质和贴图。VRay 是目前业界最受欢迎的渲染引擎。VRay 渲染器提供了一种特殊的材质——VrayMtl。在场景中使用该材质可以获得更精确的物理照明(光线分布),更快的渲染,以及更方便的反射和折射参数调整。考虑到分光计颜色相对比较单调,材质种类也不多,本文只采用VRay 制造了不锈钢、铝箔和清玻璃三种材质和几种不同的颜色,利用VRay渲染可以大大减轻建模工作量。
建模是虚拟实验系统的基础,但模型本身不能提供交互功能。本文采用Unity3D 作为虚拟现实开发引擎,将3D 模型导出后传递给Unity,Unity 负责将这些模型有机地组合起来,并通过脚本形成交互。
从3D Max 导出模型的基本步骤是:首先在3D Max 将显示单位和系统单位设为厘米,使之与Unity 的单位一致;其次将3D Max 模型以.fbx 的格式导出;然后将导出的文件存放在Unity 项目里的Assets 文件夹下;最后启动Unity,在项目视图中将已经创建好的分光计模型拖拽到游戏视图中。
导入模型后,通常会出现模型散架、模型模糊失真等问题,这需要在Unity3D 中予以修正。
Unity3D 支持多种编译脚本,本文用C#脚本对分光计系统进行交互设计。通过编写C#脚本,用鼠标和键盘对分光计各零部件进行操作,不仅对分光计各结构进行移动旋转以及多方位观察,还标出各结构的名字和功能,并且对分光计的部分原理进行展示。本文采用第一人称方式对场景进行控制,在Unity3D 中,第一人称控制方式可以通过编写脚本利用鼠标来控制人或摄像机的旋转来实现。
添加C#脚本控制摄像机跟随Cube 移动,达到第一人称场景漫游的效果。设计思路是:首先在Start 中创建三个变量,初始化相机位置。然后新建一个cameraMove 方法,在里面设置使相机跟随鼠标旋转然后物体与相机同步旋转同时更新相机位置。最后在Update方法中调用cameraMove 方法,同时监听“WASD”键控制其前后左右移动,“QE”键分别控制其上下移动。
交互的前提是系统能识别分光计各部分的结构,从而能够选中并对其进行相应的操作。为实现这个目标,C#脚本的设计思路是:首先给需要识别的对象添加BoxColider 组件(碰撞组件),并对其碰撞结构进行调整。然后在C#脚本中创建方法来识别碰撞,同时返回与鼠标碰撞对象的信息。最后再创建一个窗口显示方法,获取鼠标按键信息后显示窗口。
以望远镜的交互为例阐述交互脚本的设计过程。望远镜需要带动刻度盘一起绕载物台中心旋转,让物体绕自身XYZ 轴旋转很简单,但是想让物体绕另一个物体旋转稍微复杂一点。有两种处理方法,一是保持A 不变,B 绕A 旋转;二是A 绕自身旋转同时带动B 一起旋转。这里采用第一种方法,先建立一个参考点spot,放在刻度盘的中央,然后写入代码使望远镜系绕spot 旋转就能达到期望效果。然后把脚本添加到望远镜系上面,并且给C#脚本中的spot 变量附上Scene 场景中spot 的Transform 信息。完成后,鼠标点击望远镜,可显示望远镜信息,并可以通过键盘左键和右键控制其旋转,实现了交互功能。
通过Unity3D 打包发布,可以使实验系统成为独立文件,从而可以脱离Unity3D 环境在其他电脑运行和传播。Unity3D 打包发布,可以直接在Unity 界面的File 目录下点击Build Settings,就可以发布到PC、iOS、Android 等客户端。最后成品文件包括一个.exe 文件和一个Data 数据文件夹,二者缺一不可,且不可分割。
对虚拟现实场景打包发布后,可以对虚拟分光计系统进行测试。测试功能主要分为场景漫游和交互控制两部分。
首先进行场景漫游测试,可以通过键盘“Q、W、E、A、S、D”控制摄像机移动同时鼠标控制方向,进行场景漫游。测试表明,该操作简单流畅,能够快速定位自己所需求的视角。场景漫游时能更加清晰了解分光计的机械结构,从而加深对分光计工作原理的理解。图3是场景漫游获取的各个角度的图片。
图3 分光计漫游场景图
分光计各零部件的交互控制功能,就是当鼠标移动到对象上时能显示其名字,点击零部件后显示其详细信息并给予操作提示,同时还可以通过键盘对其进行旋转和移动操作。
以望远镜为例进行操作展示,系统实现了望远镜的旋转、狭缝调节器的伸缩与旋转、载物台的升降与旋转,以及各螺钉的旋转等功能,如图4 所示。
本文实现了分光计虚拟实验系统,经过测试与发布,系统具有操作简单、使用方便、逼真度高、跨平台运行等特点,对学生认识分光计、操作分光计有良好的辅助作用,能大大提高实验效率。未来将进一步优化模型,添加更加复杂的交互功能,完整还原分光计实验的实验过程,这也是今后研究工作的重点。
图4 望远镜操作示意图