赵洋洋,盛思远
(1.中国刑事警察学院 基础教研部,辽宁 沈阳 110854;2.沈阳化工大学 理学院,辽宁 沈阳 110142)
在高等教育中,理论课程的网络课堂和传统课堂相结合的教学模式已经相当成熟,但对于实验课来说,还存在亟待解决的问题. 尤其是对于远程培养方式的非全日制高等教育,由于受到空间和资源限制,几乎不安排物理实验课. 而物理实验是科学实验的先驱,体现了大多数科学实验的共性[1]. 由于有些实验课程对于环境的要求较高,追求理想的实验环境,需要大量的实验室维护经费来维持. 此外,由于学生生源地中等教育水平不均衡,学生对物理实验的熟悉程度差别较大,带来了较大的授课难度[2]. 这些因素,都影响了大学物理实验课程的教学效果.
国内VR教育主要投入在虚拟现实教育的学习资源、虚拟现实理念研究和虚拟校园仿真环境的构建[3]. 物理仿真实验室通过一系列设计的场景,模拟了特定实验的实验过程,在现代计算机物理引擎中,对于力学性质的模拟已经非常逼真,基本符合真实世界的物理规律[4]. 但是对于光学性质来说,一方面由于光学性质在临界情况下比较复杂,另一方面受限于显卡计算能力,无法大规模实时运用贴近真实世界的光栅化渲染算法. 由于光线追踪渲染算法[5]更偏向以“与真实世界效果相似”为目标,而非从原理上模拟,所以对于某些光学器件的效果,无法精确地表现. 本文提出间接渲染的方法,基于Unity3D平台开发三维物理光学实验程序,并探讨大规模运用此方法进行仿真的可行性.
Unity3D 是一款跨平台的3D引擎,用于制作3D游戏、实时三维动画等互动内容,而在教育领域,主要用来制作工业动画,用仿真的方法对员工进行培训. 本文就是采用Unity3D平台对大学物理实验中的光学部分进行仿真,主要用于在线实验教育. Unity3D平台的优势主要在于,系统的交互性好,以及对不同平台良好的适配性,实现1套代码对应多种平台. 但是由于Unity引擎是逐帧渲染,不同于大多数App的脏渲染,渲染计算量较大,对于渲染的优化问题比较重要[6].
实验系统总体框架如图1所示.
图1 实验系统总体框架图
1.2.1 实验介绍模块
实验介绍主要在Unity3D中播放预设好的视频,仿照在线慕课的形式,讲解实验原理、操作和注意事项. 在Unity3D中播放视频一般用UnityEngine.Video.VideoPlayer组件或MovieTexture组件,这2个组件都是用在物体表面渲染动态纹理的方法来播放视频,因此必须依赖Render 组件,本文只是简单的在屏幕上播放视频,因此使用Render Texture组件.
此外还需在配置文件里配置文件读写的权限,例如安卓系统需要为Manifast配置如下项:
1.2.2 实验操作模块
在操作前需要先选择操作对象,对于不同的对象有对应的操作方法,主要为开关类、移动类和旋转类3种. 以分光仪测三棱镜实验为例,光源的操作方法主要是选择和开关,在实验中可以选择不同的光源,如汞灯和钠灯;分光仪的操作方法主要为旋转;三棱镜的操作方法为移动和旋转. 对于移动和旋转类操作,系统使用键盘进行操控,对每个操作设置步进和随机因子
Δd=d步进+d′,
短按键时对象移动1个步进,长按键时目标连续移动,通过反复调节,可获得准连续的仪器状态. 在调节仪器过程中,同样可调节摄像机位置,Unity3D支持预设多个摄像机,可在不同角度观察实验仪器,同时摄像机也可在场景中随物体移动,如分光仪标尺处可以常置摄像机,通过切换到此摄像机即可比较方便地读取数据.
1.2.3 数据处理和自动评阅
在实验结束后,进入数据处理环节,系统自动生成数据处理表格,需要实验者将数据处理结果输入并上传,由服务端计算数据处理的合理性,并给出实验得分.
仿真光学器件的原理主要包括光学表面的局部光栅化渲染模型,以及准实时烘培贴图的制作方法. 局部光栅化渲染模型主要涉及在光学表面难以适用光线追踪渲染的情况下,利用传统光栅化渲染的思路,在光学表面渲染出光照贴图的算法. 准实时烘培贴图是按照光学仪器的特性,将不同波长的光谱分别绘制在贴图上.
2.1.1 光学表面的局部光栅化渲染模型
光学仪器主要体现光的波动性质,表现为光的折射、衍射和干涉,由于光在这种情况下从摄像机到光源之间并不是1条直线,光线追踪渲染很难获得良好的效果. 因为摄像机必须在所有可见的光学平面上逐点计算光线的贡献值
其中,Ccamera代表渲染结果,积分项代表光学表面贡献值,Cscene代表环境光. 这在实时渲染中几乎是不可能的,因此需要比较巧妙的方法.
仿照传统光栅化的思路,渲染从光源开始,将场景光静态的烘培在观察者曲面上,形成观察者贴图[7]. 在光源不改变的情况下,此过程仅需要计算1次. 然后将可能实时移动位置的图像分层,在渲染时,实时算出图像各层相对于观察者的位置,将图像以一定的方式叠加输出,即可比较真实地模拟出光学仪器的动态实时效果.
对于分光仪来说,光通过准直光管照射到载物台的光学元件上,然后通过光学元件照射到观察者平面,建立以载物台为原心,入射方向为0°的极坐标系(φ,r,z),如图2所示.
图2 分光仪抽象俯视图
由于入射光为一道狭缝,因此z方向上可以近似看成各向同性,则观察者平面的亮度为
Ccamera=f(Clight,φ,r,θ)+Cscene
由于三棱镜有1个不透光的磨砂面,这时加上三棱镜的2个光学面都在预设光路上的限制条件,在真实环境下,若某个光谱的光路被三棱镜的磨砂面挡住,镜筒中自然不可能看到该光谱.
对于光栅来说,光学公式可以近似为标准差为准直管1/2狭缝宽度的高斯分布[8],即
f(Clight,φ,r,θ)=N(μ,σ2)Clight,
其中,k表示光栅衍射条纹级数,取值0,±1,…隐含限制条件为光路必须经过光栅,当不满足限制条件时,光不发生衍射,只会形成中央亮条纹,固定在φ=π的位置.
式中光谱位置是极坐标φ、波长λ和光学器件位置θ的函数,因此在烘培时需要将光谱中不同的部分进行分层,以便渲染时能够分别计算其中每个贴图对于φ的偏移量. 而对于极坐标系中r对贴图的影响,留待2.2中进行讨论.
2.1.2 准实时烘培贴图制作
当入射光线通过光学器件照射到观察者曲面上时,需要在φ=π的位置形成合成光谱,合成光谱贴图为32×32和有透明通道的png贴图,如图3所示.
图3 准实时谱线贴图
根据光源的性质,入射光线的光谱成分可以近似地分解为多条单色谱线,实验室常用光源谱线波长和近似颜色如表1所示,其中颜色基于1931CIE-XYZ色度图用RBG代码表示[9].
表1 钠灯汞灯常见谱线1931CIE-XYZ色度值
2.2.1 成像的合成与位移
渲染时,根据光学器件的位置和旋转情况,需要实时计算每条谱线在观察者平面上的位置{φ1,…,φn},并且根据引入光谱衰减参量,模拟光源的亮度变化. 由于分光仪的目镜是半径为R的圆形区域,那么观察者的观察范围可以写作(φ观察者-φ′,φ观察者+φ′).
每帧算出谱线相对于观察者的位置{φ1′,…,φn′},在其中选出绝对值小于φ的谱线参与渲染. 若第m条谱线参与渲染,则渲染贴图相对于中心点的位置xm=φmr观察者,根据相对位置将渲染结果乘以衰减参量叠加映射在Render Texture组件上. 由于渲染结果的变化只与光学器件位置θ、观察者位置φ和光谱衰减参量有关,因此,在这些值不改变的情况下,不需要实时刷新渲染结果,这样可以更加节省资源.
2.2.2 用加权高斯模糊模拟目镜调焦效果
分光仪的目镜实际效果类似于望远镜,调节目镜的焦距可以调节图像的清晰程度[10]. 为了模拟这一效果一般需要图像模糊算法进行屏幕效果后处理[11],引入改进的加权高斯模糊算法对图像进行进一步处理,假设图像的渲染结果都包含在每个像素的颜色中,那么图像的每个像素的颜色为
其中,i∈Pn,Pn为附近n个像素的任意集合,也就是说每个像素的颜色等于原像素与附近共n+1个元素的颜色加权平均,其中μ为模糊权值,可以代表图像的模糊程度. 当μ=0时,图像完全不模糊,当μ=1时达到最大模糊,因此在调节目镜焦距时,可调节的范围x是(-1,1),而μ=abs(x),这样当向某方向连续调节目镜焦距时,图像由模糊逐渐变得清晰再变得模糊,基本符合目镜调焦的效果形式. 为了获得更好的模糊效果,可以加大n的数值,从更多像素点进行采样,但是模糊需要逐帧逐像素计算最终的渲染效果,过大的n值会造成巨大的负担[12].
仿真实验室允许学生在移动端进行实验操作和演练,不受时空限制,节省实验室维护成本,是未来教育的发展方向. 对于网络教育来说,在线实验室提供了一种物理实验教学的解决方案[13]. 但是在具体应用环节还需要深入地研究和讨论,本文提出的间接渲染的思路可以用于大多数普通光学实验. 本仿真实验还有很大的不足之处,主要是对实验中用到的光学器件有限制,光学器件只能在一定范围内进行移动和旋转,当超出移动范围时,无法输出正确的结果. 在后续的改进中,需要进一步完善本仿真实验,为实验者提供更为优良的交互体验.