战斗设计基础—《黑神话:悟空》逐帧讲解

本文以《黑神话:悟空》为例 , 逐帧讲解一些基础层面的、实现方面的东西 。
前言:由于本人不熟悉UE4 , 很多东西都是从Unity的角度出发 , 所以放在UE4上不一定对 。 视频内容反映出的东西不多 , 所以可能有些实现方法是错误的 。
【00:00:20.03】视频最开始的时候 , 可以看到墙面上的影子浮动
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

说明照出这个影子的光源是个烛火 , 火光用的是PointLight(点光源) , 仔细观察可以看到烛光有一个微小的明暗变化 , 这里是给点光源强度做了一个随机 , 范围很小
影子在动 , 说明这里有风 , 用的是Windzone(区域风)
风吹烛火的效果 , 实现方法跟“风吹草动”的实现方法类似 , 一般是Time+sin+cos , 再加个位移频率 。
【00:00:27.09】这里有一个下雪场景
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

仔细观察雪花 , 可以发现雪花在下落的过程中会逐渐消失 , 这里可能用到了UE4里的“粒子动态模糊” , 配合一个区域风 , 雪花落在表面上 , 目测是没有一个形成积雪的效果 , 所以这里应该是加了一个actorDestroy , 用于雪花碰撞销毁 , 并且设定了一个销毁的随机高度 。
讲真 , 由于雪花落在地面上逐渐形成积雪的效果 , 需要不断的合并和删除雪花的“载体网格” , 消耗比较大 , 所以很少有人会做真实积雪 。 大家如果有其他形成积雪的方法 , 欢迎交流
如果是一个关卡场景的话 , 也可能把雪花直接做成了几个区域特效 , 特效放在固定位置循环播放 , 这样最省事 。
这里还有一个迷雾的效果 , 雾在微微的不规则动 , 猜测是用shader模拟了“高度雾” , “远近雾” , 这样做可以省性能 , 缺点就是每个“雾”体都得用 , 然后按个设定数值 , 需要美术花时间调整 。
【00:00:42.08】可以看到竹林在随着风动 , 竹叶也随着风飘落
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

但是地上的草没受到风的影响 , 右边的草一动不动 , 中间的草自己动自己的不受风向控制 , 说明中间的“草随风动”效果是通过“材质”方法处理的 , 右边的草没处理所以没动 。
【00:00:55.08】可以看到这里有一个光源从上往下打出来
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

锥形的光源 , 实现方法是光源透过一个孔洞设下来 , 这种方法可以使光的形状可以随意变换 。 光越往下边越模糊 , 通过设定光强实现 。
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

注意画面中石像的部分 , 如果光是往下呈一个圆锥状照射到石像上的话 , 那么这里的石像不会只被照亮一个顶部 , 石像下边也会被光照亮 , 这里小概率是用若反光材质处理了石像下半部分 , 大概率是用一个单独的点光源照射石像 。
【00:00:55.08】老头子脑袋的影子 , 从屏幕方向照在了肩膀上 , 说明这个视角下 , 还有一个PointLight(点光源)是从屏幕斜着打过去的 。
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

【00:01:34.01】金蝉进入镜头 , 仔细观察镜头的跟随效果 , 就像平时你看蚊子飞 , 蚊子飞的很快 , 你的眼睛追着蚊子飞行路径的感觉 , 这里是用到了摄像机的“延迟旋转”功能 。 这个功能在飞行游戏里比较常用 , 比如《战机世界》 。 “延迟旋转”效果随着摄像机的拉近 , 逐渐变慢 。 瞎猜的 , 不一定对 。
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

有一个细节 , 就是实际游戏中 , 金蝉是不可能贴地飞行的 , 也是不可能落地的 。 他只可能在一定高度范围内飞行 , 而且小概率情况下 , 飞的时候你最多只能控制方向 , 其他啥也不能做 。 大概率是行进路线固定 , 不能操控 。
【00:01:41.06】观察屏幕左上角的树 , 有一次非常明显的材质清晰度切换 , 植被从模糊突然变得清晰 , 说明这里用了lod层级进行处理 , 而且层级之间差距拉得相对比较大 , 推测性能上还是需要进行很大的优化 。
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

【00:01:45.10】一只狼人怪举着火把走了过来 , 火焰把狼人的脸照的跟猴屁股似的 , 同时火焰往位移反方向飘动 , 狼人脸上的光并没有随着火焰形态变化 , 说明这里是加了单一的PointLight(点光源)和火焰特效“粒子跟随” 。 狼人及后边几只怪物是按固定路线自动行进 , 动作固定 。
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

【战斗设计基础—《黑神话:悟空》逐帧讲解】【00:01:45.01】小怪开始说话 , 声音大小随着距离变化 , 这里用到了SpatialBlend , 数值=1 , 是3D声效果 , 让声音近大远小 。
【00:01:49.02】金蝉拐弯的时候 , 模型做了一个倾斜 , 摄像机做了一个“延迟旋转” , 整个身体也是反向屏幕做了一个倾斜 , 这是一个比较细节的设定 。
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

【00:02:12.02】金蝉遇到“明视”怪 , 触发事件 , 从悬停动作 , 转到idle动作的时候 , 卡顿了一下 , 一个是“动作过度”没做好 , 其次是idle动作做得有点尬
这里科普个东西 , 想要触发一个事件可以有很多方法 , 这里金蝉遇到小怪变身这段儿 , 还有后边遇到狼人、捡起赤潮、遇到土地公、轰龙 , 都是用的范围触发 , 即角色走到一个范围内 , 就会触发事件 , 通常是一个圈儿 。 这里也给大家留一个小思考题:就是触发事件时候 , 摄像机的变化 。
【00:02:13.02】金蝉开始变成猴子 , 播了一个大特效 , 特效由慢变快 。
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

观察猴子出现开始后前后两帧的变化 , 可以看出 , 这里是给猴子做了一个单独的idle动作 , 让他从特效中心里背对着敌人 , 从屏幕这一侧出来 , 随后接一个转身动作 , 是为了让玩家看到整个转身动作 。 并让玩家感觉到猴子是“蹦出来的” , 恩 , 蹦出来的~~~
【00:02:14.18】这里加了一个强制转向+强制动作切换
强制转向的原因是转身落地动作的播放角度没对准 。
动作切换时候 , 动作有震动 , 棒子突然变小 , 猴子的手也脱离了棒子 , Piont和“动作过度”的问题 , 但还有一种可能 , 就是其中蹦出来的动作是通过动作演员生成的 , idle是公司里美术做的 , 两种动作制作质量不一样 , 融合在一起就“震”了 。
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

【00:02:16.21】这里猴子第一次进入战斗 , 这里有2个知识点
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

首先是镜头 , 这里用了一个“镜头锁定” , 随着猴子位置变化 , 镜头始终盯着小怪 , 进行自动转向 。
猴子在跑动的过程中 , 可以观察到一个身体朝向的变化 , 猴子往右边跑的时候 , 身体朝向先是朝向左边 , 后是朝向右边 。 完成这个变化用到了一个摄像机、猴子、小怪之间的夹角 。 如下图所示
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

这个夹角A , 小于一定值时 , 猴子身体朝向移动方向 , 当夹角A大于等于一定值时 , 猴子身体朝向移动方向的反方向 。
【00:02:17.11】猴子的第一次翻滚结束 , 立即切换到了一个站立动作 , 随后进行第二次翻滚 。 这里的站立动作应该属于第二次翻滚动作的一部分 。 也就是说 , 第一次翻滚动作还没结束的时候 , 操作者进行了一次疯狂滚键盘 , 使得第一次翻滚动作进入后摇时被强制打断 , 进而立即站立起来开始了第二次翻滚动作 。
【00:02:19.09】猴子用棒子第一次打击小怪 , 产生了一个受击特效 , 受击特效刚好出现在了手上 , 说明小怪是一个“复合碰撞体” , 碰撞体按关节划分 。 棒子是一个打击盒 。 打击盒碰在了碰撞体的哪个部位 , 哪里就产生了受击特效 , 这里要注意受击特效一定不能跟随点移动 。
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片

这有个细节 , 打击盒是一个棍子 , 碰撞体是一个胶囊 , 棍子与“复合碰撞体”密接触时 , 会产生很多个受击点 , 那么在哪个受击点上播放受击特效合适呢?这里用的是第一个生成的受击点 , 来播放受击特效 。 但这会衍生出一个问题 , 就是“想打的地方跟实际打到的地方表现上不一样” , 比如猴子的第三棍 , 因为棍子很长 , 玩家看到棍子的远端处打中的是小怪的腰部 , 但是棍子与怪物的第一受击点是在小怪腿上 , 所以 , 玩家看到这一棍的特效播在了腿上 , 但表现上棍子是打在了腰上 。
战斗设计基础—《黑神话:悟空》逐帧讲解
文章图片


    推荐阅读