任何人都可以帮助我们解决 Threejs 中 InstancedMesh 和 InterleavedBuffer 之间的区别吗?我对这两个主题都感到困惑,任何人都可以让我知道哪种是渲染大量几何图形的优化方法。
提前致谢。
实例化渲染和交错缓冲区是两个独立的事物。您可以单独或组合使用这两种技术。
三.实例化网格 https://threejs.org/docs/index.html#api/en/objects/InstancedMesh为实例化渲染提供了方便的接口。当您必须使用相同的材质和几何形状但使用不同的世界变换来渲染大量对象时,此方法非常有用。THREE.InstancedMesh
允许您通过减少绘制调用的数量来提高应用程序的性能。因此,您可以一次绘制所有对象,而不是使用单个绘制调用来绘制每个对象。
交错缓冲器 https://threejs.org/docs/index.html#api/en/core/InterleavedBuffer提供了以交错方式管理顶点数据的可能性。这样做的动机是为了提高 GPU 上的缓存命中量。如果您对这种方法背后的理论更感兴趣,我建议您搜索“数组结构与结构数组”。后一种适用于InterleavedBuffer
.
一般来说,这两种技术的性能优势取决于具体的用例。根据我的个人经验,交错缓冲区的好处很难衡量,因为性能改进取决于相应的 GPU。在许多情况下,我发现使用交错缓冲区时 FPS 没有差异。但是,如果绘制调用量很高并且您通过使用实例渲染来降低它,则更容易看到性能改进。
three.js
提供了这两种技术的示例。webgl_buffergeometry_instancing_interleaved https://threejs.org/examples/webgl_buffergeometry_instancing_interleaved演示了一个组合。
three.js R114
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)