当前位置:  开发笔记 > 人工智能 > 正文

3D游戏如何高效?

如何解决《3D游戏如何高效?》经验,为你挑选了7个好方法。

有一些我从未理解过的东西.像GTA IV这样伟大的大型PC游戏如何使用50%的CPU并以60fps运行,而旋转茶壶@ 60fps的DX演示使用率高达30%?



1> zebrabox..:

耐心,技术技能和耐力.

第一点是DX演示主要是一种教学辅助工具,因此为了清晰起见而不是执行速度.

这是一个非常重要的主题,但游戏开发主要是关于理解您的数据和执行路径到几乎病态程度.

    您的代码围绕两件事 - 您的数据和目标硬件.

    最快的代码是永远不会执行的代码 - 将数据分批分类,只对您需要的数据执行昂贵的操作

    如何存储数据是关键 - 以连续访问为目标,这使您可以高速批量处理.

    Parellise你可能做的一切

    现代CPU很快,现代RAM非常慢.缓存未命中是致命的.

    尽可能多地推送到GPU - 它具有快速的本地内存,因此可以浏览数据,但您需要通过正确组织数据来帮助它.

    避免使用大量的renderstate开关(再次批量相似的顶点数据),因为这会导致GPU停止

    调整您的纹理并确保它们是2的幂 - 这改善了GPU上的纹理缓存性能.

    尽可能多地使用细节级别 - 低/中/高版本的3D模型和基于相机播放器距离的切换 - 如果屏幕上只有5个像素,则无需渲染高分辨率版本.



2> John Feminel..:

一般来说,这是因为

    游戏对于他们需要呈现的内容是最佳的,并且

    它们特别利用了您的硬件.

例如,您可以进行一项简单的优化,而不是实际尝试绘制无法看到的内容.考虑一个复杂的场景,如侠盗猎车手IV的城市景观.渲染器实际上并不渲染所有建筑物和结构.相反,它只渲染相机可以看到的内容.如果你可以飞到这些相同建筑物的后面,面对原始相机,你会看到一个半建成的镂空外壳结构.相机无法看到的每个点都没有渲染 - 因为你看不到它,所以没有必要尝试向你显示它.

此外,当您针对特定硬件集进行开发时,存在优化的指令和特殊技术,以实现更好的加速.

问题的另一部分是为什么演示使用了这么多CPU:

...虽然旋转茶壶@ 60fps的DX演示使用了惊人的30%?

当您的硬件不支持显示一个漂亮示例所需的所有功能时,图形API(如dxdemo)的演示通常会回退到所谓的软件渲染器.这些功能可能包括阴影,反射,光线追踪,物理等等.

这模仿了不太可能存在的功能完备的全功能硬件设备,以展示API的所有功能.但由于硬件实际上并不存在,因此它会在您的CPU上运行.这比委托显卡效率低得多 - 因此你的CPU使用率很高.


纹理 - 茶壶是从大量单独的三角形创建的,所有三角形都具有法线和光照交互.在游戏中看起来像一个疯狂复杂的3D世界通常是相当简单的大块,覆盖着详细的图片.很多'3d'是在3d形状上绘制的静态2D图像中的巧妙阴影和透视艺术效果
DX演示也使用您的硬件.那么,什么是'特别'?
但是一个演示不太可能是最佳的.
例如,@ tur1ng,茶壶演示可能启用了*reflection*,*shadows*和其他效果.
茶壶可能比GTA4场景有更多的多边形.事实上,图形渲染的当前瓶颈是更多的纹理效果,如凹凸贴图衍生技术,以添加细节和其他后期渲染效果.
@Klaim:那是真的.我隐含地假设茶壶比GTA4场景更容易渲染.

3> mnemosyn..:

欺骗你的3D游戏非常棒.例如,存在一种称为屏幕空间环境遮挡(SSAO)的技术,其通过遮蔽接近表面不连续的场景的那些部分来给出更逼真的感觉.如果你看一下墙角,你会发现它们在大多数情况下看起来比中心稍暗.

使用光能传递可以实现完全相同的效果,光能传递基于相当精确的模拟.光能传递也会考虑到弹跳灯等的更多影响,但它的计算成本很高 - 这是一种射线追踪技术.

这只是一个例子.有数百种用于实时计算机图形的算法,它们基本上基于良好的近似值,并且通常做出很多假设.例如,必须非常小心地选择空间排序,具体取决于速度,摄像机的典型位置以及场景几何的变化量.

这些"优化"是巨大的 - 您可以有效地实现算法并使其运行速度提高10倍,但选择产生类似结果的智能算法("作弊")可以使您从O(N ^ 4)转到O(日志(N)).

优化实际实现是使游戏更高效的原因,但这只是线性优化.



4> Frunsi..:

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



5> ShuggyCoUk..:

虽然很多答案在这里提供的优良的适应症如何,我会代替回答的简单问题,为什么

GTA4 在第一周就花了4亿美元

Crytech写了一个非常令人印象深刻的图形演示,让nVidia在一个贸易展上"炫耀".由此产生的印象使他们能够创造出会成为FarCry的东西.

Valve的2005年收入和营业利润分别为70和5500万美元.

也许最好的例子(当然最着名的一个)是Id软件.他们很早就意识到,在Commander Keen(早在3D之前)想出了一个聪明的方法来实现1,即使它依赖于现代硬件(在这种情况下是EGA显卡!),它在图形上优于这将使你的游戏脱颖而出的竞争.这是真的,但他们进一步意识到,他们不必自己拿出新的游戏和内容,而是可以获得技术许可,从而从其他人那里获得收入,同时能够开发下一代引擎,从而再次在竞争中崭露头角.

这些程序员的能力(加上商业头脑)使他们变得富有.

也就是说,激励这些人并不一定是金钱.实现这一目标的愿望很可能也是如此.他们在早期赚取的钱只意味着他们现在有时间投入他们喜欢的东西.虽然许多人都有外部兴趣,但几乎所有人仍然计划并尝试找出比上一次迭代做得更好的方法.

简单地说,编写茶壶演示的人可能会遇到以下一个或多个问题:

更短的时间

资源减少

减少奖励激励

减少内部和外部竞争

较低的目标

少人才

最后可能听起来很刺耳2但显然有一些人比其他人更好,钟形曲线有时会有极端的结果,他们往往会被这种技能的相应极端所吸引.

较小的目标实际上可能是主要原因.茶壶演示的目标只是一个演示.但不是程序员技能的演示3.这将是一个(大)操作系统的一个小方面的演示,在这种情况下是DX渲染.

对于那些观看演示的人来说,只要它看起来足够好,就不会使用比所需更多的CPU .没有受益人时,没有动力消除浪费.相比之下,游戏会喜欢有更好的人工智能,更好的声音,更多的多边形,更多的效果.


    在这种情况下,在PC硬件上平滑滚动

    可能比我更多,所以我们对此很清楚

    严格来说,它本来也是他/她的经理的演示,但这里的驱动器再次是时间和/或视觉质量.



6> stacker..:

由于一些原因

3D游戏引擎经过高度优化

大多数工作都是由您的图形适配器完成的

50%Hm,让我猜你有双核心,只使用一个核心;-)

编辑:给几个数字

2.8 Ghz Athlon-64,配备NV-6800 GPU.结果是:

CPU:72.78 Mflops

GPU:2440.32 Mflops


它并不意味着程序是单线程的 - 它只是意味着至少有一个线程尽可能快地运行.这是合理的,因为你为什么要让它变慢?另一方面,许多游戏几乎完全是单线程的.在多线程中以有效的方式编写复杂的模拟是非常困难的,因为并发/分布式系统中接受更多延迟以获得更多吞吐量的典型情况对于应该响应的游戏来说并不好.

7> Steve Wortha..:

有时一个场景可能比它出现的更多.例如,具有数千个顶点的旋转茶壶,环境映射,凹凸贴图和其他所有同时渲染的复杂像素着色器等于大量处理.很多时候,这些茶壶演示只是为了展示某种特殊效果.当绝对性能不是目标时,他们也可能无法始终充分利用GPU.

在游戏中你可能会看到类似的效果,但它们通常以妥协的方式完成,以最大化帧速率.这些优化扩展到您在游戏中看到的所有内容.问题在于,"我们如何以最少的处理能力创造最壮观,最逼真的场景?" 这就是让游戏程序员成为最好的优化者的原因.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有