对于给定数量的 geometries/materials/meshes,Three.js 进行了多少次 webgl.draw 调用
How many webgl.draw calls does Three.js make for a given number of geometries/materials/meshes
我如何计算 drawArrays/drawElements 调用 THREE.renderer.render(场景、相机)的次数?
我假设每个几何体调用一次,具有 materials/mesh 属性的属性。但这很容易出错或不完整。
此外,使用 BufferGeometry 等会有所不同吗?
根据 WestLangley 的评论,我会在 THREE.WebglRenderer
中搜索 renderer.info and look at the logic。
drawcalls 本身有点不同。如果您有一个几何体,比如说 cubeGeometry
、一个 material cubeMaterialRed
和五个立方体节点 [c1,c2...,c5]
,您将有五个绘制调用。我相信 three.js 然后会绑定一次几何体,并使用相同的着色器和大部分相同的制服进行五次连续的绘制调用(只有 position/rotation/scale 矩阵应该改变,而红色可以绑定一次)。
如果您有五个不同的 materials [cMatRed, cMatBlue... cMatPink]
,您将有五个具有相同几何体的绘图调用,但是 material 颜色的统一设置将不同每一个。
如果您有五个不同的几何图形,在五个不同的节点中,则必须在每次绘制调用之前绑定几何图形。
这可以通过在支持时使用实例化来减少。在第二个示例中,它将绑定要实例化一次的几何体,并设置包含 position/rotation/scale 和颜色的属性,将使用这些属性发出一个绘制调用,渲染 5 个几何体,在由提供的位置和颜色中属性。
Three.js 目前没有按照这些路线进行任何批处理和优化,因此将手动完成实例化。
这一切都意味着它与包含几何图形的节点数几乎 1:1 相关。 Object3D->Object3D->Mesh
将产生三个节点,但有一个绘制调用。
rstats 是我正在使用的,它很酷,
您可以获得几乎所有重要信息:
帧速率、内存、渲染信息、webgl drawcall...
它确实有助于提高 threejs 的性能。
的伟大作品
我如何计算 drawArrays/drawElements 调用 THREE.renderer.render(场景、相机)的次数?
我假设每个几何体调用一次,具有 materials/mesh 属性的属性。但这很容易出错或不完整。
此外,使用 BufferGeometry 等会有所不同吗?
根据 WestLangley 的评论,我会在 THREE.WebglRenderer
中搜索 renderer.info and look at the logic。
drawcalls 本身有点不同。如果您有一个几何体,比如说 cubeGeometry
、一个 material cubeMaterialRed
和五个立方体节点 [c1,c2...,c5]
,您将有五个绘制调用。我相信 three.js 然后会绑定一次几何体,并使用相同的着色器和大部分相同的制服进行五次连续的绘制调用(只有 position/rotation/scale 矩阵应该改变,而红色可以绑定一次)。
如果您有五个不同的 materials [cMatRed, cMatBlue... cMatPink]
,您将有五个具有相同几何体的绘图调用,但是 material 颜色的统一设置将不同每一个。
如果您有五个不同的几何图形,在五个不同的节点中,则必须在每次绘制调用之前绑定几何图形。
这可以通过在支持时使用实例化来减少。在第二个示例中,它将绑定要实例化一次的几何体,并设置包含 position/rotation/scale 和颜色的属性,将使用这些属性发出一个绘制调用,渲染 5 个几何体,在由提供的位置和颜色中属性。
Three.js 目前没有按照这些路线进行任何批处理和优化,因此将手动完成实例化。
这一切都意味着它与包含几何图形的节点数几乎 1:1 相关。 Object3D->Object3D->Mesh
将产生三个节点,但有一个绘制调用。
rstats 是我正在使用的,它很酷, 您可以获得几乎所有重要信息: 帧速率、内存、渲染信息、webgl drawcall...
它确实有助于提高 threejs 的性能。
的伟大作品