有一些我从未理解过的东西.像GTA IV这样伟大的大型PC游戏如何使用50%的CPU并以60fps运行,而旋转茶壶@ 60fps的DX演示使用率高达30%?
耐心,技术技能和耐力.
第一点是DX演示主要是一种教学辅助工具,因此为了清晰起见而不是执行速度.
这是一个非常重要的主题,但游戏开发主要是关于理解您的数据和执行路径到几乎病态程度.
您的代码围绕两件事 - 您的数据和目标硬件.
最快的代码是永远不会执行的代码 - 将数据分批分类,只对您需要的数据执行昂贵的操作
如何存储数据是关键 - 以连续访问为目标,这使您可以高速批量处理.
Parellise你可能做的一切
现代CPU很快,现代RAM非常慢.缓存未命中是致命的.
尽可能多地推送到GPU - 它具有快速的本地内存,因此可以浏览数据,但您需要通过正确组织数据来帮助它.
避免使用大量的renderstate开关(再次批量相似的顶点数据),因为这会导致GPU停止
调整您的纹理并确保它们是2的幂 - 这改善了GPU上的纹理缓存性能.
尽可能多地使用细节级别 - 低/中/高版本的3D模型和基于相机播放器距离的切换 - 如果屏幕上只有5个像素,则无需渲染高分辨率版本.
一般来说,这是因为
游戏对于他们需要呈现的内容是最佳的,并且
它们特别利用了您的硬件.
例如,您可以进行一项简单的优化,而不是实际尝试绘制无法看到的内容.考虑一个复杂的场景,如侠盗猎车手IV的城市景观.渲染器实际上并不渲染所有建筑物和结构.相反,它只渲染相机可以看到的内容.如果你可以飞到这些相同建筑物的后面,面对原始相机,你会看到一个半建成的镂空外壳结构.相机无法看到的每个点都没有渲染 - 因为你看不到它,所以没有必要尝试向你显示它.
此外,当您针对特定硬件集进行开发时,存在优化的指令和特殊技术,以实现更好的加速.
问题的另一部分是为什么演示使用了这么多CPU:
...虽然旋转茶壶@ 60fps的DX演示使用了惊人的30%?
当您的硬件不支持显示一个漂亮示例所需的所有功能时,图形API(如dxdemo
)的演示通常会回退到所谓的软件渲染器.这些功能可能包括阴影,反射,光线追踪,物理等等.
这模仿了不太可能存在的功能完备的全功能硬件设备,以展示API的所有功能.但由于硬件实际上并不存在,因此它会在您的CPU上运行.这比委托显卡效率低得多 - 因此你的CPU使用率很高.
欺骗你的3D游戏非常棒.例如,存在一种称为屏幕空间环境遮挡(SSAO)的技术,其通过遮蔽接近表面不连续的场景的那些部分来给出更逼真的感觉.如果你看一下墙角,你会发现它们在大多数情况下看起来比中心稍暗.
使用光能传递可以实现完全相同的效果,光能传递基于相当精确的模拟.光能传递也会考虑到弹跳灯等的更多影响,但它的计算成本很高 - 这是一种射线追踪技术.
这只是一个例子.有数百种用于实时计算机图形的算法,它们基本上基于良好的近似值,并且通常做出很多假设.例如,必须非常小心地选择空间排序,具体取决于速度,摄像机的典型位置以及场景几何的变化量.
这些"优化"是巨大的 - 您可以有效地实现算法并使其运行速度提高10倍,但选择产生类似结果的智能算法("作弊")可以使您从O(N ^ 4)转到O(日志(N)).
优化实际实现是使游戏更高效的原因,但这只是线性优化.
Eeeeek!
我知道这个问题很老,但令人兴奋的是没有人提到VSync !!! ???
您将60fps的游戏CPU使用率与60fps的茶壶演示的CPU使用率进行了比较.
是不是很明显,两者都以60fps运行(或多或少)?这导致答案......
两个应用程序都启用了vsync!这意味着(哑巴)渲染帧率被锁定到显示器的"垂直空白间隔".图形硬件(和/或驱动程序)将仅以最大值渲染.60fps的.60fps = 60Hz(Hz =每秒)刷新率.所以你可能使用相当古老的闪烁CRT或普通的LCD显示器.在以100Hz运行的CRT上,您可能会看到高达100Hz的帧速率.VSync也以类似于LCD显示器的方式应用(它们通常具有60Hz的刷新率).
所以,茶壶演示可能实际上运行效率更高!如果它使用30%的CPU时间(相比于GTA IV的50%CPU时间),则每帧可能使用较少的CPU时间,并且等待下一个垂直空白间隔的时间更长.要比较这两个应用,您应该禁用vsync并再次测量(您将为这两个应用测量更高的fps).
有时它可以禁用vsync(大多数游戏在其设置中都有一个选项).有时,当禁用vsync时,您会看到"撕裂伪影".
您可以在维基百科上找到它的详细信息及其使用原因:http://en.wikipedia.org/wiki/Vsync
虽然很多答案在这里提供的优良的适应症如何,我会代替回答的简单问题,为什么
GTA4 在第一周就花了4亿美元
Crytech写了一个非常令人印象深刻的图形演示,让nVidia在一个贸易展上"炫耀".由此产生的印象使他们能够创造出会成为FarCry的东西.
Valve的2005年收入和营业利润分别为70和5500万美元.
也许最好的例子(当然最着名的一个)是Id软件.他们很早就意识到,在Commander Keen(早在3D之前)想出了一个聪明的方法来实现1,即使它依赖于现代硬件(在这种情况下是EGA显卡!),它在图形上优于这将使你的游戏脱颖而出的竞争.这是真的,但他们进一步意识到,他们不必自己拿出新的游戏和内容,而是可以获得技术许可,从而从其他人那里获得收入,同时能够开发下一代引擎,从而再次在竞争中崭露头角.
这些程序员的能力(加上商业头脑)使他们变得富有.
也就是说,激励这些人并不一定是金钱.实现这一目标的愿望很可能也是如此.他们在早期赚取的钱只意味着他们现在有时间投入他们喜欢的东西.虽然许多人都有外部兴趣,但几乎所有人仍然计划并尝试找出比上一次迭代做得更好的方法.
简单地说,编写茶壶演示的人可能会遇到以下一个或多个问题:
更短的时间
资源减少
减少奖励激励
减少内部和外部竞争
较低的目标
少人才
最后可能听起来很刺耳2但显然有一些人比其他人更好,钟形曲线有时会有极端的结果,他们往往会被这种技能的相应极端所吸引.
较小的目标实际上可能是主要原因.茶壶演示的目标只是一个演示.但不是程序员技能的演示3.这将是一个(大)操作系统的一个小方面的演示,在这种情况下是DX渲染.
对于那些观看演示的人来说,只要它看起来足够好,就不会使用比所需更多的CPU .没有受益人时,没有动力消除浪费.相比之下,游戏会喜欢有更好的人工智能,更好的声音,更多的多边形,更多的效果.
在这种情况下,在PC硬件上平滑滚动
可能比我更多,所以我们对此很清楚
严格来说,它本来也是他/她的经理的演示,但这里的驱动器再次是时间和/或视觉质量.
由于一些原因
3D游戏引擎经过高度优化
大多数工作都是由您的图形适配器完成的
50%Hm,让我猜你有双核心,只使用一个核心;-)
编辑:给几个数字
2.8 Ghz Athlon-64,配备NV-6800 GPU.结果是:
CPU:72.78 Mflops
GPU:2440.32 Mflops
有时一个场景可能比它出现的更多.例如,具有数千个顶点的旋转茶壶,环境映射,凹凸贴图和其他所有同时渲染的复杂像素着色器等于大量处理.很多时候,这些茶壶演示只是为了展示某种特殊效果.当绝对性能不是目标时,他们也可能无法始终充分利用GPU.
在游戏中你可能会看到类似的效果,但它们通常以妥协的方式完成,以最大化帧速率.这些优化扩展到您在游戏中看到的所有内容.问题在于,"我们如何以最少的处理能力创造最壮观,最逼真的场景?" 这就是让游戏程序员成为最好的优化者的原因.