《黑神话:悟空》gameplay相关的技术和调整细节整理
##序言一些约定俗成:视角是战斗策划,稍微懂一点客户端的视角,有些问题会带着说一下,因为是黑盒所以估计有些东西会有误判,但原理应该差不离;帧数的描述基于30帧/秒;没经历过深度的开荒ue4项目,所以里面的很多经验是基于unity说的,实际有可能不一样;都是白话,不纠结融合混合transitionblend过渡这些字眼,结合上下文里面所有基于事实和目的的推测都有可能只是人家出bug了没修好,策划:设
##序言
一些约定俗成:
- 视角是战斗策划,稍微懂一点客户端的视角,有些问题会带着说一下,因为是黑盒所以估计有些东西会有误判,但原理应该差不离;
- 帧数的描述基于30帧/秒;
- 没经历过深度的开荒ue4项目,所以里面的很多经验是基于unity说的,实际有可能不一样;
- 都是白话,不纠结融合混合transitionblend过渡这些字眼,结合上下文
- 里面所有基于事实和目的的推测都有可能只是人家出bug了没修好,策划:设计如此
- 这个文本排版连图片同行都做不到,我也真的佩服自己还能忍着把这文章写完(我用UGUI写的都比他们工整)
####按官方公布视频的时间轴来写:
**[00:00-01:35]**纯播片不说了,原画和场景炫技,布料做得很棒,不过应该是特殊做的。
####[01:35-01:40]
正常推进的场景摄像机突然因为飞进来的金蝉而被带动焦点,但行进路线没有发生改变,应该是场景摄像机沿设置好的路径和速度进行推进,并设置一个时间点将视焦点转移到角色身上,金蝉是K的固定动画,差不多01:39的位置金蝉有一次不和谐的速度变换,猜测是在附近交给控制端,并将摄像机切进追背视角的。
####[01:41]
左上角的树木等中远景有明显的LOD层级切换,距离有点近,从这里看感觉性能上还是挺吃紧的,令人有点担心后续大场景的优化。
####[02:13]
这里见到第一个小boss,停下后同样的镜头拉近佐证了之前的镜头变换,变身状态停下时相机会逐渐追上角色拉到最近端,向远离镜头的方向行走时拉远到我们看到的“常规”距离。
这里变身逐帧看下来,在空中出现时是背对敌人的,从空中顺时针旋转180°落地,还特意做了向右侧的缓冲卸力表现。本以为是根据敌方单位与自身面向夹角适配不同落地动作,但根据后面的第二次解除变身是完全相同的动作来看,应该是故意做成了背对敌人下落以增加动感。
####[02:15]
这里捉个虫,落地动作结束后回到idle的时候抖了一下,因为两个动作root没对…齐…我觉得也不大可能,不过有一帧武器整个脱手了且角色整体被强制转向了敌人。回想了一下,之前遇到这种情况好像是动作过渡时吞掉了一部分旋转角度所致,不清楚是不是这个原因。头部明显加了IK保证一定角度内一直注视敌人。
####[02:16]
第一次基于敌人后退,这里能看出来战斗的基础移动是前半圆(似乎比180°大,200°左右)用直线跑步动作靠程序插值转向,后半圆用后退动作的blendtree的形式,转向细节比较少没看到做侧倾动作融合的痕迹,后退blendtree大概是2-3个动作组成,并且没有前后半圆的过渡动作(强行transition,约4帧左右的过渡时间)。
这种做法会导致超过临界的大转向过渡非常快,稍微有些生硬(见图中连续两帧的腿部差别,已经算是跳变了),但同时响应操作的速度也能拉满,比较契合这种硬核的动作游戏战斗。
然后说一下对面怪物,攻击有点拿不准,似乎滑步了又似乎没滑步,蓄力过程似乎插值旋转了又似乎只是脚步缓动,但攻击又明显有追踪效果,我觉得是有这些可能的:
- 追踪(角度插值)玩家位置
- blendtree做多个特定攻击角度动作的混合
- 多段拆分的混合做法
判断具体是怎么做的需要事实佐证,那么我们来看看头两刀都有哪些细节:
- 特效整体较平滑,但有几个节点的角度会突然不均匀,比如第二刀前段出现了一个明显弯折
- 他的攻击是按照角色翻滚之后所在的位置进行修正的
- 动作从开始挥击开始就比较流畅了,可以认为是一个动作
####[02:17]
第一次翻滚为右后向,第二次是左前向(02:21这里的后翻滚确认了前面这个是左向的,而紧接着与第一次镜像的左侧翻滚,证明了侧滚偏前和偏后分成了两个不同动作)。
这里有个细节,第一次翻滚落地结束后,猴子立刻面向敌人站了起来。动作是在地面躺平刚开始起身的时候就在做转向了,看起来不是用起身转向动作做的拼接,我倾向于认为这里是专门考虑了锁定状态下,位移造成的视角变化做的侧向翻滚动作。这种做法会导致非锁定状态下的侧向翻滚带一点转向,不过带一点带一点吧反正后来好像也没用过非锁定。
####[02:19]
全视频第一次主动攻击,武器打击盒判定、击中位置按武器行进轨迹播放受击特效、打击自带2-3帧顿帧,头一帧是不是做了过渡太模糊了看不清,打击盒判定击中位置的通病“想打的位置和打到的位置不一样”这个问题没解决掉,图中可以看到第三击横扫是想打腰或躯干的,但受击特效播在膝盖,因为你不知道打击盒会不会刚刚好卡在一个奇葩的位置打中胶囊体。
这种问题交给我的话可能会选择对特定攻击的hit加带规则限定的自定义offset,比如我大概知道这一击希望打在什么地方,就限定一个高度值范围,不够的往范围内带带就行。不过另一个常见问题“攻击切线因为打击位置不确定可能偏离打击轨迹”没出现挺棒的,我除了手配还真没想到什么好办法。
####[02:26]
开头耍的花棍是蓄力的开始,仔细看蓄力特效即可确认。不知道轻攻击是ButtonDown响应还是ButtonUp响应,虽然从类型分析大概率是ButtonUp,但这个动作跟前面攻击的起手似乎没有相关性,没看到满足蓄力判定后的动作切换,拿不到实锤。
####[02:29]
继续看前后帧对比,想要做顿帧的话,受击特效就必须是快进慢出,否则顿的一瞬间什么效果都没显示出来,只会造成卡顿不流畅的感觉。
以及受击动作明显是瞬切,看一下被埋没在光效中的影子就知道了。
####[02:32]
这时候的猴子起跑阶段有滑步,说明跑步状态和idle是分开的,通过transition过渡,如果想去掉这个滑步(虽然搁我是懒得搞的),可以学习尼尔在起跑时加一个起跑动作作为中转。
另一种成熟方案是将idle-walk-run组成一个blendtree,这种方案的优势是起步会有一个比较明显的从静到动的过程,也基本不太会出现融合过程的额外位移,但中间状态的转换和辨认都比较困难,我目前项目接手时就这样了没得改,也被这个问题搞的很毛,以后肯定不会优先选就是了。
####[02:34-02:35]
投掷物比较难确认,找不到接管跟交还武器位移的点在哪,飞行路径的规则样本也太少了判断不了,不过这正说明了动画做的天衣无缝质量非常高,不知道未来可以扩展到什么地步~
####[02:40-02:44]
真好看啊,这特效贴合程度说没一帧帧比着做我是不信的,上下半身的配合也非常完美。唯一可惜是看不到这一招打人的样子,没办法判定打击盒的绘制精度和判定时机,要这两样也贴准了那调教是真的很用心了。
箭被打飞的特效看起来是随机的,看起来像是一个带物理效果的特殊模型,但这其中还有被打断成两截的,这个效果要是特意做的还则罢了,假如弹飞的还是原本射出来的子弹,通用当前世界的物理规则的话,那就真的很惊艳了。
狼那边会在射箭的同时缓缓后退,简单的做法是固定动画,将后退当做后坐力也说得通。另一种可能是AI根据当前角色靠近的行为作出下半身后退的判断,这个匹配就复杂多了,射箭本身就会涉及非常多的上下半身状态迁移,想做单做后退效果好是不大可能的,要把整套四向走的动作迁移都解释清楚才行。
####[02:49-02:50]
这里从疾跑回到普通跑的过程右脚出现了捯脚的情况,没猜错的话run和rush过渡时是没有按照帧数百分比进行匹配的,看起来循环动作起始帧应该是右脚向后蹬,可以的话做个同步让他们按照相同的比例进行过渡会比较好。
####[02:53]
这里摄像机发生了一次视角变化,角色在走过去停住前也有一帧跳变(点头),估计是为了接管角色操作和同步位置?剩下的都是播片没啥可说的
####[03:09]
看见这个特效折角了吗,说明特效是真的挂在武器上随动的,游戏动作和真实世界不同,是一帧一帧出现的,而且有些动作并不是顺势而为,而是要强行克服惯性,这些折角未必每一帧都好看,想要解决要不就做成假特效片(如图2),要不就只能寄希望于采样平滑。
####[03:15]
这里的弹反和后续打灵虚子效果对比可以确认应该是根据攻击的属性,会反馈不同的反弹特效。比如这里是火属性攻击,就会反弹爆燃的火焰,如果是水属性攻击,就会溅起奔涌的浪花,如果是雷电…雷电奉还!
####[03:23]
破碎效果不错,是用的chaos吗?官方老哥要是能看见可以讲讲效率如何么,以后万一要用也有个参考。
####[03:53]
受击瞬间的站立姿势,这时候触发顿帧可太尴尬了,起码做个后仰
####[03:55]
看第二次受击,这就是打击盒判断受击位置和方向的不可控部分,至少目前我认为没办法杜绝,要不忍,要不手调
####[04:02]
一次性把人扯过去同步位置,老顽皮狗了
####[04:09]
这里没看懂,向右跑看起来是有起跑动作的,但前向我怎么都看不出来有,如果只有需要有转向的情况下才会加起跑,又不该这么早做旋转插值
####[04:10-04:15]
脚步声根据地面材质不同会有变化,但战斗时完全听不到,一种可能是战斗跑步特意独立了一套动作没配,还有一种是加了动态音频弱化在战斗时只会徒增干扰的脚步声音,无论哪个都做到位了。
####[06:48-06:55]
四连砸地东西蛮多的,每个敌人在不同位置的受击动作都不一样,包括有些人是被击倒状态的二次击飞表现也不同(虽然没看到侧向的动作,只做了前后两向?)。我比较好奇如果这场战斗发生在其他材质的地面上(比如浅水),小兵击飞落地的烟尘和飞溅的石头会不会有改变?期待5年后能看到令人惊艳的结果。
####[07:41-07:43]
震屏很细致,特意跟狗子拍地的位置对应
####[08:00]
这里居然拍完地面抖了抖手,是固定动画还是特意对标弹反??
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)