第 17 章
引擎换轨
历史中,商业游戏开发的技术决策很少被当事人同时形容为最疯狂和最理性。将项目从已经跑通的引擎迁移到尚未发布的后继者,在任何教科书里都属于禁忌动作。但对2018年的游戏科学来说,这个禁忌动作最终被证明不是技术狂热,而是一种在极端约束下做出的风险算术。
它的理性,恰恰建立在大多数观察者无法看到的生存经历之上。把时间拨回2018年。此刻的《黑神话:悟空》刚刚完成立项,2月25日这个日期后来被反复提及,但当时它只是一个内部项目启动的标记。到这一年年底,开发团队从深圳迁往杭州,花果山关卡已基本制作完成。
正是在这个关卡的生产过程中,虚幻引擎4的物理极限开始显现为一种难以绕过的制度压力。
要理解这场豪赌为什么成立,得先回到那个具体的困境里。在决定新项目方向的2016年,游戏科学发现Steam平台上有大量中国玩家,且动作角色扮演游戏占据平台主流,便决定新项目为暗黑风格西游题材动作角色扮演游戏。
这个选择从一开始就绑定了视觉策略:要让西游故事里的中国古建可信,就必须把真实的古建搬进游戏,而不是用概念画和贴图拼凑。换句话说,从确立扫描中国方法论的那一天起,高精度几何数据就注定要成为项目的主要资产。但虚幻引擎4的实时渲染管线,恰恰是这套资产最难穿越的窄门。
一个聪明的外行也能理解这里的基本矛盾。扫描得来的古建模型,动辄数亿个三角面。引擎在每一帧能把多少三角面送到屏幕,由中央处理器和图形处理器之间的协作决定。传统管线要求开发者先把高精度模型简化成低精度版本,再把细节烘到一张法线贴图上,贴在低模表面。这样,玩家看到的是几万面的模型,却有上亿面的视觉错觉。
这套流程在欧美三A工业里已经成熟了二十多年,但它以海量人力为前提。中国古建的特殊性,又在指数的级别上推高了人力需求。
欧洲石构建筑的装饰性相对克制,中国古建的斗拱、雀替、藻井、门楣上到处是透雕、浮雕、彩绘和曲线,一攒斗拱有数十种变化,每一种都要单独处理,几乎没有可以批量复用的拓扑方案。山西古建中那些高精度扫描回来的精细雕刻,在虚幻引擎4的管线里必须被美术师手工简化,从数千万面减到数万面,再通过法线贴图模拟丢失的细节。这个过程单块构件要以周为单位计算工期,一个中等规模的寺庙场景涉及数百个构件,所需人力呈线性增长。花果山关卡在制作中给出了一个简单的算术:扫描中国要求每一个中等规模的古建场景投入数名美术师数月的时间,而预案中的场景数量要高出十余倍。
要么压缩场景规模,要么降低精度,要么扩编美术团队到不可能的数字。三条路都指向同一个结论:沿着虚幻引擎4的旧管线推进,项目无法以目标品质按时完成。
这还不是选项A的全部面貌。它看似稳妥,实际是一条注定会撞墙的路。正是在这种倒逼下,那个原本疯狂的念头开始变成值得认真评估的可能性。
2018年前后,关于Epic Games正在研发下一代引擎的消息已经在技术圈隐约流传。最关键的传闻指向一套被称作Nanite的虚拟几何体系统。按照流传出来的描述,这套系统允许开发者直接将数亿面的高精度扫描模型导入引擎而无需手动优化。传统管线中那一步最吃人力的手工减面,在Nanite的架构里不再必要。引擎会自动根据视点距离和屏幕空间大小,决定每个像素需要采样多少几何细节。
如果这个消息属实,它对于《黑神话·悟空》的意义不亚于一次解放。那些在虚幻引擎4中需要手工减面数周的雀替和斗拱,可以直接使用原始扫描数据。对,就是那些动辄上千万面的原始数据,扔进引擎,Nanite会在玩家距离较远时使用更粗糙的采样,在镜头靠近时展示全部雕刻细节。
美术团队终于可以不再做简化者,而可以成为搬运者——把山西古寺从物理世界搬进数字世界,几乎不做减法。生产流程将从扫描、减面、拓扑、烘焙、贴图的五步链,压缩为扫描、导入、调整材质的三步链。
另一项传闻中的技术是Lumen,一套全动态全局光照方案。在虚幻引擎4时代,高质量的光照效果依赖烘焙。美术师在三维软件中预先计算光线的反射和散射,把结果烤成一张静态光照贴图贴在模型表面。这个过程单次计算动辄数小时,而一旦场景中有任何物体移动,预先烘焙的光照就会失效。对注重光影氛围的动作游戏来说,这是巨大的生产力瓶颈。Lumen承诺的是一种完全动态的全局光照:光线在场景中的每一次反弹都实时计算,不需要预烘焙,改变任何一个光源都能即时看到最终效果。
两项技术叠加起来,构成了一个极强的技术驱动力。如果虚幻引擎5能够兑现承诺,游戏科学的美术生产管线将发生范式级别的跃迁,释放出来的人力可以投入更多场景、更多角色、更多细节的生产中。
但这一切都建立在如果之上。2018年的虚幻引擎5,甚至还没有一个可供外部开发者下载的预览版本。Epic没有公布发布时间表,只有零碎的技术信息通过行业会议和专利文件流出来。
对一家中型工作室而言,依据这些公开碎片就决定把整个项目迁过去,是对软件工程中一条经典告诫的直接冒犯——永远不要依赖尚未发布的第三方组件。这句告诫不是哪一家公司的口号,而是项目管理领域的通行风险共识。游戏科学不仅决定依赖一个尚未发布的组件,还决定把它作为整个项目的地基。
换轨的代价可以拆成三个层面。首先是技术债务。团队在虚幻引擎4上已经积累了近两年的工具链和管线,包括关卡编辑器的工作流、材质的节点库、脚本模块、数据导入接口和版本管理目录结构。迁移意味着这些积累全部需要重写。更麻烦的是,由于虚幻引擎5尚未发布正式版,迁移过程中不存在成熟的文档、教程、社区问答或第三方插件支持。团队一旦遇到问题,只能靠读源码、联系Epic工程师或反复试错来解决。
其次是学习成本。美术师要学习新的材质系统和资产导入流程,程序员要适应新的渲染架构和性能分析工具,技术美术要重新设计整个场景的性能预算和优化策略。而这一切学习必须在项目不停工的前提下进行。
团队不可能暂停关卡生产来等待所有人学好新工具,只能边飞边学,在生产任务和技术探索之间不断切换。再次是时间表。从虚幻引擎4迁移到虚幻引擎5的实质工作——将已有资产重新导入、重写核心逻辑、重新调试渲染效果——在Epic正式发布预览版本后,预计至少需要一年以上的集中工期。而预览版本发布的时间点尚不确定。如果Epic延迟,游戏科学就要在继续等待和放弃迁移回头用虚幻4硬撑之间做出更痛苦的选择。
这三个层面的代价加起来,足以让大多数项目经理否决换轨提案。如果《黑神话·悟空》是一家上市公司的产品,内部评审流程几乎不可能让这个方案通过。风险太大,不确定因素太多,没有可参照的先例。
但游戏科学不是上市公司。它是一个独立工作室,决策链条极短,核心判断掌握在少数人手里。更重要的是,这个团队的基因里刻着一段被外界忽视的历史。他们之所以敢下这个赌注,答案藏在团队此前的生存算法里。证据链可以从三个时间点拉出来。第一个时间点,是2017年秋天。
这一年,《战争艺术:赤潮》在应用商店登陆,获得了一百五十四个国家和地区的推荐。这款手游让游戏科学在移动端实现了规模不小的实时战斗渲染,而这一切要求团队必须深入引擎底层,去拆解每一层开销,自己写渲染代码,自己优化调用批次,自己对内存分配做细粒度控制。理解引擎底层而非仅仅使用引擎上层接口,这种能力在迁移到新引擎时不会被浪费。
第二个时间点更早,要追溯到核心成员进入腾讯之前的岁月。杨奇的职业起点是游戏美术外包。在那个中国游戏产业尚未成型的年代,美术外包是年轻人进入全球游戏工业体系的几乎唯一通道。那个行业有一条不成文的生存法则:客户用什么工具,你就得在极短时间内跟上那个工具。今天是这款建模软件,明天是另一款,后天是客户自己的私有编辑器。没有培训周期,没有人等你慢慢熟悉界面。能在外包行业活下来的美术师,身上都带着一种快速适应新工具的肌肉记忆。这种记忆不是知识,而是神经系统层面的条件反射。
当游戏科学面对一个陌生的新引擎,他们内部的某些人其实已经无数次面对过陌生工具。
第三个时间点,藏在《斗战神》的废墟里。那段经历留下的教训是双面的。反面是不再碰自研引擎,正面是证明了团队在工具链极度不成熟的条件下也能产出达到一定水准的画面。从那个背景出发,迁移到更成熟的商业引擎序列,是一条自然的上升曲线,而不是向未知跳跃。
这三条证据拼在一起,揭示了外界一直忽视的那个问题:游戏科学敢下这次赌注的底气,根子不在2018年的技术判断力,而在于产业结构、制度安排和关键主体选择的长期共同作用。
2018年冬天到2019年春天之间,决策逐渐清晰下来。它不存在一个戏剧性的投票场景,而是随着花果山关卡制作瓶颈的加深和外界技术信号的增强,在持续评估中沉淀成确定的方向。如果把这一决策看成一次概率计算,它的算式非常简洁:继续留在虚幻引擎4,项目大概率无法完成;迁移到虚幻引擎5,项目可能失败,也可能完成。
在一个包含两个坏选项的概率集里,选择那个至少还保留可能性的选项,是有限理性下的主动选择。
确定方向之后,真正的困难才开始。因为虚幻引擎5尚未发布,游戏的日常开发不能停。一部分人员仍需在虚幻引擎4上推进内容和关卡的制作,另一部分人员开始接触Epic通过合作渠道提供的预览构建版本,做资产迁移和渲染测试。两种工作流在同一间办公室里并行,制造出一种极其割裂的工作状态:一个场景在旧引擎里已经被调好,搬到新引擎的预览版里,光影全部变化,材质手感不再成立,而预览版本身还极不稳定,调试结果经常无法保存。
这种状态持续了近两年。这正是后来被反复提到的边飞边换发动机。直接后果是多次延期和大量返工。场景不是做完一次就结束,而是做完之后要在新引擎里重做或者大幅返修。那些曾经以为已经结项的资产,在迁移中重新变成产出。项目进度的曲折,有相当一部分来自这段双轨运行的摩擦成本。
美术团队经常陷入一种尴尬的处境:在旧引擎里把场景做好,导出到新引擎的预览版里一看,光影全变了,材质质感想调整,但预览版的相关工具还不稳定,调了也不一定能保存。技术团队只能一遍遍手动同步两个版本之间的数据,编写各种临时脚本来完成资产格式的转换。
这种痛苦直到2020年5月才出现第一个正式的转折点。Epic Games通过一段技术演示正式公布了虚幻引擎5,向全行业展示了Nanite和Lumen的落地面貌。对大多数开发者来说,这是一项令人兴奋的工具更新。对游戏科学来说,这更像是一个迟到的确认——两年前押下的第一张牌,Epic技术路线图会按时兑现,翻开了正面。
同年8月20日,游戏科学公布首段实机演示视频。视频里那只金蝉飞过层叠山涧和古寺的场景,向所有人展示了Nanite和Lumen在真实项目中落地的效果。古建筑构件的精细度远超传统游戏场景,光影的质感和动态变化也不是任何预烘焙方案能够实现。
这个算式之所以能被反复计算,前提是团队手里握着一组其他中型工作室通常不具备的数据。
2017年《战争艺术:赤潮》上线后,游戏科学在移动端积累的不仅是渲染管线优化的经验,还有一个更隐蔽的资产:对引擎底层行为的直觉。移动端开发迫使程序员必须理解每一帧的绘制调用次数、每个材质节点的GPU开销、每张贴图的内存占用。在这种约束下工作两年,人会对渲染管线的瓶颈位置形成一种近乎身体的感知。
当虚幻引擎4在处理古建扫描数据时反复撞上同一个瓶颈——绘制调用次数爆炸、CPU向GPU传输几何数据的带宽耗尽——那些在移动端被训练出来的直觉会发出明确的信号:这不是优化不够的问题,是架构本身的问题。传统减面流程在移动端优化中也有应用,但面对古建构件的复杂度时,它暴露出的不是效率不足,而是一种根本性的不匹配。这种不匹配在花果山关卡制作的中后期变得具体而微。
美术团队从山西扫描回来的第一手数据,单块斗拱构件的三角面数量通常在八百万到一千五百万之间。按照虚幻引擎4的标准管线,这块构件需要被简化到两万面以下才能进入实时渲染环境。
简化过程不是自动的。自动减面算法在处理有机形态时表现尚可,但面对斗拱的几何特征——层叠的曲线、细小的榫卯间隙、非对称的雕刻纹理——算法会粗暴地合并那些它认为不重要的面,结果是榫卯结构被糊成一块整体,雕刻细节退化成无法辨认的起伏。美术师必须手工重拓扑,在三维软件里一块面一块面地重建拓扑结构,保留关键特征线,牺牲次要细节。
这项工作单块斗拱需要一名熟练美术师五到七个工作日。一座中等规模的山西寺庙,斗拱数量在四十到六十攒之间,仅此一项就需要一个人大半年的工时。而斗拱只是构件的一种。雀替、栏板、门楣、藻井、须弥座,每一种都有各自的几何复杂度,每一种都需要单独处理。更致命的是,这些构件之间不是独立存在的。
在真实古建中,斗拱与梁架交接,雀替与柱身相连,藻井由数百块小构件拼合而成。当每个构件都被简化后,它们之间的接缝处会出现几何不连续的问题——两个简化后的构件拼在一起,边缘对不齐,出现裂缝或穿插。美术师不得不在简化完成后再做一轮接缝修补,这又是一道手工工序。
花果山关卡制作期间,团队内部做过一次估算:按照当时的管线效率,完成预案中全部古建场景的资产生产,仅减面环节就需要一个三十人以上的美术团队全职工作两年以上。而游戏科学当时的美术团队总数远低于这个数字,且他们还需要同时负责角色、特效、植被、地形等其他资产的生产。这不是加人就能解决的问题。具备古建减面能力的美术师在国内极为稀缺,培养周期以年为单位。
即便能找到足够的人,管理三十人同时处理数千块构件的版本同步和质量一致性,本身就是一个巨大的协调成本。正是在这种计算下,虚幻引擎4的管线被判定为不可行。它不是效率低,是根本走不通。
2018年秋天,当关于Nanite的技术信息从Epic的开发者社区中逐渐流出时,杨奇是最早捕捉到信号的人之一。作为美术总监,他对古建资产管线的瓶颈有着最直接的痛感。那些从山西带回来的扫描数据,在硬盘里堆积成TB级别的几何信息,却无法以原始精度进入引擎,这种挫败感在美术团队中持续了数月。Nanite承诺的恰恰是取消手工减面这一步——不是优化它,不是加速它,而是让它从管线中彻底消失。这个承诺的诱惑力,只有那些在减面工作中消耗了大量工时的美术师才能真正理解。
但理解不等于立即决策。2018年冬天,冯骥和杨奇在杭州的办公室里反复讨论过同一个问题:如果Epic的技术路线图延迟怎么办。当时的公开信息极为有限。Epic在2018年的游戏开发者大会上展示过一些下一代引擎的技术方向,但没有公布名称、没有发布预览版、没有给出时间表。游戏科学能够依赖的,只有Epic在虚幻引擎4时代建立的信誉——这家公司在引擎迭代上有着相对稳定的节奏,且对开发者社区的技术承诺通常能够兑现。但这个信誉并不构成法律意义的保障。
Epic没有义务在特定时间点发布特定功能,也没有义务保证预览版的质量和稳定性。游戏科学押上的,是整个项目的时间线和人力配置。讨论持续了数周。最终推动决策落地的,是一个更具体的判断:即使虚幻引擎5的发布延迟一年,团队在等待期间可以做的事情也比继续在虚幻引擎4上硬撑要多。因为如果留在虚幻引擎4,美术团队会被困在减面工作中无法脱身,其他内容的生产也会被拖慢。
而如果决定迁移,等待期间可以先把场景的概念设计、布局规划、关卡白盒、战斗逻辑这些不依赖最终渲染管线的部分推进到更成熟的阶段。等新引擎就位后,资产导入和渲染调试可以集中进行。
这个判断后来被证明部分正确、部分错误。正确的部分是,等待期间确实推进了大量非渲染相关的工作。错误的部分是,资产导入和渲染调试的难度被严重低估了。当2020年虚幻引擎5预览版终于可用时,团队发现Nanite虽然能处理数亿面的几何数据,但它对模型的要求与扫描数据之间存在微妙的差异。
扫描数据中常见的非流形几何、重叠顶点、微小孔洞,在传统管线中可以被手动修复,在Nanite中则会导致渲染错误或性能骤降。这意味着扫描数据并非直接可用,还需要一道清理工序。这道工序虽然远轻于手工减面,但仍然是计划外的工作量。Lumen的情况类似。
它在预览版中的表现极不稳定,某些场景中光照结果会在帧与帧之间剧烈变化,出现闪烁或明暗跳变。这些问题在Epic后续的版本更新中逐步修复,但在2020年到2021年初的那段时间里,美术团队不得不在一个光照结果不可预测的环境中调试场景氛围。一个场景今天调好了,明天引擎更新后可能又变了。这种不确定性对美术师的耐心是极大的消耗。
但即便如此,迁移的总体收益仍然远大于成本。Nanite解放出来的美术人力,让团队得以将资源投入到更多场景的生产中。那些原本因为人力瓶颈而被迫搁置的古建扫描计划,在迁移后重新启动。山西、河北、重庆、浙江,扫描团队的工作量在2021年后显著增加,而这些新增的扫描数据都能够以原始精度进入引擎,不再需要经过那套曾经令人绝望的减面流程。
回头来看,2018年的那次决策之所以能够成立,还有一个被技术讨论掩盖的维度:游戏科学的组织结构。作为一个独立工作室,它的决策不需要经过多层审批,不需要向董事会解释技术风险,不需要在季度财报的压力下选择更稳妥的短期方案。
冯骥和杨奇能够直接做出换轨决定,并在团队内部快速达成共识。这种决策效率,在大型上市公司中几乎不可能实现。而恰恰是这种效率,让一个在教科书里被列为禁忌的动作,在特定条件下变成了最优解。这不是对软件工程原则的否定,而是对那些原则适用边界的重新标定。原则说不要依赖尚未发布的第三方组件,但原则没有说当现有组件已经证明无法完成任务时,你还能做什么。
游戏科学的回答是:你可以赌,但前提是你必须清楚自己在赌什么,赌注有多大,以及你凭什么认为自己比别人更有机会赌赢。他们的赌注不是盲目的技术信仰,而是建立在三个具体的判断之上:Epic的技术路线图大概率会兑现,团队有能力在工具不成熟的条件下生存,以及不换轨的后果比换轨更确定也更糟糕。
这三个判断,每一个都可以在团队的历史中找到支撑点。而这三条支撑线,最终在2018年的杭州交汇成那个被后人反复回望的决定。
技术社区在惊叹画面品质的同时,很少有人意识到,他们看到的不仅是美术团队的功底,也是一个历时两年的引擎换轨决策的结果。
但这只是第一张牌。另外两张——Nanite能否彻底解决古建场景的海量多边形渲染问题,Lumen能否真正省去传统光照烘焙的人工——要到随后四年的实际开发中才能被逐一检验。而那张最大的牌,整个项目能否按时完成并成功发售,则要到更远的时间点才能见分晓。
在2019年做出决定的那个时刻,所有这些答案都还在未来。冯骥和杨奇能够依赖的,只有对一项尚未发布的技术方向的判断力,对团队适应新工具能力的信心,以及那个最简单也最残酷的算式:不换,一定会撞墙;换,有可能撞墙,也可能撞出一条路。这段历史后来被外部看作是技术前瞻性的胜利。
但亲历者的记忆里,那两年更像是在大雾中开车,知道方向大致正确,却看不清前方五十米的路况。引擎换轨的决策本身不是一次伟大的技术洞察,而是被现实逼到墙角后的背水一击。
如果虚幻引擎4能处理古建扫描的工作量,游戏科学不会冒这个险。如果团队没有在外包公司和手游研发中练出快速切换工具的本能,他们也不敢冒这个险。技术的正确方向往往事后才清晰,但在做决定的那个时刻,它只是一堆不确定性的算术。而真正让这场算术变得可解的,是2016年就锁死的那个选择。
在那一年,游戏科学发现Steam平台上有大量中国玩家,且动作角色扮演游戏占据平台主流,便决定新项目为暗黑风格西游题材动作角色扮演游戏。这个选择一旦做出,单机的方向就不可回头。技术工具可以换,产品判断不能换。正是因为方向已经锁定,引擎的存废才没有动摇项目的本质,反而成为这场豪赌里唯一可以替换的变量。
从那个角度看,引擎换轨并非一个孤立的技术事件。它是单机决议的第一次剧烈变现,也是扫描中国方法论从纸面走向量产必须穿越的那道窄门。两年后那支改变项目命运的短片,站在了这次换轨的地基上。而在2018年,它看上去只是一道在杭州被反复计算过的算术题。