赞
踩
我们先来看一张图片:
图片来自网络截图,由图可知,混合操作最常见的用途便是用来制作透明物体、进行纹理的混合,它是Shader渲染的最后一步。
混合操作有两个对象:源和目标,因此也有两个对应的因子,即源因子和目标因子
Blend off 关闭混合
Blend SrcFactor DstFactor
这个也就是上面混合操作中介绍的源和目标,这个操作的作用就是配置和启用混合,生成的颜色乘以 DstFactor ,已在屏幕上的颜色乘以DstFactor然后再两者想加
Blend SrcFactorA DstFactorA 混合Alpha通道
BlendOp Add|Min|Sub|RevSub 此操作不是Blend操作一样添加混合颜色在一起,而是对它们做不同的操作。
BlendOp参数:
Add 将源像素和目标像素相加.
Min 取目标像素和源像素颜色的较小者作为结果
Max 取目标像素和源像素颜色的较大者作为结果
Sub 用源像素减去目标像素
RevSub 用目标像素减去源像素
Blend 参数:
One 值为1 用它可使远颜色或者目标颜色完全显示出来
Zero 值为0 用它可删除远颜色或者目标颜色
SrcColor 这个阶段的值乘以源颜色
SrcAlpha 这个阶段的值乘以源Alpha值
DstColor 这个阶段的值乘以帧缓存源颜色值
DstAlpha 这个阶段的值乘以帧缓存源Alpha值
OneMinusSrcColor 这个阶段的值乘以(1-源颜色之间的值)
OneMinusSrcAlpha 这个阶段的值乘以(1 -帧缓冲区源颜色Alpha分量的值)
OneMinusDstColor 这个阶段的值乘以(1 –目标颜色值)
OneMinusDstAlpha 这个阶段的值乘以(1 –目标Alpha分量的值)
Blend SrcAlpha OneMInusSrcAlpha //Alpha混合
Blend one one //相加
我们在unity中创建一个plane和一个cube ,将cube置于plane下面
我们从上往下看的时候是看不到cube的:
进行Blend操作后的效果
Blend one one //两个都显示出来
再来看一个:
Blend zero one //只显示下面的Cube
shader代码:
Shader "Custom/BlendTest" {
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader {
Tags { "Queue" = "Transparent" "RenderType"="Opaque" }
LOD 200
Blend zero one
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard fullforwardshadows
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
void surf (Input IN, inout SurfaceOutputStandard o) {
// Albedo comes from a texture tinted by color
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
// Metallic and smoothness come from slider variables
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
本篇到此为止,若有不对,欢迎指教。。谢谢大家
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。