当前位置:   article > 正文

【Unity Shader】4.Unity Shader基本知识学习(混合 Blending )_unity shader关闭blend

unity shader关闭blend

1.Blending 的基本概念

我们先来看一张图片:
这里写图片描述

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

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

2.语法

Blend off 关闭混合

Blend SrcFactor  DstFactor
这个也就是上面混合操作中介绍的源和目标,这个操作的作用就是配置和启用混合,生成的颜色乘以 DstFactor ,已在屏幕上的颜色乘以DstFactor然后再两者想加

Blend SrcFactorA DstFactorA  混合Alpha通道

BlendOp Add|Min|Sub|RevSub 此操作不是Blend操作一样添加混合颜色在一起,而是对它们做不同的操作。  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

BlendOp参数:

Add    将源像素和目标像素相加.

Min     取目标像素和源像素颜色的较小者作为结果

Max     取目标像素和源像素颜色的较大者作为结果

Sub    用源像素减去目标像素

RevSub    用目标像素减去源像素

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Blend 参数:

One 值为1 用它可使远颜色或者目标颜色完全显示出来
Zero 值为0 用它可删除远颜色或者目标颜色

SrcColor 这个阶段的值乘以源颜色
SrcAlpha 这个阶段的值乘以源Alpha值

DstColor 这个阶段的值乘以帧缓存源颜色值
DstAlpha 这个阶段的值乘以帧缓存源Alpha值

OneMinusSrcColor 这个阶段的值乘以(1-源颜色之间的值)
OneMinusSrcAlpha    这个阶段的值乘以(1 -帧缓冲区源颜色Alpha分量的值)
OneMinusDstColor    这个阶段的值乘以(1 –目标颜色值)
OneMinusDstAlpha    这个阶段的值乘以(1 –目标Alpha分量的值)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

常见的混合类型:

Blend SrcAlpha OneMInusSrcAlpha //Alpha混合
Blend one one  //相加

  • 1
  • 2
  • 3
  • 4

实战:

我们在unity中创建一个plane和一个cube ,将cube置于plane下面
这里写图片描述

我们从上往下看的时候是看不到cube的:

这里写图片描述

进行Blend操作后的效果

Blend one one  //两个都显示出来
  • 1

这里写图片描述

再来看一个:

Blend zero one //只显示下面的Cube
  • 1

这里写图片描述

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"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/96710
推荐阅读
相关标签
  

闽ICP备14008679号