顽皮狗团队GDC分享:《TLOU2》战斗AI、流体系统如何做的?
【GameLook专稿,转载请注明出处】
GameLook报道/《THE LAST OF US PART2》(下简称TLOU2)讲述了在因丧尸病毒而崩坏的人类社会中,女主角艾莉从受人保护的少女化身为一心复仇的战士的故事。作为PS4的独占作品,2020年度,游戏收获了400万套销量,吸引了海量玩家。
本作中,每一个搏斗场面都描写得非常到位、残酷。挥舞匕首切开敌人,或被敌人砸扁自己的头……顽皮狗的游戏程序员Min-Lun Chou在GDC2021上进行了了名为“《TLOU2》中的近战AI”的演讲,讲述了本作的近身战斗与AI控制。而图形渲染程序员Artem Kovalovs带来了题为“《TLOU2》如何使用屏幕空间技术强化粒子模拟效果”的演讲,讲解了在静态或动态对象上模拟液体效果的技术。
控制近身战斗的AI系统概要
Chou说,《TLOU2》的战斗系统是在《神秘海域4:盗贼末路》基础上改进的。《神海4》中,敌人的“攻击预警”非常短,即敌人开始行动到给予玩家伤害的间隙很短暂,敌人的攻击几乎百发百中。玩家想要避免受伤,就必须先攻击敌人来打断他们的攻击。
而《TLOU2》中增长了“攻击预警(Attack Tells)”的时间,从外行的观点来看,游戏好像是更简单了,但是这并不代表在战斗中反复按几次攻击键就可以解决战斗,反而要求近身战斗需要更熟练的技巧,把近战的价值提升到了与枪战相同的水平,令玩家满意。
从编程的角度来看,战斗由“近战攻击(Melee Attack)”与“近战移动(Melee Moves)”这两部分数据组成,也就是选择近战动作、进行攻击,移动到攻击位置前的数据。程序员首先设定当NPC处于“正在进行其他动作”、“不在近战攻击范围”等条件不足的状态时,不会触发近战动作。
设定完近战动作的触发条件之后,控制NPC行动、判断触发条件的AI代码“近战行为(Melee Behaviors)”就会做出反应。所谓“近战行为”,是比“近战攻击”更高一层的概念,当各个NPC做出近战行动时,他们的行动模式会根据角色类型、环境场景而改变,生成各自的攻击指令表,决定他们的攻击行为。
另外,程序还会判断NPC是否应该接近玩家进行近战攻击,或是保持在一定距离范围之外,还有NPC是跑是走,加不加入战斗等。
在游戏关卡中,程序设置了许多个名为“Strafe Sots”的座标点,这些座标点设置在开阔场景,以玩家为中心的16条延伸线上,NPC会自动进入这些线条的空隙中。当延伸线与NPC之间有障碍物时,游戏采取的寻路逻辑是追踪那些被障碍物挡住的延伸线,改变NPC位置,避开它们。走到这些座标点的NPC会发起既定的动作,程序会自行调整这些座标点,不让散落在地图上的各种物体妨碍他们行动。
在民居场景中,由于房子有房檐、四周有墙壁与栅栏等障碍物,这一过程会变得更加复杂。根据环境,游戏设计了高位与低位的近战攻击动作。比如说,玩家如果在高度及腰的栅栏受到高位攻击,角色身体会向后仰,做出快要摔落的动作,极富紧张感。
以上是《TLOU2》关于近身战斗与AI控制部分的演讲。接下来,是图形渲染程序员Artem Kovalovs就水滴与流血效果进行的演讲,他负责为富含紧张感的战斗进行视觉效果的补充。
表现水滴与流血效果的“液体·丝带·模拟(Liquid·Ribbon·Simulation)”
游戏背景设定在西雅图近郊,那里每年有一半的时间是雨季,因此游戏中对于水面和雨水的表现非常讲究。
Kovalovs从雨水溅射开始讲起,在传统的开发方式中,开发者需要将生成2D粒子的发射体配置到水面、汽车引擎盖等对象上,这是一个非常费时的过程。在本作中,团队使用了显示Depth-Buffer、G-Buffer、Motion Vector、物体ID这些信息的屏幕空间技术。
屏幕空间,正如其字面意思,指的是显示器画面,是被2D像素点所“限制”的空间。比如说,雨滴在汽车上溅射时,如果角色进入了汽车与镜头之间,溅射的像素效果会与角色重叠,出现“Ghost”线上。《TLOU2》中,通过追踪2D Sprite位置的机制,不仅解决了雨水在地图中静态物品上的溅射效果,也解决了其在动态的角色上的溅射效果。
水滴流下的“滴落效果”是一种由GPU控制的粒子效果,而团队通过横向连接多个构成带状的粒子条,将它们做成丝带型,让它们配合具体的场景,在一个较短的周期中循环出现,模拟水滴掉落,这就是“液体丝带模拟”。
“液体丝带模拟”并不能模拟出水滴实际掉落的效果,这部分需要用其他GPU粒子呈现。通过使用屏幕空间技术,即使在角色移动过程中,液体丝带也能够先附着在一些大件的物体(衣服、皮肤、头发、背包等)一段时间后才被切断,并朝镜头方向下坠。
除了雨水,团队也在刀伤、枪伤导致的流血效果上使用了液体丝带技术。在模拟雨水时,粒子从出现到消失只有短短几瞬,所以可以使用屏幕空间技术。但是关于角色脸颊等部位受伤的流血效果,需要长期表现,如此一来,在玩家切换视角后的第一时间就很难追踪追踪2D Sprite的位置。所以也没办法让粒子附着在某个物体上。
因此,团队决定是用UV贴图来解决这一问题,渲染生成伤口的Sprite,使用ID Buffer决定它在哪个三角面,以实现长期表现角色伤口流血的效果。在模拟血液的滴落时,团队采用了与水滴相同的生成和滴落技术。
Kovalovs最后说,“希望这一技术不止用在水滴和流血效果上,也能用于各种各样其他的特效。”
如若转载,请注明出处:http://www.gamelook.com.cn/2021/08/449210