你能编写纯GPU游戏吗?

nwo*_*osh 23 gpu

我是CS硕士生,下学期我将不得不开始研究我的论文.我在提出论文想法方面遇到了麻烦,但我认为它与计算机图形学有关,因为我对游戏开发充满热情,并希望有朝一日能够成为一名职业游戏程序员.

不幸的是,我对3D计算机图形学领域有点陌生,我参加了本科的本科课程,并希望下学期学习高级课程,而且我已经阅读了各种书籍和文章以了解更多信息.尽管如此,如果我现在提出一个总的论点想法,然后花时间学习它来准备我的论文提案,我的主管认为它会更好.我的主管为我提供了一些好主意,但我宁愿自己做一些更有趣的事情,这有希望与游戏有关,让我有更多机会了解更多有关该领域的知识.我不在乎它是否已经完成,对我而言,这篇论文更像是一个深入了解事物并自己做大量工作的机会.

我对GPU编程知之甚少,而且我还在学习像CUDA这样的着色器和语言.我的一个想法是在GPU上编程整个游戏(或尽可能多),包括所有游戏逻辑,AI和测试.这是通过阅读GPGPU论文和问题,如激发了这个,我不知道这是怎么可行的与我的知识,我的上司不知道了很多关于最近的GPU.我肯定有时间我可以自己回答这个问题,但是如果我事先能够知道答案那么它会很方便,所以我也可以考虑其他想法.

所以,如果你已经走到这一步,我的问题是:只使用着色器或像CUDA这样的东西,你能制作一个充分利用GPU的原始功能和并行性的简单3D游戏吗?或者我错过了GPU和CPU之间的一些限制或区别,这些限制或差异总会使我的大部分代码绑定到CPU?我已经读过关于在GPU上运行的物理引擎,为什么不是其他的呢?

tra*_*das 18

免责声明:我已经完成了博士学位,但从未监督过我自己的学生,因此请尽一切时间用一点点的方法说出来!

我认为尝试尽可能多地将游戏强制到GPU上是开始你的项目的一个很好的方式,但最终你的工作点应该是:" 这个东西是许多游戏的重要组成部分,但在它的中目前的状态不适合GPU:这是我如何修改它以使其适合 ".

例如,fortran提到AI算法是一个问题,因为它们倾向于依赖递归.确实,但是,这不一定是一个交易破坏者:将递归算法转换为迭代形式的艺术受到学术界的青睐,并将成为论文的一个很好的中心部分.

然而,作为一名硕士生,你没有太多时间,所以你真的需要很快识别出感兴趣的内核.作为你主人的结果的一部分,我不打算让整个游戏真正适应GPU:我会把它当作一个练习,看看哪个部分不适合,然后单独关注那个部分.

但要小心选择主管.如果您的主管没有任何相关经验,您应该选择其他人.


Ore*_*ost 5

我还在等待一个完全在GPU上运行的Gameboy模拟器,它只是用于游戏ROM本身和当前用户输入并导致显示游戏的纹理 - 可能是声音输出的第二个纹理:)

主要问题是您无法访问GPU的持久存储,用户输入或音频输出.根据定义,这些部件必须在CPU上(即使具有HDMI的卡具有音频输出,但我认为您无法通过GPU控制它).除此之外,您已经可以将游戏代码的大部分内容推送到GPU中,但我认为这对于3D游戏来说还不够,因为有人必须将3D数据提供给GPU并告诉它应该将哪些着色器应用于哪个部分.您无法真正随机访问GPU上的数据或运行任意代码,有人必须进行设置.

前一段时间,您只需使用源数据设置纹理,结果数据的渲染目标和将进行转换的像素着色器.然后,您使用着色器渲染四边形到渲染目标,这将执行计算,然后回读纹理(或使用它进行进一步渲染).今天,第四代和第五代着色器(Shader Model 4.0以及DirectX 11中的任何一个)使事情变得更简单,因此您可以更容易地拥有更大的着色器和访问内存.但是他们仍然必须从外部进行设置,而且我不知道今天的事情如何在帧之间保持数据.在最坏的情况下,CPU必须从GPU读回并再次推送以保留游戏数据,这总是很慢的事情.但是如果你真的能够达到一个通用的设置/渲染周期足以让你的游戏运行的程度,你可以说游戏是在GPU上运行的.但是,代码与普通游戏代码完全不同.GPU的大部分性能来自于它们在数百甚至数千个并行着色单元中执行相同的程序,并且您不能只编写可以将图像绘制到特定位置的着色器.根据定义,像素着色器始终在一个像素上运行,而其他着色器可以在任意坐标上执行操作,但它们不处理像素.我想这并不容易.

我建议只试试我说的要点.在我看来,最重要的是在帧之间保留状态,因为如果你不能保留所有数据,那么一切都是不可能的.