翻译:《漫威蜘蛛侠 2》:Insomniac Games 程序化内容创作的十年历程

译者注

主题原名 Marvel’s Spider-Man 2: 10 Years of Procedural Content Creation at Insomniac Games。看来分享过两次:
一次是 GDC2024 ,可惜只有会员能看。
不过另一次是Houdini官方Youtube上发的分享,所有人都可以看到:Ten Years of Tech Art for Marvel’s Spider-Man | Xray Halperin | EPC 2024。本篇将依据这次分享来翻译。

完整PPT可以在这里下载到:https://drive.google.com/file/d/1HEkp3leOLMA-v2fe2IHN9J4lxdXNyDHU
在这里插入图片描述

0. 技术美术方法论

在 Insomniac Games,TA部门在核心引擎上工作,为开放世界创作提供程序化解决方案。

  • 我们使用专用的引擎,创造定制化的解决方案。
  • 大多数数据是预先烘焙好的,并非在运行时生成的。
  • 一些系统在多部游戏中被复用,一些系统进化,一些新系统被创造。

在这里插入图片描述

在很多程序化内容中,Python和Houdini都提供了基础框架
在这里插入图片描述
程序化TA团队从2013的一个人,成长到2016的两人。Insomniac Games 的游戏越来越多地使用程序化技术,很多部门都开始采用TA的工作流,VFX和角色特效在TA的支持下开始开发他们自己的工具和技术。
在这里插入图片描述
漫威蜘蛛侠的大部分开放世界都曾经被程序化系统创作或编辑。所有的漫威蜘蛛侠游戏都是“流式加载(Streaming)”的游戏,这意味着它是不间断地基于玩家的移动来加载内容。我们游戏流式加载的架构引导了创作开放世界的解决方案。
在这里插入图片描述
漫威蜘蛛侠1的开放世界被划分为 726 个 Tile,每个 Tile 区域由多个 .zone 文件定义,它们是json文件,引用了给定Tile区域内的资产,Tile区域成为处理数据的基本工作单元,例如,一个 Tile 可以是 PDG 网络中的一个工作项
在这里插入图片描述
下面是《漫威蜘蛛侠2》完整流式加载系统运行的视频。高分辨率资源在摄像机附近加载,而 Impostor 和 Hibernation 系统处理远处距离玩家超过256米的几何体。高分辨率资源及其LOD由存储在预制件中的多个模型实例组成。
在这里插入图片描述

所谓的 “Impostor” 是一个单片mesh,但投影了贴图存储在贴图集中。高质量资源流式卸载后,会被远处与其关联的Imposter替换。

我再次强调,这种流式加载的架构指导了我们如何找到创作开放世界的解决方案。

下面,Impostor 系统被关闭,因此我们可以更清楚地看到流式加载的内容:
在这里插入图片描述
游戏不断加载玩家所在的 Tile 以及玩家周围的九个 Tile。当资产的中心到达流式加载区域的边界时,几何体达到其最低的 LOD,纹理达到最低的 MIP,随后内容卸载并由始终存储在全局驻留内存中的 Impostor 取代。

下面的Json代码片段代表了一个Tile的街道区域:
在这里插入图片描述
每个流式加载的Tile区域都包含与该流式加载区域相关的 zone、预制件、体积、标记和gameplay的引用。

为了分析和修改开放世界的游戏内容,我编写了一个管线将游戏数据从我们的专有引擎和关卡编辑器导入到 Houdini 。
在这里插入图片描述
将游戏内容加载到像 Houdini 这样的 DCC 中时,Insomniac Games 大部分程序化工作流的第一步是从 zone 数据构建点云。Python 脚本会解析 zone 文件中的 Json 文件,并递归遍历所有引用。我们使用定制化的 HDA(Houdini digital asset)加载 Json 容器,构建一个由区域内每个模型实例的轴心构成的点云,然后从 Json 中读取属性,最后转换到世界空间。对于许多后续工具来说,这个点云就像一把 “多功能折叠刀”。
在这里插入图片描述
从点云属性得出的朝向会应用到模型实例上。TA随后可以根据这个信息创建更多的程序化工具。
在这里插入图片描述

1. 漫威蜘蛛侠1

让我们看看在 2017 年 PS4 首款蜘蛛侠游戏中,这些开放世界创作工具是如何诞生的。
在这里插入图片描述

1.1 开发世界创作

我们将从开放世界创作开始。

为了构建漫威蜘蛛侠的开放世界,最初的建筑是程序化生成的基础几何体和折线体积,并且没有Tile划分。
在这里插入图片描述
以程序化生成的灰盒布局为起点,美术师通过修改或添加基础几何体和折线来完善建筑形状。
在这里插入图片描述
程序化系统将处理这个开放世界的灰盒版本,将建筑套件中的模型实例化到布局形状的表面上,以创建建筑预制件。建筑组件模型和标记(例如“悬挂提示体(swing hint volumes)” 和 “窗台路径曲线” 以及其他标记)存储在建筑预制件中。屋顶可能自定义生成,也可能由多个矩形网格实例组成。
在这里插入图片描述
就像网页上有很多2D的HTML标记,漫威蜘蛛侠游戏里充满了3D标记,这些标记定义了玩家如何与世界进行互动,以及如何在世界中穿梭。虽然标记是程序化生成的,但是有些不够“标准”的建筑上会有缺失或不正确的标记,此时还是需要美术师或设计师手工标记。
在这里插入图片描述
标记类型包括:

  • 悬挂提示体积( swing hint volumes )
  • 窗台路径曲线(ledge path curves )
  • 墙面爬行碰撞点(wall crawl Collision Poes )
  • 墙面爬行阻挡体积(wall crawl blocker volumes )

漫威蜘蛛侠的开放世界由 8300 座建筑组成。
在这里插入图片描述
创建街道布局意味着要定义一组曲线来标记各种资产类型(例如高速公路、林荫大道、街道和小巷)的位置。我们从曼哈顿岛的轮廓开始。
在这里插入图片描述
我们通过这些直线和曲线生成街道、人行道、灰色空间和海堤。而街道的 “参数”、“方向” 和 “样式选择” 将体现在曲线的命名约定中。
在这里插入图片描述
结果生成的模型和数据可被其他程序化系统使用,例如放置:

  • 遭遇战(encounters)
  • 小型剧情插曲(vignettes)
  • 物件(props)
  • 行人(pedestrians)
  • 车辆交通(vehicle traffic)

地面修改器(Ground Modifiers)会影响环境的构造方式。下面黄色的覆盖层代表地面修改器区域:
在这里插入图片描述
地面修改器会对街道和人行道进行:切割成型、修改、添加材质。

程序化生成的地面定义了关键的空间和地标。每个128米的Tile进一步被切成16个模型,这样每个模型对于物理或其他系统管理来说都是一个可控的尺寸。
在这里插入图片描述
下面可以看到一个流式加载的Tile里,一个地面被切割成 16 个模型,并与程序化物件系统创建的街道与人行横道模型一起保存在一个预制件中。地面预制件通常包含用于地面的扁平物品和贴花。
在这里插入图片描述
为了配合《漫威蜘蛛侠 2》的规模扩张,道路曲线网络也扩大了规模,以容纳布鲁克林和皇后区。
在这里插入图片描述

1.2 音效

在漫威蜘蛛侠游戏中,程序化技术也被用来协助描绘出音频环境。
我们使用程序化系统来根据曼哈顿的几何布局推算出哪里需要放音频体积。
在这里插入图片描述
而曼哈顿海堤边缘的发射器,定义了岛屿和水之间音频的边界融合方式。
在这里插入图片描述
对于曼哈顿城市内的音频混响体积(Reverb volumes),在概念验证阶段,音频部门手动为单个区域布置音频体积(这项工作会花费两三天)。因此需要一个程序化流程来让创作和更新音频体积的效率更高。
在这里插入图片描述
我们创建了一个管线,根据曼哈顿街道曲线和建筑预制件的边界框来做推断,生成街道和建筑物之间的音频混响体积。街道曲线的命名约定,以及音频体积的尺寸,将表示出每个音频体积的的混响(reverb)和延迟(delay)的预设。当开放世界布局发生变化时,我们可以随时更新音频体积。
在这里插入图片描述
最终,所有音频体积都被写入相关的流式加载Tile区域。
在这里插入图片描述
从《漫威蜘蛛侠 2》开始,我们提高了建筑物高度阈值,并为布鲁克林和皇后区增加了音频混响体积。
在这里插入图片描述

1.3 其他生成器体积

使用与音频体积类似的技术,我们程序化地为下面内容放置生成器体积(spawner volume):
(1)行人
在这里插入图片描述
(2)停放的汽车
在这里插入图片描述
(3)远距离行人(这可以保持行人走向远方的假象)
在这里插入图片描述
以上三者的结合让曼哈顿变得“繁荣”。

1.4 交通系统

道路曲线网络同时也驱动了程序化放置行人和控制车辆交通。
在这里插入图片描述

在人行道上放置行人生成器体积后,我们编写了一些工具,用于创建连接每个人行道角落和公交车站以及地铁站周围的路径网络,也包括临时手工创建的路径。
在这里插入图片描述
通过解析 Houdini 中的曲线,我们为交通节点和节点之间的状态创建json。

关卡编辑器中,调试模式下可视化的颜色会根据交通信号灯的状态而变化。
在这里插入图片描述
下面这个复杂的区域里,人行道和车道交织在了一起。
在这里插入图片描述

1.5 街道标志

用于驱动地面生成的曲线网络,同时也负责程序化生成街道标志。

我们来看看漫威蜘蛛侠2中布鲁克林皇后区金斯顿大道和公园大道的交叉口。
在这里插入图片描述
在遍历代表街道的每条曲线时,我们为每个独特的街道名称生成一个贴图。Insomniac Asset Vault(译者注:应该类似UE的内容浏览器) 的这个视图展示了一系列街道标志的贴图:
在这里插入图片描述
每个街道标志开始都是街道名称的空白占位符,随后被正确的街道名称的贴图覆盖。
在这里插入图片描述
当 Houdini 遍历每个交叉路口时,它会寻找最近的街道标志,计算街道标志的方向,将方向与街道名称匹配,并将贴图作为覆盖应用于正确的标志上。
在这里插入图片描述
在《漫威蜘蛛侠 2》中,我们使用与《漫威蜘蛛侠1》相同的系统,将所有街道名称添加到布鲁克林和皇后区的扩展区域。

下面 Json 代码片段表示街道标志预制件上的贴图覆盖。该覆盖由在 Houdini 中运行的 Python 脚本程序化生成,并添加到开放世界中的每个街道标志实例中。
在这里插入图片描述

1.6 Impostors

术语 “Impostors” 通常指使用纹理贴图投影到多边形上来表示几何体资产。
MACIEL 和 SHIRLEY 在 1995 年的论文《Visual navigation of Large Environments Using Textured Clusters》中描述了 “视角相关型” 和 “视角无关型” 的Impostors
在这里插入图片描述
对于 “视角相关型”(译者注:口述的是“视角无关”,但是PPT上包括后续PPT上都写得是“视角相关”,后续翻译将选择 “视角相关型”),高分辨率资源被围绕半球排列的多个摄像机拍摄。通过计算渲染摄像机的视角,来选择最匹配的纹理贴图投影。而这会导致每个Impostor 有多个纹理。

在这里插入图片描述
这有如下限制:

  • 使用 “视角相关型” 时,贴图的数目可能会非常大。
  • Billboard技术缺乏视差效果,但现代开放世界游戏很需要视差来提供逼真度。
  • 简单的贴图投影无法处理反射或自发光这些表面属性。

在这里插入图片描述
通过将组成建筑物预制件的所有模型实例合并为一个减面的模型,并拍摄所有可见的面得到纹理图集,Insomniac 引擎只需要一个 Draw Call 即可渲染远处的Impostor
在这里插入图片描述
当将许多模型实例的预制件转换为 Impostor 时,我们从最低级别的LOD开始,然后使用前面提到的点云实例化方法将其加载到 Houdini 中进行组装并减面,并使用一些技术来去除内部细节但保留轮廓。
在这里插入图片描述
在 Insomniac 引擎中,我们拍摄 Imposter 几何体并生成正交的纹理图集。

左侧为带纹理的 Impostor,中间为最低 LOD,右侧为无纹理的 Imposter。
在这里插入图片描述
构成轮廓的天线和空调等道具被单独标记,并由远距离的 Hibernation 系统在运行时处理。

随着每部《漫威蜘蛛侠》作品的推出,Insomniac 工作室都会提升 Impostor 的逼真度。《漫威蜘蛛侠:重制版》中的 Impostor 使用与《漫威蜘蛛侠:迈尔斯·莫拉莱斯》相同的纹理密度和分辨率。对于《漫威蜘蛛侠:迈尔斯·莫拉莱斯》,我们提高了纹理密度。然而,我们必须根据目标平台 PS4 或 PS5 支持不同的纹理密度(毕竟这两个平台跨越了一个时代)。
在这里插入图片描述
对于《漫威蜘蛛侠 2》,我们再次增加了纹理密度。
在这里插入图片描述
我认为一天中大多数时间里结果看起来都很好。
在这里插入图片描述
对于《蜘蛛侠 2》,我们将Impostor系统从 Houdini 中拿出,并直接在 Insomniac 关卡编辑器中构建了一个工作流。想要深入了解的可以看 Scott Kircher 在2024GDC上的分享《Applied Mesh Analysis: Automating Distant-City LODs in ‘Marvel’s Spider-Man 2’》

在这里插入图片描述

1.7 Vignettes(插曲遭遇)

插曲遭遇系统(Vignette Encounter System)工作流是在 Houdini 中实现的。
每个遭遇放置模块包含用于根据规则和指标放置小插曲的操作。

  • 第一个输入包含有关道路、环境点云和碰撞的稀疏数据。
  • 第二个输入提供有关先前放置的遭遇位置的反馈,因为必须在loop(译者不确定怎么翻译)中考虑这些。

在这里插入图片描述
我们有限度地暴露了一个接口,用于在开放世界中添加遭遇点。该模块会计算所有满足放置指标的位置,过滤掉已占用和被排除的位置,并根据所需的密度或数量进行筛选。
在这里插入图片描述
下面是唐人街 “逮捕犯人插曲遭遇” 的示意图(图中是正在被逮捕的罪犯)。这里一个简单的放置规则是:每个点在任意路线上都至少相距 150 米,并且都距离人行横道超过 9 米。
在这里插入图片描述
仅当正确放置时,小插曲的默认预制件才能在游戏中完全发挥作用。所以,我们会运行一个程序化的分析来检测小插曲的资产的包围盒是否与开放世界的几何体有碰撞。我们把任何有可疑相交的几何体资产都标记出来,然后由人工评估每个可疑相交的小插曲资产,看是否需要调整来适应环境。
在这里插入图片描述
最终,我们在游戏环境中看到了小插曲。
在这里插入图片描述

1.8 光照

在所有漫威蜘蛛侠游戏中,光照网格(light grids)和光照探针(light probes)的程序化工具基本保持稳定,你可以在我的 2019 年 GDC 演讲《‘Marvel’s Spider-Man’: Procedural Lighting Tools》中看到这些内容。
在这里插入图片描述
在《漫威蜘蛛侠 2》中,我们将光照探针的数量从每Tile 2x2 网格增加到了每Tile 3x3 网格。在下图中红色球体表示光照探针(可能有点难看清)。
在这里插入图片描述
在《漫威蜘蛛侠2》中,我们在光照网格的计算中加入了对植被的考虑,并将每个流式加载区域的光照探针数量从 2x2 增加到 3x3 来提高反射的逼真度。此外,我们还添加了低、中、高级别的光照探针。

1.9 水洼

对于漫威蜘蛛侠游戏,“水洼” 是一个必谈的的话题。在《漫威蜘蛛侠1》中,我们根据表面的几何体的顶点颜色阈值,来程序化地放置水洼资源和水花。
在这里插入图片描述
对于《漫威蜘蛛侠 2》,我们程序化地删除了所有水洼资产,因为它们现在已经被集成到更新的地面材质网络中,由材质直接控制。
在这里插入图片描述

2. 漫威蜘蛛侠:迈尔斯·莫拉莱斯

之后,我们继续为《漫威蜘蛛侠:迈尔斯·莫拉莱斯》开发程序化系统,这是一款同时在 PS4 和 PS5 上发布的跨平台游戏。
在这里插入图片描述
可玩区域略微增加
在这里插入图片描述
程序化系统在多个工作流中都发挥了作用,包括对曼哈顿进行改变季节的“换肤”。
在这里插入图片描述
《漫威蜘蛛侠:迈尔斯·莫拉莱斯》的故事背景设定在冬季,所以需要更新曼哈顿的环境。

下面的 Houdini 网络中的很多对象代表了为《漫威蜘蛛侠:迈尔斯·莫拉莱斯》程序化生成内容所需的各种工作流。
在这里插入图片描述

2.1 放置雪

《漫威蜘蛛侠:迈尔斯·莫拉莱斯》从秋季到冬季的转变很大一部分来自于增加的雪。
在这里插入图片描述
地面会被添加顶点色以驱动shader组件。顶点颜色控制沥青路面和人行道上冰的方向。其他程序化系统会测量路沿并以合理的指标放置雪堆,同时避开车道和拐角。
在这里插入图片描述
类似的系统在车道线上放置雪堆。
在这里插入图片描述
下面,我们将用GreenWich中一个名为M35的Tile来举例。
在这里插入图片描述
M35 是流式加载Tile中的一个典型代表,它的组成是一些街道地面,各种街道和人行道,以及一些中层建筑。(我想指出的是,M35 是我个人最喜欢的测试Tile。为什么呢?因为奇异博士在曼哈顿的圣所就在这里。)

下面是这个Tile在 Insomniac 关卡编辑器中最终显示的样子。
在这里插入图片描述
道路和路沿的积雪资源是预制件,由多个模型实例组成,尺寸分别为 2米、4米、8米、16 米。最终资源被收集到一个集合里,显示在 Insomniac Asset Vault 中:
在这里插入图片描述
放置雪的步骤:

首先,我分离出地形:
在这里插入图片描述
然后,分离出路沿的边
在这里插入图片描述
对于分离出的路沿的边,我把拐角处往回裁掉了一点,以防止雪堆积在 accessibility ramps(译者不确定怎么翻译)
在这里插入图片描述
接下来,我裁掉了车道或地铁入口附近的区域。
在这里插入图片描述
对于以上步骤得到的曲线,我通过测量长度并从集合中选择合适的模型沿着曲线实例化它们。
在这里插入图片描述
我使用类似的系统在建筑物底部周围添加“雪裙”(因为它们像建筑的“裙子”)。
在这里插入图片描述
最后根据需要从集合中实例化不同的雪资产。
在这里插入图片描述
最后将所有雪资产放入流式加载Tile的区域里
在这里插入图片描述
在《漫威蜘蛛侠 2》中,这个在建筑物周围生成雪裙的系统被再利用于一个新的模型集合:
在这里插入图片描述
这是为了在曼哈顿遭到沙人袭击后,建筑物周围生成的“沙裙”
在这里插入图片描述

2.2 顶点色绘制

我们用顶点绘制颜色来驱动沥青路面上冰的方向性。
在这里插入图片描述
可以在GL渲染中看到几何体的顶点颜色属性。
在这里插入图片描述
下面视频展示了 Houdini 与 Insomniac 关卡编辑器的紧密配合。左侧是 Houdini,右侧是关卡编辑器。
在这里插入图片描述
当地面几何体绘制的顶点颜色保存到磁盘上时,二进制数据会实时构建并直接导入关卡编辑器。左侧是一位美术师正在调整顶点颜色的红色通道,该通道控制着结冰路面纹理的方向。这里的美术需求是在道路上添加方向性的条纹,而在交叉路口添加无方向性的噪点图案。

2.3 屋顶间的跳跃轨迹

漫威蜘蛛侠迈尔斯·莫拉莱斯还引入了一个新的敌人——Underground。
在这里插入图片描述
这些敌人有科技从一个屋顶跳到另一个屋顶,通过 3D 路径寻找功能,在 Houdini 程序化生成的导航轨迹标记的帮助下,追逐蜘蛛侠。
在这里插入图片描述
程序化放置导航轨迹时,首先将路径端点设置在预期位置,然后通过射线投射的方式找到从一个端点到另一个端点的清晰的中间航点路径。系统尝试至少生成一条通往每个相邻屋顶或人行道的路径。这使得敌人能够在城市里追逐蜘蛛侠。

边缘标记和屋顶几何体共同驱动了从屋顶到屋顶的可能的有效跳跃路径,会用一些启发式的方法,例如垂直和水平的最小最大距离或使用点乘计算最大角度。
在这里插入图片描述
再以我们的老朋友M35举例
在这里插入图片描述
首先提取边缘标记
在这里插入图片描述
并将其与屋顶和建筑覆盖面相结合
在这里插入图片描述
然后对符合我们标准的可能路径进行判断
在这里插入图片描述我将使用各种启发式方法和规则进一步筛选可用路径。
在这里插入图片描述
然后 lather rinse(译者不知道咋翻译),并在开放世界的所有流式加载Tile区域上重复。
在这里插入图片描述
以下是关卡编辑器中M35这个Tile最终的导航数据轨迹。连接起点和终点的线条使其看起来像是一些导航轨迹穿透了墙壁。 中间有一个辅助体积允许Underground的敌人以弧形跳跃。
在这里插入图片描述

2.4 曲线转模型工具

对于《漫威蜘蛛侠迈尔斯·莫拉莱斯》,我们引入了“曲线转模型工具(spline to model tool)”。该工具使用 Insomniac 关卡编辑器向美术师暴露了 HDA(Houdini Digital Asset)的一些控制,例如横截面控制、放置选项控制、沿曲线实例化模型、沿曲线sweep几何体。一个基于python的导入器为在编辑器中添加的属性动态地创建Houdini属性,并将其发送给Houdini。
在这里插入图片描述
该工具可以放置单个资产或从集合中选择用于实例化的资产。
在这里插入图片描述
下面是《漫威蜘蛛侠迈尔斯·莫拉莱斯》中的 “曲线转模型工具” 的一个最基础的示例。多种资产被实例化或沿着绿色曲线sweep。
在这里插入图片描述
从这个视角,我们可以看到中央公园的一条小路上有一组不同的树木。
在这里插入图片描述
where we placed a paved path beneath the trees along with some pedestrians who appear to have lost their heads.
在这里插入图片描述
美术师和设计师发明了各种不同的方法来使用 “曲线转模型工具”,包括使用曲线和高速公路模型横截面来创作这些匝道(Off Ramps)。
在这里插入图片描述
在《漫威蜘蛛侠 2》中,我们直接在关卡编辑器中集成了 Houdini,从而无需使用专门的 “曲线转模型工具”。Houdini的集成让美术师可以使用 Houdini HDA 直接在上下文中创作游戏内容。
在这里插入图片描述
这被广泛用于高速公路和火车轨道。
在这里插入图片描述
在这里插入图片描述

3. 漫威蜘蛛侠2

在这里插入图片描述
《漫威蜘蛛侠 1》在开放世界中拥有 720 个Tile。
在这里插入图片描述
《漫威蜘蛛侠:迈尔斯·莫拉莱斯》拥有 735 个Tile。
在这里插入图片描述
《漫威蜘蛛侠 2》在开放世界中拥有 1,794 个Tile,因此整体游玩区域几乎翻了一番。
在这里插入图片描述

3.1 Load Hint系统

Insomniac 为《蜘蛛侠 2》引入了一套名为 “Load Hint” 的新系统,用于帮助管理永久驻存的环境特效。Load Hint 系统是对《蜘蛛侠》和《迈尔斯·莫拉莱斯》中广泛使用的旧版 Overlay 系统的改进。
在这里插入图片描述
《漫威蜘蛛侠1》采用三幕叙事。在游戏过程中,曼哈顿从一个繁华的大都市演变成一个濒临崩溃的城市。到了第三幕,城市已经陷入了困境,银貂基地和囚犯基地需要持久存在,并且在远距离可见。因此,当触发该游戏状态时,我们使用了 Overlay 系统来创建银貂基地和囚犯基地的持久存在。
在这里插入图片描述
这种变化由Overlay区域控制,使得美术场景可以被加载和卸载。但 Overlay 对 Impostors 的支持并不好,它有点临时性,依赖于一些脆弱的命名约定和人工操作来保持 Overlay 的更新。没有一个中央系统来查找游戏中所有可能的 Overlay 。

在《漫威蜘蛛侠2》中,我们引入了 Load Hint 系统。此Json代码片段表示 Load Hint 的动态枚举。Load Hint 需要动态枚举来指定游戏内的世界状态。在此示例中,Load Hint 控制沙人攻击和随后恢复后开放世界中剩余的沙子量。
在这里插入图片描述
Load Hint 系统在许多任务中取代了Overlay,并且对 imposters 有良好的支持。Load Hint 用于控制预制件中的 Actor 何时加载和显示。然后美术师可以利用这些动态枚举来标记在区域中找到的任何预制件 Actor,以指明何时显示这些物体。这使得《漫威蜘蛛侠 2》中所有世界层面的系统都支持多个动态、一致且持久的世界状态。
在这里插入图片描述
《漫威蜘蛛侠2》中另一个持续性环境影响的例子发生在毒液共生体占领曼哈顿期间。此视频展示了共生体世界状态的示例,以及此Tile的 Impostor 和 Load Hint 。
在这里插入图片描述
显然 the impostor is quite decimated(译者不确定怎么翻译), 但这是设计使然,因为 Impostor 是为远距离视角设计的。

对于共生体的占领,我们沿着一条曲线实例化了大约 20 个共生体资源。材质网络使用了 Houdini 烘焙的顶点流数据和法线贴图。
在这里插入图片描述
占领曼哈顿的共生体是 Load Hint 的 Impostor 和程序化生成的环境美术的结合。
在这里插入图片描述

3.2 色彩体积(Color Volume)

核心渲染团队在 Insomniac 引擎中引入了 Color Volume 类型的资产。
在这里插入图片描述
Color Volume 提供了一种方式可以应用大面积的特别的遮罩。它们的作用类似于一个隐形贴花,可以将纹理投射到所覆盖的几何体上。贴花本质上是投影纹理,而与贴花不同的是,Color Volume 是通过材质进行采样的。Color Volume 投影的颜色值在场景中并不直接可见,而材质网络可以读取空间点的颜色值来驱动材质网络中的逻辑。
在这里插入图片描述

Color Volume 的用途与 “手工绘制顶点色” 类似
在这里插入图片描述
但 Color Volume 具有一些关键的优势:
Color Volume 不依赖于所覆盖的几何体的细分程度,这让遮罩的应用会更加可控,几何体也无需为了顶点颜色而进行过度细分。Color Volume 在不同的 LOD 上都能正常工作。并且即使受影响的几何体被修改或重新制作,Color Volume 的信息也不会丢失,因为 Color Volume 完全独立于几何体。
在这里插入图片描述
Color Volume 为在 Houdini 中运行的物理模拟提供了更直接的工作流程,他会将结果写到纹理中,然后应用在环境材质上的一些特征上,例如污垢和风化。

但是,Color Volume 的纹理像素密度较低,可能在每米1到4个纹理像素之间。如果只靠自己,Color Volume 纹理本​​身的分辨率不足以存储有效的视觉细节。
在这里插入图片描述
这是一面普通的旧墙,我们要将 Color Volume 应用上去。
在这里插入图片描述
在材质着色器中,Color Volume 节点在每个位置对 Color Volume 进行采样,并在两个基础纹理贴图之间创建插值。
在这里插入图片描述
以下是仅查看 Color Volume 时的效果:
在这里插入图片描述
以下是应用到资源上的效果:
在这里插入图片描述
在风化纹理中,红色通道可能看起来像这样:
在这里插入图片描述
当应用于开放世界中的建筑预制件上时,我们可以查看 Color Volume 的原始数据
在这里插入图片描述
根据使用情况,每个颜色通道可以驱动一些材质属性,例如风化、污垢、灰尘或潮湿。
在这里插入图片描述
在每一个Tile中,对于建筑预制件我们为每个方向分配一个 Color Volume,对于地面预制件我们分配一个 Color Volume。
在这里插入图片描述

3.3 资产标签系统

在《漫威蜘蛛侠2》中,我们添加了资产标签(Asset Tagging)系统。

对于构成《漫威蜘蛛侠2》大部分建筑的 “模块化建筑套件”(modular building kits),我们使用了资产标签来支持下游的程序化系统。
在这里插入图片描述
“自动标签HDA” 会使用python搜索与已知搜索字符串匹配的构建套件部件的预先定义的资产路径,以得出最终标签。
在这里插入图片描述
我们创建一个点云来保存资产的属性,这样下游流程便可以像处理几何体那样处理解析的数据。我们依次导入每个模型并验证其内容,确保文件名可解析,并且几何体具有所有预期的特征。
在这里插入图片描述
最后,HDA 生成 Insomniac Asset Vault 标签所需的元数据。
在这里插入图片描述
例如,Houdini 中的这种建筑变体HDA,它根据建筑套件的样式,将匹配的建筑套件部件从一个预制件替换为一个新的预制件。
在这里插入图片描述

3.4 蜘蛛网

最后让我们讨论下蜘蛛网。

《漫威蜘蛛侠1》和《蜘蛛侠迈尔斯·莫拉莱斯》的蜘蛛网使用了一些简单的几何图形,这些几何图形通过着色器连接到骨骼绑定上,呈现出蜘蛛网的外观。
在这里插入图片描述
对于《漫威蜘蛛侠 2》,我们探索了更高逼真度的选择,使用新的几何体,将其连接到现有的蜘蛛网骨骼绑定上。
在这里插入图片描述
为了生成网状锥体,我们在粒子系统中添加了轨迹,然后添加一些扭曲和噪点,并对结果进行蒙皮。对于次级附着点,我们根据第一个粒子系统的端点创建了另一个粒子系统,对粒子进行轨迹、蒙皮处理,然后将它们合并在一起。最后,一个打结的附着点被添加到网状锥体的底部。
在这里插入图片描述
为了进一步提升网锥和网线结的效果,我们使用了可编辑的曲线映射和表达式来驱动卷绕效果。
在这里插入图片描述
从基本的样条曲线形状(例如逐渐扩大的螺旋)开始,美术师调整线段的缩放幅度和频率,然后蒙皮、调整减面和UV映射,最终将几何体导出到引擎。
在这里插入图片描述
the web Cones were added to the stealth web lines but scaled to be flat (译者不知道什么意思)
在这里插入图片描述
这里有一些蛛网线结和毒液蛛网的例子:
在这里插入图片描述
对材质的最终改进使蜘蛛网在最终游戏中呈现出更精致的外观。
在这里插入图片描述
最后我想给大家分享一些关于《漫威蜘蛛侠 2》的有趣事实:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值