{今天在做正片叠底等混合效果的试验}
发现如果一张材质所有像素的半透明度都一致,很正常就可以达到混合效果;但是如果一张材质的像素们存在一种以上的半透明度,使用常规的做法就不能轻易实现。研究了一些网上大神们的技术博客,并参考了Unity内置的Transparent Shader的写法,最终鼓捣出了这篇技术博客出来。
即将被Texture混合效果的底图(其实是通过Main Camera可以看到的内容,可以是任何场景,本文用一张2D图片来做演示,实际上完全可以是3D场景):
用来达到混合效果的Texture(这张图片是矩形的,最外围是alpha = 0,每接近中心一层alpha值增加0.19,具体数字不重要,主要是用这张图片说明当一张材质的像素们不透明度不一致时如何进行混合效果处理):
使用叠加效果(Overlay)为例混合之后的效果(混合效果可以看出不同半透明值的区域混合出来的效果也有差别):
shader代码如下,核心逻辑部分可以支持任何0-1之间的半透明值。
// Test_Effect.shader
// This shader is used for overlay effects