Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 网格使用了太多的绘制调用_Javascript_Three.js - Fatal编程技术网

Javascript 网格使用了太多的绘制调用

Javascript 网格使用了太多的绘制调用,javascript,three.js,Javascript,Three.js,我有一些网格,从blender导入(从utils文件夹导入three.js exporter),它只有3种材质,但它使用28个绘制调用,为什么会发生这种情况?因为我认为它应该只使用3个抽签调用 当创建一个单个元素排序->材质”命令按材质对面进行分组。。然后再出口 您可以使用该命令按不同的标准进行排序。它可以非常有用的效果,比如让你的物体从地面开始缓慢的建造 可以沿某个方向对元素进行排序,然后在three.js中随时间操纵网格上的绘制组,以渲染越来越多的面 在搅拌机中,进入编辑模式。。选择所有面,

我有一些网格,从blender导入(从utils文件夹导入three.js exporter),它只有3种材质,但它使用28个绘制调用,为什么会发生这种情况?因为我认为它应该只使用3个抽签调用


当创建一个单个
实例,并将其分配到两个
材质的数组中时。Three.js确实创建了28个draw调用

这是由于
BufferGeometry
似乎使用了这个分组系统

0:{start: 0, materialIndex: 0, count: 12}
1:{start: 12, materialIndex: 1, count: 12}
2:{start: 24, materialIndex: 0, count: 24}
3:{start: 48, materialIndex: 1, count: 12}
4:{start: 60, materialIndex: 0, count: 12}
...

27:{start: 378, materialIndex: 1, count: 6}

至于为什么,这将是一个非常好的问题,张贴在github上。WebGL通常不应该这样工作,因为它效率极低。使用两个不同的着色器渲染某些几何体所需的调用量最少为2次,而不是28次

创建一个单个
网格
实例,并将其分配到两个
材质的数组中时。Three.js确实创建了28个draw调用

这是由于
BufferGeometry
似乎使用了这个分组系统

0:{start: 0, materialIndex: 0, count: 12}
1:{start: 12, materialIndex: 1, count: 12}
2:{start: 24, materialIndex: 0, count: 24}
3:{start: 48, materialIndex: 1, count: 12}
4:{start: 60, materialIndex: 0, count: 12}
...

27:{start: 378, materialIndex: 1, count: 6}

至于为什么,这将是一个非常好的问题,张贴在github上。WebGL通常不应该这样工作,因为它效率极低。使用两个不同的着色器渲染某些几何体所需的调用量最少为2次,而不是28次

在blender中,进入编辑模式。。选择所有面,然后使用“网格->元素排序->材质”命令按材质对面进行分组。。然后再出口

您可以使用该命令按不同的标准进行排序。它可以非常有用的效果,比如让你的物体从地面开始缓慢的建造

可以沿某个方向对元素进行排序,然后在three.js中随时间操纵网格上的绘制组,以渲染越来越多的面


在搅拌机中,进入编辑模式。。选择所有面,然后使用“网格->元素排序->材质”命令按材质对面进行分组。。然后再出口

您可以使用该命令按不同的标准进行排序。它可以非常有用的效果,比如让你的物体从地面开始缓慢的建造

可以沿某个方向对元素进行排序,然后在three.js中随时间操纵网格上的绘制组,以渲染越来越多的面



hth

如果不检查场景和相关对象,我无法确定。材质可以在网格之间共享,因此有多个网格或绘制组引用相同的材质并不超出可能的范围。可能有28个不同的网格。使用1个材质或28,仍将导致28个绘制调用。@这里的JIM01是一个示例@pailhead no,我只有1个网格,1个几何体,2个材质,由于未知原因,28个绘制调用正在绘制。无论如何,我都无法将我的头缠绕在整个网格->多材质用例上。接下来我会看看问题出在哪里。如果不检查场景和相关对象,我将无法确定。材质可以在网格之间共享,因此有多个网格或绘制组引用相同的材质并不超出可能的范围。可能有28个不同的网格。使用1个材质或28,仍将导致28个绘制调用。@这里的JIM01是一个示例@pailhead no,我只有1个网格,1个几何体,2个材质,由于未知原因,28个绘制调用正在绘制。无论如何,我都无法将我的头缠绕在整个网格->多材质用例上。我会按照这个来看看问题出在哪里。我不完全确定tbh。这些索引似乎是交织在一起的(mat1、mat2、mat1、mat2)。您需要深入到这个结构中,提取所有0材质、所有1材质,然后重新排序。@pallhead,非常感谢,我只分析面和顶点的几何体,并为每种材质创建单独的几何体,这实际上可能是一个更好的解决方案@pallhead>这将是一个非常好的问题,可以在github上发布抱歉,但我几乎不明白为什么会发生这种情况,以及我在做什么,所以我几乎无法创建一个正常的问题。有这么多抽签通知不是最理想的,但是,这些抽签通知稍微轻一些,因为它们不需要为每个调用重新绑定/重新计算对象矩阵,因为它们保持不变。但这肯定是一个潜在的性能问题,除非您真的在寻找它,否则它并不明显。请参阅下面我关于在搅拌机中按材质对您的脸进行排序的回答,如下所示:我不完全确定。这些索引似乎是交织在一起的(mat1、mat2、mat1、mat2)。您需要深入到这个结构中,提取所有0材质、所有1材质,然后重新排序。@pallhead,非常感谢,我只分析面和顶点的几何体,并为每种材质创建单独的几何体,这实际上可能是一个更好的解决方案@pallhead>这将是一个非常好的问题,可以在github上发布抱歉,但我几乎不明白为什么会发生这种情况,以及我在做什么,所以我几乎无法创建一个正常的问题。有这么多抽签通知不是最理想的,但是,这些抽签通知稍微轻一些,因为它们不需要为每个调用重新绑定/重新计算对象矩阵,因为它们保持不变。但这肯定是一个潜在的性能问题,除非您真的在寻找它,否则它并不明显。请参阅下面我关于在搅拌机中按材质对您的脸进行排序的回答,如下所示:这似乎是一个很好的解决方案,必须有一种方法来预格式化数据,这似乎是它,谢谢。这最终应该记录在three.js的某个地方,但他们似乎删除了所有的导出器。这似乎是一个很好的解决方案,必须有一种方法来预格式化数据,这似乎就是它,谢谢。这最终应该记录在three.js的某个地方,但它们似乎删除了所有的导出程序