Unite 2019 Shanghai:Unity 和 Houdini 场景程序化工作流程

作者:转载小公举
2019-07-16
10 9 0

之前我们已经整理了部分 Unite 2019 Shanghai 的 Keynote,这一次官方也将整理好的内容陆续放出,我们在这里继续提供给大家学习和交流。

会议主题:技术专场 3
会议时间:2019 年 5 月 12 日
会议地点:上海国际会议中心

5 月 10 日晚,Unite Shanghai 2019 Keynote 主题演讲于上海国际会议中心盛大举行。从最前沿的技术到令人惊艳的 Made with Unity 案例,整场 Keynote 无不体现了 Unity 技术的每一个进步,都是服务于每一位创作者,以技术致敬每一位创作者 -Unity for all!

我们选择了一些演讲实录在这里分享给大家。这一次是 Unity 的技术美术王靖在 Unite 2019 上的技术演讲 - Unity 和 Houdini 场景程序化工作流程。

演讲内容

各位好,我是王靖,现任 Unity 的技术美术,我今天演讲的主题是《Unity 和 Houdini 场景程序化工作流程》。

在座的很多听众对 Houdini 了解不多,接触比较少,所以今天的演讲也是进行科普 Houdin,我将主要分享 Unity 和 Houdini 程序化的工作流程,主要针对大地形或者地形制作方面的场景。

首先,我们对比一下场景制作传统的工作流程。

场景制作传统与程序化工作流程对比

下图的右侧就是传统的工作流程,是当前普遍的工作流程。

首先,我们使用 DCC 工具输出一些高度图到引擎中,用来制作地形,制作地表。我们可能会一步一步种植一些树木、石头、建筑,以及搭建道路、河流。

如果是大地形的话,我们要进行加载。美术的工作一般把地形切成一块一块的,给程序进行加载。切分完之后,地形会有接缝,我们需要处理接缝。一般我们会用脚本,地形 API 把接缝处理掉。

在模型制作的流程中,可以看到模型制作人员会制作一些石头和建筑,然后提供给关卡制作人员,在关卡制作完成后就是进行关卡测试。

现在制作大地形或者场景制作比较多的一些工具,像 World Machine 都是非常主流的制作高度图用的软件。我们可以使用很多的插件制作地形、地表。制作石头、种植树木、建筑。我们会用一些工具,例如刷 Prefab 的工具,以及一些道路和河流的工具。

这就是非常普遍的传统制作大地形或地形类场景的主要流程。

传统制作流程有什么优势呢?

成熟:现在大部分的公司和从业人员对传统的工作流程非常熟悉,人员招聘快捷,前期学习成本非常低,团队可以快速成型。

资源丰富:资源包括我们自己积累的资源以及外包资源,都非常丰富。由于传统流程的从业时间已经非常长,门槛也很低。所以外包快捷,很多公司和团队有大量早期的端游或手游资源的积累,可以快速换置。

工具链拓展:工具链拓展起来是非常简单粗暴的。我们可以看到有很多 Asset Store 资源商店上的插件,包括我们自己项目以前开发的插件,都可以直接拿来用。

小型项目和独立项目:小型与独立项目资金比较少,使用传统的工作流程,成本非常容易控制。

我们再看看传统工作流程中有哪些缺点?

成本随资源量增加快速增长:传统工作流程有一个非常致命的缺点,随着开发时间的持续,项目规模会逐渐增长,项目规模越大,资源越多,成本要付出更多。

项目成型后修改迭代成本剧增:在项目后期修改、迭代的成本非常高。很多客户遇到的一个问题是,当项目快完成的时候,可能策划要改一改,地形要改一改,资源要改一改。于是整个项目迭代周期就变长了。重新制作、重新迭代,成本会剧增。

各环节相对独立,不利于测试:在传统工作流程中,开发的每个环节都是相对独立的。参与开发的人员都不知道项目最后是什么样,往往只有等到关卡制作好,客户端打包好,内容加载进来,才可以看到最终的效果。

迭代反馈非常缓慢,无法及时的反馈,也不利于测试。由于每个环节都是不能单独拿出来测试,我们要把整个环节跑完,到实际运行环境看一下效果和进行测试。

工具插件过多,不利于维护和升级:上图最右侧框线部分是传统的工作流程需要的一些工具和插件。但这些工具一旦版本更新,维护和升级成本是非常高的。

大世界、MMO、吃鸡类大型场景项目:现在大世界、MMO、吃鸡类大型场景游戏特别多。可能传统的工作流程慢慢的就不太适合了,会被程序化工作流程替换掉。

资源重复使用,同质化严重:很多项目的玩法必须依附于大量的资源,但为了节省成本,会大量的重复使用资源来填充项目,这造成美术结果同质化现象非常严重。

上图橘色部分是最容易出问题的模型和关卡。模型人员需要生产大量的资源,不停提供给关卡,这导致关卡制作人员必须等待模型制作完成才能进行。二者无法并行开发。

讲完传统的工作流程,现在,我们来了解基于 PDG 的最新的程序化工作流程

PDG 是 Houdini 17 最新发布的功能,它将各模块的环节转化成可以操作的流程图,通过 TOP 类的节点分配任务,从而进行流程化的管理、测试、并行计算。例如分布式渲染,机器学习等。

对开发游戏而言,最重要的一个工作就是流程管理。通常,Houdini 会输出 HDA 资源,我们可以通过 PDG 将繁多、复杂的 HDA 资源进行模块化,流程化管理,而且流程和模块完全都是动态的,可以实时改变的。

在 Houdini 17之前,使用 HDA 资源最大的痛点就是无法形成闭环的流程。但是,良好运行的的流程一定是闭环的。此前,虽然我们可以制作一些 Houdini 资源,但在这些资源导入进 Unity 引擎后,其实等于一些程序化的资源,而不能说是一个程序化的流程。

如果一个流程达不到闭环的,它可能不是一个良好的流程,甚至不算一个流程,所以以前我们使用 Houdini 只是进行程序化的建模,不能说是真正进行一个程序化的流程。现在,Houdini 可以跟 Unity 进行无缝的衔接。

如上图所示,图片右侧就是在 Unity 中 Houdini 的界面。我们可以看到右侧下方是 PDG 的流程节点,我们可以非常方便的在 Unity 里选择每一个环节,然后来进行调度,计算和渲染

在 Houdini 内部,PDG 的节点是什么样的?现在出了最新的一个节点是 TOP 节点,TOP 节点里面是什么呢?

Houdini 内部都是基于 PDG 的流程节点。这些节点不是用于程序化建模,或者跟传统的 SOP 一样用于做程序化建模。这些节点是用来做流程管理,调度 HDA 的资源。例如,粒子等资源都是在这里进行流程调度。

上图的右侧是我们传统的在 Houdini 里面做的资源,传统的流程节点。右侧可以制作地形的映射、侵蚀、种树、道路,一个个节点都是在右边的模块做完。

此后,有一个的箭头指向 PDG。我们会把右侧每一个模块的内容,在 PDG 的节点里进行调度,把它们关联起来,形成一个流程。这个流程可以动态的修改,如果哪个流程不好,可以直接删除,也可以动态的添加,如果有修改的东西都可以实时向里面添加。

下图是现在最新的 PDG 程序化工作流程的流程图

从上图中,我们可以看到它的主要做法是:策划或制作关卡的人员可以在 Unity 使用 Houdini 或 Unity 的 ProBuilder 进行关卡的搭建。以前的关卡搭建非常的复杂,现在都是非常简单的模型,盒状或三角形都可以搭建这个关卡。

搭建完关卡之后,如果使用程序化的流程,我们可以很快的看到结果是什么样。如果结果不对我们可以进行关卡测试,测试的过程中可以快速的迭代,使用 Houdini 提供的很多工具链,我们可以快速的进行关卡测试。

我们可以再看看上图的下部。关卡测试完之后,我们可以把数据直接扔到 PDG 模块中,PDG 模块就像一个加工厂一样,把原始数据即关卡数据拿进来。

此前我们需要在 Unity 中,人工一步一步用插件完成的流程,我们会全都放到 PDG 节点里面,它完全都是程序化。我们可以把 PDG 的节点打包,以后使一些 AI 的算法进行更多的变化。

是不是当工作流程程序化后,DCC 工具或建模人员的工作就没了?

并不是这样的,其实我们的 PDG 整个的流程,是可以直接把制作好的的美术资源,还有 DCC 里生成的一些贴图,直接使用程序化的流程来调度,直接形成最终的关卡。

基于 PDG 的工作流程优势是什么?

首先对于策划或者说关卡人员、制作人以及需要观看最终效果的人,可以快速介入,贯穿整个流程,随时测试方法

PDG 这个流程不是都规定好的,完全可以策划人员使用很简单的工具选择其中的一个模块。例如:我想观看地形、道路、树等,完全可以选择观看。如果结果不对,我们迅速返回到关卡设计的阶段,快速的修改关卡,迭代速度也是非常快。

基于 PDG 的工作流程的各个环节可以独立显示,每个 HDA 的工作人员,你可以给他们不同的分工。不再像以前一样,关卡人员必须等模型人员把模型做完了才能拼关卡。每一个部分下都有一个人员的,他们可以并行工作。

每个人制作完成后,只需要把内容放到这个流程里面。例如,使用 Unity 或 Houdini,直接把流程加载进来,灌入到流程里,我们可以很快地看到结果,不需要等待。非常方便的察看最终效果。PDG 的程序化工作流程一旦成形了,可以大量节省资源制作成本

它的工具链非常少,不需要过多的插件。我们以前需要用到 Python 或 C# 脚本等开发的工具,但现在就是 Unity 和 Houdini,非常的便于维护,就是意味我们只需要维护一个引擎,一个工具就可以了。

基于 PDG 的工作流程缺点是什么?

基于 PDP 的程序化工作流程现在主要问题是需要一个思路的转变。跟传统的工作流程相比,程序化的流程不再是看到原画就开始建模,搭建场景,它现在需要整体的思路。制作项目之前,要有一个整体的规划,区分一下哪些地方可以用程序化做流程,哪些不可以,我们需要对项目有整体化的思路。

很多游戏公司发展到现在,有很多的积累,项目经验非常多。以前制作项目都是摸着石头过河,什么都不知道,从头做起。现在项目经验多了之后,有很多有经验的技术美术或主美,都是可以从全局一开始就能分析项目,知道从什么地方可以用程序化,什么地方不能用,这需要思路的转变,跟传统的工作流程不太一样。

其次是前期的学习成本,不能快速成型。程序化的工作流程在国内来说可能非常新,造成的问题是它的资料和资源都非常少,前期需要学习和积累。资源可能现在还很少,需要对整个流程的时间的磨练,才会形成工作的资源。

程序化流程不适合小型团队和小场景类的项目。小型团队项目时间非常少,可能半年,一年就上线了,但是可能半年时间流程都搭建不完善。所以建议小型团队可以进行程序化的建模,而不是程序化的流程,小型团队可以用 Houdini 作为程序化建模的物体或工具。

最后是完善的流程搭建门槛较高。如果要制作非常完善完备的程序化工作流程,需要有一些非常懂流程和工具或者引擎的人专门搭建这个流程,来规划这个团队,优化流程。一般这种工作由技术美术来负责。

我们来了解一些基于 PDG 程序化工作流程的误区

首先是并非所有的美术人员都需要学习 Houdini。

上图右侧是一个非常经典的金字塔图。最顶层只需要技术美术来制作流程,或者程序开发的引擎或者图形工作人员制作一些 Houdini 的工作节点,或者对 Houdini 一些工具的开发。

中间需要的是一些懂 Houdini 的美术或者技术美术,他们用 Houdini 来搭建一些 HDA 或者 HDA 的工具。

大多数的美术人员在底层这块,只是把这些工具导入到 Unity 里面,然后来画一些资源,一些树、一些建筑,做完之后要进行程序化的生成,或者你可以直接把这些树和建筑直接成程序化的模型,来自动改变它的形状。

有些做程序化的团队,他们喜欢把所有流程都做成程序化,这是完全没有必要的。需要在美术方面的雕刻和个性化的内容,例如雕像,建筑类的资源是很难程序化的,强制把这些东西程序化是完全没有意义的。

最后一点误区,很多流程设计都设计过度。制作流程不可能把流程做得最好,只有最适合自己项目的流程。

小结

在本篇中,我们介绍了场景制作传统的工作流程和基于 PDG 的最新的程序化工作流程,希望对程序化制作地形和场景的美术及开发人员能有所帮助。

更多 Unite 大会精彩演讲内容分享,尽在 Unity Connect 平台 (Connect.unity.com)。

下载 Unity Connect APP,请点击此处。 观看部分 Unity 官方视频,请关注 B 站帐户:Unity 官方。