【分享】利用PostRender实现分层合批渲染(附 Demo 和引擎源码解读)

不好意思不要意思 点错场景了 有两个相同的场景名字

工程没清理干净,不好意思 :grimacing:

我喜欢水贴,不仅能学习新技术还能看大佬们交流经验。

彩蛋 :rofl:

这么好的文章居然没在我的文件夹里吃灰?

大神 ,我用了该方法下,如果子节点是用了自定义顶点合批的assembler,然后子节点的shader加入了自定义的顶点参数后,一运行游戏就不断报说device.js:490 Can not find vertex attribute: xxxx ,这个要怎样解决呢?

检查下xxxx这个变量在effect文件里有没有定义,拼写是不是正确。

是正确的,如果关掉分层合批渲染 就 不会报了,shader 也正常运作

那就比较奇怪了,我的demo里子节点也是自定义顶点格式的。
你给个demo我看下。

BFSRenderTest.zip (1.0 MB)

麻烦了,感谢

1赞
@ccclass
@disallowMultiple
@menu("引擎扩展/渲染扩展/BFS渲染 BFSRenderCompon")
export default class BFSRenderCompon extends cc.Sprite {

    onEnable() {
        super.onEnable();
        if (!CC_EDITOR && !CC_NATIVERENDERER)
            this.node._renderFlag |= cc.RenderFlow.FLAG_POST_RENDER;
    }

    _resetAssembler() {
        this.setVertsDirty();
        let assembler = this._assembler = new BFSAssembler();
        assembler.init(this);
    }
}

这个类先这么改,按照我Demo里的写法,继承cc.Sprite给个单色图就行了。
至于为什么不继承cc.Component,细节太多,很难说清楚(我也忘了 :crazy_face:)。

1赞

插眼 太牛了,兄弟

大神,我给的demo里还有一个问题就是组件下有一个节点改变透明度,然后让节点的二级子节点开始就不再跟随父节点更改透明度,我看了你的demo, 因为你的demo是做了切换场景的,是没有问题,但如果第一个场景就有分层合批,那透明度问题就出现了

然后怎么解决的

只是看看,没有去改_checkBacth。不影响运行。

战略MARK

MARKK!!

先mark在看

使用了_childBatcnRender之后的节点层级被变化了,导致遮挡情况不受控制。

大佬支持下3.8版本的