首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gamedev编程(性能相关)

gamedev编程(性能相关)
EN

Stack Overflow用户
提问于 2009-10-10 10:50:06
回答 8查看 2.8K关注 0票数 1

我只是想知道在gamedev中有些东西是如何工作的:

  1. 我知道,性能实际上是的关键,因此仍然(我认为永远不会)没有地方使用托管语言/平台作为Java/.NET,仅仅是因为它们的性能。但是..。最近我在这里读到过,尽管创建游戏的人使用C++作为主要语言,但实际上他们使用而不是使用STL或Boost (或者很多)。认为它和性能有一些共同点,对吧?如果我错了,请您告诉我避免这些库的原因是什么(我认为这会使开发人员的生活更轻松)?是因为许可证(助推)吗?那么EA的STL版本呢?其他电影公司也有自己的版本吗?
  2. “接近金属”的游戏编程到底是什么?你离机器越来越近了吗?您有时会使用程序集作为关键的内部循环,还是C++实际上是您目前使用的最低抽象层?我假设在这些产品中,性能是最重要的,分析是非常非常常见的任务--但是有时您是否被迫使用组装来加快某些部件的速度,或者好的C++是“足够好”?

编辑:对不起,这可能还不清楚,但我对有游戏行业经验的人的答案感兴趣。我是,而不是,对那些没有游戏开发商业经验的人给出的一些假设感兴趣。我对用C#/Java创建的一些小众游戏的例子也不感兴趣。但是,如果您知道一个比FarCry2更好看的产品(只是和示例,但是您最喜欢的现代漂亮的游戏名称),并且是在Java/.NET中编写的完全,并且具有与FarCry2相似的性能……请不要犹豫地提到这个产品!谢谢。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-10-10 18:01:29

的确,在游戏开发中,不使用STL。尽管某些人总是争先恐后地宣称,他们也从不使用Java、C#或其他托管语言。

我说的不是小型的X-Box直播拱门游戏或网络浏览器游戏之类的东西。我说的是AAA游戏的高端发展。

他们不使用STL。然而,他们确实使用了自己的自定义实现,这些实现看起来非常类似于STL。会有智能数组,会有哈希表,会有智能指针,它们不会是STL。

控制台有一些性能特点,这是非常不同的个人电脑。即使是专门针对PC的游戏项目,也通常使用过去用于控制台项目的代码库。为了使基本的模板结构按需要工作,需要进行大量的调整。

大多数游戏工作室也希望能适应其他平台的代码。当需要将游戏移植到一个新的平台时,锁定微软/索尼/任天堂的实现会带来更多的痛苦。提供的模板库(开始时不一定是STL )通常少于恒星库。至少在硬件周期的早期,当一个工作室正在熨平他们计划在未来五年内继续使用的引擎时,他们是这样做的。

在我工作过的工作室里,我看到了一种相当程度的否定第三方代码的“不建立在这里”的态度。有时这是正当的,有时是没有道理的。在基本数据结构模板的情况下,它通常是。

至于你的第二个问题,偶尔会用到汇编语言。但只有在孤立的情况下,大量的数学需要经常发生。整个引擎可能包含两个或三个asm块的小文件。

票数 1
EN

Stack Overflow用户

发布于 2009-10-10 11:30:10

  1. 与某些信念相反的是,STL是相当优化的,而且代码一点也不坏。大多数游戏工作室不使用它的原因是内存。您对内存分配和取消分配的控制不如编写您自己版本的STL容器那样多。这也是不喜欢托管语言的原因。

编写自己的容器可以让您编写跨平台代码并更容易地进行内存跟踪。在控制台上尤其如此,例如,PS3需要对硬件有详细的了解,以便获得最佳的性能。这通常意味着你需要完全控制PPU,SPUs和RSX之间的内存流。

  1. 对于非常特殊的操作,例如数学库函数,汇编程序只是“必需”(引号中的引号,因为它实际上不是必需的,而是有用的)。更常见的是SIMD本质,它将代码向量化。然而,大多数工作室都有经过相当优化的遗留代码,而且由于这些优化级别很低,所以不需要在硬件代之间进行很大的更改。我想说的是,在控制台上,使用较低级别的代码更为常见。
票数 10
EN

Stack Overflow用户

发布于 2009-10-10 11:55:07

我知道,性能实际上是至关重要的,因此仍然(而且我认为永远也不会)没有地方使用托管语言/平台作为Java/.NET,仅仅是因为它们的性能。

不,你不知道这个。你这么想,你想要相信是因为你把游戏开发浪漫化了,因为你认为高级语言是不可能很快实现的。对于90%的比赛来说,.NET的表现是非常好的。只会变得更好。管理平台必须慢一点,这是没有内在原因的。他们有更快的潜力,因为他们是JIT的。实际上,它们的性能与相当好的C++代码大致相同,比典型的C++代码要好得多,比真正好的C++代码稍差一些。而且大多数大型游戏都使用不止一种语言。他们使用脚本语言,如Lua或Python,或一些自制的东西,所有这些都比.NET慢几个数量级。

类似地,您的游戏中大部分都不能用.NET编写,这三个真正的性能关键函数可以在必要时移植到本机C++中。

但是..。最近,我在这里读到,尽管创建游戏的人使用C++作为主要语言,但他们实际上并不使用STL或Boost (或其中的很多)。认为它和性能有一些共同点,对吧?如果我错了,你能告诉我为什么要避开那些图书馆吗?

就像你犯了上述罪一样.关于游戏开发的迷信。“哦,不,我们用不起别人的代码!这太低效了。”在编程实践和方法方面,游戏开发一直停留在80年代。换句话说,不要太担心其他游戏开发者所做的事情。如果STL或Boost使您的代码更容易编写,那么就使用它吧!然后,如果您遇到性能问题,请分析它,并在必要时,将特定的库组件替换为您自己的。

但是大部分STL的开销都是零的。而95%的代码在任何游戏中都不是性能关键。对待游戏开发就像对待其他程序一样。不要把它当作一个神奇的地方,在这里,每一行代码都必须进行完美的优化,而常规规则则不适用。

那么EA的STL版本呢?其他电影公司也有自己的版本吗?

据我所知没有。EA将其部分用于内部使用,但也作为对整个C++社区的投入,作为他们(和许多游戏开发人员)希望从标准的未来修订中看到的一个例子(它也提交给标准委员会)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1547632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档