【问题标题】:Difference and uses of InstancedMesh and InterleavedBuffer in ThreeJSThreeJS中InstancedMesh和InterleavedBuffer的区别和使用
【发布时间】:2020-03-20 17:46:17
【问题描述】:

谁能帮助我们解决threejs中InstancedMesh和InterleavedBuffer之间的区别。我对这两个主题都感到困惑,谁能告诉我哪个是渲染大量几何图形的优化方法。

提前致谢。

【问题讨论】:

    标签: three.js


    【解决方案1】:

    实例化渲染和交错缓冲是两个不同的东西。您可以单独或组合使用这两种技术。

    THREE.InstancedMesh 为实例化渲染提供了一个方便的接口。当您必须渲染大量具有相同材质和几何形状但具有不同世界变换的对象时,此方法非常有用。 THREE.InstancedMesh 允许您通过减少绘图调用量来提高应用程序的性能。因此,您可以一次绘制所有对象,而不是使用单个绘制调用绘制每个对象。

    InterleavedBuffer 提供了以交错方式管理顶点数据的可能性。这样做的动机是提高 GPU 上的缓存命中量。如果您对这种方法背后的理论更感兴趣,我建议您在 Google 上搜索“数组结构与结构数组”。后一种适用于InterleavedBuffer

    一般来说,这两种技术的性能优势取决于具体的用例。根据我的个人经验,交错缓冲区的好处很难衡量,因为性能改进取决于各自的 GPU。在许多情况下,我发现使用交错缓冲区时 FPS 没有任何差异。但是,如果绘制调用的数量很高并且您通过使用实例渲染来降低它,则更容易看到性能改进。

    three.js 提供了两种技术的示例。 webgl_buffergeometry_instancing_interleaved 演示了一个组合。

    three.js R114

    【讨论】:

    • 为什么我不能在 interleavedbuffer 中加载转换数据,我将使用着色器处理它,为什么我应该使用 matrix.setMatrixData。在 Mesh 而不是 InstancedMesh 中渲染的主要区别和性能影响是什么。我希望这也应该在后台发生。 intancedMesh 是否用于用户可访问性?或者它会影响性能? @Mugen87
    猜你喜欢
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2015-03-12
    • 2019-04-02
    • 2010-11-09
    • 2017-01-30
    相关资源
    最近更新 更多