基于虚拟现实技术的导航网格寻路研究∗

2021-08-08 11:14胡广朋
计算机与数字工程 2021年7期
关键词:碰撞检测射线骨骼

李 丹 胡广朋

(江苏科技大学计算机学院 镇江212003)

1 引言

20世纪80年代初,“虚拟现实”的概念提出,即新型传感器与计算机图形处理技术相结合的一种创新的人机交互手段,它是综合应用驱动所涉及的多个学科的高新实用技术[1]。虚拟现实技术以其独特的沉浸感(immersion)、交互性(interaction)、和构想性(imagination)特征(简称3I特征)[2],服务于我们的生活、工作和学习中。

虚拟现实交互强调人与虚拟环境的互动,注重真实性、可观性、实用性及易操作性。随着图像处理技术和虚拟现实技术水平的提升,其应用范围不断的扩大与深化。由于二维场景在空间分析方面存在局限性,三维场景不仅能够解决二维场景缺乏垂直方向信息的问题,还能够模拟、表达、控制、分析与实体相关的信息。将虚拟现实与三维空间等技术相结合,可以模拟出校园场景,本文是对虚拟校园场景中的人物骨骼绑定、导航网格自动寻路技术、防碰撞检测及交互式漫游做出阐述。

2 绑定人物骨骼

2.1 人物骨骼的构建

给人物绑定骨架可以实现动画驱动,登录Mix⁃amo在线3D人物模型制作平台,找到人物模型入口,选择角色模型。点击较为满意的人物角色即可选中,若是想要更为贴合的人物角色可以采用Up⁃load Character来上传角色模型。使用Human绑定骨架,以上下肢、头部和胸部为主要节点,可以实现人物的动作控制。对人物进行骨骼绑定时有四个注意点:头颈连接部位,手肘部位,胯部,脚踝部位。

2.2 骨骼绑定

人物动画的实现建立在人物骨骼绑定的基础上,通过观察人物的行为动作方式将提高系统的视觉艺术效果。先将人物模型导入Blender软件中,从文件中安装Rigging:Rigify骨骼插件,全选人物后再选择骨骼,按下Ctrl和P键选择附带自动权重,在进入骨骼编辑模式后,开启x轴镜像实现水平方向的拖动复制,修改骨骼菜单栏显示为透视模式。判断重要关节点的大概位置,移动单个骨骼至对应位置,先选中该部位模型,再选择单个骨骼,按下Ctrl和P键绑定为骨骼。此时,进入姿态模式后移动骨骼,身体各部位会随着骨骼移动,人物骨骼绑定成功。

图1 角色脚本组件模型

3 防碰撞检测

在虚拟系统中,人与物都是相对独立的。在实现漫游等交互功能时,能够发现所有物体可以相互穿透,人物可以穿透墙体等物体,为了避免这种在现实生活中“非常规”现象的发生,需要为物体添加碰撞检测。

碰撞检测的过程分为两部分,一部分是是否产生碰撞,另一部分是是否产生碰撞效果。本系统采用正方体包围盒的方法解决碰撞问题,在需要添加碰撞的建筑下放置一个覆盖全部建筑的正方体,并将其网格渲染关闭,为移动人物添加刚体碰撞和网格碰撞(可以想象成一栋建筑被围住了,行人无法进入该建筑)。运行程序发现人物无法穿透墙体,但视景出现了严重倾斜。在视察面板下,将人物的X、Y和Z三轴旋转角度,全部约束后问题得以解决。人物角色可以顺利沿着墙体中间的过道行走,完全避免了“穿墙而过”事件的发生。

图2 碰撞检测

4 导航网格自动寻路

导航网格起源于21世纪初,一开始没有合适的寻径算法,直到A*算法的出现才缓解这一尴尬。A*算法需要用可遍历的数据结构来表示地图,在平面上设置多个路径节点,当场景需求的路径节点数量过大时,需要散布大量的路径点来实现丰富的移动效果。相较之下导航网格算法更加便捷高效。导航网格自动寻路算法是游戏引擎中实现物体动态自动寻路的一种技术,三要素是烘焙寻路网格、设置寻路导航组件以及设置目标点。场景中复杂的物体分布关系需要通过静态烘焙后转化为带有识别信息的网格,针对这些带有识别信息的网格做出一系列的算法实现自动寻路。给角色添加Nav Mesh Agent网格寻路组件并设置目标点,随后该角色可以自行寻找到目标点的最短路线。

如图3所示,带有识别信息的导航网格由多个任意凸边形构成,多个多边形的顶点存储次序为顺时顺序。黑线包围的区域表示为会发生碰撞检测的不可进入的区域(例如墙体、花坛等),灰色包围的区域表示为可以穿透或者进入的区域,可以将灰色线条看成是校园小径,灰色区域可以是操场,空地小花园等等。

本系统中的人物模型记为角色P0,P0处于区域A,发出射线记为n0,需要途径的区域记为B。防碰撞检测最先判断P0所在多边形区域的位置,再从所在区域中找到射线的穿出边和穿出点,即两线的交点,通过交点所处位置来判断得知P0处于位置是否可以穿入,即图例中穿出边的另一侧的多边形区域B是否可以进入。图3中射线n0从P0处发出数条射线(图中画出3条情况不一的射线用作说明),三条射线分别到达P点,S点以及G点。射线n0进行寻路检测发现P点为障碍点即不可穿越点,立马终止寻路,转换其他临近区域;S点及G点均在灰色区域边线上,经过S点可到达灰色区域内即当前线路可以通过;经过G点只能沿着灰色区域边线继续前进不在区域B内部,不符合此时寻路要求。

图3 网格导航寻路说明

综上所述:三线中P0S可前进且进入目标区域;P0P不可前进,立即终止进程;P0G可前进但是不符合要求,立即终止进程。人物模型P0若想继续前进,则继续利用射线n0在已在区域B中再次寻找穿出边和穿出点,重复前面的一系列步骤,直到找出符合要求的n0可途径的所有多边形、穿出边以及穿出点为止。

5 交互式漫游

Unity3D中有两种控制物体移动的方法,第一种是Transform类可以直接控制物体坐标的改变,第二种是Rigidbody类可以使物体在移动的同时,以一定方向发的缸体加速度加速移动,当停止前进时也将以一定加速度减缓移动速度。本文采用了缸体加速度控制人物移动的方法并利用坐标改变控制位置移动。在移动的初始和结束时,人物行走更加真实,在进行方向上的变化时的表现也更佳。

图4 刚体加速度速度控制流程

6 结语

虚拟现实技术是现在比较热门的话题,虽然现在虚拟技术广泛运用于各个领域,但还缺乏理论研究并且在应用中出现的问题层出不穷。本文是在利用虚拟现实技术搭建虚拟校园中需要运用到的相关软件、操作技术及出现的问题进行研究,希望能增加系统的灵活性和可利用性,希望能给后来者带来一点思路。本文中提到的问题均顺利解决。

猜你喜欢
碰撞检测射线骨骼
基于动力学补偿的机器人电机力矩误差碰撞检测
全新预测碰撞检测系统
多维空间及多维射线坐标系设想
基于Virtools的虚拟灭火系统碰撞检测设计与实现
3D打印骨骼指日可待
基于Unity 3D的虚拟楼盘漫游和碰撞检测研究
话说线段、射线、直线
骨骼是如何生长的
神奇的骨骼
与线亲密接触