pokemonlei

陈磊的博客 | pokemonlei

地平线零之曙光工具链

笔记,原视频:https://www.youtube.com/watch?v=KRJkBxKv1VM

本文只是将零散记录在onenote上的东西进行一个整合,将自己感兴趣的内容以更规整的形式记录下来,如需更详细的了解,自行参考原视频

1. 目标

零之曙光是沿用并修改了Decima引擎,以下面几个出发点为目标进行重构工具链与工作流程

  • 代码层面目标:
    • 创建一个方便构建工具的框架
    • 沿用强大的Decima引擎库
    • 让策划的工具更易使用
  • 编辑器层面目标:
    • 能够适配内容创作者工具需求
    • 添加编辑器上下文概念
    • 可重用的组件
    • 所有操作都位于一个编辑器中,提供集成的游戏开发环境

2. 蓝图节点编辑器

老生常谈的东西了,跟UE相比也没啥太大变化。
由于他们做音频的模块相对独立且对工作流有很明确的需求,所以以音频为入口进行工具改版,音频用蓝图来连逻辑大概这样

3. 游戏关卡编辑器

起因是他们之前一直用maya进行关卡编辑,但maya并不适合有大量任务系统和需要大量放置游戏GameObj的游戏,以能让设计师直接在引擎中方便修改关卡和放置物体为起点进行了设计

这里有一个抉择,是只将游戏中的某些子系统集成到编辑器中or全部集成,最终选择了全部集成(有一说一,这需要考虑吗,直接全部集成然后根据需求制作简单的测试关卡不就可以?)

  • 只集成关注的子系统,虽然可以让整个编辑器简洁可控,且运行快速,但代码复杂,且关卡编辑器里显示的跟游戏实际运行的东西不一样
  • 全部游戏内容都加到显示窗口里,会增加运行时开销,有一些系统如天气,在制作时并不需要整合全部的其他系统

他们的场景编辑器成品如下图:

  • 原视频里有简单的操作视频,用画刷等工具修改地形,添加野怪、障碍物

  • 最终效果,可以直接跑游戏,结束运行时编辑窗口会直接在结束运行的位置,然后直接修改场景,如刷地形,添加野怪和石头等,然后继续运行又会接着当前视口开始运行。其实就是一直以主角位置来定位

  • 由于游戏中有个仇恨链接机制,被一个机器人发现后同一片的其余机器人也会共享信息,做法是先创建一个父节点(我们称之为遭遇战节点,其下的机器人为同一组)然后在父节点下创建敌人,此时敌人就会共享父节点的数据

  • 资源重用,石头、敌人等资源都是可以直接拖进去就生效的

    4. 热加载、撤销

    为了让策划和美术们在修改了资源后不需要重新启动游戏,他们整了一套热加载系统:

  • 流程:编辑器内修改内容->分析修改的内容(相关引用)->打包成patch文件->运行中的游戏暂停->加载进新的patch文件->继续运行游戏

为了支持工具的撤销操作,做了个很巧妙的设计,对于工具所做的修改,并不是工具直接修改游戏,而是发送要修改什么的消息给游戏编辑器(引擎),编辑器进行最终修改,这样工具里所有的修改操作都是以一条条消息记录下来的,很容易支持撤销。没错,类似帧同步那个概念

5. 交互式对话编辑器

这里介绍的并没有那么详细,只说他们的系统受到CD Project RED和BioWare的启发。可以参考巫师3的对话系统:Behind the Scenes of Cinematic Dialogues in ‘The Witcher 3: Wild Hunt’:https://www.gdcvault.com/play/1023285/ ,去视频里看了一下确实讲的挺详细,这个后面单独启一个文章写

由于地平线的交互式对话是全新的,不依赖于任何其他系统,所以可以从头构建一个新的编辑器上下文来满足使用工具的团队,文案、任务、过场

  • 原视频里演示了一小段对话内容,是完全自动生成的对话视频,这个自动生成对话的系统除了音频(配音)之外,镜头剪辑,动画,手势等都是基于设定好的规则生成的,而且也可以自动生成机器人语音、口型和面部动画等等。这意味着设计师只需要输入对话内容就可以直接看到对话效果。

6. 世界地图overview

由于这种大地图开放游戏很难有个overview系统能够看出所有事情发生的时间地点等信息,所以他们研究了游戏数据的二维地图展示:

  • 这个系统可以显示任何他们想要知道的信息,如任务区域、可能遇到的敌人、性能监控等等
  • 这里这个JIRA如果是我知道的那个管理项目缺陷、需求、各种事物的JIRA工具(类似腾讯的tapd),那JIRA Bugs是指测试提的bug单,那这里能显示出JIRA里提的bug在游戏地图中的具体位置,那也太牛了。