【问题标题】:High memory usage with merged geometries in newer versions of THREEJS较新版本的 THREEJS 中合并几何图形的高内存使用率
【发布时间】:2017-05-14 03:20:44
【问题描述】:

我正在尝试创建体素引擎,并正在合并几何以提高性能。我使用this demo 作为参考,它能够使用大约 700mb 的 chrome 内存生成大约 120,000 个,并在我的机器上以 60+fps 的速度运行。这个演示使用了threejs的第44版,它使用了THREE.GeometryUtils.merge。我的项目使用的是最新版本的threejs(83 版),当我尝试渲染大约50,000 个体素(使用geometry.merge 合并)时,我使用了超过1000mb 的内存并且性能很差。我使用的方法与上面的演示几乎相同。为了确认threejs是问题所在(而不是我的代码中的其他问题),我将演示中使用的threejs的release 44替换为release 83(并进行了一些小的兼容性调整)并遇到了同样的问题。这是一个已知的问题?我真的不想为我的项目恢复到旧版本的threejs。我能看到的唯一真正的解决方案是切换到旧版本,尝试仅将合并代码从 r44 集成到 r83,或者在 github 上发布问题并等待它得到解决,这些都不是真正可取的。只是想知道是否有其他人处理过这个问题。

【问题讨论】:

  • 对于您的用例,您可以使用InstancedBufferGeometry。见threejs.org/examples/webgl_buffergeometry_instancing.html。编辑示例并重新定义变量vertices,如下所示:var vertices = ( new THREE.BoxBufferGeometry( 0.05, 0.05, 0.05 ).toNonIndexed() ).attributes.position;。您必须进行一些研究才能了解它的工作原理。
  • 我可能最终会使用它,所以感谢您的建议,但问题是为什么我不能在新版本上获得与使用相同方法在旧版本上相同的性能?我正在调查它,现在看起来在第 44 版和第 45 版之间发生的事情可能会导致内存使用量大幅增加。我正在研究它,并将结果发布在这里。
  • 你也可以只使用BufferGeometry。如果您想动态增加体素的数量,请参阅stackoverflow.com/questions/31399856/…。我会避免经常使用Geometry

标签: performance merge three.js mesh


【解决方案1】:

我设法确定问题不在于合并功能,方法是将版本 45 Three.GeometryUtils.merge 替换为版本 44 中的问题。这给内存带来了与以前相同的问题,因此在版本中进行了其他更改45 导致了这个问题。按照建议,我使用 BufferGeometries 进行了测试,并且能够达到所需的性能水平(

【讨论】:

  • 嗨,你可以在某处发布一些你的代码示例
猜你喜欢
  • 2020-08-21
  • 2012-12-14
  • 2017-07-03
  • 2021-10-30
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多