camera.targetTexture渲染效果异常

  • Creator 版本:2.0.9

  • 目标平台: web/windows/其他平台待测

  • 重现方式:下方提供demo

  • 出现概率:100%

  • 额外线索:
    1.设置masterCamera的targetTexture;
    2.创建sprite,spriteFrame设置为masterCamera使用的targetTexture;
    3.将创建的sprite的node的分组设置为主摄像机渲染的分组;
    编辑器效果图:

    实际效果图:


    节点树:

    主要代码:

export default class Helloworld extends cc.Component {

    @property(cc.Camera) mainCamera : cc.Camera = null;
    @property(cc.Camera) masterCamera: cc.Camera = null;

    @property
    text: string = 'hello';

    start () {
        // init logic
        // this.label.string = this.text;

        let renderTexture = new cc.RenderTexture();
        let gl = cc.game['_renderContext'];
        let visibleRect = cc.view.getViewportRect();
        renderTexture.initWithSize(visibleRect.width, visibleRect.height, gl.STENCIL_INDEX8);
        this.masterCamera.targetTexture = renderTexture;
        let masterRenderNode = new cc.Node('mapRenderNode');
        let renderSpriteFrame = new cc.SpriteFrame();
        renderSpriteFrame.setTexture(renderTexture);
        let sprite = masterRenderNode.addComponent(cc.Sprite);
        sprite.spriteFrame = renderSpriteFrame;
        masterRenderNode.group = 'default';
        masterRenderNode.scaleY = -1;
        
        masterRenderNode.parent = this.node;
    }
}

问题概要:
1.Label的透明度不同;
2.无缝拼接的节点都出现了缝隙。
demo:
camera-target-texture-demo.rar (220.2 KB)

上传不了demo…

引擎大佬们,求支招。然后才能让表现效果一致

这个问题与这个帖子中讨论的相似,你试下我提供的那个方案。
https://forum.cocos.com/t/tilemap-camera-sprite/75887/5?u=337031709

按照该帖子进行修改:
1.修改子相机节点混合模式:


2.开启贴图预乘:

    start () {
       //...
       renderTexture['_premultiplyAlpha'] = true;
       //...
    }

实际效果:

demo发我邮箱:337031709@qq.com

demo已发送

加上这句:

sprite.srcBlendFactor = cc.macro.BlendFactor.ONE;
1赞

进行如下修改:

start () {
        //...
        renderTexture.initWithSize(visibleRect.width, visibleRect.height, gl.STENCIL_INDEX8);
        renderTexture['_premultiplyAlpha'] = true;

        //...
        sprite.spriteFrame = renderSpriteFrame;
       //添加的位置
        sprite.srcBlendFactor = cc.macro.BlendFactor.ONE;
        //...
    }

表现得效果:

你再试试咯。

几经尝试,
1.修改原来节点的混合为SRC_ALPHA(还原),
2.renderTexture开启贴图预乘,
3.sprite的src混合设置为ONE,
可以得到以下结果:


Label显示异常
如果出现叠加:

边缘会出现高亮。

这种情况如果不解决,那么场景中存在多个摄像机,需要截屏的情况就无法全部渲染到摄像机,我这真不是在钻牛角尖~~!有人说,新建的摄像机包含所有的渲染组就好了,问题是,有部分相机是在场景中移动的。UI相机是静止的。这时候就算包含了所有的组。

另外好像昨天一天有好多人都在论坛处理这个问题。欢迎联接