作者:Kerry 本文首发于知乎专栏“TA周刊”
地址:https://zhuanlan.zhihu.com/c_125154506
上一篇:《幽灵行动·荒野》程序化技术介绍,我们笼统介绍了其程序化技术的应用以及实际项目遇到的问题。
本节是《幽灵行动·荒野》大世界制作技术的第二章。技术美术工程师Erwin Heyms展示了他的团队在开放世界游戏中如何处理小城市,河流和道路的程序化生成的一些细节内容。
道路与河流
加入Ghost Recon Wildlands 项目时,创建道路是我的首要任务。当时,我们正在研究如何houdini应用到我们的开发流程当中。我们想要创建一个巨大,逼真且美丽的,玩家可以真正深入体验的开放世界。使用传统的地形雕刻技术来创建荒野世界是一项艰巨的任务,这就是我们决定创建程序化工具的原因。
我们有数千公里的公路,这是多姿多彩的玻利维亚独特的景观构成。要使整个景观世界有一个连贯统一的公路,我们需要一个统一的计算系统。
我们的道路系统运行得非常快,这使我们见识到自动化工具对于驱动制作流程的强大作用。这大大提高了我们迭代道路系统的速度,而且它还为我们提供了大量的关联数据,我们可以将其用于其他程序化工具以及游戏逻辑数据中。
路网系统本质上是一种定制的寻路算法,它会依赖地形的特征进行计算。
设计人员只需要为每段道路设置路点,并告诉工具要创建哪种类型的道路,就会自动生成道路并嵌入到当前的路网中。
该工具必须易于使用,并且对我们的美术师来说足够灵活,因此,我们要确保设计人员可以方便调整道路的弯曲走向,比如能决定哪些区域寻路算法应该跳过,比如新建的路段要以多大的粘度融入原本的路网中。
这听起来可能很复杂,但实际上非常容易理解,这其实跟在现实世界中构建道路的思路是一样的。在现实世界中中,道路的规划决于建筑成本以及如何生产最便宜的道路。
在后台,我们的路网系统基本上就是这样做的。我们给寻路器定义一些特性,比如遇到陡峭的斜坡,我们的道路会呈现很多急转弯的走向;遇到平坦的地势就会稍微平顺一些。最终,会生成一个中蜿蜒盘旋的山路的感觉。
同时,寻路器会遵循现有的道路网,按照实现世界建路原则(成本低廉),新创建的道路将会融入到现有的路网中并且合理设计道路分叉。这个功能尤其有利于构建一些非常美观逼真的路网。
至于我们如何将道路网络应用于地形……
我们通过导出获得一系列的高度图应用到地形上,使得地形变形以适配路网,同时导出材质权重图来标记路网区域的材质。
为使加快工作流程,路网的地形变形的计算会放在渲染农场上进行,每当设计师完成铺设道路的工作时,他们都可以将数据推送到渲染农场,几分钟之内就可以得到结果并贴在地形上了。
铁路和河流工具使用类似的过程,它们都使用寻路算法,但规则不同。
铁路工具比道路需要更浅且更平坦的路径,并在尝试穿越山坡时沿途创建了隧道和桥梁。
Twan De Graaf生产的河流和小溪只允许出现在沿着山坡下行的地方,并且寻路是从山顶开始最近的水域。
最终,河流,道路和其他元素的融合有时会创造出一些令人惊叹的效果。
城市建筑
最大的挑战之一是使城镇看起来逼真,尤其是对于不同的环境和规模。
道路连接必须合理,城镇必须看起来好像是向外发展,中心的大型建筑向外辐射到较小的房屋和农田。
交给设计人员的工具的第一个版本可以建立看起来像乡村的城镇。
它建造了一系列主要街道,较小的街道将中心连接起来,并向外辐射到郊区和农田。
第一个版本的工具是这样从左到右一步一步生成的
最初,该工具主要产生于像这样的小村庄。
这种方法效果很好,但是与生产中的许多其他事情一样,一旦赋予艺术家更大的创作能力,他们就会想要更多。
虽然我们的设计师能够手动绘制或清除道路,但这种形式的工具太局限了,无法产生令人信服的结果。
我们真正需要的是创建城市,这意味着我们需要解决更多更复杂的问题。
因此,对于第二个版本,我添加了对网格道路,人行道,建筑物行和其他一些功能的支持。
Barvechos –一个庞大的城市。
该工具还需要一些时间来计算建筑物的位置。“计算时间”随着您要创建的解算区域的增加而呈指数增长。
一次计算我们一些最大的城镇的所有建筑物可能需要20分钟。
但是,可以通过将数据缓存到磁盘来减少解算时间,这还可以一次在较小的群集中计算建筑物的位置。
算法
建筑物放置系统可能是整个解算工具中最复杂的部分。
它使用了一种自我感知的打包算法,我们可以获取一系列建筑物,每个建筑物都有自己的放置在城镇中的规则。
该算法尝试按优先级顺序或预定比例从列表中放置每个建筑物。
该工具会首先对关键性地标建筑进行优先级排序,然后填充上的其余部分:房屋和市场摊位等其他真正使城镇栩栩如生的二级建筑结构。
该算法的工作原理是根据道路将城镇划分成多个区域,然后从里到外扫描每个区域以查找合适的放置位置。
然后,它收集有关这些位置的各种信息,然后对照建筑列表,判断哪些建组适合放置在这些区域。
这些位置上的信息包括:与市中心的距离,水边或附近的铁路,地形的坡度、由设计师特别指定的信息。
该工具还会查看有关已放置的其他建筑物的信息。
如果城镇中已有教堂,则不会在该教堂附近150米之内产生另一座宗教建筑。
总共我创建了70多个不同的规则和条件,我们可以为每个建筑物设置这些规则和条件,这确实使放置算法变得非常强大和灵活。
如果我们出于任何原因不得不搬迁或更改城镇,该工具可能会使这项本来很繁重的任务变得非常容易。
综上所述,在发展过程中,最大的城镇之一巴维乔斯(Barvechos)可能已被完全重建了5次以上。
Khochi –该镇将许多不同的工具结合在一起。
植被
大场景的植被放置由两个部分组成
- 草:根据地形材质的权重密度图进行分布
- 树、灌木:灌木和树木的散布规则由Houdini工具计算并生成点云数据的方式实现
散布树木和灌木丛基于一个非常简单的概念“cascade”:下图中,红色的点表示大树,绿点代表中型树,蓝色点代表小树和灌木丛。
为了增加复杂性,我们首先调整密度,比例,坡度,资源之间的空间等。然后再添加额外的一些规则,比如朝阳面、比如规定哪些物种对应地表哪一层材质、多层地表材质之间的包容和排斥,例如雨水侵蚀,河床,悬崖等等。最后,我们结合这些规则删除一些不正确的植被分布。在道路,铁路,水域和行人路上,植被会被自动删除。
我们与地形/岩石美术师紧密合作,以匹配地表分配规则(是指splat map)和植被规则。这样,与植被分布有关的地表材质,岩石和flowmap直接影响了森林在远处呈现的效果。
在资源方面,我们尝试对同一物种采用不同的结构,并避免每个群落具有太多不同的物种,这是会更自然一些。您使用的物种越多,就越难做到真实和自然。
在性能方面,密度是一个问题。我们提出的解决方案是:我们没有采用每种资源固定的LOD距离值得方法,而是决定采用更灵活的方法:根据植被密度来调整LOD值。
因此,根据其在世界上的位置,同一资源可能具有不同的LOD值。更高的密度意味着LOD更激进,会更快地切换到最后一层LOD:Imposter。
Imposter是建造如此大的森林的最后一个重要组成部分,从远处可见。这是一个动态的billboard系统,可根据摄像机的角度允许树木呈现的不同侧视图。它包含不同的纹理通道达到更复杂的光照效果,例如保持光照关系,假投影和半透明。
原文链接:
https://80.lv/articles/procedural-world-building-in-ghost-recon-wildlands/
https://80.lv/articles/vegetation-generation-in-ghost-recon-wildlands/
扩展阅读:
[技术分析]探讨大世界游戏的制作流程及技术——前期流程篇
探讨大世界游戏的制作流程及技术——大场景制作技术概况篇