GPU与CPU上的网格处理


9

只是有点好奇-您在CPU或着色器中的哪里执行网格处理?我一直在做CPU上的所有事情,一位朋友建议将其移至GPU端。

如果您在GPU上执行骨骼动画之类的操作,如何获得网格?(因为我正在进行碰撞检测...)

Answers:


13

这通常在GPU上发生,但是两者都有权衡取舍,由您决定哪种最适合您。

在GPU上进行操作意味着您只需要发送一次网格数据,然后就可以发送矩阵变换以使其变形。这很棒,因为它大大减小了CPU-> GPU之间所需的带宽。这也意味着您可以仅将网格的一个副本上载到GPU并为网格的许多不同实例应用变换。但是,进行“网格精确”碰撞更加困难。由于转换是在GPU上完成的,因此您无法在CPU上进行测试。

在CPU上进行操作意味着您可以访问转换后的网格。您可以访问所有需要了解的内容。但是,这意味着您需要每帧将整个网格上传到GPU。这也意味着您必须为该网格的每个实例上载一个转换后的网格。总而言之,这里没有详尽无遗的利弊清单。

  • GPU的优点

    • 一次上传网格数据
    • 将其转换为多个实例
    • 只需要发送矩阵变换
    • GPU非常擅长并行处理这些类型的事物
  • GPU的缺点

    • 转换后的网格无法在CPU上进行测试
  • CPU的优点

    • 变形的网格可用于碰撞测试以及其他任何需要的东西。
  • CPU的缺点

    • 每帧需要上传整个变形的网格
    • 需要为网格的每个实例上传整个网格

有一些方法可以解决GPU的弊端。

  • 没有网格精确的碰撞。对整个网格使用“足够接近”的边界框,或者对网格的每个骨骼都使用边界框。下面是在GPU变换上用于网格,在CPU变换上用于轴对齐的表示网格的边界框。通过使用非AABB,您可以获得更准确的界限。

妖精骨头

  • 当且仅当需要精确的网格碰撞时,才在CPU上转换网格的副本。边界框碰撞返回true后,对网格进行转换以匹配GPU上的转换,然后对照该碰撞检查以获得更准确的碰撞数据。

总而言之,我认为您可以理解为什么在GPU上进行转换更普遍


1
只是出于好奇,考虑到现代游戏中网格的复杂性,现代CPU的功能和多核功能以及CPU必须执行的其他任务,在CPU上转换网格实际上是否可行?此外,上传到GPU的速度是否如此之慢,以至于这个想法甚至无法实现?
R4D4

这取决于游戏,但是对于中等复杂程度以上的游戏通常不可行。当在GPU上进行转换的选择如此简单时,很难找到理由来证明在CPU上进行转换所需的额外资源。问题更多在于每帧将转换后的网格发送到GPU的速度很快。与软件的情况一样,通常由开发人员决定复杂性和性能之间的决定。
MichaelHouse
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.