首页 > 代码库 > Unity3D ShaderLab 使用alpha参数创建透明效果

Unity3D ShaderLab 使用alpha参数创建透明效果

Unity3D ShaderLab 使用alpha参数创建透明效果

 

其实Unity为了方便我们的工作,为我们内置了很多参数。比如马上用到的透明功能。

准备场景新建Shader Material ,一张红绿蓝的贴图。

实现代码及其简单,直接看完成的:

 

Shader "91YGame/AlphaTransparency" {    Properties {        _MainTex ("Base (RGB)", 2D) = "white" {}        _TransVal("Transparency Value",Range(0.01,1))=0.5    }    SubShader {        Tags { "RenderType"="Opaque" }        LOD 200                //alpha参数;        CGPROGRAM        #pragma surface surf Lambert alpha        sampler2D _MainTex;        float _TransVal;        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.r*_TransVal;//c.g || c.b        }        ENDCG    }     FallBack "Diffuse"}

 

 

返回unity,设置贴图,效果如下:

o.Alpha =c.r*_TransVal;

 技术分享

o.Alpha =c.g*_TransVal;

 技术分享

o.Alpha =c.b*_TransVal;

 技术分享

上面的过程及其简单,我们在编写该着色器时,依赖2个元素,一个是#pragma中申明的 alpha参数,还有一个是在SurfaceOutput 结构体中使用Alpha值。

在申明alpha参数的时候,我们告诉unity我们允许一个透明表面渲染到屏幕。接下来,我们就在SurfaceOutput 结构体的Alpha赋值。

这是一个基于像素级别的0-1的值在颜色方面,白色为1表示一个完全不透明的表面,黑色为0表示一个完全透明的表面。

所以_TransVal越小,就越接近透明效果。这就是我们构建的半透明着色器。

 技术分享

Unity3D ShaderLab 使用alpha参数创建透明效果