【creator 3.8.3 blend问题】想用有透明度纹理做另一张图片的遮罩,本应混合成透明的部分变成了黑色

Creator 版本: 3.8.3

目标平台: 编辑器预览,chrome网页调试

各位大佬好,我有一个抠洞的需求,想用颜色混合实现,源因子用ZERO目标因子用SRC_ALPHA,这个遮罩是在一个独立的摄像机下的,只有一张底图和一个遮罩图,设置后发现底图部分本应该应用遮罩透明度的部分颜色变黑了但是没有变透明,刚使用creator不久研究了几天实在是无从下手也查不到相关资料,望各位大佬能帮帮忙~

希望有大佬能帮忙解决,事成之后,请大佬喝咖啡。

怀疑可能跟深度测试有关,把底图深度写入和深度测试打开,遮罩只打开深度测试,使用less时候遮罩图消失了,使用less_or_equal的时候跟之前效果一样透明部分依然是黑色

上 Demo

test2d.zip (2.9 MB)


是想要类似这个效果吗?

源因子用ZERO目标因子用ONE试一下。

颜色因子 zero one : destColor = srcColor * 0 + destColor * 1 -> destColor
透明度因子 one zero : destAlpha = srcAlpha * 1 + destAlpha * 0 -> srcAlpha

如果你颜色目标因子用src_alpha 肯定最终就变黑了。

test2d 2.zip (328.2 KB)
如果满足需求, 你懂得 :sweat_smile:


遮罩图我换了一下,你 demo 里面的遮罩不是很合适

嗯嗯 我看下哈 效果看着是对的 我看怎么实现的

有几个问题哈
1、必须用renderTexture么?因为实际场景很大 底图是repeat重复的
2、为什么我在预览的时候没法看到效果运行的时候才能看到效果?
3、我之前的做法只想用遮罩的alpha部分为什么不可行啊?

image
是这样设置么 这个完整的显示了底图没有挖洞呢

我这个设置是需要渲染底图和遮罩图到rt上,然后对这个rt进行alpha blend 到主摄像机才能有效。
这时候destAlpha = srcAlpha,从而让rt的alpha = 遮罩图的alpha,这样才会起效的。否则destAlpha 只是一个数值,不体现在透明度上了。
话说,我看你前面介绍的,使用了独立的摄像机,我还默认以为你用了rt了。

3、我之前的做法只想用遮罩的alpha部分为什么不可行啊?

其实可以,但你的遮罩图,就只能有0和1,如果有过渡的alpha,那部分就是会让底图变黑,而不是给底图以透明度。

如果你的云是完全不透明,用你的遮罩图也是可以的

就是我说的这个意思,只有0或者1才正常。有半透明必须rt来保留这个alpha。

话说,你还不如写个shader,传入底图和遮罩图,用底图的颜色+遮罩图的Alpha,不就可以了?

  1. 必须用 RenderTexture, 否则 framebuffer 上已经被云覆盖部分,无法再抠出背景了, 地图再大, RT 也就一个屏幕的大小,而且 RT 你可以缩小尺寸,放大使用。
  2. 应该编辑器自带的相机影响,导致无法看效果, 应该能通过编辑器和运行时不同逻辑达到可视编辑。
  3. 如果你的云是完全不透明,用你的遮罩图也是可以的(需要换混合模式), 看第一张图,因为你的云是半透的, 效果不好。

嗯嗯 十分感谢 我用你的参数放到了rt上确实也可以了 效果会有些变亮确实是因为原图出的不好本身其实是有透明度的 我看引擎文档介绍默认默认是rgba一起运算的 但是我尝试了上面的isIndepend发现不勾选下面所有的参数也都是起作用的