当前位置:  开发笔记 > 编程语言 > 正文

gamedev编程(性能相关)

如何解决《gamedev编程(性能相关)》经验,为你挑选了2个好方法。

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

    我知道,性能实际上是至关重要的,所以仍然(并且我认为永远不会)因为它们的性能而无法使用托管语言/平台作为Java/.NET.但是......最近我在这里读过SO,即使创建游戏的人使用C++作为主要语言,他们实际上并不使用STL或Boost(或很多).认为它与性能有一些共同点,对吧?如果我错了,你能告诉我避免这些库的原因是什么(我认为让开发人员的生活更容易)?是因为许可(Boost)?那么EA的STL版本呢?其他工作室也制作自己的版本吗?

    "接近金属"的游戏编程究竟如何?你是否越来越接近机器?你有时使用Assembly来进行关键的内部循环,或者C++实际上是你目前使用的最低抽象层吗?我认为在性能最重要的产品中,性能分析是非常非常常见的任务 - 但是你有时会被迫使用汇编来加速某些部分,或者好的C++是否"足够好"?

编辑:对不起,可能不太清楚,但我对有游戏行业经验的人的答案感兴趣.我对那些没有游戏开发商业经验的人给出的假设感兴趣.我也对使用C#/ Java创建的一些小众游戏的例子不感兴趣.但是,如果你知道一个产品,看起来比FarCry2(公正的例子,但你最喜欢的现代伟大的游戏的名字在这里)更好,并写入完全用Java/.NET,并具有类似的性能FarCry2 ......不要犹豫,提这个产品!谢谢.



1> 小智..:

与某些观点相反,STL非常优化,而且根本不是坏代码.大多数游戏工作室不使用它的原因是内存.您没有对内存分配和释放进行过多控制,就好像您要编写自己的STL容器版本一样.这也是托管语言不是首选的原因.

编写自己的容器可以让您编写跨平台代码并更轻松地进行内存跟踪.在控制台上尤其如此,例如PS3,需要详细的硬件知识才能获得最佳性能.通常最终意味着您需要完全控制PPU,SPU和RSX之间的内存流.

2.对于非常专业的操作,例如数学库函数,汇编程序只是"必需"(在引号中,因为它实际上并不是必需但有帮助).更常见的是SIMD内在函数,它可以对代码进行矢量化.但是,大多数工作室都有遗留代码,这些代码经过了相当优化,而且由于这些优化程度非常低,因此不需要在硬件生成之间大大改变代码.我会说在游戏机上使用低级代码更为常见.



2> jalf..:

我知道,性能实际上是至关重要的,所以仍然(并且我认为永远不会)因为它们的性能而无法使用托管语言/平台作为Java/.NET.

不,你不知道这个.您认为,您想要相信它,因为您将游戏开发浪漫化,并且因为您认为高级语言不能快速.对于90%的游戏来说,.NET性能非常好.它只会变得更好.托管平台必须更慢,没有固有的原因.他们有可能更快,因为他们是JIT'.实际上,它们的性能往往与相当不错的C++代码大致相同,比典型的 C++代码要好得多,而且比真正优秀的C++代码差一些.而且大多数大型游戏无论如何都使用多种语言.他们使用脚本语言,如Lua或Python,或者一些家庭酿造的东西,所有这些都比.NET慢一些.

同样,绝对没有理由说你的大部分游戏都不能用.NET编写.然后,如果有必要,这三个真正的性能关键函数可以在以后移植到本机C++.

但是......最近我在这里读过SO,即使创建游戏的人使用C++作为主要语言,他们实际上并不使用STL或Boost(或很多).认为它与性能有一些共同点,对吧?如果我错了,请你告诉我避免这些库的原因是什么

就像你犯了上述罪一样......对游戏开发的迷信."哦,不,我们不能使用其他人的代码!这太低效了".在编程实践和方法方面,游戏开发在80年代陷入困境.换句话说,不要过于担心其他游戏开发者的行为.如果STL或Boost使您的代码更容易编写,那么使用它!然后,如果遇到性能问题,请对其进行概要分析,如有必要,请使用您自己的库组件替换该特定库组件.

但是大多数STL实际上是零开销.而在代码的95%,任何游戏是不是性能的关键.像对待任何其他节目一样对待游戏开发.不要将它视为一些神奇的土地,每一行代码必须完美优化,并且不适用普通规则.

那么EA的STL版本呢?其他工作室也制作自己的版本吗?

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

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