文章介绍了virtools下快速开发场景漫游,通过轻松简单的方式实现第一人称、第三人称漫游模式制作及切换,并解决人物穿越3D模型的问题,为非计算机类人员提供成熟便捷的虚拟仿真解决方案。
在众多的虚拟仿真系统中,煤矿生产环境、龙卷风现场等很多高危场景、现实很难动态再现场景需要虚拟仿真,而在虚拟仿真环境制作中,最主要的是角色控制及视角控制技术。
那么如何通过Virtools的模组开发一个简单的虚拟仿真系统,笔者将通过角色控制技术、摄像机控制技术、碰撞检测技术来具体介绍基于virtools的虚拟仿真场景展示的关键技术。
1 虚拟仿真系统中的控制角色技术
虚拟仿真系统中的控制角色技术,最常用的通过游戏控制杆、键盘、鼠标等输入接口设备控制角色的运动,在Virtools中提供已经封装好的两个模组分别是:Character Controller模组和Unlimited Controller模组。
1.1 使用Character Controller设置角色动作
将角色Eva放入场景,将制作好的Characters/Animations/Skin Character Animations/Eva/的Run、Wait、Walk等动画拖动放到角色身上,即添加好了角色的运动动画。如图1所示。
左键单击Building Blocks/Characters/Movement/Character Controller模组拖到Eva角色模型上,在弹出的设置框中,分别指定Stand Animation(站立动画)为wait、Walk Animation(前走动画))为walk、Walk Backward Animation(后退动画))为walk Bckwd和Run Animation(跑动动画))为run。如图2所示。
Virtools中默认的角色控制是使用游戏控制杆,通过以上设置即可实现通过游戏控制杆控制游戏角色的运动。
如果需要用键盘控制需要Keyboard Mapper模组进行键盘按键映射,实现从键盘事件到游戏控制杆的映射。
左键单击Building Blocks/Controllers/Keyboard/Keyboard Mapper模组拖到场景的角色模型上,在弹出的设置框依次添加key为A、D、S、W,Message下拉框分别选择Joy_Left、Joy_Right、Joy_Down、Joy_Up。如图3所示。
设置完毕两个模组后,将Eva连线到模块的on输入口,完成的整个程序如图4所示。
1.2 使用Unlimited Controller设置角色动作
Character Controller中只能设置常见的角色运动动作,而Unlimited Controller模组允许给角色加上多种复杂动作。例如:虚拟仿真中的角色维修机械动作、机器人的机械臂复杂操作动作作等。
将Building Blocks/Characters/Movement/Unlimited Controller模组添加到角色模型上,在弹出的设置框中,添加角色的动作动画,每个动作对应一种Message。运行机制是当角色接收到某种Message时就会进行对应的动作。如图5所示。
Unlimited Controller模组和Character Controller模组都是Virtools提供控制角色的模组,两个模组默认都是游戏控制杆控制模式,仍然需要按上面步骤添加Keyboard Mapper才能将事件映射为键盘控制。
当然也可以通过Virtools的机制将鼠标事件、按钮事件通过Message发送给角色,实现鼠标按钮的事件执行角色动作,再这里笔者就不介绍了。
2 虚拟仿真系统中摄像机控制技术
虚拟仿真系统中摄像机控制技术,主要是通过3D Transformations下的两个BB模块的配合,实现第一人称视角与第三人称视角及相互切换功能。
2.1 第三人称漫游模式
选择合适角度新建一个摄像机,在摄像机上创建Script,按Ctrl单击输入新建BB模块Keep At ConstantDistance和look At两个模组并连线如图6所示。
其中Keep At ConstantDistance模组的功能是让摄像机始终保持在角色后方某个特定位置,Look At模组的功能是让摄像机始终正对角色,通过两个模块的参数设置及可以实现摄像机始终跟随在角色后上方,始终面向角色后背影,实现第三人称视角。具体参数设置如图7所示。
2.2 第一人称漫游模式
第一人称漫游模式是第一视角的漫游,可以将第三人称的摄像机镶嵌在角色的正前脑门上即可。也可以隐藏人物模型,充当第一人称漫游模式。
本案例笔者通过在主场景添加模组Switch On Key模组,设置F2和F3分别执行Hide角色和Show角色来实现第一人称模式和第三人称模式及切换。Virtools连线如图8所示。
3 虚拟场景展示
在虚拟场景展示中,经常会出现角色融合到了物体中,所以碰撞检测技术可以让人物始终保持在可以浏览的场景中,避免出现穿墙等现象。Virtools碰撞检测技术主要有Prevent Collision、Layer Slider、Object Slider三个BB模块。
本案例笔者采用Object Slider模组,用物体组的模式快速灵活实现角色与物体组合的碰撞检测。
首先新建一个Group命名为collsion,在场景中选择不能让穿越的物体,右键Send To Group选择collsion。将Collisions/3D Entity/Object Slider模组添加的角色身上,在弹出对话框设置Radius为0.4,group为collsion,也就是我们之前新建的存放物体的group。
在案例完善过程中,新增加的非穿越物体,右键发送到collsion组合即可;可以穿越的物体,移除出collsion组合即可。
作者:张俏 焦战 来源:无线互联科技 2015年3期