大约三个月前,我曾亲赴Apple举办的一场公开分享会。鹰角的技术中心负责人Will受邀到场,与大家分享鹰角在游戏开发中的实践。那次的经历颇具收获,因为分享会的内容深刻程度,丝毫不亚于我在旧金山刚结束的GDC游戏开发者大会上的诸多技术分享。关卡设计师青青展示了早期白盒设计理念,Will也细致解读了Bindless渲染方案,并直接提到了“ECS框架”这类数据处理方式。整场分享让我对游戏开发技术有了许多新的认识与理解。
然而,在幕后Will透露,本次分享主要针对普通玩家群体,因此内容准备相对浅显。他表达了如果未来有机会,愿意向行业人士分享更具体的深度开发经验。
没想到,事情的进展比预期要快得多。上周在韩国首尔举办的Unite Seoul会议,作为Unity开发者社区最重要的官方技术会议之一,Unity 7正是由Unity总裁兼CEO在该会议上正式揭幕的。Will也收到了邀请,进行了一场题为“重构《明日方舟:终末地》的运行时渲染框架”的英文演讲。这场演讲被标记为“高级”,也是整个议程中唯一一个由中国游戏公司带来的项目分享。
Will的演讲属于“会场限定”,没有安排线上直播与录像。会议现场座无虚席,演讲结束后,不少听众自发排起队伍,与Will深入交流。
关于Will演讲的内容,我也算是窥见了所谓的“技术真谛”。说实话,其中多数部分我听得一头雾水,毕竟多数技术术语对我而言,还是作为一名资深玩家和游戏媒体从业者时未曾接触过的领域。
于是Will回国之后,我们又再次会面,结合他在Unite Seoul的演讲内容,进行了一次深入的探讨。通过他的进一步解释和补充,我发现这次演讲所涵盖的技术细节,其实与我们先前谈及的玩家也能理解的优化技巧背后,真正的底层技术有着密切的关联。这使得我们之间的交流更具针对性。同时,也因为我能真正深入到代码层面的讨论,对于鹰角的技术体系构建与理念,也形成了更为深刻的认知。
接下来,我将尝试在上次报道的基础上,进一步深入剖析,让大家得以窥视图像背后更为基础的代码和架构。Will也协助我重新梳理、阐释了演讲内容,力求将复杂的主题尽可能阐释得深入浅出。
不过,我得承认这些内容依然偏向“硬核”或“高深”。一方面,我不太自信能够单凭几千字,将一场建立在大量专业知识之上的演讲,拆解成既严谨又适合大众的科普文章;另一方面,比起用大量比喻让读者陷入似懂非懂的状态,我更倾向于尽可能保留原意与细节,让确实对鹰角技术感兴趣的读者能够获得较为准确的认知——这也是对技术的一种尊重吧。
1
在《明日方舟:终末地》正式上线之前,许多人都知晓鹰角对所使用的Unity引擎进行了深度的定制改造。高精度角色模型、大量动态对象、无缝箱庭以及跨平台的特性……这些目标叠加在一起,单纯依靠Unity的通用解决方案根本无法满足项目的性能预期。
复杂的玩法机制与一开始便确立的高标准优化目标,从一开始就决定了终末地必须突破Unity的一些通用开发路径。Will此次的演讲,则首次系统地公开了他们究竟对引擎进行了哪些具体的改造,甚至是如何一步步实现的。
在演讲中,Will主要提到了四个方面的改进:
首先,自研了ECS数据内核,该内核专门用于处理每帧数万个可渲染对象的高吞吐量需求。
其次,他们重构了剔除、排序与批处理链路。多个视图可以共享同一组可见性数据,并将渲染状态编码至同一个sort key中,使得“按状态聚簇”成为排序的天然结果,而非需要额外分组。
再者,将关键的运行时渲染管理转化为自写的原生C++管线,配合在CPU端手写Render Graph,以此管理资源生命周期和依赖关系。
最后,在底层再叠加一层沿用Vulkan语义的设备抽象,以屏蔽平台图形API的差异,把移动端与PC端拉到同一条数据导向路径上。而且这层封装被有意地放在最底层,描述符、屏障等底层能力得以原样保留,上层的排序、绑定复用、屏障合并才能一路贯通至每









网友评论