Origin
zhuanlan.zhihu.com
Tags
开放世界
程序化
经验分享
技术详解
项目
幽灵行动:荒野
收藏夹
创建时间
收藏类型
Cubox 深度链接
更新时间
原链接
描述
上一篇我们笼统介绍了其程序化技术的应用以及实际项目遇到的问题。
本节是《幽灵行动 · 荒野》大世界制作技术的第二章。技术美术工程师 Erwin Heyms 展示了他的团队在开放世界游戏中如何处理小城市,河流和道路的程序化生成的一些细节内容。
notion image

道路与河流

加入 Ghost Recon Wildlands 项目时,创建道路是我的首要任务。 当时,我们正在研究如何 houdini 应用到我们的开发流程当中。我们想要创建一个巨大,逼真且美丽的,玩家可以真正深入体验的开放世界。使用传统的地形雕刻技术来创建荒野世界是一项艰巨的任务,这就是我们决定创建程序化工具的原因。
我们有数千公里的公路,这是多姿多彩的玻利维亚独特的景观构成。要使整个景观世界有一个连贯统一的公路,我们需要一个统一的计算系统。
notion image
我们的道路系统运行得非常快,这使我们见识到自动化工具对于驱动制作流程的强大作用。这大大提高了我们迭代道路系统的速度,而且它还为我们提供了大量的关联数据,我们可以将其用于其他程序化工具以及游戏逻辑数据中。
路网系统本质上是一种定制的寻路算法,它会依赖地形的特征进行计算。 设计人员只需要为每段道路设置路点,并告诉工具要创建哪种类型的道路,就会自动生成道路并嵌入到当前的路网中。 该工具必须易于使用,并且对我们的美术师来说足够灵活,因此,我们要确保设计人员可以方便调整道路的弯曲走向,比如能决定哪些区域寻路算法应该跳过,比如新建的路段要以多大的粘度融入原本的路网中。
notion image
这听起来可能很复杂,但实际上非常容易理解,这其实跟在现实世界中构建道路的思路是一样的。在现实世界中中,道路的规划决于建筑成本以及如何生产最便宜的道路。
在后台,我们的路网系统基本上就是这样做的。我们给寻路器定义一些特性,比如遇到陡峭的斜坡,我们的道路会呈现很多急转弯的走向;遇到平坦的地势就会稍微平顺一些。最终,会生成一个中蜿蜒盘旋的山路的感觉。
同时,寻路器会遵循现有的道路网,按照实现世界建路原则(成本低廉),新创建的道路将会融入到现有的路网中并且合理设计道路分叉。这个功能尤其有利于构建一些非常美观逼真的路网。
notion image
至于我们如何将道路网络应用于地形……
我们通过导出获得一系列的高度图应用到地形上,使得地形变形以适配路网,同时导出材质权重图来标记路网区域的材质。
为使加快工作流程,路网的地形变形的计算会放在渲染农场上进行,每当设计师完成铺设道路的工作时,他们都可以将数据推送到渲染农场,几分钟之内就可以得到结果并贴在地形上了。
notion image
铁路和河流工具使用类似的过程,它们都使用寻路算法,但规则不同。
铁路工具比道路需要更浅且更平坦的路径,并在尝试穿越山坡时沿途创建了隧道和桥梁。
Twan De Graaf 生产的河流和小溪只允许出现在沿着山坡下行的地方,并且寻路是从山顶开始最近的水域。
notion image
最终,河流,道路和其他元素的融合有时会创造出一些令人惊叹的效果。

城市建筑

最大的挑战之一是使城镇看起来逼真,尤其是对于不同的环境和规模。
道路连接必须合理,城镇必须看起来好像是向外发展,中心的大型建筑向外辐射到较小的房屋和农田。
交给设计人员的工具的第一个版本可以建立看起来像乡村的城镇。
它建造了一系列主要街道,较小的街道将中心连接起来,并向外辐射到郊区和农田。
notion image
notion image
这种方法效果很好,但是与生产中的许多其他事情一样,一旦赋予艺术家更大的创作能力,他们就会想要更多。
notion image
虽然我们的设计师能够手动绘制或清除道路,但这种形式的工具太局限了,无法产生令人信服的结果。
我们真正需要的是创建城市,这意味着我们需要解决更多更复杂的问题。 因此,对于第二个版本,我添加了对网格道路,人行道,建筑物行和其他一些功能的支持。
notion image
该工具还需要一些时间来计算建筑物的位置。“计算时间” 随着您要创建的解算区域的增加而呈指数增长。
一次计算我们一些最大的城镇的所有建筑物可能需要 20 分钟。 但是,可以通过将数据缓存到磁盘来减少解算时间,这还可以一次在较小的群集中计算建筑物的位置。

算法

建筑物放置系统可能是整个解算工具中最复杂的部分。
它使用了一种自我感知的打包算法,我们可以获取一系列建筑物,每个建筑物都有自己的放置在城镇中的规则。
该算法尝试按优先级顺序或预定比例从列表中放置每个建筑物。 该工具会首先对关键性地标建筑进行优先级排序,然后填充上的其余部分:房屋和市场摊位等其他真正使城镇栩栩如生的二级建筑结构。
该算法的工作原理是根据道路将城镇划分成多个区域,然后从里到外扫描每个区域以查找合适的放置位置。
然后,它收集有关这些位置的各种信息,然后对照建筑列表,判断哪些建组适合放置在这些区域。
这些位置上的信息包括:与市中心的距离,水边或附近的铁路,地形的坡度、由设计师特别指定的信息。
notion image
notion image
该工具还会查看有关已放置的其他建筑物的信息。
如果城镇中已有教堂,则不会在该教堂附近 150 米之内产生另一座宗教建筑。
总共我创建了 70 多个不同的规则和条件,我们可以为每个建筑物设置这些规则和条件,这确实使放置算法变得非常强大和灵活。
如果我们出于任何原因不得不搬迁或更改城镇,该工具可能会使这项本来很繁重的任务变得非常容易。
综上所述,在发展过程中,最大的城镇之一巴维乔斯(Barvechos)可能已被完全重建了 5 次以上。
notion image

植被

大场景的植被放置由两个部分组成
  • 草:根据地形材质的权重密度图进行分布
  • 树、灌木:灌木和树木的散布规则由 Houdini 工具计算并生成点云数据的方式实现
notion image
散布树木和灌木丛基于一个非常简单的概念 “cascade”:下图中,红色的点表示大树,绿点代表中型树,蓝色点代表小树和灌木丛。
notion image
为了增加复杂性,我们首先调整密度,比例,坡度,资源之间的空间等。然后再添加额外的一些规则,比如朝阳面、比如规定哪些物种对应地表哪一层材质、多层地表材质之间的包容和排斥,例如雨水侵蚀,河床,悬崖等等。最后,我们结合这些规则删除一些不正确的植被分布。在道路,铁路,水域和行人路上,植被会被自动删除。
我们与地形 / 岩石美术师紧密合作,以匹配地表分配规则(是指 splat map)和植被规则。这样,与植被分布有关的地表材质,岩石和 flowmap 直接影响了森林在远处呈现的效果。
notion image
在资源方面,我们尝试对同一物种采用不同的结构,并避免每个群落具有太多不同的物种,这是会更自然一些。您使用的物种越多,就越难做到真实和自然。
notion image
在性能方面,密度是一个问题。我们提出的解决方案是:我们没有采用每种资源固定的 LOD 距离值得方法,而是决定采用更灵活的方法:根据植被密度来调整 LOD 值。
因此,根据其在世界上的位置,同一资源可能具有不同的 LOD 值。更高的密度意味着 LOD 更激进,会更快地切换到最后一层 LOD:Imposter
notion image
Imposter 是建造如此大的森林的最后一个重要组成部分,从远处可见。这是一个动态的 billboard 系统,可根据摄像机的角度允许树木呈现的不同侧视图。它包含不同的纹理通道达到更复杂的光照效果,例如保持光照关系,假投影和半透明。
notion image
notion image
notion image
原文链接: