【发布时间】:2014-07-29 18:12:21
【问题描述】:
如果我正在进行实例化渲染并且需要将每个实例发送一个 mat4 到顶点着色器,那么对于大量实例来说,哪种方法可能更快?
- 使用实例化 mat4 属性 (glVertexAttribDivisor) 并将 mat4 每帧发送到 VBO (glBufferData)
- 在统一块中使用 mat4 统一数组,每帧使用统一缓冲区对象更新数组,并使用 gl_InstanceID 作为数组索引访问适当的 mat4
【问题讨论】:
-
唯一确定的方法是分析。但考虑到这正是
glVertexAttribDivisor旨在解决的用例,我希望选项 1 更有效。它也更整洁。 -
@robinjam - 我同意分析是确定的唯一方法,但我认为虽然
glVertexAttribDivisor非常适合大量位置不变的实例(例如森林),我认为当他们的变换必须每帧更新时,这是一个更接近的要求。设置制服可能比更新缓冲区更快。