完全不可能。
1、物理规律的限制
如果你玩过CS,就知道50ms的延迟和100ms的延迟是天壤之别;甚至哪怕是WOW这样粗笨的东西,200ms的延迟和500ms也毫无可比性。
然而,CS只需7K带宽,WOW即便是打战场,也只需十几至多几十K的带宽。
而1080P的视频,要达到游戏所需的清晰度,起码要几M的带宽。
不仅如此。视频之所以能压缩,原因是我们早已知道了它的全部内容,所以可以挑一个关键帧完全传输过去、然后剩下的帧就只需传输与前一帧的差异部分。
这个过程,就导致从视频生成(捕获)到传输再到客户机上重新播放出来,起码会因为编码-解码过程额外引入几个乃至几百个毫秒的延迟(换句话说,在本机上,第一帧画面播放时,第二帧画面已经在后台计算生成了;第二帧画完给显卡显示,第三帧开画[不这样做会导致屏幕闪烁];而一旦要通过网络传输,就必须插入一个服务端生成-客户端重建过程)——显然,这个额外延迟是不可能去掉的,网络带宽再高都不行(更大的带宽可以减少传输一帧数据所需的时间,但不可能减少到0)。
不压缩直接传?那么每幅1080p画面就是一副6M的高清大图——50M位/秒的宽带需要1秒才能传过去;哪怕google那变态的1Gbps宽带,折算下来也不过128M字节/秒——4.6个毫秒的延迟就这样加进去了。
你可以试一试,哪怕是你的电脑摄像头捕捉视频、然后直接在本机上显示,中间都有明显可觉察的延迟(至少约100毫秒)。
这还只是1080P。想想即将进入主流的4K级怎么办吧。
而要让玩家产生「实时」的感觉,那么从输入指令、到画面上有所反应,这个延迟的要求就非常苛刻,不然就会出现非常「肉」的感觉,完全不是玩游戏的体验。
——想想前些年是怎么黑android反应迟钝的吧。就因为从用户输入到它做出响应,比iPhone多延迟了几个毫秒,就已经明显「不跟手」了:这可还是普通应用。
然后,光速是大约30万公里每秒;北京到深圳直线距离大约有2000公里;不考虑电/光信号在电缆/光纤内传输时,速度低于真空光速这一事实、也不考虑途中经过的交换机/路由器所引入的额外延迟(每一跳至少引入大约一两个毫秒的延迟),信号从北京传到深圳,至少就需要7个毫秒。
然而,这只是不到一半的时间。因为完整的过程是:用户输入指令---指令传输给千里外的服务器---服务器做一番逻辑运算,最终渲染出视频图像---图像传输给用户主机(至少要把一帧传完)---用户机解码、显示。
换句话说,物理规律决定了,即便传输途径优化到极限(不经过交换机/路由器直达)、传输速率无限大(一帧数据瞬间传完)、服务器和用户主机性能无限(可以无延迟编解码视频),玩家发出指令到画面响应,也需要至少14个毫秒;实际工程中,真正能做到的极限,应该不会低于50ms——几百年内的极限,除非基础物理理论允许超光速,否则拿来天顶星科技都不行。
你不妨ping一下本地网站,看看这个值究竟是多少。
默认情况下,ping发出去的,还只是32字节的探测包。视频传输那种大包,延迟自然更大。
作为一个IT界老油条,这么多年,哪怕本地互联网服务器,能把延迟做到30毫秒以下的都几乎见不到;最为极限的体验,是当年在家里加入附近一家网吧搞的CS服务器,但同样也有十几毫秒的延迟。
其他的,哪怕是在公司内网ping公司内部的服务器,一般都有超过20ms的延迟(这是因为,为节约成本,公司局域网内部使用了普通的百元级路由器;这种路由器一旦开启流控等其实很基本的「高级」功能,它的芯片性能/内存容量就捉襟见肘了)。
有人可能会说了:哎呀足够了,50ms玩CS都够了。
很遗憾,完全不够。因为这个50ms延迟,和CS的50ms延迟有本质区别。
CS之类游戏在背后做了很多优化。其中之一,就是玩家做出操作后,就立即在本地机上完成渲染,让他能立即看到操作反馈;同时,这个信号通过网络传输给服务器,等待服务器响应——如果这个响应和本地预测相同,那就不理它;否则就要重新渲染(所以在延迟很高的时候玩CS,经常会看到有人冲出去老远、然后忽然回到他冲出来的地方并死掉:这就是本地预测和服务器响应出现了矛盾)。
即便如此,超过50ms延迟的网络上,都经常出现「我明明瞄准他了怎么他就是毫发无伤」的恶心场景——想要让高手玩家有「指哪打哪」的体验,延迟就得低于50。
而延迟一旦达到100ms,最最普通的CS玩家都会发现「命中基本靠蒙」——距离远还能打中,近距离跑动射击几乎怎么打都会打空。
换句话说,CS的响应延迟是响应延迟,网络延迟是网络延迟;所以,50ms的网络延迟下玩CS,仍然勉强可以有「实时」的感觉;但如果是云游戏……网络延迟就是响应延迟(最最理想的算法!),此时画面明显「不跟手」,即玩家操纵鼠标先动,准心要「迟疑」一下才能跟随鼠标动作,这对枪战类游戏来说是完全不能接受的。
注意,这还只是最最理想化的算法。实践中,网络不可能直线拉你家。七拐八弯的一拐,距离就长多了(咱就不说玩美服欧服了);然后再加上每个交换机/路由器额外引入的1~2ms左右延迟、视频编解码必需的几个毫秒延迟……
好吧,你通过云服务器下个象棋、玩个回合制RPG什么的,还是可以的。
别的嘛……洗洗睡吧。
PS:当年玩WOW的应该深有体会:一旦同宿舍的朋友上网干点什么(看视频或下载东西),你就大概率要被团长骂然后扣DKP……我就是为了解决这个问题才买了带流控的路由器,结果流控开时间略长延迟直接飙300+。想得到电信级的可靠性,你就得掏电信级的价格——有的路由器卖2000,还有的卖20000甚至20万,真不是漫天要价。
2、硬件架构的限制
回答我,64颗CPU的服务器,其运算性能相当于多少台相同CPU类型的单CPU服务器?
很遗憾。64颗CPU的服务器,它的性能很可能还不如40台单CPU服务器。
各国竞相研制的、数千颗CPU的超级计算机,在专用算法的协助下,能有60%的利用率,已经算先进水平了——换句话说,1000颗CPU,只能当600颗用。
这是因为,多颗CPU,若共享内存就会争用内存,共享总线就争用总线——内存好解决,为每颗CPU多插几根内存条就行;但总线……要么让它随CPU数目按平方关系增长(于是成本迅速失控),要么……就争用吧。
所以,和一般人的想象相反,高性能服务器的性能价格比,其实要比中低性能的服务器、家用机低得多得多——所以google才用普通PC机组成的集群当服务器。
换句话说,除非计算机基本原理改变;否则,服务器上的计算资源,永远比客户终端要昂贵得多——换句话说,一堆性能够用的分布式客户机,永远比一台性能绝佳的服务器便宜。
高性能服务器的优势,其实就是……省电、可靠、维护方便。没了。
然而,这里还只考虑了CPU。要实时渲染游戏级别的3D动画,这必须GPU来。
所谓GPU,其本身就是N多核心组成的并行机;要多支持一个玩家,就需要多一块的GPU;和CPU一样,每多一块GPU,就多了一个争用总线的熊孩子……
要支持200个用户,你得插200块GPU;幸好,GPU之间不需要交互,那么我们只要多弄200条总线就行了……但CPU可不行,建模什么都得它来……不过只做这个的话,是不是可以一一隔离?
好主意,咱为每个玩家买台PC机吧。
(当然,可以通过特制的、支持多摄像机的GPU来稍微缓解这个问题;但也只是缓解而已;而且,用这种方案缓解GPU需求,就意味着争用总线的熊孩子又多了一大坨……)
3、越来越强悍的便携终端
做一个性能强悍的CPU,对现在的技术来说实在太容易了,而且会越来越容易。
没有任何迹象、任何原理会限制客户终端使用的CPU;这些CPU体积只会越来越便携、性能越来越强悍、功耗却越来越低——而且,得利于现代大工业生产,它们越优秀、适用面越广,生产成本就越低。
举例来说,现在的USB键盘/鼠标之类外设,核心芯片就是一颗1MHZ的8位单片机;尤其对键盘这样的低速设备来说,一颗1MHZ的单片机足够同时控制数百个键盘了。
为什么要如此「浪费」呢?
因为专门设计的、更低性能的CPU,应用面实在太窄;销量上不去,价格就下不来。
所以,键盘、遥控器等等压根不需要什么计算能力的设备,人们都给它塞了一颗相当强悍的CPU进去——完全不理会这颗CPU的性能,已经快赶上当年的红白机了。
不用这种市场上铺货量最大的、虽然性能过分强悍但价格却最为低廉的CPU,才是在铺张浪费呢。
废话少说,咱看看这个:
¥0-¥500 - Android 或 IOS / 手机 / 手机\通讯
三四百块钱左右随便捡个渣渣android,这个android性能如何呢?
普遍来说是:4~8核,1GHZ以上时钟频率;个别还带GPU。
好吧,放着这便宜的、4核1.2G本地CPU不用,去和几百人挤着用你几十万块钱买来的、连GPU都没有的渣渣多CPU服务器?
Dell PowerEdge服务器
PS:注意默认是最低配报价。满CPU/内存再加上专业级的RAID,一台性能可观的服务器,价格往往就飙过了几十万。
当年我们玩过一台四十多万的顶配戴尔710服务器,48核768G内存+RAID;在上面建立200个VPS实例后,近一半实例无法登陆,另有十几个可登陆的实例连MySQL都跑不起来。
哪怕经过优化,这台服务器真能撑起200用户同时在线,每人2000的服务器成本(电费网费人工统统不计),性能也玩不过当时200~400的入门级杂牌Android手机(哪怕4G的CPU,让每个核心服务4个人也太过疯狂;再加上内存访问冲突/带宽限制,打不过当时600MHZ 512M内存的入门手机才是正常的)。
尤其是那些带GPU的、三四百的手机,跑游戏方面的应用,直接完爆那些没有GPU的、十几万甚至几十万的服务器有木有。
好吧,你有钱,搬台双显卡交火的图形工作站来,能拼得过10部三四百的手机吗?
可一台图形工作站……三四千?够买那俩显卡不够?
好吧,你掏上几十万,诱惑用户放弃自己手里几千块钱买来的性能强悍的旗舰;最后却只能给每个用户提供个连市面上最渣的手机性能的零头都不如的渣渣?
这也太情怀了吧。
类似前面关于键盘用CPU的讨论,将来,哪怕云服务已经普及,个人终端之类设备,CPU频率也不太可能会低于1G——起码得够跑浏览器、够解码视频吧?
而且,这种大批量生产的、在将来的科技条件下完全无技术含量的低端CPU,价格很可能会降到一个非常惊人的程度——比如,上百兆甚至几G时钟频率的处理器,被无差别的塞到家用路由器(现在已经塞进去了)、智能家电,甚至……鼠标键盘遥控器里面。
就好象现在我们随随便便把接近红白机性能的CPU塞进键盘里面一样。
唾手可得的、强悍而廉价的本地计算能力,这才是未来的发展趋势;放弃这些免费的本地资源,强推那些旨在垄断的各种云XX,显然是在逆潮流而动。
——当然,这不是在反对云技术。
我只是在陈述一个事实:云技术绝不等于强制封印用户的本地计算能力、然后逼他们使用昂贵而劣质的远程服务:有自由软件,你封不住的。
恰恰相反,云技术应该是补用户本地资源之不足,帮用户解决数据可靠性、访问性、共享等问题(典型如云存储)、以及计算能力问题(典型如搜索)等等。
综上,云游戏显然不过是扯淡罢了。
退一万步,云游戏也绝不会是现在那种一切都放远端、本地什么都没有的扯淡定义。
最最起码,视频渲染是必须留在本地的;否则,物理学、计算机架构以及成本等等,都不允许这种扯淡玩意儿出现。
我认为一种可行的方案是:本地先下载模型、贴图、基本动作逻辑等等,由远端控制游戏逻辑,有点像D3、WOW模式,只是本地客户端可以做的更轻量一些。
更好的办法是本地客户端标准化,提供一整套的API甚至某种控制语言,服务器利用这些API/语言就可以即时在本地生成类D3/WOW的客户端——类似webGL技术,但还要更强悍一些,以便本地能有机会,通过设定的逻辑对用户操作做出即时反应;或者,就好象half-life以及它那一大堆MOD一样,加个MOD就变CS,再加个又成了TF……只是要更灵活、更开放同时更安全一些。
但这个技术,首先,和现在的服务器-客户机模式并无根本区别,只是游戏客户端(游戏引擎)标准化了而已;其次,对本地计算能力仍然有较高要求(甚至更高,毕竟要考虑安全性,不太可能允许随便跑原生代码的)——一句话,就D3那傻样,除了客户端(引擎)标准化了之外,没啥本质改变。