gpt4 book ai didi

c++ - 如何优化 VBO/IBO 以最大化 GPU 缓存使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:37 26 4
gpt4 key购买 nike

我正在使用在 CUDA 上运行的 Marching Cubes 算法从体积数据生成网格。

我尝试过保存网格并以 3 种方式渲染它。

  1. 将一组粗略的三角形保存为连续的顶点数据数组。如果第一次通过,我估计大小,创建一个 OpenGL VBO,将其映射到CUDA并按照以下格式将顶点数据写入其中

V0x, V0y, V0z, N0x, N0y, N0z, V1x, V1y, V1z, N1x, N1y, N1z, ...

并使用 glDrawArrays() 绘制它。

Redundant Vertices in VBO, Redundant Vertices per Cube, No Indices.

  1. 从步骤 1 中获取网格,使用 thrust::sort()thrust::unique() 去除冗余顶点,使用 thrust 计算索引::下界()。将结果保存到映射到 CUDA 的 OpenGL VBO/IBO。使用 glDrawElements() 绘制模型。

No Redundant Vertices in VBO, Generated Indices.

  1. 为每个立方体生成一个唯一的顶点列表,将它们连同它们在 IBO 中形成三角形的索引一起存储在 VBO 中。使用 glDrawElements() 进行渲染。

Redundant Vertices in VBO, Unique Vertices per Cube, Generated Indices per Cube

现在我在相同的 ISO 值下为相同的数据集获得的 FPS 是

Method 1 : 92  FPS, 30,647,016 Verts,          0 Indices
Method 2 : 122 FPS, 6,578,066 Verts, 30,647,016 Indices
Method 3 : 140 FPS, 20,349,880 Verts, 30,647,016 Indices

尽管方法 2 产生的顶点数量最少,但 FPS 很低。我相信这是因为索引的顺序可以最大限度地减少 GPU 缓存的使用。方法 3 的索引顺序获得更高的 GPU 缓存使用率,因此 FPS 更高。

如何修改/修改方法 2 以产生更高的 FPS?

最佳答案

有两件事可以提供帮助:

  • 尝试通过将顶点大致按照您绘制的顺序放置顶点来优化数据缓存的使用
  • 尝试优化 post transform cache用法(有一个算法可以做到这一点 here ,并且可以在网上找到实现)

关于c++ - 如何优化 VBO/IBO 以最大化 GPU 缓存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31234206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com