[LayaAir3]带骨骼的3D模型drawcall过高
laya 3.2.6 导入一个模型骨骼,材质只有一个(默认材质),网格只有一个,subMeshCount是1,阴影关闭,骨骼33根,没有动画(带动画的问题也一样),为什么这个模型drawcall是16。
理论是20多个骨骼一批,drawcall应该是2。
同样的模型在unity中drawcall也是2。
理论是20多个骨骼一批,drawcall应该是2。
同样的模型在unity中drawcall也是2。
没有找到相关结果
已邀请:
要回复问题请先登录
6 个回复
拽拽青蛙
赞同来自:
相关源码 Submesh.ts #_updateRenderParams, WebGlSkinRenderElement3D.ts #drawGeometry 。
layabox
赞同来自:
拽拽青蛙
赞同来自:
模型包含5个材质,5个子网格, 58 根骨骼 3.3 版本 单/双pass、烘焙前/后 都是5个 OpaqueDC 3.2 版本烘焙前单个Pass 8 个DC ,双pass 15 DC3.2 版本烘焙后单个Pass 5 个DC ,双pass 9 DC
拽拽青蛙
赞同来自:
Laya_Fred
赞同来自:
双Pass下,单个renderElement与单个骨骼索引对应单个Pass为一个drawCall。
3.2.x中统计的是所有绘制API的调用统计;
3.3.x中目前也修改为统计SkinnedMesh蒙皮下单个绘制API调用的方式;
2.x中统计基准为skinnedMesh蒙皮下,单个RenderElement对应单个pass为一次drawCall,没有计算骨骼索引循环中调用的gl.drawElements的API调用次数。
由于统计方式导致差异,最终实际调用的绘制API指令还是一致的。可以分别查看WebGLSkinnedRenderElement这个类中实际调用drawElements绘制方法时候进行统计。
拽拽青蛙
赞同来自:
如下图该裸模的骨骼数是 45,17778 个顶点,5926 个三角形, 骨骼索引循环是 11 , 也就是会有 11 个drawcall.
(基础有3个dc)
但是在其他引擎或者Bake后, drawElements 将一次性提交所有顶点。
drawElements: TRIANGLES, 17778 indices, UNSIGNED_SHORT, 0
为什么会有这样的差异?