有一些我从未理解过的东西。像GTA IV这样伟大的大型PC游戏如何使用50%的CPU并以60fps运行,而旋转茶壶@ 60fps的DX演示使用率高达30%?
答案 0 :(得分:96)
耐心,技术技能和耐力。
首先,DX演示主要是一种教学辅助工具,因此为了清晰起见而不是执行速度。
这是一个非常重要的主题,但游戏开发主要是关于理解您的数据和执行路径到几乎病态程度。
答案 1 :(得分:70)
一般来说,这是因为
例如,您可以进行一项简单的优化,而不是实际尝试绘制无法看到的内容。考虑一个复杂的场景,如来自侠盗猎车手IV 的城市景观。渲染器实际上并不渲染所有建筑物和结构。相反,它只渲染相机可以看到的内容。如果你可以飞到这些相同建筑物的后面,面对原始相机,你会看到一个半建成的镂空外壳结构。相机看不到的每一个点都没有渲染 - 因为你看不到它,所以没有必要尝试向你显示它。
此外,当您针对特定硬件集进行开发时,存在优化的指令和特殊技术,以实现更好的加速。
你问题的另一部分是为什么演示使用了这么多CPU:
...虽然旋转茶壶@ 60fps的DX演示使用了惊人的30%?
当您的硬件不支持显示漂亮所需的所有功能时,图形API(如dxdemo
)的演示通常会回退到所谓的软件渲染器例。这些功能可能包括阴影,反射,光线追踪,物理等等。
这模仿了一个完全功能齐全的硬件设备的功能,该设备不太可能存在,以展示API的所有功能。但由于硬件实际上并不存在,因此它会在您的CPU上运行。这比委托显卡效率低得多 - 因此你的CPU使用率很高。
答案 2 :(得分:40)
3D游戏非常适合欺骗你的眼睛。例如,存在一种称为屏幕空间环境遮挡(SSAO)的技术,其通过遮蔽接近表面不连续的场景的那些部分来给出更逼真的感觉。如果你看一下墙角,你会发现它们在大多数情况下看起来比中心稍暗。
使用光能传递可以实现同样的效果,光能传递基于相当精确的模拟。光能传递也会考虑到弹跳灯等的更多影响,但它的计算成本很高 - 这是一种射线追踪技术。
这只是一个例子。有数百种用于实时计算机图形的算法,它们基本上基于良好的近似值,并且通常做出很多假设。例如,必须非常谨慎地选择空间排序,具体取决于速度,摄像机的典型位置以及场景几何体的变化量。
这些“优化”巨大 - 您可以有效地实施算法并使其运行速度提高10倍,但选择产生类似结果的智能算法(“作弊”)可以让您走从O(N ^ 4)到O(log(N))。
优化实际实施是使游戏更高效的原因,但这只是线性优化。
答案 3 :(得分:33)
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
答案 4 :(得分:26)
虽然这里的许多答案提供了如何的出色指示,但我会回答更简单的问题为什么
也许最好的例子(当然最着名的一个)是Id软件。他们很早就意识到,Commander Keen(3D之前)提出了一种聪明的方法来实现 1 ,即使它依赖于现代硬件(在这种情况下是EGA显卡!)图形优于竞争对手,这将使您的游戏脱颖而出。这是真的,但他们进一步意识到,他们不必自己拿出新的游戏和内容,而是可以获得技术许可,从而从其他人那里获得收入,同时能够开发下一代引擎,从而再次在竞争中崭露头角
这些程序员的能力(加上商业头脑)使他们变得富有。
这就是说激励这些人并不一定是金钱。实现这一目标的愿望很可能也是如此。他们在早期赚取的钱只意味着他们现在有时间投入他们喜欢的东西。虽然许多人outside interests几乎所有人仍然编程,并试图找出比上一次迭代做得更好的方法。
简单地说,编写茶壶演示的人可能会遇到以下一个或多个问题:
最后可能听起来很苛刻 2 但显然有些人比其他人更好,钟形曲线有时会有极端的结果,他们往往被吸引到相应的极端技能。
较小的目标实际上可能是主要原因。茶壶演示的目标只是一个演示。但不是程序员技能 3 的演示。这将是一个(大)操作系统的一个小方面的演示,在这种情况下是DX渲染。
对于那些观看演示的人来说,只要看起来足够好,它就不会使用比所需的更多的CPU 。没有受益人时,没有动力消除浪费。相比之下,游戏更喜欢有更好的人工智能,更好的声音,更多的多边形,更多的效果。
答案 5 :(得分:18)
由于一些原因
编辑:提供少量数字
2.8 Ghz Athlon-64,配备NV-6800 GPU。结果是:
答案 6 :(得分:8)
有时一个场景可能比它出现的更多。例如,具有数千个顶点的旋转茶壶,环境映射,凹凸贴图和其他所有同时渲染的复杂像素着色器等于大量处理。很多时候,这些茶壶演示只是为了展示某种特殊效果。当绝对性能不是目标时,他们也可能无法始终充分利用GPU。
在游戏中你可能会看到类似的效果,但它们通常是以妥协的方式完成的,以最大限度地提高帧速率。这些优化扩展到您在游戏中看到的所有内容。问题在于,“我们如何以最少的处理能力创造最壮观,最逼真的场景?”这就是让游戏程序员成为最好的优化者的原因。
答案 7 :(得分:5)
答案 8 :(得分:5)
通过给出的所有合格且良好的答案,仍然缺少重要的答案:Windows的CPU利用率计数器不是非常可靠。我想这个简单的茶壶演示只是调用渲染函数的空闲循环,阻塞缓冲区交换。
现在Windows CPU利用率计数器只是查看每个进程中花费了多少CPU时间,而不是如何使用此CPU时间。尝试添加
Sleep(0);
从渲染函数返回后,进行比较。
答案 9 :(得分:3)
此外,从艺术的角度来看,有许多技巧可以节省计算能力。在许多游戏中,特别是旧游戏中,阴影被预先计算并“烘焙”到地图的纹理中。很多时候,艺术家试图使用平面(两个三角形)来表示树木和特殊效果之类的东西,而它们看起来大致相同。游戏中的雾是一种避免渲染远距离物体的简单方法,而且游戏通常会为远视图,中视图和近视图提供多个分辨率。
答案 10 :(得分:2)
像GTA IV这样的大型PC游戏如何使用50%的CPU并以60fps的速度运行,而旋转的Teapot @ 60fps的DX演示使用率高达30%?
虽然GTA很可能比DX演示更有效,但以这种方式衡量CPU效率基本上是打破的。效率可以定义,例如你在每个给定时间内做了多少工作。一个简单的反例:每个逻辑CPU产生一个线程,并在其上运行一个简单的无限循环。您将获得100%的CPU使用率,但效率不高,因为没有有用的工作。
这也导致了一个答案:游戏如何高效?在编写“伟大的大型游戏”时,我们致力于在各个方面(现在通常还包括多核优化)优化游戏。至于DX演示,其重点不是快速运行,而是展示概念。
答案 11 :(得分:2)
我认为你应该看一下 GPU利用率而不是CPU ...我敢打赌,GTA IV中的显卡比Teapot样本中的显卡更加繁忙(它应该几乎空闲)。
也许你可以使用像这个监视器这样的东西来检查:
http://downloads.guru3d.com/Rivatuner-GPU-Monitor-Vista-Sidebar-Gadget-download-2185.html
同样需要考虑帧率,也许茶壶样本全速运行(可能是1000fps),大多数游戏都限制在显示器的刷新频率(约60fps)。
答案 12 :(得分:2)
查看vsync的答案;这就是他们以相同的帧速率运行的原因。
其次,CPU在游戏中缺少领先优势。一个简单的解释是主游戏循环只是一个无限循环:
while(1) {
update();
render();
}
即使你的游戏(或者在这种情况下,茶壶)没有做太多,你仍然在循环中占用CPU。
GTA中的50%cpu比演示中的30%更“高效”,因为它很可能没有做太多的事情;但是GTA正在更新大量的细节。即使在演示中添加“睡眠(10)”也可能会使它的CPU降低一吨。
最后看看GPU使用情况。该演示可能在现代视频卡上占据<1%,而GTA在游戏过程中可能会占多数。
简而言之,您的基准测量和测量结果并不准确。
答案 13 :(得分:2)
DX茶壶演示没有使用30%的CPU做有用的工作。它忙着等待,因为它没有别的事情要做。
答案 14 :(得分:1)
任何答案的核心都应该是这样 - 3D引擎执行的转换主要是在加法和乘法(线性代数)(没有分支或跳转)中指定的,绘图单个帧的操作通常在多个这样的add-mul的工作可以并行完成的方式。 GPU核心非常好添加add-mul,并且它们有数十或数百个添加模拟核心。
CPU留下了简单的东西 - 比如AI和其他游戏逻辑。
答案 15 :(得分:1)
根据我对Unreal系列的了解,一些约定像封装一样被破坏。代码根据游戏编译为字节码或直接编译为机器代码。此外,对象以网格的形式呈现和打包,并且诸如纹理,光照和阴影之类的事物是预先计算的,而纯3D动画需要这样实时。当游戏实际运行时,还有一些优化,例如仅渲染对象的可见部分并仅在关闭时显示纹理细节。最后,视频游戏很可能是在给定时间内从平台中获得最佳效果(例如:Intelx86 MMX / SSE,DirectX,......)。
答案 16 :(得分:1)
我认为这里缺少一个重要的答案。大多数答案都会告诉您“了解您的数据”。事实上,你必须以同样的方式和同等程度的重要性,也知道你的:
但是,最重要的是,使用现有的现代电脑,你将永远无法以&gt;&gt;> 30ftp播放真正的1080p视频(64位的单个1080p图像需要15个000 Ko / 14.9 MB)。原因在于采样/精度。视频游戏永远不会对像素,图像,数据等使用双精度(64位),而是使用较低的自定义精度(~4-8位),有时使用插值技术重新调整精度较低,以便进行合理的计算时间。
还有其他技术,例如剪切数据(使用OpenGL标准和软件实现),数据压缩等。请记住,当前的GPU可以比当前CPU快300倍以上硬件能力但是,一个优秀的程序员可能会获得10-20倍的因子,除非您的问题得到完全优化并且完全可并行化(特别是任务可并行化)。
根据经验,我可以告诉你,优化就像指数曲线。为了达到最佳性能,所需的时间可能非常重要。
因此,为了回到茶壶,您应该看到几何体如何表示,采样以及Vs在GTA 5中看到的精度,几何/纹理方面,最重要的是细节(精度,采样等)。 )