CPU性能瓶颈
在一些论坛里经常能看到一个很有趣的观点:CPU过剩论。
确实,扫雷这叫游戏,GTA5也叫游戏,对于扫雷来说,几十元二手智能手机性能都远远过剩了,GTA了5花多少钱也没办法保证全效全程不卡。
抬这种杠是没有意义的,不同游戏对CPU和显卡的要求不同,CPU价格相对稳定,代代挤牙膏,配个不拖累显卡的CPU还是非常有必要的。
所以说本篇就从简单的几个方面,给你讲清当前玩游戏CPU的主要瓶颈!
玩游戏CPU瓶颈主要有以下3个方面:
1,游戏支持几个核心?多核效率如何?
2,绘制调用!
3,物理性能!
1,游戏支持几个核心?多核效率如何?
对我来说,印象最深的就是2010年的《波斯王子5》,声称第一个支持6核CPU的游戏。
然而并没有什么卵用,多核时代并没有到来,就在去年,某个叫什么光芒的砍僵尸销量大作,也只有双核优化。
经常能在论坛里看见某些自称为“程序员”的,声称当前多核优化没什么难度了。然而近年能把多核优化做“好”的,貌似也仅有GTA5和《星球大战:前线》两款游戏而已。
多核优化不是不想做,而是不好做。即便在显卡完全无压力的测试下,绝大多数所谓四核优化游戏,都不能达到双核近两倍的帧数。
这个就是当前DX下的效率低的问题。AMD也不知道搞了什么黑科技,弄出了mantle这个神奇的东西,微软拿它做出DX12,大幅度提升绘制调用性能,虽然现在游戏还没出,但万DMARK的API预览测试已经很明了了。
貌似本段完结,不过结尾还是要说下,玩网游的配置有很强的单一性,你可能想顺便玩玩单机,但到最后可能天天连关电脑时间都没有。如果只是单开,一定要先搞清游戏支持几核,没必要为未来提前买单。
2,绘制调用!
①绘制调用是什么?
绘制调用也叫绘图调用,简单点说就是显卡要对一个3D图形进行渲染,必须通过CPU发出一个“绘制调用”的指令。
游戏画面越来越复杂,所以CPU绘制调用的负担也就越来越大。
比如说下图的车辆:
不同的车型因为结构不同,所以每一辆车都要单独进行一次“绘制调用”
下图中,每一个建筑、每一处细节(饮料瓶、窗户铁栅栏、垃圾桶、墙边草等),都要各自进行绘制调用。因为场景过于复杂,所以像GTA5这种沙盒类游戏对CPU的负担极大。
而这些小细节对于显卡来说负担却比较小,因为这些小细节不需要太多显卡特效,因为你的显示器还没那么高的分辨率去看清它们(有多少个多边形,够不够圆润),显卡仅仅是贴个图或渲染颜色,部分物品稍微带点阴影效果就够了。
②绘制调用的瓶颈
这个是基于OpenGL开发出来的新的多媒体编程接口,叫做Vuikan。
它和OpenGL的关系就像Mantle(DX12)和DX11。
OpenGL同样有绘制调用效率低的问题,满屏的小精灵瞬间卡成狗,CPU只有两个核心在运行。
而Vuikan是个核心较均匀负载,并且效率极高帧数也非常高。
这个其实就等同于3DMark DX12 API中的小方块的测试一样,这些小精灵就像是沙盒类游戏(GTA5、辐射4等)中的那些建筑物一样,越多CPU负担越大。
③绘制调用效率低的缓解办法
⒈通过引擎分区块缓冲渲染
比如说GTA5中的场景,如果全部模型都正常进行绘制调用然后再渲染的话,CPU肯定吃不消,所以引擎设计中渲染是分区块的。
具体太复杂,我就简单的叙述下大概。
首先渲染近处(红框),任务、汽车、近处地面、草地、房子等。
其次渲染中处,房子、电线杆、树木等,这部分细节就要差很多。
然后进行远处渲染,而远处的高楼大多数都是缓冲渲染成的纸片、根本不是3D模型,而在你移动一定距离、视角有一定变化后,再渲染另一幅纸片。
这样就可以大大减轻CPU和显卡的负担。
⒉绘制调用批处理
例如全战类、无双类游戏,满屏的兵,如果每个兵都单独进行一次绘制调用,当前CPU的性能和DX11之前的效率来说,根本无法流畅运行的。
所以就有一个东西叫做“绘制调用批处理”,只要完全相同的模型,可以进行一次调用就可以了,这样就可以大大减轻CPU的负担。
而全战类、无双类游戏,里面同兵种是完全一样的模型,这样只要简单做个批处理就可以了。
但是在GTA5这类游戏中,你会发现,满街车辆种类繁多,而人物装束又各不相同。
不同的模型也就没法进行批处理,这就跟网游一样。
为啥3D网游进主城就卡的天昏地暗,就是因为每个角色的装备都不大一样,而每个角色每个不同的装备都要进行一次绘制调用,CPU就抗不住了。
3,绘制调用,游戏优化策略
GTA5出来后,很多人觉得最高画质跟中低画质差不多。
其实GTA5优化的非常巧妙,以往游戏都是直接阉割远处物体,比如说GTA4中,大楼大桥慢慢浮现是经常的。
而GTA5,主要进行了细节阉割。
上面讲了绘制调用批处理
GTA5不会像GTA4中,通过滑块调节减少汽车数量,
而是改成了减少汽车、人物种类。同种类多了自然绘制调用的次数就减少了,这样CPU负担也就会随之减少。
另外还有一个非常重要的特效叫做扩展细节距离调整。
比如说下面两张图
扩展细节距离全开
扩展细节距离全关
在这种小图中,你也许看起来画面都差不多,我们放大来看看。
全开
全关
请注意大门的结构,全开时是多面玻璃的玻璃门,而全关的话,就只有两片玻璃。
我们再离近看看:
可见全开的情况下,玻璃门的结构是正确的。
我们再来看看远处大楼:
全开
全关
大楼顶部细节和玻璃窗的阴影细节,
还有右侧电线杆的细节有明显差别。
近处的广告版:
全开
全关
全关下需要戴300度以上近视眼镜。
最后再来看看帧数差距:
全开
全关
在GPU使用率差不多的情况下,全关后CPU使用率降了4%,帧数提升到了59.9帧。
⒋绘制调用的限制
其实不可否认的是,当前绘制调用效率的低下限制了游戏的开发。如果你经常关注游戏新闻的话,会经常看见某些可以做成沙盒类的游戏最后不得不做成线性的。
其实绘制调用讨论到最后,有人会说一个DX12不就已经解决了嘛!就算DX12现在有许多问题,但等成熟之后,CPU绘制调用性能十几倍的提升,也不算瓶颈了吧?
那我们再来看下一章节,CPU的物理性能。
3,物理性能!
一个游戏最重要的组成就是
⒈良好的光影特效
⒉优秀的细节(吃绘制调用)
⒊惊人的物理特效
大多数游戏表现纸张,游戏人物拿到手里感觉就跟铁板一样硬,毫无现实中纸张的柔韧。
其实想表现纸张的柔韧,就需要物理特效的表现。
然而物理性能一直是CPU永远的痛,因为CPU浮点性能太低,而目前主流物理引擎对CPU优化也不好,一旦加大物理特效,再好的CPU根本抗不住。
所以说目前的状况就是,游戏光影特效越来越好,而DX12也可以让游戏细节越来越丰富,而出了NV的PhysX for GPU以外,几乎没有什么办法可以让游戏物理特效有质的变化。
Nvidia这个显卡物理加速的功能,需要游戏开发时的特别支持才行。
当年ATI也开始研发Havok的GPU支持的计划,但后来计划流产,只出了个演示视频。
虽然PhysX坚强的活了下来,但大多数游戏开发商并不给老黄面子。
支持显卡物理加速的游戏,8年了也就出了30余款,
也就是说,这些年来,游戏开发商并没有在物理特效上多做文章,所以那些“画质大作”的“截图”往往要比“动态”画面优秀得多,这也就是所谓的“看截图跟照片一样,玩起来跟生铁一样”。
gpu其实是逐步替代cpu的运算的,虽然绘制调用目前还没有办法,不过物理方面运算还是有办法的。
比如说全局光照,也就是影子,一般游戏里这叫阴影。不过真正的全局光照跟SSAO/HBAO+这些阴影是两码事。
AO叫环境光屏蔽,主要作用是模拟物体表面阴影,从而增加模型的凹凸感。
简单点说它就是一种通过gpu模拟全局光照的一种算法,基本不消耗cpu性能。
《刺客信条:大革命》,NV特意做了个视频来讲解HBAO+的优势。
全局光照就是模拟太阳光或灯光的效果,主要指投射到地面的影子。
因为每一个影子cpu都要对其进行顶点运算,所以说高品质阴影就等于模型又翻了倍,会大量消耗cpu性能。
不过替代方式还是有的,也就是所谓的“软阴影”。
正常来说,光线属于长波,有一定的衍射性。太阳光投射的阴影,离本体越远的,边沿应该越虚。
而cpu计算的全局光照,性能越高边沿越锐利,也就是更加“精确”。
所以相对来说软阴影更加真实,而且目前amd和nvidia都有自己的软阴影技术,amd的叫CHS,NV的叫PCSS。
不过软阴影的缺陷也很明显,不管阴影离本体远近,边缘模糊度都差不多,结果就是软阴影跟低品质阴影的感受不是差太多。
最后说下,
对于追求极端画质的游戏来说,CPU和显卡永远都不够用的。
长距离视野和复杂的场景对于CPU来说就是毁灭性的。
这几年凸现最严重的就是多核优化,我们拿intel来说。
一代酷睿,主流最高4核,至尊最高6核,x系最高6核
二代酷睿,主流最高4核,至尊最高6核,E5最高8核
三代酷睿,主流最高4核,至尊最高6核,E5最高12核
四代酷睿,主流最高L4核,至尊最高8核,E5最高18核
五代酷睿,主流最高4核,至尊最高10核,E5最高24核
六代酷睿,主流最高4核,至尊最高未知,E5最高28核
整整6代超频,主流核心数量几乎没变,然而至尊接口的U已经从6核变到28核。
6代酷睿对比1代酷睿单核综合性能提升也不过60%多些,主流的i7核心数量无变化的情况下,至尊接口的从1.5倍核心数量,进化到了7倍。
这就跟战争年代某军队每天能生产28万份军粮,但士兵最多能征集4万一样。士兵当然越多越好,但是现在游戏没法调用那么多士兵,不过在这种情况下,4万精兵跟4万老弱病残差别就大了,单核性能这么多年提升太小,别说“过剩”,那明明是根本不够用。虽然你可以说28万军粮“过剩”,不过那也不是谁都能买得起的,买得起也不一定会去买的。
多核性能吃不下
单核性能不够用
这就是现状。