three.js加载已经三角化的网格是否比使用四边形的网格性能更好?

three.js加载已经三角化的网格是否比使用四边形的网格性能更好?,three.js,blender,mesh,gltf,Three.js,Blender,Mesh,Gltf,我读过Three.js对所有网格面进行三角剖分,对吗 然后我意识到我使用的大多数gltf模型都是四边形的。在Blender中对面进行三角剖分非常容易,所以我很好奇,对面进行预三角剖分是否会加快网格加载 提前谢谢,如果你在three.js和gltf上除了上面列出的之外还有其他的性能提示,那将非常有用 当前形式的glTF不支持四边形面,只支持三角形。当前glTF导出器(包括Blender)在创建glTF文件时对模型进行三角化。有些会在导入时自动尝试将内容合并回一起 通过设计,glTF以与WebGL的

我读过Three.js对所有网格面进行三角剖分,对吗

然后我意识到我使用的大多数gltf模型都是四边形的。在Blender中对面进行三角剖分非常容易,所以我很好奇,对面进行预三角剖分是否会加快网格加载


提前谢谢,如果你在three.js和gltf上除了上面列出的之外还有其他的性能提示,那将非常有用

当前形式的glTF不支持四边形面,只支持三角形。当前glTF导出器(包括Blender)在创建glTF文件时对模型进行三角化。有些会在导入时自动尝试将内容合并回一起

通过设计,glTF以与WebGL的顶点属性类似的方式存储其数据,这样它可以高效地进行渲染,只需最少的预处理。但是,在创建模型时,您可以做一些事情来帮助它实现这些目标:

尽可能合并材质,以减少绘制调用的数量。 尽可能组合网格/基本体,以减少绘制调用。 请注意,由于顶点属性,不连续法线/UV会再次增加顶点计数。 避免创建填充纯色的纹理。改用Blender的默认颜色/值节点输入。 保持纹理大小对网络友好,并具有两种功能。移动客户端有时无法处理任何大于2048x2048的数据。也可以尝试1024x1024等。
感谢您的深入和快速回答!接下来的几个问题是:如果blender在导出为gltf时对网格进行三角形化,这意味着面数将比我在blender中看到的要多,对吗?如果这是真的,blender的导出器是否以与三角形化修改器相同的方式进行三角形化?也就是说,我可以使用该修改器预览导出的网格?当你说不连续法线/UV增加顶点数时,你说不连续是什么意思?我猜UV岛是不连续的?是的,面数和顶点数都可以从Blender向艺术家展示的东西增加到glTF为GPU准备的东西。我不知道它是否与“三角化”修改器完全相同,但我怀疑是这样,如果您关心边落在哪里,则应用您自己的三角化并没有什么坏处。对于不连续,想象立方体的角,每个混合器顶点由3个不同的面使用,具有非常不同的法向量,即,非平滑着色。原始GPU数据并不表示具有3个不同法向量的单个顶点,因此该顶点将被拆分为3个进行渲染。明白了,这一切都是有意义的。我注意到在UV编辑器中,有时我认为当我制作UV孤岛时,我会在3D视图中选择1个顶点,在UV视图中选择多个顶点-这是否有点类似于GPU顶点数据?对于这些不连续性是否有一个性能解决方案?另外,您说过避免创建填充纯色的纹理。使用Blender的默认颜色/值节点输入。。我在这里读到,在运行时纹理存在的变化将导致着色器程序重建。对于在运行时以编程方式添加颜色纹理的材质,我将使用2x2白色纹理从blender导出网格。使用颜色节点是否更好?对于UV:是的,这些将是单独的GPU顶点。但是它们是同一个绘图的一部分,称为同一个网格基本体+材质,所以通常没什么大不了的。有些人感到惊讶,当顶点计数爆炸后,作出了太多的这些。对于另一个问题,是的,如果您在运行时添加纹理,那么最好在其中添加一个starter 2x2,以避免着色器重新编译。