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

来源:互联网 发布:条码数据采集系统 编辑:程序博客网 时间:2024/06/05 00:14

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

本篇到此为止,若有不对,欢迎指教。。谢谢大家

0 0
原创粉丝点击