【发布时间】:2020-03-20 17:46:17
【问题描述】:
谁能帮助我们解决threejs中InstancedMesh和InterleavedBuffer之间的区别。我对这两个主题都感到困惑,谁能告诉我哪个是渲染大量几何图形的优化方法。
提前致谢。
【问题讨论】:
标签: three.js
谁能帮助我们解决threejs中InstancedMesh和InterleavedBuffer之间的区别。我对这两个主题都感到困惑,谁能告诉我哪个是渲染大量几何图形的优化方法。
提前致谢。
【问题讨论】:
标签: three.js
实例化渲染和交错缓冲是两个不同的东西。您可以单独或组合使用这两种技术。
THREE.InstancedMesh 为实例化渲染提供了一个方便的接口。当您必须渲染大量具有相同材质和几何形状但具有不同世界变换的对象时,此方法非常有用。 THREE.InstancedMesh 允许您通过减少绘图调用量来提高应用程序的性能。因此,您可以一次绘制所有对象,而不是使用单个绘制调用绘制每个对象。
InterleavedBuffer 提供了以交错方式管理顶点数据的可能性。这样做的动机是提高 GPU 上的缓存命中量。如果您对这种方法背后的理论更感兴趣,我建议您在 Google 上搜索“数组结构与结构数组”。后一种适用于InterleavedBuffer。
一般来说,这两种技术的性能优势取决于具体的用例。根据我的个人经验,交错缓冲区的好处很难衡量,因为性能改进取决于各自的 GPU。在许多情况下,我发现使用交错缓冲区时 FPS 没有任何差异。但是,如果绘制调用的数量很高并且您通过使用实例渲染来降低它,则更容易看到性能改进。
three.js 提供了两种技术的示例。 webgl_buffergeometry_instancing_interleaved 演示了一个组合。
three.js R114
【讨论】: