原创文章如需转载请注明:转载自风宇冲Unity 3D 教程学院 Shader 第十三讲 Alpha 混合 Alpha Blending,中文译作Alpha 混合 Blending 就是控制透明的。处于光栅化的最后阶段。 这里例如我们给一个模型贴一个材质,那么在某个点计算出来颜色值称为源,而该点之前累积的颜色值,叫目标。 语法 Blend Off 不混合 Blend SrcFactorDstFactor SrcFactor 是源系数,DstFactor 是目标系数 最终颜色 = (Shader 计算出的点颜色值 * 源系数)+(点累积颜色 * 目标系数) 属性(往 SrcFactor,DstFactor 上填的值) one 1 zero 0 SrcColor 源的RGB 值,例如(0.5,0.4,1) SrcAlpha 源的A 值, 例如0.6 DstColor 混合目标的RGB 值例如(0.5,0.4,1) DstAlpha 混合目标的A 值例如0.6 OneMinu sSrcColor (1,1,1) - SrcColor OneMinu sSrcAlpha 1- SrcAlpha OneMinu sDstColor (1,1,1) - DstColor OneMinu sDstAlpha 1- DstAlpha 运算法则示例: (注:r,g,b,a,x,y,z 取值范围为[0,1]) (r,g,b) * a = (r*a , g*a , b*a) (r,g,b) * (x,y,z) = (r*x , g*y , b*z) (r,g,b) + (x,y,z) = (r+x , g+y , b+z) (r,g,b) - (x,y,z) = (r-x , g-y , b-z) 在树叶使用的Shader 中添加Blend 代码 Blend zero one:仅显示背景的RGB 部分,无Alp ha 透明通道处理。 Blend one zero: 仅显示贴图的RGB 部分,无Alp ha 透明通道处理。 A 通道为 0 即本应该透明的地方也渲染出来了。 Blend one one:贴图和背景叠加,无Alpha 透明通道处理。仅仅是颜色 rgb 数值的叠加更趋近于白色即(1,1,1)了。 Blend SrcAlpha zero:仅仅显示贴图,贴图含Alpha 透明通道处理。但是贴图中的透明部分,即下图黑色部分没有颜色来显示,因为源颜色乘以 alpha 值 0,为 0;而混合目标的颜色乘以 zero 0,也是 0。所以透明部分显示的颜色为(0,0,0) Blend SrcAlpha OneMinusSrcAlpha: 最终颜色 = 源颜色 * 源透明值 + 目标颜色*(1 - 源透明值) 最常用的透明混合方式。贴图 alpha 值高的部分,显示得实,而混合的背景很淡。而 alpha值高的部分,贴图显示得淡,而背景现实得实。 举例: (1)假设贴图有一个不透明红色点, Color(1,0,0,1),该点背景色为不透明蓝色 Color(0,0,1,1) 最终颜色 = (1,...