物理引擎所需的建议

adi*_*ile 1 cuda opencl game-physics physics-engine

我最近开始了一个项目,建立一个物理引擎.我希望你能给我一些与一些文档和/或最佳技术相关的建议.

首先,我已经看到Game-Physics-Engine-Development被强烈推荐用于手头的任务,我想知道你是否可以给我第二个意见.我应该得到它吗?此外,在浏览亚马逊时,我偶然发现了 游戏引擎架构,因为我想为游戏构建我的物理引擎,我认为这也许是一个很好的阅读.

其次,我知道模拟物理是高度计算的,所以我想使用CUDA或OpenCL.Right现在我倾向于OpenCL,因为它适用于NVIDIA和ATI芯片组.你们建议什么?

PS:我将在Linux上用C++实现它.

谢谢.

Ser*_*kiy 9

我建议首先计划一个简单的游戏作为你的引擎的测试用例.拥有基本游戏将推动功能和API开发.在没有明确目标的情况下编写引擎会使项目风险更大.虽然我同意nVidia和ATi出于性能原因应该被视为单独的目标,但我建议你从两个开始.

我亲自写物理引擎神秘海域:德雷克的财富-一个PS3游戏-而我却在C++一通,而当它的工作,发了一通,以优化它VMX,然后把它放在SPU.请注意,由于时间限制,我最初做的只是我想做的一小部分.之后,我进行了迭代,将数据阶段拆分出来,并制定数据转换管道.这很重要,因为CPU,GPU或SPU,运行非平凡代码的现代处理器是否大部分时间都在等待缓存.您必须特别注意数据结构并对其进行管道处理,以便在任何阶段都有一小组工作数据.首先,我做宽相,所以我不需要形状,但我需要世界空间边界框.因此,我将边界框拆分为单独的数组,并在另一个通道中将它们全部计算在一起,以最佳方式将它们写出来.作为bbox计算的输入,我需要形状变换和它们的一些界限,但不一定是整个形状.在宽相之后,我计算/更新sim岛,同时执行窄相,我确实需要这些形状.等等 - 我在一篇文章中用图片描述了这一点,我写的是Game Physics Pearls.

我想我想说的是以下几点:

  1. 确保你有一个明确的目标,推动你的发展 - 一个非常基本的游戏与冲洗设计将是最好的游戏物理引擎案例.
  2. 在拥有可用产品之前不要尝试优化.首先以最简单,最快的方式编写它,并修复数学中的所有错误.设计它以便以后可以将它移植到CUDA,但是在屏幕上滚动框之前不要开始编写CUDA内核.
  3. 你写C++第一遍后,优化它的CPU:简化它,使得它不鞭打缓存,划分代码,以便有没有电话和所有从每个阶段的代码是本地化的意大利面条.这将有助于a)端口到CUDA b)端口到OpenCL c)端口到控制台d)使其运行速度相当快e)使调试成为可能.
  4. 在开发,抵制诱惑,去做些你只是想过,除非该功能是您明确的目标不是必需的(见#1) - 这就是为什么你需要一个目标,以引导你朝它,并有可能完成实际项目.分心通常会杀死没有明确目标的项目.
  5. 请记住,以某种方式,软件开发是迭代的.可以粗略地进行粗化,然后进行优化.皮革,冲洗,重复 - 这是程序员的口头禅:)

提供建议很容易.如果你想做某事,就去做吧,我们会坐下来批评:)