用Unity写一个半透明shader
时间: 2023-06-13 19:05:09 浏览: 198
好的,以下是一个简单的半透明shader示例:
```
Shader "Custom/HalfTransparentShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color ("Tint", Color) = (1,1,1,1)
_Alpha ("Alpha", Range(0.0,1.0)) = 0.5
}
SubShader
{
Tags {"Queue"="Transparent" "RenderType"="Opaque"}
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
float4 _Color;
float _Alpha;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv) * _Color;
col.a = _Alpha;
return col;
}
ENDCG
}
}
}
```
该shader包含3个属性:纹理 `_MainTex`、颜色 `_Color` 和透明度 `_Alpha`。其中透明度是在0到1之间的范围变量,并且默认值为0.5。
该shader使用了一个 `SubShader`,并且在 `Tags` 里定义了渲染队列和渲染类型。`LOD` 值为100,表示该shader的复杂度。
在 `Pass` 中,我们定义了顶点着色器和片段着色器。我们首先定义了顶点结构体 `appdata` 和输出结构体 `v2f`。然后,我们将纹理和属性传递到着色器中,并在顶点着色器中将顶点转换为裁剪空间。在片段着色器中,我们获取纹理的颜色并将透明度设置为 `_Alpha` 属性的值。
最后,我们使用 `tex2D` 函数将纹理和纹理坐标组合在一起,并将颜色和透明度合并为一个 `fixed4` 返回。
阅读全文