天天看点

egret_渲染优化-spine粒子混合

之前的 spine 动画, 优化是的图集, 这里主要是 spine 中的粒子
缘起: 在项目中发现了某个 spine 粒子特效 特别费 dc, 看了下 spine相关文件, 法线只是使用一个小图, 预期中应该是 一个批次就可以绘制完成. 遂 详细看了下 spine 的 json 文件. 发现使用了一个混合

"blend": "additive"

粒子主要是很多个 渲染节点 组成的, 如果所有节点都是引用同一个图的话. 且是相邻节点, 一般是一个批次可以绘制完成, 但是有了 混合Blend ,就会中断合批. 一个粒子特效如果又15 个粒子组成的话, 那么15个批次, 那么n个这个粒子的话就有 n x 15 也是有点小恐怖的

所以如果使用 spine 粒子动画的话, 要慎用 blend, … 等 会打断合批的操作. 这是个坑

直接在 egret.web.js 中的

WebGLDrawCmdManager.prototype.pushSetBlend

断点可以看到调用栈

egret_渲染优化-spine粒子混合

spine 的 xxx.json

...
"slots": [
    { "name": "4", "bone": "12", "attachment": "1", "blend": "additive" }, // 慎用 blend
    { "name": "9", "bone": "27", "attachment": "1", "blend": "additive" },
    { "name": "3", "bone": "9", "attachment": "1", "blend": "additive" },
...
           

继续阅读