您的位置:首页 > 移动开发 > Unity3D

【Unity Shader】4.Unity Shader基本知识学习(混合 Blending )

2016-12-09 23:39 711 查看

1.Blending 的基本概念

我们先来看一张图片:



图片来自网络截图,由图可知,混合操作最常见的用途便是用来制作透明物体、进行纹理的混合,它是Shader渲染的最后一步。

混合操作有两个对象:源和目标,因此也有两个对应的因子,即源因子和目标因子

2.语法

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"
}


本篇到此为止,若有不对,欢迎指教。。谢谢大家
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity ShaderLab