用了论坛上别人做的一个例子,对shader不熟悉,附上demo
popup_blur_demo-main.rar (16.8 KB)
很有意思的问题,因为你使用的是自定义的后处理管线来应用高斯模糊。
cc.Mask 是只作用于 UI 阶段的绘制命令,但你的模糊应用发生在后处理阶段,是一个完全独立于 UI 阶段的阶段,不会去读取 UI Stencil 里的遮罩形状信息。
要按预期被遮罩的话,建议不走后处理,而是走常规的 Render Texture 绘制到 Sprite 节点上,再去 Mask。
或者直接在 shader 里写死,处于无需模糊区域里的像素,直接返回原像素就是了。
p.s. 想了解 shader、Render Texture、高斯模糊、后处理知识的,可以花时间看我的文章学习:【新手教程】 Cocos 着色器入门(共 16 篇,更新到「有向距离场SDF」)
后期处理的话,你的项目致使遮罩不生效还算可以了,估计改下渲染层级就行了,其实大部分都是遮罩部分白屏黑屏,全遮。