苏静 龚翱 杨赳赳 陈泽强
关键词:虚拟现实;解剖学;神经通路;仿真教学;Unity
中图分类号:TP399 文献标识码:A
文章编号:1009-3044(2023)21-0015-03
1 概述
1.1 背景与意义
在传统人体运动解剖教学中,教师一般通过图片、模型或视频展示,方法单一也不够直观,且缺乏灵活性,还不能够交互[1-2];而实验设施方面也受到标本资源、相关设施缺乏等因素的影响;使学生积极性和主动性较低,导致学习效果欠佳[3-4]。因此引入基于Unity 3D的神经传导学习系统,提供可视化的实验教学平台,优化教学设计以适应教学需求,能够极大地激发学生学习解剖的信心和兴趣。系统紧扣教材,能够将教学中的复杂过程简单化、抽象概念具体化、平面结构立体化,开启虚实结合、软件辅助的数字化解剖教学新模式;解决传统教学模式的短板,增强了交互性,极大地提高了教学效率,给学生带来一种舒适、高效的实验环境,推进数字解剖系统与传统教学相结合,必将引领医学教育领域产生新的变革。
2 神经通路教学演示中的相关技术
2.1 交互式动画
Unity内部自带动画制作功能TimeLine,为医学解剖学提高了更多的可操作性。对于复杂的操作,可使用录制动画的方式,对解剖的操作,身体器官的变化,物体的改变等,做出了更加细腻的操作。TimeLine是一套多轨道动画系统,支持可视化编辑,预览动画,实时操作等,可以实现动作或行为演示的功能,实现电影级演示,将各种行为转变成完整流程,然后将全过程展示在使用者眼前,达到解剖学教学所需要的效果。
2.2 三维场景仿真
多角度观察:实现摄像机的多角度旋转是对于三维场景的视角仿真,对于摄像机的三维轴进行控制,增加多角度的觀察下对场景中细节的展示有更加具体的视觉印象。
动画控制技术:Unity内部附带动画控制系统,对动画系统内部功能进行开放使用,动画片段中参数有播放时间,播放速度,播放位置,动画内部实体,通过对动画片段内参数的控制,使得对每个场景动画内细节的观察更加细致,让学生有更多的印象,亦可反复观察。
多系统选择:多个场景聚合为对应系统内的部分,使得抽象的系统拥有实际存在的场景,达到系统的实例化,使系统灵活变化,具有延展性,可操作性。
2.3 文本与系统分离
JSON文本具有特殊格式,Unity内部有与JSON文本对接的API,对接后可在外部编辑JSON文本对系统内部各类命名物件进行更改。JSON文本编辑更改具有灵活性,可操作性,可拓展性,便利的命名,完全独立于编辑语言的文本格式,通过更改文本内容,使得使用JSON文本的内容进行动态更改,独立于内容。
3 系统实现
3.1 观察视角控制
为了能够从任意视角清楚地观察到场景中每一个物体的细节,系统设计了视角控制,通过旋转摄像机父物体的Y值来改变相机的左右方向改变,通过改变相机的Y轴的位置来改变相机的上下位置实现相机的旋转和视角改变,分为3D视角的旋转和2D视角的平移,同时也可调整摄像机的旋转是否反向旋转。
//通过控制x,y 轴的旋转来控制摄像机的方向
x = Mathf.Clamp(transform.localPosition.x+DRight*Time.deltaTime,-MaxXOffset,MaxXOffset);
y= Mathf.Clamp(transform.localPosition.y + DUp *Time.deltaTime,-MaxYOffset,MaxYOffset);
transform.localPosition = new Vector3(x,y,transform.localPosition.z);
3.2 场景切换以及GUI管理
控制场景的切换以及各种按钮事件的触发是使用的设计模式中的单例模式[5]制作,在各个场景中保持唯一,在第一场景创建,在其他场景内保持单例,使其与上一场景保持一致。并且可以在其他场景更改该脚本内部的值,在手动切换场景的时候取消全局播放,并且可继承到其他场景使用原有值,并使用策略模式在切换场景函数内选择切换的场景,达到场景的前后切换以及主菜单的返回。
3.3 文本分离系统控制场景内容显示
通过JSON文本的特殊书写方式来控制所需要的文本内容,防止更改代码,满足设计模式的开放原则,以数字表示出所需要的文本内容,并且可以筛选出所需要的文本内容。在项目中,该JSON文本控制眼球处各个组织的名字的输入,可进行更加方便的更改,只需在JSON文本中添加相应组织的名字,然后在项目窗口添加箭头和UI文本, UI文本则会按照顺序寻找所属组织的名字并赋值。
3.4 场景播放设置
场景初始化时创建guiManager单例类,内部赋值一个参数控制各个场景内的播放,以及暂停的判断参数。场景内状态发生变化时改变单例类内的参数,并可在下一场景内使用相同值的参数。对于场景的播放模式,有单场景循环播放,和多场景的顺序播放,以及循环播放时场景复原。代码通过判断当前场景所在的位置以及是否在单场景循环模式下,如果是单循环模式下guiManager的isPlay参数为True,则会在播放结束时恢复场景并循环播放。
场景内动画的播放与暂停,如果不是单场景播放便会在播放结束后跳转至下一场景,并播放下一场景动画直至整个系统播放结束。
if (!guiManager.Instance.pauseOrStart) {//单例类中的控制动画播放的参数
pd.Play();//如果单例类中参数允许播放,便会播放加入脚本内的剧本
}
else {
pd.Pause();//如果参数为否,则代表按下了空格键暂停,此时剧本同样暂停
}
通过导演剧本控制实现场景内光线,声波,电信号等的移动和转化,例如在视觉传导通路中,光线首先经过眼球时,通过角膜、房水、晶状体,玻璃体部位折光,投射到视网膜上,然后进入视网膜后四层细胞,视网膜上的视锥细胞和视杆细胞把光信号转换为电信号,传给视网膜上的双极细胞,再传给节细胞,节细胞的神经纤维汇集在一起,穿出眼球,形成視神经。听觉神经通路系统内则依次通过外耳道、鼓膜、耳蜗,声音在鼓膜转换成振动,振动在耳蜗转换成神经冲动,经由听觉神经传导到大脑听觉中枢,再由脊髓传到肌肉,最后引起人体反应的演示。这些都是由导演控制剧本来完成演示的,其中包括切换到下一场景剧本,以及剧本的播放和局部暂停。
各类系统中具有相应的场景,在顺序排序的场景中划分场景给对应的系统,通过公式:
Current = End – Start + 1
Index = Order – Start + 1
其中,Current 是当前系统的总场景数,End是设置的结束场景位置,Start 是设置的开始场景,index 是当前处于该系统的场景位置,Order 是该场景的顺序位置。update中进行全局和单场景的判断,各类参数在GUIManager内的变化,以及按键的触发判断。
3.5 信号传递的录制
通过PlayableDirector录制相关信息传递,如视觉传导中,光信号的传导以及光电信号转变及传递[6]。在PlayableDirector中逐帧对所需的信号传递的位置,如何转变,以及是否还存在进行设定,然后通过场景播放中的代码进行相应的播放和暂停提供相应的剧本,在视觉传导的第五场景中,左下角的小窗口演示也是有剧本来控制第二摄像头的移动达到同步播放左边各个器官内信号传导路线的放大。
4 使用结果与分析
测试环境:CPU Intel i7-4790,3.60GHz主频,内存16G,显卡GTX1080,操作系统:Windows 10。
4.1 测试结果
选择场景进入神经模拟系统,通过右上角的“上一个”和“下一个”调节场景的转换及“返回界面”来返回主界面。“开始播放”按钮可以控制神经模拟系统演示的播放,在不同的场景点击“开始播放”会产生相应演示结果。例如在第一场景点击“开始播放”将会进行全局播放,播放到最后一个场景,其间不会进行场景循环,在除了第一个场景下点击播放按钮,将会进行单场景循环播放。此外,按空格键也可以暂停神经通路演示,再次点击继续播放。左上角标注有场景序号,方便用户的使用。序号下是对此场景的说明,为了不遮挡神经通路的演示,场景说明可折叠或展开所有场景说明,通过长按鼠标右键移动转换视角。结果如图2所示。
4.2 性能分析
在使用时,场景正常播放,前后场景切换流畅,视角正常转换,在该测试环境的配置下,正常运行,无闪退,反应迟缓等现象。使用时掉帧少只有在操作瞬间发生帧率变化,如图3所示。
5 结束语
本文研究并实现了基于Unity3D的神经通路传导系统,从视觉、听觉、触觉和本体感觉四个方面进行开发。系统实现了在神经通路传导方面课程的虚拟化教学,解决了传统教学演示的短板,增强了交互性,极大地提高了教学效率,使教师在教学过程中具有更高的灵活性,也能够给学生带来一种高效、趣味的实验环境,推进数字解剖系统与传统教学相结合,将引领医学教育领域产生新的变革。