贾建峰 史新伟 郜超军 宋平新 王新昌
(郑州大学物理学院 河南 郑州 450052)
等厚干涉实验是大学物理实验中一项重要的基础性光学实验,该实验仪器结构复杂,实验操作过程繁琐,是大学物理实验中的重点与难点之一.受实验讲义篇幅限制,对等厚干涉的实验原理、读数显微镜的结构、操作方法等内容的阐述是简略的,仅通过阅读讲义、撰写预习报告等方式对实验进行预习往往达不到希望的效果;另外,由于读数显微镜的视场范围很小,课堂上教师无法给学生进行仪器调整、实验技巧的直观演示,因此,学生对教师课堂讲解的接受效果也不理想.
虚拟现实技术(Virtual Reality,缩写为VR)是20世纪才发展起来的以计算机技术、电子传感器技术以及信息技术等为支撑的一项全新科学技术.VR技术既能够以现实世界的数据为蓝本,通过计算机的一系列数值运算处理,再借助各种终端设备的渲染,呈现给人们以非常逼真的、现实世界的仿真景象(虚拟现实);也可以做到超越现实,既在一定的设定条件下,计算机按照一定的逻辑规则运算后让终端设备上显现出肉眼看不见的、甚至现实世界中不存在的景象(超现实).VR技术在效果上具有逼真的3D立体特效以及非常好的沉浸性、交互性等体验,已广泛应用在影视娱乐、教育、医学等领域[1].在生产、教育以及生活方式革新需求的推动下,各行各业对VR技术的兴趣更加旺盛.如今,VR技术已经成为了一种新颖的教育手段.相比传统的被动灌输,这种教学方式提供了生动、逼真的学习环境,身临其境般的体验,不仅能够激发学习兴趣,更有助于增强学生对知识的理解与记忆[2].国家教育部根据《教育信息化“十三五”规划》的总体部署,也在大力推动各大中院校积极开展虚拟仿真实验教学项目[3].2018年,教育部公布了首批104项国家级虚拟仿真实验教学项目,让“网上做实验 ”和“虚拟做真实验”成为现实[4].
为满足学生课前预习、课后复习的需求,方便授课教师课堂上进行实验教学演示,本文开发了基于Unity 3D技术的三维交互式等厚干涉虚拟仿真实验平台.学生在课前预习实验讲义的同时,可以在自己电脑上运行等厚干涉虚拟仿真程序,在虚拟的环境中尝试实验设备调整、进行虚拟实验操作,检验预习效果;课堂上教师可以借助该平台演示实体读数显微镜有限视场中无法展示的实验现象,提高授课效果;课后学生还可以在该平台上进行一些拓展实验,比如研究波长、曲率半径等实验参数改变对干涉的影响,加深对知识的理解.
Unity 3D是全球应用非常广泛的三维视频游戏、建筑可视化、实时三维动画的跨平台游戏开发引擎[5],但是其内置的3D对象只有几种简单几何体,不能构建复杂的3D模型.为了构建尽可能逼真的实验仪器3D模型,还要借助第三方3D建模软件.3Ds Max是当前一款应用非常广泛的三维建模软件,可以进行3D建模、图像渲染和三维动画创作,在动画影视与广告制作、工业仿真以及教学演示等行业都有广泛应用[6].本仿真实验平台中各种3D模型的建模就是在3Ds Max软件中完成.
首先,我们对等厚干涉实验用到的读数显微镜、牛顿环仪、钠光灯等分别进行分解与测绘,获得各个部件几何尺寸参数.利用这些数据在三维建模软件3Ds Max中建立与实体仪器设备各个部件相对应的3D模型,并赋予其与实物近可能相似的表面材质与贴图.调整、设置各部件旋转轴与中心,并按照真实设备结构关系对这些部件进行组合与关联,组装成读数显微镜、牛顿环仪等实验器材的3D模型(见图1).为了在Unity 3D引擎中可以使用这些模型,将它们从3Ds Max中导出为相应的FBX格式文件.
图1 在3Ds Max中构建的部分实验设备3D模型
启动Unity 3D的游戏开发界面,建立并保存一个3D虚拟场景(Scene),在该场景中建立一个Plane平面,并赋予其木纹性质的贴图,作为放置实验设备的虚拟桌面.在资源管理器视窗中导入由3Ds Max生成的3D模型FBX文件,将各个虚拟实验器械布置在虚拟桌面上,并调整好大小与相对位置.
在Unity 3D的游戏开发场景中还要重新调整各部件材质,例如显微镜主体设为浅灰色,螺钉头为银灰金属色泽.为了实现显微镜底座上两块玻璃板的半透明效果,编写了一段着色器程序命名为GlassShader.Shader,主要代码如下:
_MainColor("Main Color", Color) = (1, 1, 1, 1)
_AlphaVal("Alpha", Range(0, 1)) = 0.1
Tags { "Queue" = "Transparent" "RenderType"=
"Transparent" }
o.Albedo = _MainColor.rgb;
o.Alpha = _AlphaVal;
新建一个材质球修改名字为Glass,选择其着色器上面名为GlassShader.Shader的自定义着色器,在检视面板中将主颜色(Main Color)设为水绿色,阿尔法(Alpha)通道取0~1之间的值以获得较理想的透明效果.最后将该材质赋予显微镜底座上的两块玻璃板,实现如图2所示效果.
图2 底座上透明玻璃板效果
同样的,对仿真显微镜上其他部件如反光镜、45°透反镜等需要的特效也是通过对着色器的编程、材质颜色等相关属性的设置来达到希望的效果.
3.2.1 摄像机与视角控制
为了方便操作,本仿真平台通过鼠标来控制摄像机的观察视野与视角:既按着鼠标右键左右滑动实现视野的旋转;按着鼠标右键上下滑动可以使视角上下移动;鼠标滚轮缩放视野的远近.
3.2.2 反光镜与45°透反镜的人机交互
真实实验中,首先需要学生做的是调整显微镜载物台下方的反光镜角度,使其不反射钠光;接着调节物镜下方的45°透反镜的角度,将来自钠光灯的光线经过其反射后垂直投射到载物台上的牛顿环仪上表面,达到满足实验必须的、均匀照明的光线条件.下面我们要在虚拟环境中模拟这个动态交互效果.
(1)角色的拾取
Unity 3D游戏场景中用户可以操控特定物体在3D虚拟环境中实现一些动作,这些物体叫做角色.用户要实现对角色的操作首先是拾取该角色物体.Unity 3D通常采用射线Ray碰撞检测的方式拾取物体,就是从摄像机向鼠标位置发射一条射线,通过检查与射线碰撞的物体来选择将要操控的角色.本实验中某些需要操作的物体处于另一种物体内部(如反光镜位于底座里面),利用射线碰撞检测来拾取物体就不太方便了.采取另外的方式拾取操作对象:我们给需要交互的物体赋予特定的按键名,通过在键盘上按下特定按键来选取场景中需要交互的对象.例如这里,我们通过字母键R来拾取反光镜,字母键H来选择45°透反镜.
(2)实现虚拟环境中对反光镜、45°透反镜的可调节功能
Unity 3D游戏场景中,角色回应用户的具体动作可以由C#语言编译的脚本程序决定.例如,在我们事先编译好的脚本程序控制下,按下键盘字母键R时反光镜就被拾取,然后如果用户按动键盘上的上/下箭头按键就可以看到,反光镜绕其转轴做顺时针或逆时针旋转,实现对反光镜角度的调整.对45°透反镜的操控也是这种情况.
(3)实现模拟环境中目镜、物镜的动态聚焦调节功能
在脚本程序的控制下,通过字母键E来拾取目镜组件,按下上/下箭头按键时,虚拟场景中的目镜调焦手轮缓慢正/反旋转,模拟调焦的动作.同时,在视场右上角出现画中画1,用来模拟目镜视野中图像在调焦过程的变化,可以看到分划板上十字线在接近焦点时从无到有,失去焦点后再次消失的过程.此处,视野中的十字叉丝实际上是由两根细长的相互垂直的黑色圆柱体模拟的.为实现画中画效果,专门创建了1号副摄像机正对该十字线.为了避免主、副画面景物冲突,需要设置主、副摄像机的Culling Mask参数,并且主、副画面图层不能相同.另外,镜头失焦-聚焦-失焦过程的图像变化效果,是通过在脚本程序中改变十字线着色器中阿尔法通道值,让材质在透明与不透明之间发生变化来模拟的.
通过字母键O来拾取物镜组件.为实现物镜聚焦调节中,干涉图案从无到有,然后又从有到无的图像变化效果,在副摄像机1视场中,十字叉丝后方又依次创建了两个长宽都为1 m,厚度仅为0.1 m的Cube体,分别命名为mask板、image板.位置关系是mask板正好遮盖了image板.
牛顿环干涉条纹强度分布函数为
(1)
其中,I0为入射光强,R为曲率半径,λ为入射光波长,r为干涉条纹半径[7].根据公式(1),设定曲率半径R=1 m,入射波长λ=589.3 nm,可以利用Unity 3D Shader程序模拟出较逼真的牛顿环干涉图样. 具体实现方法是,新建一个自定义着色器,命名为Newtonring.shader,主要代码如下:
float r = distance(_Center, IN.worldPos);
if(sin(3140*r*r/(_RCurvature*_Lambda))*
sin(3140*r*r/(_RCurvature*_Lambda))<
0.3)//根据公式(1),判断干涉暗条纹位置
o.Albedo = _RadiusColor;//暗条纹所在位置像素点颜色取自定义值
elseo.Albedo = _Color;//暗条纹以外位置像素点颜色为默认背景色
新建一个材质球给image板,选择材质球的着色器为Newtonring.shader,在检视面板中选择背景颜色为黄色(模拟钠光颜色),选择衍射环颜色为自定义灰黑色,此时image板呈现出牛顿环干涉图样,可以通过副摄像机1投射到屏幕上.
另外,由于mask板位于image板前方,在副画面1中,通过改变mask板材质透明度的方式,可以让image板上的干涉图样在“显示-消失”状态间发生变化,实现了物镜动态调焦的视野图像交互效果.同时,显微镜镜筒也会随之上/下移动,模拟物镜调焦的显微镜外部动作.
(4)测量操作过程的仿真
等厚干涉实验中一个重要的实验内容是,学生要使用读数显微镜测量一组干涉环的直径,然后通过公式计算出平凸透镜的曲率半径.该仿真实验平台的一个主要目标就是在虚拟环境中实现测量操作的交互功能,帮助学生做好实验预习.
通过字母键M来选择测量操作仿真.为了实现模拟读数,启用了第二个副摄像机.这样,按下母键M时,在主视野右下角另外开辟一个画中画显示区域2,显示出主刻度尺与副刻度鼓轮.
进行仿真测量时,按动键盘上的上/下方向键,除了主视野中可以看到读数显微镜的镜筒做水平移动、副刻度鼓轮做相应旋转外,在副视野1(显微镜视场)中会看到干涉条纹的移动,在副视野2(读数区)中同时也将看到主刻度尺、副刻度鼓轮读数值做相应变化,如图3所示.学生借助该模式可以反复练习读数显微镜的测量方法.
图3 仿真实验平台总体效果
(5)实验拓展
本仿真实验平台,牛顿环干涉图样的默认条件是平凸透镜曲率半径R=1 m,入射波长=589.3 nm,但是这些参数是可以改变的.仿真实验中学生可以通过鼠标左键分别拖动视场中曲率半径滑动条或者波长滑动条来连续改变曲率半径、波长,观察干涉图样的变化,探索曲率半径、波长对等厚干涉的影响.真实实验中,光源只有一两种,所以,在真实实验中是很难做到对光源波长的连续改变.
(6)应用程序打包
为了使仿真实验平台可以脱离 Unity 3D 开发环境在其他电脑运行,使用Unity 3D的打包工具生成可以在PC客户端独立运行的程序包,它包含一个.exe可执行文件,以及一个运行必须的DATA数据文件夹.
为提高等厚干涉实验教学效果,本文设计制作了一套基于Unity 3D虚拟现实开发引擎的等厚干涉实验仿真平台,逼真再现了等厚干涉实验的环境、设备与操作过程.借助该平台,学生在课前预习实验讲义的同时,可以进入虚拟环境中练习虚拟仪器调节、进行仿真实验操作,反复训练实验步骤;课堂上教师可以借助该虚拟实验平台演示真实读数显微镜有限视场中所无法展示的实验现象,提高教学效果;课后学生还可以在该平台上开展拓展实验.
另外,本仿真实验平台的交互功能采用事件响应方式,实验操作不要求按照固定的顺序进行,不同的操作过程会产生不同的结果组态,较好地再现了真实实验可能出现的各种状况.