← ALL ARTICLES
游戏AI8 MIN READ

导航目标投影

全库目录221
本文目录6

守卫半径为0.4米,靠近掩体或交互槽时,需要寻找身体、朝向、视线与接触均可成立的站位。本文从目标数据推到合法位置集合,通过连续区域与球探头数例说明合法姿态的验证。可行走表面由NavMesh提供,合法目标交给导航动作交接。

交互目标与导航投影

守卫寻找掩体或靠近座位时,目标包含“到哪个位置完成什么交互”。目标记录保存对象实例、资产与变换版本、交互槽ID、角色体型、允许站位及朝向、楼层或支撑面标识、接近侧,以及水平和垂直投影容差。资产为每个离散交互槽提供一个或多个站位,区域交互则提供由凸多边形组成的允许站位区。站位以支撑面的脚点计,胶囊中心由脚点与角色体型导出;视点、手部和交互触点另有偏移,不能把桌面触点直接当成寻路终点。

固定目标保存采用时的变换版本。连续移动目标则保存参考对象、局部槽与几何版本,并单独读取参考系运动记录;跟随时按当前运动计算站位、朝向和触点,重新检查支撑及可达性。运动预测更新会废弃本步速度候选,目标替换、传送及槽修改使原请求失效。查询快照中的目标世界位置只描述查询时刻,不能作为移动目标后续每一步的固定终点。

所有目标先按完整变换换到世界空间,容差使用世界米。固定站位p寻找导航候选q时,只查询指定支撑层和接近侧内的多边形,再求其最近点;要求水平距离不超过δh、高差不超过δv。多个候选按距离和稳定多边形ID排序,保留各自身份。最近点通过只是投影候选,还要检查身体净空、目标朝向下的姿态、交互距离及交互射线。位置容差定义可接受的偏移,投影接口不能自行扩大它。

最近点姿态失败时,容差范围内的其他点仍可能有效。允许连续偏移的槽将水平容差圆、高度区间与原站位限制共同作为目标区域,继续检查剩余部分;最近点失败不能直接淘汰整个槽。只允许精确离散姿态的槽则逐个验证登记的站位。两种目标把可接受的位置集合写入契约,搜索不会悄悄扩大或缩小它。

姿态检查把脚点q和候选朝向带入角色体型,构造实际胶囊及视点或手部位置s。触点为t,距离规则比较|t-s|与交互上下限,朝向规则比较水平单位前向f与水平目标方向的点积是否至少为cos(maxAngle);方向长度近零时按该交互槽的原地朝向规则处理。视线从s到触点t,最近命中必须是允许的交互目标。实体探头另按自身形状求中心终点与完整扫掠,表面触点不能直接作为有体积探头的中心位置;其他遮挡使候选失败。身体净空与交互扫掠分别检查,脚点可走不代表手能穿过桌板。姿态通过的点才加入寻路终点集合;到达后按实际姿态重验同一组条件。

例如墙沿X=0,座位要求从X>0侧接近,站位p的X为0.2米,角色半径0.4米。指定侧的身体中心至少到X=0.4米,偏移0.2米;δh=0.1米时这个槽无合法投影。墙另一侧即使有更近的导航面也被接近侧拒绝,楼上相同水平位置被支撑层拒绝。δh=0.25米时q可进入下一步,但仍须检查从q能否在规定距离和朝向完成交互。允许连续偏移就继续检查该区域,其余离散站位也分别尝试,失败报告区分完整排除与有限候选耗尽。

区域目标先将允许站位多边形与同层、同侧的导航多边形求交:对凸多边形逐边裁剪,保留半平面内的顶点并在穿越边处插入交点,空结果淘汰。与投影容差圆求交时保留边圆交点及满足限制的圆弧,不能把圆替换成更大的方框。再按高度和交互限制划分有效区域,搜索可到达的目标区域,不能只投影区域中心。可见性在平面静态案例中由障碍向交互点形成的遮挡边界切分;每片内保留可见部分。复杂三维姿态由姿态验证器返回可用区域或经验证的有限站位集及其覆盖范围;只有取得一个完整验证的可达姿态才报告成功,有限采样耗尽记录候选耗尽,不能宣称整个连续区域均不可达。

起点投影也有边界:使用控制器当前支撑层、实际脚点和有限纠偏距离,越界或在空中就进入重新落地或网格外动作恢复。投影只产生导航坐标,不改变世界实际位置。实际脚点到候选起点的接入段要经身体扫掠,不能隔墙跳到最近多边形。搜索结果保存原目标、候选站位、投影距离、支撑面与目标版本,姿态和射线检查还登记遮挡查询覆盖区的集合版本,新增障碍也会使候选失效。消费者据此区分“到达合法交互站位”和“到达一个附近可走点”。

连续区域的数值推演

把座位槽的允许脚点区变到世界水平面,得到R=[0.65,1]×[-0.6,0.6],坐标依次为X、Z,单位为米,地面高度为0。该层可用导航多边形为N=[0.6,0.9]×[-0.7,0.7],已经按0.4米身体半径侵蚀。矩形求交时,每条轴分别取下界最大值与上界最小值,得到R∩N=[0.65,0.9]×[-0.6,0.6]。原推荐脚点p=(0.65,0)就在其中,暂时无需位置纠偏。

触点t=(0,1.2,0),候选脚点(x,z)对应的手部探头位置s=(x,1.2,z)。本槽允许交互距离[0.4,1]米,期望水平朝向f=(-1,0),最大偏角40°。因此距离留下0.16<=x²+z²<=1,朝向留下|z|<=x*tan(40°)。由于x至少0.65,下限0.16已自动满足;上限圆和朝向楔形仍参与裁剪。这个槽采用直线伸出交互探头的姿态:角色保持朝向f,探头在身体轴线上抬升后向目标表面伸出;视线指向触点t,探头中心终点由接触几何求出。体型配置与实际扫掠在后面一并计算。

触点前有一块位于X=0.2、Z覆盖[-0.1,0.1]的竖直挡板,高度覆盖交互射线。遮挡规则增加0.02米余量,检查区间成为[-0.12,0.12]。从t到s的线段在X=0.2处,Z为0.2*z/x,所以遮挡条件是|z|<=0.6*x,可见条件是|z|>0.6*x。挡板距脚点区至少0.45米,大于身体半径0.4米,身体可站立与交互射线被遮挡可以同时成立。p的z为0,因此它虽然投影成功,仍不能完成交互。

把全部条件相交,得到上下两个目标分片。上片C+满足0.65<=x<=0.9以及0.6*x<z<=min(0.6,x*tan(40°),sqrt(1-x²));下片C-关于Z=0对称。上片非空还要求x<1/sqrt(1.36)≈0.8575,这是可见性下界与距离圆相交的结果。实现保存边界半平面、圆弧及严格遮挡边的容差规则,空分片从目标列表删除,不能只保留原矩形中心。

在C+内取一个确定候选:固定X=0.75时,Z区间为(0.45,0.6],取中点得到q=(0.75,0.525)。它的交互距离为sqrt(0.838125)≈0.9155米,朝向点积为0.75/0.9155≈0.8192,大于cos(40°)≈0.7660;射线穿过X=0.2时Z=0.14,大于余量后的0.12。q先通过这些平面条件,再进入下面的体积与运动检查。选择其他X切片时也按该切片的非空区间产生候选;切片采样未覆盖的部分继续保留,候选耗尽与完整区域排除分别返回。

这个数例的身体胶囊半径0.4米、总高1.8米,轴线从脚点上方0.4米到1.4米。地面Y=0,天花板Y=2.2,挡板是X=0.2、Z在[-0.1,0.1]、Y在[0,1.6]的薄矩形,其他身体障碍为空。q处轴线到挡板所在平面的距离0.55米,大于半径0.4;胶囊顶部1.8米距天花板0.4米,底部接触允许的支撑地面。保持该胶囊绕竖直轴转到f时形状不变,朝向变化不会引入额外身体穿插。

目标是X<=0一侧的实体表面,触点t=(0,1.2,0),朝角色的单位法线n=(1,0,0)。允许接触片在X=0上,Y范围[1.1,1.3]、Z范围[-0.05,0.05]。半径rProbe的球形探头接触这片平面时,球心终点为c=t+rProbe*n,球面接触点才是t。曲面或边角则按球与目标实际形状求首次接触及法线,再核对接触是否落在允许片内,不能直接套用平面偏移。

取rProbe=0.01米,c=(0.01,1.2,0)。探头先从(q.x,1.0,q.z)竖直抬到s,再沿s到c伸出,中心最大伸出长度为1米。抬升段距挡板平面0.55米,且距地面和天花板均大于探头半径。伸出中心线长sqrt(0.74²+0.525²)≈0.90732米,满足行程限制;前面的0.9155米仍是s到触点的交互距离。

中心线在水平面为Z=m*(X-0.01),其中m=0.525/0.74≈0.70946。挡板最近角(0.2,0.1)到该线段的距离为(m*0.19-0.1)/sqrt(1+m²)≈0.02838米,垂足在线段内,且高度1.2落在挡板高度区间。因此完整球扫掠与挡板分离。0.02米的Z余量用于前面的视线门禁,实体扫掠使用这里的实际距离;两项都成立才允许采用。

对目标表面,中心从X=0.75单调降到0.01,球的最小X始终非负,只在末端以球面接触t。执行器保存目标对象与碰撞形状版本、允许片、t、n、c和探头半径;实际首次命中须属于该目标及允许片,接触点误差不超过0.002米,穿入深度不超过本槽0.0005米的碰撞容差。提前撞到其他表面、目标法线改变或接触片失效均返回具体失败。探头自身胶囊按配置排除自碰撞,目标实体仍参与扫掠,不能通过过滤目标来制造成功。回收沿c到s,再降低到初始高度;同一静态快照下复用相同扫掠体,执行中目标或障碍变化则重新核验。

身体、朝向、视线、探头行程、避障和目标接触至此都有具体输入和结果,q才进入已验证姿态集合。若探头半径改为0.04米,终点也必须改为(0.04,1.2,0),重新计算到挡板的最近距离约0.01472米,小于0.04,完整扫掠失败。原视线可见仍不能授权这个姿态,区域搜索继续检查其他候选。

守卫实际起点S=(0.8,0.7)在N内,S到q的线段为(0.8-0.05*t,0.7-0.175*t),0<=t<=1,全段均在凸多边形N内。搜索可返回该多边形走廊和q,跟随器按速度表从实际起点出发并停在q,再检查实际姿态。采用记录保存槽ID、C+分片ID、目标区域哈希、q、朝向、支撑层、走廊及完整读集;C-仍是另一个可选终点分片,不能由它覆盖C+的采用记录。若当前区域无法连接到C+,搜索还需检查其他合法分片。

将挡板实际半宽改为0.18米,加入相同余量后为0.2米。可见条件变为|z|>x,与朝向要求|z|<=x*tan(40°)矛盾,因为tan(40°)<1且x>0。两片均为空,可明确报告该槽在这些条件下无合法区域。若挡板是在采用后变化,先由遮挡区域版本使旧候选失效,再计算这个失败结果;原q和原路线都不能作为交互成功依据。

验证方法

重算连续区域C+、C-的距离与朝向边界,检查0.01米球探头的完整中心线。将探头增至0.04米或挡板半宽改为0.18米,分别确认体积扫掠失败和合法区域为空;两类失败单独记录。

实现与证据

目标区域、视线与球探头按正文几何关系手工推演。0.01米探头可通过,0.04米探头改变中心终点后失败;尚未运行导航投影或身体扫掠宿主。

相关主题

参考资料

本文的几何、运动与宿主协议按所列公式和数例定义;整体来源与关联机制见游戏AI导航。