游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8487|回复: 0

天美高级TA:浅谈大世界场景自动生成技术

[复制链接]

4万

主题

4万

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
83068
发表于 2022-6-9 09:38:51 | 显示全部楼层 |阅读模式
本文首发“TiMi Club 天美俱乐部”微信公众号

中国游戏行业发展至今,从专业到分工,正在经历哪些变化?天美联合腾讯游戏学堂,举办“游戏是门技术活儿:专业技能探秘”知乎圆桌活动,本文为圆桌议题“2022 年,有哪些游戏领域的新技术令你期待?这些技术可能催生出什么样的游戏内容?”下的回答,希望对大家有所帮助。

作者:AllenP
腾讯天美J2工作室高级技术美术

本人是一名负责程序化生成方向的 TA,个人兴趣领域主要在大世界场景自动生成方向。

以往的场景生产基本都依赖于美术自由发挥,这样虽然可以更好地发挥美术的艺术创造力,但需要大量的人工来堆砌资源,而且一旦场景设计做了修改,整个场景的美术资源基本都需要推倒重做,因此传统场景生产的开发效率和修改成本都比较高。

为了能够加速场景的生产效率,程序化生成技术就成了不二的选择,这也是我目前最关注的新兴技术之一。

在程序化生成的流程搭建中,程序化 TA 主要负责模块拆分的设计,生成规则的抽样,生成算法的实现,以及程序化生成工具流的搭建。

基于数据源,很多东西都是可以通过程序化生成来制作的,如地形地貌的生成,河流的生成,植被的生成,基建的生成(道路,桥梁,建筑,街区),氛围的生成(如材质受酸雨的腐蚀,建筑从上自下的脏迹)等。

简而言之,程序化生成技术可以在仅需提供少量曲线数据,以及模块资源的情况下,自动化地将整个场景生成出来。

程序化生成具体是如何实现的?主要分为几个步骤。

01、获取数据源

如河流的分布,湖泊的范围轮廓,道路的分布信息,建筑的轮廓信息等,这部分一般可以使用曲线+属性的方式来表述。

微信图片_20220609093555.png
由真实地图的 OSM 数据导入 Houdini 中形成的路网,河流数据

地形一般是用均匀的网格+高度图来描述,网格一般是由引擎运行时生成的,因此如何生成地形实际就是如何生成这张高度图。

如果是基于真实的地图数据,可以在网上下载对应区域的 DEM 数据(数字高程模型),或者可以通过算法进行迭代生成,比如使用噪声图叠加,热力侵蚀,水侵蚀等算法进行拟合。

道路,河流可以由曲线表示它的长度和走向,通过每一段标识的属性可以获取名称,宽度等数据,以及地形的高低走势,程序化生成出道路的模型,河流模型。生成时还要考虑一些约束对地形的影响,比如在起伏的山林中,道路始终是平整的,并且坡度不能超过一定的阈值。

建筑,湖泊部分则可以通过封闭的曲线来获取其在场景中的位置,通过类型属性,来确定建筑的生成风格,通过高度属性来获取建筑有多少层等。

曲线数据的来源一般有两种,一种是基于真实地图数据的游戏场景(比如可以通过 OpenStreetMap 下载地图数据)。另一种方式是通过自己手动编辑曲线的方式来布置路网。

02、对数据的补齐

除了通过手动编辑补齐外,还有一些自动补齐数据的方法。

比如通过路网数据,我们可以将地图划分为多个街区,可以自己设计算法,对每个街区进行建筑的填充,算法除了可以考虑建筑的分布方式外(如写字楼,可以采取沿街分布,独栋建筑可以采取中心分布),还可以根据街区的类型,去匹配不同类型,不同高度的建筑群(如商业区,住宅区),最后由建筑间形成的“缝隙”可以获取到小路的数据信息。

又比如,可以结合地形的高程信息,水域的分布信息,地貌信息,城镇分布信息等,生成植被分布的点云数据。如果对生成的结果不满意,也可以手动通过刷范围的方式,人为地控制植被的分布区域及种类。

03、将数据通过算法转化为 3D 模型

生成方法分为两种,一种是通过算法生成独立的模型,这种方法比较适用于游戏中特殊模型的生成,如不规则的交汇路口,弧度比较大的护栏等。

另一种是使用预先准备好的资产,根据一定的规则,将模型分布在对应的点云数据上。比如草,树木,路灯这种一个点云代表一个物体的。又或者是类似于建筑模块这种,一组点云数据代表一个物体的,如图:

微信图片_20220609093602.png
《黑客帝国觉醒:虚幻引擎 5 体验》建筑模块拆分示意图

大型建筑立面的墙可以用几种模块拼接生成。这种拼接方式的好处是能够节省模型、贴图的资源量,并且在游戏中可以使用 Instance Draw 的方式进行绘制,从而降低实时渲染的开销。

04、场景装饰物的填充和环境氛围的填充

比如建筑的挂件,街道上的路灯,护栏等。这些都可以通过抽样一些分布规则,通过自动撒点的方式进行生成。

比如如果设计师希望表达一种偏末世的场景,可以根据地势的走向,对场景生成一些环境氛围元素,例如:被水淹过的道路上可以生成一些青苔,建筑上可以生成藤蔓,根据不同季节,植被颜色,茂密程度可以有所调整,被海啸袭击过的区域植被,地形损毁程度的模拟等。

在大世界的程序化生成方向,最近令我印象比较深刻的内容是由 Epic Games 推出的《黑客帝国觉醒:虚幻引擎 5 体验》。

微信图片_20220609093603.jpg
《黑客帝国觉醒:虚幻引擎 5 体验》

这款技术 Demo 介绍了一套完善的、基于 Houdini 的现代城市的程序化生成方案,它不仅考虑了如何对真实物件效果的还原,还考虑到了如何使用更省的方式实现效果,从而减少性能及资源量方面的压力。

比如,在建筑生成上,介绍了一套如何生成现代建筑的完备方案,包括如何对建筑模块进行合理的拆块儿,如何对建筑进行拼接,如何使用 Instance Draw 来降低渲染压力,以及一些制作时防止模块穿插的小技巧,如对锐角,钝角类建筑转角模块的处理,通过一个通用的链接角来杜绝模型拼合可能引起的穿帮现象。

比如,在材质制作上,介绍了如何实现基于深度的 3D 假室内的效果,不但表现效果可以模拟真实的室内场景,而且从性能方面考虑,用单个材质渲染代替了真实的 3D 室内场的模型渲染,有效降低了性能开销。

虚幻商店也给到了这个项目的资源包,可以直接查看该工程的所有资源和程序化生成制作的相关插件。通过对这个工程进行深度分析,可以帮助我们零距离地了解如何用工业化的方式去生产 3A 品质的游戏,同时也可以自己去实践如何去生成新的世界。

最后畅想一下这项技术的未来。现在的工业化生产,主要还停留在开发者应用的阶段,未来如果把 Houdini 的这一套生成算法搬到游戏引擎中,结合实时光照,GI 的特性,可以使这个编辑器功能转变为玩家 DIY 的游戏功能,比如实现自由度更大的建造系统,自定义关卡设计等。让玩家能够体会到生产高质量场景的快感。

对于 TA 来说个人觉得有几个方向可以去深入研究:

1. 如何对算法进行加速,使平常要花费几分钟的生成工作,可以在几秒钟甚至毫秒时间内完成。比如可以考虑把算法搬到 ComputeShader 中,利用 GPU 的并行度进行加速,也可以考虑采用多线程,分块等方式将需要计算的超大任务,拆分成更小的任务块分多次处理。

2. 如何将枯燥的编辑工具,变得好玩。一方面在编辑方式上考虑更加贴合玩家的使用习惯,一方面可以增加一些编辑时的动效,比如画线时带上一些拖尾效果,生成物件时增加一些有趣的出场方式等。

对TATD职位感兴趣的同学,欢迎加入天美工作室群一起来打造具有世界级影响力的游戏作品,简历定点投放:yatingcai@tencent.com

文/AllenP
来源:TiMi Club 天美俱乐部
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-4-24 14:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表