[小明学Shader]8.透明,Alpha混合(alpah blend)

  透明在渲染的时候经常用,类似玻璃啊,头发啊,树叶啊之类的,必须要用到.

  • 代码
Shader "Cutom/11.27/3"{
    Properties{
        _MainTex("Base(RGB)",2D)="white"{}
    }
    
    SubShader{
        Tags{"Queue"="Transparent"}
        LOD 200
        
        CGPROGRAM
        #pragma surface surf Lambert alpha
        
        sampler2D _MainTex;
        
        struct Input{
            float2 uv_MainTex;
        };
        
        void surf(Input In,inout SurfaceOutput o){
            half4 c=tex2D(_MainTex,In.uv_MainTex);
            o.Albedo=c.rgb;
            
            o.Alpha=c.g;
        }
        
        ENDCG
    }
    FallBack "Diffuse"
}
  • 效果

  • 注意点
#pragma surface surfaceFunction lightModel [optionalparams]

1.用上#pragma XXX alpha

  上述代码中,#pragma 和surface关键字,不能改,surfaceFunction和lightModel可以自己改,[optionalparams]用中括号括起来表示可选,只有在特定情况下才写,我们写了alpha,untiy就会为我们打开alpha混合功能.如果没打开,在surf函数中设定的o.Alpha的值就无效,会被GPU忽略.

2.设定合适的值

  设定为0的话,会让每个像素点(texel)透明.我们设定了o.Alpha的值为c.g,所以除了绿色和白色之外,其它颜色透明了,是其它像素中所提取到的g的值都是0,所以就都透明了.四个区域的像素点的值对应为红色(1,0,0),绿色(0,1,0),蓝色(0,0,1)和白色(1,1,1),除了绿色和白色外,其它像素点的g值都为0.

3.设定合理的渲染顺序

  一定让透明的物体在不透明物体后面渲染

原文地址:https://www.cnblogs.com/WongSiuming/p/4997434.html