【问题标题】:Drawing Meshes with Transformation使用变换绘制网格
【发布时间】:2014-11-04 23:25:57
【问题描述】:

假设有许多不同的网格,每帧都会或多或少地发生变化,通常这些绘图方法会更快:

  1. 对于每一帧,用网格的变换顶点填充一个大的顶点缓冲区(变换在 CPU 上完成,顶点每帧复制到缓冲区)。
  2. 为每个对象创建插入网格的未变换顶点,然后在绘制时将每个网格的变换作为统一参数发送(在 GPU 上完成的变换,顶点在创建网格时被复制)。

我们可以假设每帧都绘制了所有网格,因此对于情况 1) 不复制顶点并不重要。

【问题讨论】:

    标签: performance 3d vertex-buffer


    【解决方案1】:

    选项#2 几乎总是更快。如果你有 N 个顶点和 M 变换,这就是在 CPU 上执行 ~N 个算术运算后跟一个 ~N 总线传输,而不是在 GPU 上执行 ~M 个总线传输(更快),然后是 ~N 个算术运算(也更快)。

    唯一会失败的情况是,如果您的 CPU 在顶点操作的总吞吐量方面比您的 GPU 快得多(不太可能),或者如果 M 是相同的数量级作为N

    【讨论】:

    • 将变换设置为每个帧和每个网格的统一/常量着色器参数的成本如何,如 #2 而不是 #1?开销可以忽略不计吗?
    • 这就是我的回答中提到的“~M 巴士接送”费用。在仅使用方法 #2 的应用程序中开销不可忽略,但它比预转换整个网格然后进行另一个 ~N 成本总线传输的成本要小几个数量级。这是因为在大多数情况下,N 比 M 大许多数量级,而且 GPU 在进行逐顶点转换方面比 CPU 更有效率。
    猜你喜欢
    • 2011-05-10
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 2021-07-11
    • 2016-02-06
    相关资源
    最近更新 更多