【巫师3:狂猎】幕后——关于《巫师3》在GDC上分享的对话交互工具流程
《巫师3》是一款非线性剧情驱动的开放世界RPG,然而“故事性”在巫师中是一个很关键的元素。他们希望在游戏中的每个选择都有意义,并且达到情感依附的效果。为了达到更好的演出效果,他们使用了cinematic dialogues去表现对话过程。相较于《巫师2》是用传统的idle加半身动作与转镜头,而巫师3有更多动作跟camera 甚至更多灯光变化。如果cinematic dialogues使用cut Scene的方式(剧情模式)去表现,会造成巨大的开发成本。因为是每一帧每一帧让动画师去key frame,所以他们将需要更多动画师才能完成35小时的对话内容。在这篇GDC中叙述了很多角色在对话上还可以怎么做到更细致的互动,以更细致的动作与交互呈现剧情。
所以他们为了能够节省成本,利于预定制的资源(prefab\animationclip)让策划可以像搭积木一样构建Dialogue。同时一些复杂的表现还是使用基于动作捕捉的Cut Scene让动画师一帧一帧制作。
接下来是Dialogue的制作pipeline。这是任务编辑器. 首先Quest designer(任务策划)会根据剧本把故事分成很多个任务Quest。他们使用Quest Graph和对应的editor进行图形化的节点编辑。"对话"只是其中的一个节点,如图中红框所标记的点。
对话是StoryFlow Graph,Story Flow Graph把台词内容拆分了节点信息,包含章节,选项等。Story Flow Graph用图形化描绘了整个故事对话的框架。Story Flow Graph 同样也有Fact Condition 和Change Fact的操作。Dialogue中会调用一些scripts或者Fact DB(Conditionor Action)去控制游戏世界,让一些条件或节点来控制世界, 所以对话会影响后续剧情。
#思考:这边巫师3的pipeline设计让我想到《底特律:变人》的剧情选择,同样是不同的对话可能会影响到后续任务或剧情的走向有所不同,巫师3同样可以触发一些条件或图中的节点来控制世界,像是选择了不同的对话会有不同的事件发生。
甚至像巫师3“下马鞍"的案例,如果玩家骑马到达目的地,则播放一个下马的运镜动画。
但是如果玩家在到达目的地之前就下马鞍,则会略过这则动画播放。
这些细致的表现都让玩家有更沈浸的感受,这个部分我是觉得可以借凿的部分。
然后StoryFlow Graph的Dialogue节点都是一张Timeline图,换句话说,故事流程图里的每个ABCD都是对应一个 Timeline。
接着Dialog Designer的角色跟电影导演一样。编辑工具的方式跟视频剪辑很类似,编辑工具上可以加入不同长度的Event。
然后透过Event可以进行一些操作,像是指定某character播放某个animation,改变camera的运镜。甚至改变light与weather。
比较有趣的是,他们为了能让对话策划更方便制作timeline,他们会先在Dialogue Set配置一些基础内容,包含了参与对话的人物信息(A),位置信息(B)和他们的初始情绪状态, Pose(C)等等。
接着透过Generator(生成器)生成对应的timeline,因为修改Event要比AddEvent快得多。Generator对一些不是很重要的对话特别有用,几乎不用再手动Key。
Generator的目标是使用程序快速生成Event来填充Dialogue,快速出一个可以看的效果,后续可以在这个基础上去修改。修改Event要比AddEvent快得多。Generator节省了设计师大量的时间,当然你也可以看到,程序生成的确实没有手Key的质量要好,但这也不是Generator的目的。使用Generator主要目的是可以快速生成dialogue,有点像基础模板,如果对结果不满意,再点一下生成按钮就可以了。下一步你可以去手动替换你不太满意的元素,假如觉得有必要或有时间的话可以再做些微调。
每一个Idle动画都会被贴上3个标签:actor social status(社會狀態\社會階級),emotion(思考)以及Pose(站立,坐着,躺着,跪着等),通过这样的分类,我们可以建立一个树形结构。他们的look at让动画师有绝对控制权,除了Full body,Head,还有eye。
他们一共制作了2400套对话专业的动画,还是不能够完全满足需求,因为这些动画还要扣除不同体型还有类型的角色,单一动画的多样性其实并不多。
#思考:一个开放世界的角色数量蛮多的,如果不能复用也是一个很大的问题(像是老头环里庞大的物种),怎么增加交互动形式又不生硬,也不要增加动画那边的工作量,这是可以思考的方向。
所以他们让策划可以自行配置动画的状态和骨骼权重,以便于进行normal, additive,override。像是影片中这个角色站姿有挥手的动作,现在想要坐着也有挥手的功能。有点类似Unity的动画掩码(Animation mask)和权重(weight)。最后一步是给对话添加一些元素,如其他角色,item,灯光等。每个元素在对话中都可以被移动。
#思考:这边的设置蛮有趣的,如果角色的动作可以藉由程序生成,策划这边只需要像导演一样去设置更细致的角色行为来表现,就可以相对达到更多有趣的效果。很多游戏的角色剧情动作虽然很丰富,但是一般互动的动作还是相对比较生硬的,然而剧情与特定动作又需要耗费3D 动画特别多的时间,所以这也这是一个可以优化的方向。
但是这套在系统实际在运行中有遇到一些挫折.因为这是开放世界,所以经常有很多NPC乱入镜头。其原因是在Game Play下运行,不是在Cut Scenes。
所以为了解决这个问题,他们在演员的附近增加了透明的墙壁(碰撞体),避免其他NPC在对话中乱入玩家的画面。
他们提到了Dialogue特别好用,好用到不用怎么操作就可以做到表现特别出色的对话,其实是工具方把镜头以及动画等做成了模板,模板制作的背后是影视专业人员给的专业机位和动画,所以设计师仅仅把他们的台词做好就行。
#思考:目前看完这篇GDC后收获蛮多的,周末跟着好友Yeo在讨论,其实也想着很多游戏的内容与剧情分支是非常丰富的,但是在行为表现的交互上还是比较生硬,如果想在一般对话动作还有文字呈现上,不增加动画的工作量外,还要考虑如何让游戏玩起来更顺畅有更好的体验,是值得深思的部分。在这篇文章中介绍的Generator我觉得是一个很棒的对话交互工具与一个方式,可以让策划编导行为搭配剧情,有更丰富的行为交互可以呈现,这篇GDC虽然早在2016已被Piotr Tomsiński所发表,但至今回顾起来还是有很多可以反思的地方,如果在制作的项目中可以优化这方面的对话交互,想必可以带给玩家更多像是影视般的情绪渲染力。
﹀
﹀
﹀
本文来自微信公众号“GameTube”(ID:GameTube)。大作社经授权转载,该文观点仅代表作者本人,大作社平台仅提供信息存储空间服务。