站务联系

深度定制游戏引擎实现云服务器的非线性增长

发布时间:2021-03-19   来源:网络整理    
字号:

上周末两位大鳄大老远跑进来,一起阐述了下云游戏牵涉的各类技术瓶颈。其中提到了一个技术瓶颈:怎么样能做到随着客户端人数下降,服务器非线性激增。说白了就是将客户端里重复的估算摘下来,进行统一估算,从而减少服务器的个数跟煤耗。目前的状况是,增加一个客户端,就须要在云端相应地提高一台服务器,也就是线性下降。

那么如何实现非线性下降呢?

首要问题就是选引擎。最好的方案就是找一款优秀的免费开源引擎,进行深度定制。再次重申,Unity不开源,改不了。即使公司耗费高昂的价格订购了源码阅读权限也难改,因为不开源就不能产生社区,遇到问题只好自己解决,代价昂贵。UE4倒是开源,也行成了社区,但是这些重量级引擎和Linux操作系统的代码量有一拼,没有大几十的引擎程序员不敢深度订制。再说这两个引擎你只有使用权,改了知识产权也不是你的。

再说一些硬件跟软件方面的背景,才能更好地去设计分布式估算。

一、目前引擎整体有个趋势,CPU承当的工作越来越多地向GPU转移。比如说GPU-Driven Rendering Pipeline,就是将原先在CPU里进行的可见性查询,以及历时的图形API读取转移至GPU里。以后骨格变换矩阵估算,甚至是AI等等都可以移至GPU里进行,更不用说实时光追疗效了。

二、目前一个显卡上可以支持这些块主板。以后GPU会承当越来越多的工作,所以显卡上支持越来越多的主板是趋势。GPU内部都有自己的内存,访问自己的很快。GPU之间总线或则NV link之类的传输数据,速度不知道怎么样,需要实测。总之不会很快,所以尽量避开GPU之间传输数据。

三、计算集群还要太多的主机协同估算,主机之间传输数据的速率应当就会降不少,更要竭力防止数据传输。

最后就是分解引擎的估算模块了。

引擎里这些功能可以统一估算呢?游戏类别不同,方案也不一样,所以以我最熟悉的MMO RPG为例简略剖析下。设想有一个大场景,里面同时有几百个玩家,分布在场景里。

游戏的估算主要在CPU跟GPU里进行,分开来讨论。

CPU上的主要任务有:客户端逻辑处理、场景树更新、四叉树/八叉树更新、视锥查询、角色骨格漫画、粒子系统更新、图形API读取。

单机估算方式下,每个玩家的机器上都须要依照自己、远端玩家、NPC的联通而更新场景树跟四叉树/八叉树游戏服务器,角色骨格漫画、粒子系统也须要只身更新。而实际上很多都有巨大的冗余。比如说,我的周围有几十个玩家,在我的机器上,需要去更新关于周围玩家的上述操作,在其他玩家的机器上也须要更新,而实际上只须要估算一次就可以了。有些操作,例如图形API读取,每个人的机器上看见的东西都不一样,所以不能优化。

GPU承当各类渲染工作,以延迟着色为例:Pre-Z、GBuffer阶段、累加直接光照、计算SSR、累加镜面反射、各种后期处理、动态夜空渲染、动态海水、GI、阴影贴图等。

这上面还有可以降低的冗余估算。动态夜空渲染、动态海水、阴影贴图都可以单独估算。现在有的游戏项目想同时支持动态光照跟GI,那预蛋糕Lightmap+Light probe那一套就不能用了,需要实时估算。GI的估算历时太严重,另外因为光线的传播是全局的,独自估算会有大量冗余,所以这部份功能应当单独抽下来。

由于时间关系里面都是不太缜密的理论推论,并且实际动手就会碰到各式技术细节还要解决。不过说好了不通宵了,脑子也不转了。

PS:云游戏也有个天然的优势游戏服务器,就是可以将客户端跟服务器整合在一起,又会形成无限的或许,最至少你再不用怀疑哪些作弊了,以后有时间再剖析吧。

图说天下

×
二维码生成