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

上周末两位大佬大老远跑过来,一起探讨了下云游戏涉及的各种技术难题。其中谈到了一个技术难题:怎么样能做到随着客户端数量增长,服务器非线性增长。说白了就是将客户端里重复的计算摘出来,进行统一计算,从而降低服务器的个数和能耗。目前的情况是,增加一个客户端,就需要在云端相应地增加一台服务器,也就是线性增长。

那么怎么实现非线性增长呢?

首要问题就是选引擎。最好的方案就是找一款优秀的免费开源引擎,进行深度定制。再次重申,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:云游戏还有个天然的优势,就是可以将客户端和服务器整合在一起,又会产生无限的可能,最起码你再不用担心什么作弊了,并且国战系统能够支持同服的人数会有几个数量级的提升(内部高速数据线的传输肯定会比网络传输大很多),以后有时间再分析吧。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值