← 返回首页
《漫威蜘蛛侠2》:十年程序化内容创作历程
核心观点
「一个从 2013 年只有 1 人起步的技术美术团队,用点云与 Houdini 把纽约从 726 个 Tile 程序化'生'到 1,794 个,撑起了三代《漫威蜘蛛侠》的开放世界。」
原标题'Marvel's Spider-Man 2': 10 Years of Procedural Content Creation
作者简介 Xray Halperin · Insomniac Games 资深技术美术(Senior Technical Artist),职业生涯横跨电影、广告、线下娱乐与游戏;2013 年起主导《漫威蜘蛛侠》系列的程序化内容创作,多次在 GDC 分享开放世界程序化管线(Impostor、程序化光照工具等)。
十年管线:从 1 人团队起步
- 演讲定位:GDC 2024「视觉艺术」场次,Insomniac Games 技术美术 Xray Halperin 主讲,复盘 2013–2024 十年间《漫威蜘蛛侠》系列程序化内容创作的演进;同内容也在 Houdini 官方 EPC 2024 以《Ten Years of Tech Art for Marvel’s Spider-Man》免费分享。
- 方法论核心:TA(技术美术)部门直接工作在核心引擎上,为开放世界创作提供程序化方案——用专有引擎与定制化工具,绝大多数数据预烘焙而非运行时生成,系统在多部游戏间复用、演进或新建。
- 基础框架:Python 与 Houdini 提供程序化内容的底座;程序化 TA 团队从 2013 年 1 人、2016 年 2 人起步,随后 VFX、角色特效等部门在 TA 支持下自建工具,程序化技术被越来越多部门采用。
流式加载架构决定创作方案
- 流式加载是前提:所有蜘蛛侠游戏都随玩家移动不间断加载内容,「流式加载架构直接决定了开放世界的创作方案」。
- Tile 规模变化:蜘蛛侠1 开放世界分 726 个 Tile,迈尔斯·莫拉莱斯 735 个,蜘蛛侠2 达 1,794 个(游玩区域几乎翻倍);每个 Tile 由多个 .zone JSON 定义并引用资产,是数据处理的基本单元(如 PDG 网络中的一个工作项)。
- 加载策略:游戏加载玩家所在 Tile 及周围 9 个 Tile;高分辨率资源在摄像机附近加载,超过 256 米的几何体交给 Impostor 与 Hibernation 处理,卸载后由全局驻留的 Impostor 替换。
- 关键管线:编写 Python 脚本把专有引擎/关卡编辑器数据导入 Houdini——解析 zone 的 JSON、递归遍历引用,用定制 HDA 构建「点云」(区域内每个模型实例的轴心 + 属性),成为后续众多工具的「多功能折叠刀」。
蜘蛛侠1:工具从零诞生
建筑与街道
- 创作流程:程序化生成灰盒布局 → 美术师修改/添加基础几何体完善建筑形状 → 程序化系统把建筑套件实例化到表面生成建筑预制件。
- 3D 标记体系:世界充满「悬挂提示体(swing hint volumes)」「窗台路径曲线(ledge path curves)」「墙面爬行碰撞点/阻挡体积」等标记,定义玩家如何互动与穿梭;程序化生成后仍需美术/设计师手工补齐不标准建筑的标记。
- 规模与街道:开放世界由 8,300 座建筑组成;从曼哈顿岛轮廓开始,用曲线的命名约定表达街道参数/方向/样式,生成街道、人行道、灰色空间和海堤,结果被遭遇战、插曲(vignette)、物件、行人、车辆交通等系统复用;地面修改器(Ground Modifiers)切割街道并加材质;每个 128 米 Tile 切成 16 个模型,保证尺寸可控。
音频、交通与标志
- 程序化音频:根据几何布局推断音频体积(海堤边界发射器、街道与建筑间混响体积);此前音频部门手工布置单个区域要花 2–3 天,程序化管线可随布局变化随时更新。
- 生成器与交通:程序化放置行人、停放汽车、远距离行人生成器;道路曲线网络驱动行人放置与车辆交通节点 JSON。
- 街道标志:遍历街道曲线,为每个街道名称生成贴图,交叉口计算最近标志方向并匹配覆盖。
Impostor 与场景细节
- Impostor 远景替身:参考 1995 年 Maciel & Shirley 论文,采用「视角相关型」纹理图集,把建筑预制件所有模型实例合并减面、保留轮廓,一个 Draw Call 渲染远处整栋建筑;天线/空调等道具单独标记由 Hibernation 系统运行时处理。
- Vignette 插曲遭遇:Houdini 按规则与指标放置(例:唐人街逮捕犯人插曲,任意路线间距 ≥150 米、距人行横道 >9 米);程序化碰撞分析标记可疑相交资产,由人工评估调整。
- 光照与水洼:光照网格/光照探针工具基本稳定;水洼按表面顶点颜色阈值程序化放置水洼与水花。
迈尔斯·莫拉莱斯:季节换肤与新增敌人
- 冬季「换肤」:故事设定在冬季,顶点色驱动 shader 控制冰的方向;按路沿指标放置雪堆(避开车道与拐角),车道线、建筑物底部生成「雪裙」;雪资源为 2/4/8/16 米预制件集合。
- 顶点色绘制:美术师在 Houdini 调红色通道控制结冰路面纹理方向(道路用方向性条纹、交叉口用无方向噪点),二进制数据实时构建直接导入关卡编辑器。
- 屋顶跳跃轨迹:为新敌人 Underground 程序化生成 3D 导航轨迹标记——端点 + 射线投射找中间航点,用垂直/水平最小最大距离、点乘最大角度等启发式规则筛选路径,让敌人跨屋顶追逐蜘蛛侠。
- 曲线转模型工具:向美术师暴露 HDA 控制(横截面、放置选项、沿曲线实例化/sweep),用于树木、人行道、高速公路匝道等。
蜘蛛侠2:系统换代
- Load Hint 系统:取代旧版 Overlay 系统(靠命名约定、无中央管理、脆弱),用动态枚举指定世界状态(沙人袭击后的残留沙量、毒液共生体占领曼哈顿),对 Impostor 支持良好,让所有世界层面系统支持多个动态、一致、持久的世界状态;共生体占领靠沿曲线实例化约 20 个资源 + Houdini 烘焙的顶点流与法线贴图实现。
- Color Volume 色彩体积:核心渲染团队引入的资产,类似「隐形贴花」但通过材质采样而非投影纹理——不依赖几何体细分、各 LOD 均可用、几何体被修改也不丢信息;缺点是分辨率低(每米 1–4 纹素),需与基础贴图插值使用。
- 资产标签系统:为模块化建筑套件做「自动标签 HDA」,用 Python 按已知路径/字符串匹配部件生成标签元数据,校验文件名与几何体特征,支撑建筑变体 HDA 按样式替换预制件。
- 蜘蛛网:蜘蛛侠1/迈尔斯用简单几何 + 着色器连骨骼绑定;蜘蛛侠2 探索高逼真几何——粒子系统加轨迹、扭曲噪点并蒙皮生成网状锥体,次级/打结附着点,用可编辑曲线映射与表达式驱动卷绕效果。
关键数字与启示
- 规模数据:8,300 座建筑(蜘蛛侠1);Tile 数 726 → 735 → 1,794;远处建筑仅 1 个 Draw Call。
- 团队杠杆:程序化 TA 团队从 1 人(2013)到 2 人(2016)起步,靠系统复用与部门扩散放大产能。
- 核心启示:流式加载架构决定创作方案;点云是跨工具共用的「数据总线」;坚持预烘焙而非运行时生成;程序化生成 + 人工打磨结合(标记兜底、碰撞分析、人工评估);系统随项目演进复用——雪裙 → 沙裙、Overlay → Load Hint、顶点色 → Color Volume。
✦ 一句话总结:流式加载架构决定创作方案,点云是跨工具的数据总线,程序化生成加人工兜底——这套预烘焙为主的 Houdini 管线用十年把纽约从 726 个 Tile 生到 1,794 个。