Javascript 合并网格可减少FPS

Javascript 合并网格可减少FPS,javascript,merge,three.js,mesh,frame-rate,Javascript,Merge,Three.js,Mesh,Frame Rate,我已经合并了大约2500个网格(每个网格都有自己的一组颜色),但是FPS比我不合并时要低 据介绍,如果你想增加FPS,合并是一种方式 我是不是遗漏了什么 var materials = new Array(); var new_geo = new THREE.Geometry(); for (var i = 0; i < AllMeshes.length; i++) { materials.push(AllMeshes.children[i].material); THR

我已经合并了大约2500个网格(每个网格都有自己的一组颜色),但是FPS比我不合并时要低

据介绍,如果你想增加FPS,合并是一种方式

我是不是遗漏了什么

var materials = new Array();
var new_geo = new THREE.Geometry();

for (var i = 0; i < AllMeshes.length; i++) {
    materials.push(AllMeshes.children[i].material);
    THREE.GeometryUtils.merge(new_geo, AllMeshes.children[i], i);
}

var mesh = new THREE.Mesh(new_geo, new THREE.MeshFaceMaterial(materials));
var materials=new Array();
var new_geo=new THREE.Geometry();
对于(var i=0;i
在引擎盖下,使用
MeshFaceMaterial
将每个材质的网格分割为单独的网格——因此,如果每个子网格都有单独的材质,Three.js必须再次将组合的网格完全分开。因此,您假定的合并几何体实际上不会一批发送到GPU。

这是有道理的。您知道是否可以合并所有网格,包括其各自的材质,以便将其分为一批发送?或者我应该在另一个问题中问这个问题吗?如果你能够构建一个包含所有材质的巨大纹理,并以正确的方式将其包裹在最初独立的网格上,那么你或许可以做到这一点,但没有内置的方法可以做到这一点。考虑到如果这样做将是一个改进,那么三个JS可能会默认地对场景中的所有内容进行处理。大纹理对GPU来说并不太好,因为它们可能不适合它的芯片内存。嗯,好吧,我想我需要找到另一种方法来实现这一点。如果你只是改变颜色,你可能不用使用顶点颜色而不用不同的材质。我用片段着色器来修复它;)在这里查看: