最近笔者肝了 500 多个小时在玩儿《戴森球计划》,万圣夜人偶事件簿4虽然这款游戏依旧在抢先体验阶段,但在完成度上实际还是非常高的,挡不住它真的好玩儿,这样的“期货”游戏吊足了玩家的胃口,即便是“期货”如今也收获了一大批的玩家。
通过《戴森球计划》这款现象级的游戏我们看到,开发期的游戏往往面临着诸多的困难和挑战,工作室人手不足、游戏中 bug 太多、贴图鬼畜、一核有难多核围观…… 这些问题《戴森球计划》在初期开发的时候都有遇到,游戏虽然好玩,但不少玩家也在吐槽“一帧不卡,两帧流畅,三帧电竞”,当然,游戏优化问题不是一朝一夕能立马解决的,这需要大量的时间和精力进行错误定位、算法优化、代码重构等操作以此降低游戏整体对资源的损耗,最大化的利用系统资源。
好在《戴森球计划》团队花了大把的时间已经完成了对游戏的初步优化,包括多线程支持、代码重构、各种 bug 修复、新功能的增加,这些优化极大的提高了游戏的可玩性。
此前《戴森球计划》的开发方柚子猫工作室也解答过这款游戏不单单是多核游戏也是一款 GPU 游戏,随着处理器和显卡分工越来越明晰,softupnotify.exe这类拥有大量的高度自由化素材游戏对 CPU 和 GPU 要求越来越高。
比如在《戴森球计划》游戏后期有数万架运输机在不同星系之间来回穿梭,数万个设施同时运作,还有几万乃至几十万的太阳帆在恒星周围环绕,几百万的产物同时生产,这些必须全面通过 CPU+GPU 协同处理进一步提升游戏的体验。《戴森球计划》官方也表示,凡是可以并行计算的那部分计算工作,全部交给了 GPU,剩下的那部分计算量,只要 GPU 能在 16ms 之内按时渲染出来,CPU 就绝不会掉链子。
相比于一些大的工作室,小的开发团队不像大型游戏公司有着丰富的工程师团队和专业的技术设备,他们在进行游戏开发的时候更加注重效率,利用现有的工具进行高效敏捷开发也成为了开发过程中常见的一种方法。
图片来源于网络
毕竟自己花一大把时间去设计一个游戏引擎,或者写一个自认为高效的算法,比直接去调用现成的开发引擎和算法更加节省时间。
说起大团队也有些比较例外的,比如 R 星开发的《GTA 5》联机版此前就有一个存在了 7 年的史诗级“屎山”代码,一条需要运行 19.8 亿次的 if 语句严重影响游戏的加载速度。大团队如果人员迭代非常快的话,很多祖传的代码可能连注释都没有,小地鼠的花园新来的人不敢进行维护优化,老员工不愿意接手,这样的陈年“屎山”越堆越大,导致整个程序运行效率越来越低,毕竟码农眼里,既然它能运行起来,就不要管它怎么运行的了。
图片来源于网络
不过,玩家扒出这个惊天“屎山”后,对 R 星严重的不满,《GTA 5》联机版这个祖传“屎山”代码终于在玩家的强烈吐槽下被优化了,这其中也进行了大量的工作去重构代码。当然,R 星这样的“甩手掌柜”在游戏的开发过程中还是少的,更多的开发者都在尽力发挥软硬件调度的效率保证游戏的高效流畅运行,在游戏优化过程中我们也看到类似《英雄联盟》这样的网游不管是在什么硬件条件下都能进行流畅的游玩,这些归根结底还是通过工具快速定位问题,并进行专门的优化和调试以此适应不同硬件场景。
图片来源于网络
其实在游戏优化这件事情上,软件和硬件都需要共同努力才可以达到最好的运行效果,对于开发者而言,奇妙黑板画完全吃透硬件而进行优化是一件非常难的事情,特别是小团队的游戏开发商,他们更多的是依托现有的游戏引擎进行开发。
《戴森球计划》就是一个例子,它基于 Unity 引擎进行开发,而很多优化引擎方和大型游戏开发商已经和硬件提供方进行了深度的合作进行联合调优。最典型的例子就是英特尔,英特尔目前在处理器的性能表现上已经有着非常不错的表现,在此之前,英特尔就早早的成立游戏合作技术部门,希望游戏整个生态可以做的更好。
英特尔游戏合作技术经理卢卷彬在今年 ChinaJoy 期间向我们介绍了现阶段在游戏优化领域英特尔做的一些工作。对于游戏生态来讲,硬件是基础,软件优化则是非常重要的,通过这几年硬件市场的观察来看,存储系统是处理器计算能力的一个瓶颈,这里主要是 L1、L2、L3 缓存以及系统内存,CPU 架构上提升这些模块都可以带来不错的性能提升,就以 11 代酷睿高性能移动处理器来说,英特尔提升了 L2 和 L3 缓存的大小,以此带来了更大的数据吞吐能力。
前面我们提到,colorcorrect.dlm很多小的游戏开发公司都不会重复发明新的工具或者引擎,针对游戏开发者,“工欲善其事,必先利其器”这一点非常重要,工具是提升开发效率的关键也是帮助开发者进行错误定位、软件优化的重要组成部分。在游戏发发过程中,游戏性能是非常复杂的,特别是一些元素特别多、每个元素都有自己对应的动作、每个元素之间都有碰撞,这要求游戏开发者进行高度的性能优化,才能保证在绝大部分的硬件设备上都能流畅的进行游戏。
实际上,这些复杂的场景首先会有专门的游戏引擎公司进行开发,前几年虚幻引擎宣布引入 Chaos 物理破坏引擎,通过 Chaos 引擎,游戏中的各种元素都可以破坏,破坏出来的粒子和石块之间也可以互相碰撞,有了这些专业的游戏引擎,小的游戏工作室也可以快速的利用这些现有的开发工具进行游戏制作。如今虚幻、Unity、Cry Engine 等游戏开发引擎已经覆盖了 PC 和移动端的游戏制作,这些游戏开发引擎非常复杂,每个当中都有上百万条代码,涵盖的模块也非常多,包括资源管理、内存管理、角色行为、AI、图形渲染、声音、网络、物理、UI、特效、动画等等,极大的方便游戏开发者进行开发。即便是一些大的游戏开发公司,他们也会利用现有的游戏引擎进行二次开发,大的游戏开发商以及游戏开发引擎需要从底层进行优化,因为他们直接面对的是硬件,小的游戏开发商虽然在游戏引擎基础上进行开发,但代码的简洁性和效率等问题同样也要进行优化,只要开发就一定会涉及到优化问题。
这里,英特尔在帮助游戏开发者和游戏引擎开发商提供了 Intel Vtune Profiler、Intel Graphics Performance Analyzers 等工具实现快速的问题定位。
Intel Vtune Profiler 是一款业内名气比较大的分析工具,无论是服务器还是客户端,它可以帮助开发者分析每个 DLL、每个函数、每条代码、每个线程,甚至每条汇编语言都可以清楚的进行分析。从高层到底层,都可以通过 Vtune Profiler 进行全面、直观的分析。
通过 Vtune Profiler 我们可以了解到游戏的执行在哪里出现了问题,每个线程在不同的时间节点活动是什么样的,线程之间是否有同步或者竞争关系,对于开发者来讲,他们通过 Vtune Profiler 就可以对游戏有一个整体的了解,知道哪个模块是瓶颈、哪个代码有问题,知道在哪里修改会得到最好的优化,开发者和引擎厂商有的放矢,这样才能更高效的进行产品提升。
我们看到 Vtune Profiler 为游戏开发者和引擎厂商提供了翔实的性能分析信息,以上这些都是基于处理器和存储体系,针对 GPU 调优,英特尔还推出了 Graphics Performance Analyzers 工具,预计明年英特尔的 DG2 显卡上市后,估计也会增加对自家独显的支持。
这一工具通过高度可视化的 UI 帮助开发者从高层到底层定位每一帧,查看每一帧实时渲染的参数,通过分析每一帧的参数信息,以此定向的进行优化。当然,以上工具只是帮助开发者快速定位问题,还有一些游戏开发的初期,英特尔的技术工程师团队也会加入其中,另外在新的硬件平台发布的时候,英特尔也会为一些游戏开发者提供测试版的机器以便他们可以快速支持新设备。
通过工具的快速定位问题,接下来就是进行落实到具体优化上。这里通常有四种办法进行优化。第一种方法就是修正明显的问题代码,由于游戏开发涉及的代码量比较庞大,并且也非常复杂,特别是一个团队既有程序开发又有美工,这时候二者可能不会互相考虑,因此修正问题代码就可以很好的解决这些问题。
其次就是并行优化,目前不少的处理器都是多核多线程的设计,但“一核有难,多核围观”这样的情况非常常见,明明可以多个车道一起跑,但由于优化的问题导致线程都是在挤一个车道。
就拿《戴森球计划》来说,这款游戏在初期对多线程的优化支持并不好,很多逻辑计算全都挤在一两个线程中,在优化后,游戏中的部分资源由 CPU 处理转到 GPU 处理,CPU 所处理的内容也都通过多线程方式进行高效处理,保证硬件时刻都在高效的处理数据,这就是并行计算的好处。当然,《戴森球计划》使用的 Unity 引擎对多线程支持本身就很好,Unity 引擎支持 ECS 和 Job System,可以快速的利用分配多个线程以此提高执行的效率。另外,指令集并行也是重要的优化手段,这里主要还是英特尔和引擎开发商之间的配合,以虚幻引擎为例,在虚幻 4 和虚幻 5 中,虚幻引擎通过修改算法代码使得诸如 Chaos 这样的物理破坏引擎可以实现指令集并行,开发者通过调用这些工具进行简单的设置就可以在高效性能的基础上实现更加丰富的游戏画面展现。
第三点优化方法就是算法优化,算法这个问题要具体情况具体分析,不同的游戏所遇到的瓶颈时不同的,利用更好的数据算法或是数据结构进行针对性的调整这些需要游戏开发者进与英特尔这类硬件厂商深入去探讨。最后一点优化方法则是从底层架构进行优化,这一点是英特尔这类硬件厂商和开发者共同来完成,游戏开发者前面的工作如果都做好了但仍然觉得性能不够好,他们有能力和余力可以进行底层架构的优化,英特尔的工程师也会提供相关建议给他们,让他们自己评估这对 CPU 代码架构改变会有多大,是否影响维护针对这些问题由开发者做取舍。
在过去两三年中,英特尔和一些我们熟知的游戏都进行了深入的技术合作,比如《自走棋》、《逆水寒》、《仙侠情缘 3》、《新倩女幽魂》、《天涯明月刀》、《PUBG》等,通过游戏的优化,这些游戏能够更大范围的覆盖各种类型的硬件设备,以此降低玩家的硬件成本,带来更好的游戏体验。就拿《英雄联盟》这类主流网游来讲,现在无论是独显还是核显都可以进行实时畅玩,降低了游戏的硬件门槛,这其中优化带来的性能提升非常的关键。英特尔也表示,也将通过与开发者和游戏引擎开发商进一步深入合作,不论是先有的硬件产品还是未来即将发布的新架构处理器产品,英特尔都将持续支持。
在出色的游戏引擎和诸如英特尔这样的硬件提供商的扶持下,现在我们国产游戏开发者开发新游戏的门槛越来越低,我们乐见类似《戴森球计划》这样优秀的国产独立游戏能越来越度多的在游戏市场上有着更多的话语权,随着更好的工具的出现,国产独立游戏也有着更加高效的开发环境,让更好的游戏概念加速落地以呈现在玩家面前。